| 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) | ||||
| 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 |
| 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) |
| 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), | ||||
| } | } | ||||
| "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, | |||||
| } |
| """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 ### |
| 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)) | ||||
| 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) |
| 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() | ||||
| 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() |