Browse Source

feat: store created_by and updated_by for apps, modelconfigs, and sites (#7613)

tags/0.7.3
kurokobo 1 year ago
parent
commit
bc3a8e0ca2
No account linked to committer's email address

+ 2
- 0
api/controllers/console/app/model_config.py View File



new_app_model_config = AppModelConfig( new_app_model_config = AppModelConfig(
app_id=app_model.id, app_id=app_model.id,
created_by=current_user.id,
updated_by=current_user.id,
) )
new_app_model_config = new_app_model_config.from_model_config_dict(model_configuration) new_app_model_config = new_app_model_config.from_model_config_dict(model_configuration)



+ 6
- 0
api/controllers/console/app/site.py View File

from datetime import datetime, timezone

from flask_login import current_user from flask_login import current_user
from flask_restful import Resource, marshal_with, reqparse from flask_restful import Resource, marshal_with, reqparse
from werkzeug.exceptions import Forbidden, NotFound from werkzeug.exceptions import Forbidden, NotFound
if value is not None: if value is not None:
setattr(site, attr_name, value) setattr(site, attr_name, value)


site.updated_by = current_user.id
site.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


return site return site
raise NotFound raise NotFound


site.code = Site.generate_code(16) site.code = Site.generate_code(16)
site.updated_by = current_user.id
site.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


return site return site

+ 2
- 0
api/events/event_handlers/create_site_record_when_app_created.py View File

default_language=account.interface_language, default_language=account.interface_language,
customize_token_strategy="not_allow", customize_token_strategy="not_allow",
code=Site.generate_code(16), code=Site.generate_code(16),
created_by=app.created_by,
updated_by=app.updated_by,
) )


db.session.add(site) db.session.add(site)

+ 24
- 0
api/fields/app_fields.py View File

from flask_restful import fields from flask_restful import fields


from fields.workflow_fields import workflow_partial_fields
from libs.helper import AppIconUrlField, TimestampField from libs.helper import AppIconUrlField, TimestampField


app_detail_kernel_fields = { app_detail_kernel_fields = {
"completion_prompt_config": fields.Raw(attribute="completion_prompt_config_dict"), "completion_prompt_config": fields.Raw(attribute="completion_prompt_config_dict"),
"dataset_configs": fields.Raw(attribute="dataset_configs_dict"), "dataset_configs": fields.Raw(attribute="dataset_configs_dict"),
"file_upload": fields.Raw(attribute="file_upload_dict"), "file_upload": fields.Raw(attribute="file_upload_dict"),
"created_by": fields.String,
"created_at": TimestampField, "created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
} }


app_detail_fields = { app_detail_fields = {
"enable_site": fields.Boolean, "enable_site": fields.Boolean,
"enable_api": fields.Boolean, "enable_api": fields.Boolean,
"model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True), "model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"tracing": fields.Raw, "tracing": fields.Raw,
"created_by": fields.String,
"created_at": TimestampField, "created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
} }


prompt_config_fields = { prompt_config_fields = {
model_config_partial_fields = { model_config_partial_fields = {
"model": fields.Raw(attribute="model_dict"), "model": fields.Raw(attribute="model_dict"),
"pre_prompt": fields.String, "pre_prompt": fields.String,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
} }


tag_fields = {"id": fields.String, "name": fields.String, "type": fields.String} tag_fields = {"id": fields.String, "name": fields.String, "type": fields.String}
"icon_background": fields.String, "icon_background": fields.String,
"icon_url": AppIconUrlField, "icon_url": AppIconUrlField,
"model_config": fields.Nested(model_config_partial_fields, attribute="app_model_config", allow_null=True), "model_config": fields.Nested(model_config_partial_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"created_by": fields.String,
"created_at": TimestampField, "created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"tags": fields.List(fields.Nested(tag_fields)), "tags": fields.List(fields.Nested(tag_fields)),
} }


"prompt_public": fields.Boolean, "prompt_public": fields.Boolean,
"app_base_url": fields.String, "app_base_url": fields.String,
"show_workflow_steps": fields.Boolean, "show_workflow_steps": fields.Boolean,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
} }


app_detail_fields_with_site = { app_detail_fields_with_site = {
"enable_site": fields.Boolean, "enable_site": fields.Boolean,
"enable_api": fields.Boolean, "enable_api": fields.Boolean,
"model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True), "model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"site": fields.Nested(site_fields), "site": fields.Nested(site_fields),
"api_base_url": fields.String, "api_base_url": fields.String,
"created_by": fields.String,
"created_at": TimestampField, "created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"deleted_tools": fields.List(fields.String), "deleted_tools": fields.List(fields.String),
} }



+ 8
- 0
api/fields/workflow_fields.py View File

"environment_variables": fields.List(EnvironmentVariableField()), "environment_variables": fields.List(EnvironmentVariableField()),
"conversation_variables": fields.List(fields.Nested(conversation_variable_fields)), "conversation_variables": fields.List(fields.Nested(conversation_variable_fields)),
} }

workflow_partial_fields = {
"id": fields.String,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
}

+ 52
- 0
api/migrations/versions/2024_08_25_0441-d0187d6a88dd_add_created_by_and_updated_by_to_app_.py View File

"""add created_by and updated_by to app, modelconfig, and site

Revision ID: d0187d6a88dd
Revises: 2dbe42621d96
Create Date: 2024-08-25 04:41:18.157397

"""

import sqlalchemy as sa
from alembic import op

import models as models

# revision identifiers, used by Alembic.
revision = "d0187d6a88dd"
down_revision = "2dbe42621d96"
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("app_model_configs", schema=None) as batch_op:
batch_op.add_column(sa.Column("created_by", models.types.StringUUID(), nullable=True))
batch_op.add_column(sa.Column("updated_by", models.types.StringUUID(), nullable=True))

with op.batch_alter_table("apps", schema=None) as batch_op:
batch_op.add_column(sa.Column("created_by", models.types.StringUUID(), nullable=True))
batch_op.add_column(sa.Column("updated_by", models.types.StringUUID(), nullable=True))

with op.batch_alter_table("sites", schema=None) as batch_op:
batch_op.add_column(sa.Column("created_by", models.types.StringUUID(), nullable=True))
batch_op.add_column(sa.Column("updated_by", models.types.StringUUID(), nullable=True))

# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table("sites", schema=None) as batch_op:
batch_op.drop_column("updated_by")
batch_op.drop_column("created_by")

with op.batch_alter_table("apps", schema=None) as batch_op:
batch_op.drop_column("updated_by")
batch_op.drop_column("created_by")

with op.batch_alter_table("app_model_configs", schema=None) as batch_op:
batch_op.drop_column("updated_by")
batch_op.drop_column("created_by")

# ### end Alembic commands ###

+ 6
- 0
api/models/model.py View File

is_universal = db.Column(db.Boolean, nullable=False, server_default=db.text('false')) is_universal = db.Column(db.Boolean, nullable=False, server_default=db.text('false'))
tracing = db.Column(db.Text, nullable=True) tracing = db.Column(db.Text, nullable=True)
max_active_requests = db.Column(db.Integer, nullable=True) max_active_requests = db.Column(db.Integer, nullable=True)
created_by = db.Column(StringUUID, nullable=True)
created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
updated_by = db.Column(StringUUID, nullable=True)
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))


@property @property
provider = db.Column(db.String(255), nullable=True) provider = db.Column(db.String(255), nullable=True)
model_id = db.Column(db.String(255), nullable=True) model_id = db.Column(db.String(255), nullable=True)
configs = db.Column(db.JSON, nullable=True) configs = db.Column(db.JSON, nullable=True)
created_by = db.Column(StringUUID, nullable=True)
created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
updated_by = db.Column(StringUUID, nullable=True)
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
opening_statement = db.Column(db.Text) opening_statement = db.Column(db.Text)
suggested_questions = db.Column(db.Text) suggested_questions = db.Column(db.Text)
customize_token_strategy = db.Column(db.String(255), nullable=False) customize_token_strategy = db.Column(db.String(255), nullable=False)
prompt_public = db.Column(db.Boolean, nullable=False, server_default=db.text('false')) prompt_public = db.Column(db.Boolean, nullable=False, server_default=db.text('false'))
status = db.Column(db.String(255), nullable=False, server_default=db.text("'normal'::character varying")) status = db.Column(db.String(255), nullable=False, server_default=db.text("'normal'::character varying"))
created_by = db.Column(StringUUID, nullable=True)
created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
updated_by = db.Column(StringUUID, nullable=True)
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
code = db.Column(db.String(255)) code = db.Column(db.String(255))



+ 4
- 0
api/services/app_dsl_service.py View File

app_model_config = AppModelConfig() app_model_config = AppModelConfig()
app_model_config = app_model_config.from_model_config_dict(model_config_data) app_model_config = app_model_config.from_model_config_dict(model_config_data)
app_model_config.app_id = app.id app_model_config.app_id = app.id
app_model_config.created_by = account.id
app_model_config.updated_by = account.id


db.session.add(app_model_config) db.session.add(app_model_config)
db.session.commit() db.session.commit()
icon_background=icon_background, icon_background=icon_background,
enable_site=True, enable_site=True,
enable_api=True, enable_api=True,
created_by=account.id,
updated_by=account.id,
) )


db.session.add(app) db.session.add(app)

+ 9
- 0
api/services/app_service.py View File

app.tenant_id = tenant_id app.tenant_id = tenant_id
app.api_rph = args.get("api_rph", 0) app.api_rph = args.get("api_rph", 0)
app.api_rpm = args.get("api_rpm", 0) app.api_rpm = args.get("api_rpm", 0)
app.created_by = account.id
app.updated_by = account.id


db.session.add(app) db.session.add(app)
db.session.flush() db.session.flush()
if default_model_config: if default_model_config:
app_model_config = AppModelConfig(**default_model_config) app_model_config = AppModelConfig(**default_model_config)
app_model_config.app_id = app.id app_model_config.app_id = app.id
app_model_config.created_by = account.id
app_model_config.updated_by = account.id
db.session.add(app_model_config) db.session.add(app_model_config)
db.session.flush() db.session.flush()


app.icon_type = args.get("icon_type", "emoji") app.icon_type = args.get("icon_type", "emoji")
app.icon = args.get("icon") app.icon = args.get("icon")
app.icon_background = args.get("icon_background") app.icon_background = args.get("icon_background")
app.updated_by = current_user.id
app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None) app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


:return: App instance :return: App instance
""" """
app.name = name app.name = name
app.updated_by = current_user.id
app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None) app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


""" """
app.icon = icon app.icon = icon
app.icon_background = icon_background app.icon_background = icon_background
app.updated_by = current_user.id
app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None) app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


return app return app


app.enable_site = enable_site app.enable_site = enable_site
app.updated_by = current_user.id
app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None) app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()


return app return app


app.enable_api = enable_api app.enable_api = enable_api
app.updated_by = current_user.id
app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None) app.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit() db.session.commit()



+ 2
- 0
api/services/workflow/workflow_converter.py View File

new_app.api_rph = app_model.api_rph new_app.api_rph = app_model.api_rph
new_app.is_demo = False new_app.is_demo = False
new_app.is_public = app_model.is_public new_app.is_public = app_model.is_public
new_app.created_by = account.id
new_app.updated_by = account.id
db.session.add(new_app) db.session.add(new_app)
db.session.flush() db.session.flush()
db.session.commit() db.session.commit()

Loading…
Cancel
Save