Co-authored-by: 刘江波 <jiangbo721@163.com>tags/0.14.2
| @@ -2,6 +2,7 @@ import enum | |||
| import json | |||
| from flask_login import UserMixin | |||
| from sqlalchemy import func | |||
| from .engine import db | |||
| from .types import StringUUID | |||
| @@ -30,11 +31,11 @@ class Account(UserMixin, db.Model): | |||
| timezone = db.Column(db.String(255)) | |||
| last_login_at = db.Column(db.DateTime) | |||
| last_login_ip = db.Column(db.String(255)) | |||
| last_active_at = db.Column(db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)")) | |||
| last_active_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| status = db.Column(db.String(16), nullable=False, server_default=db.text("'active'::character varying")) | |||
| initialized_at = db.Column(db.DateTime) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def is_password_set(self): | |||
| @@ -187,8 +188,8 @@ class Tenant(db.Model): | |||
| plan = db.Column(db.String(255), nullable=False, server_default=db.text("'basic'::character varying")) | |||
| status = db.Column(db.String(255), nullable=False, server_default=db.text("'normal'::character varying")) | |||
| custom_config = db.Column(db.Text) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| def get_accounts(self) -> list[Account]: | |||
| return ( | |||
| @@ -228,8 +229,8 @@ class TenantAccountJoin(db.Model): | |||
| current = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| role = db.Column(db.String(16), nullable=False, server_default="normal") | |||
| invited_by = db.Column(StringUUID, nullable=True) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class AccountIntegrate(db.Model): | |||
| @@ -245,8 +246,8 @@ class AccountIntegrate(db.Model): | |||
| provider = db.Column(db.String(16), nullable=False) | |||
| open_id = db.Column(db.String(255), nullable=False) | |||
| encrypted_token = db.Column(db.String(255), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class InvitationCode(db.Model): | |||
| @@ -265,4 +266,4 @@ class InvitationCode(db.Model): | |||
| used_by_tenant_id = db.Column(StringUUID) | |||
| used_by_account_id = db.Column(StringUUID) | |||
| deprecated_at = db.Column(db.DateTime) | |||
| 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=func.current_timestamp()) | |||
| @@ -1,5 +1,7 @@ | |||
| import enum | |||
| from sqlalchemy import func | |||
| from .engine import db | |||
| from .types import StringUUID | |||
| @@ -23,4 +25,4 @@ class APIBasedExtension(db.Model): | |||
| name = db.Column(db.String(255), nullable=False) | |||
| api_endpoint = db.Column(db.String(255), nullable=False) | |||
| api_key = db.Column(db.Text, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| @@ -50,9 +50,9 @@ class Dataset(db.Model): | |||
| indexing_technique = db.Column(db.String(255), nullable=True) | |||
| index_struct = db.Column(db.Text, nullable=True) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| embedding_model = db.Column(db.String(255), nullable=True) | |||
| embedding_model_provider = db.Column(db.String(255), nullable=True) | |||
| collection_binding_id = db.Column(StringUUID, nullable=True) | |||
| @@ -212,7 +212,7 @@ class DatasetProcessRule(db.Model): | |||
| mode = db.Column(db.String(255), nullable=False, server_default=db.text("'automatic'::character varying")) | |||
| rules = db.Column(db.Text, nullable=True) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| MODES = ["automatic", "custom"] | |||
| PRE_PROCESSING_RULES = ["remove_stopwords", "remove_extra_spaces", "remove_urls_emails"] | |||
| @@ -264,7 +264,7 @@ class Document(db.Model): | |||
| created_from = db.Column(db.String(255), nullable=False) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| created_api_request_id = 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=func.current_timestamp()) | |||
| # start processing | |||
| processing_started_at = db.Column(db.DateTime, nullable=True) | |||
| @@ -303,7 +303,7 @@ class Document(db.Model): | |||
| archived_reason = db.Column(db.String(255), nullable=True) | |||
| archived_by = db.Column(StringUUID, nullable=True) | |||
| archived_at = db.Column(db.DateTime, 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=func.current_timestamp()) | |||
| doc_type = db.Column(db.String(40), nullable=True) | |||
| doc_metadata = db.Column(db.JSON, nullable=True) | |||
| doc_form = db.Column(db.String(255), nullable=False, server_default=db.text("'text_model'::character varying")) | |||
| @@ -527,9 +527,9 @@ class DocumentSegment(db.Model): | |||
| disabled_by = db.Column(StringUUID, nullable=True) | |||
| status = db.Column(db.String(255), nullable=False, server_default=db.text("'waiting'::character varying")) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| indexing_at = db.Column(db.DateTime, nullable=True) | |||
| completed_at = db.Column(db.DateTime, nullable=True) | |||
| error = db.Column(db.Text, nullable=True) | |||
| @@ -697,7 +697,7 @@ class Embedding(db.Model): | |||
| ) | |||
| hash = db.Column(db.String(64), nullable=False) | |||
| embedding = db.Column(db.LargeBinary, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| provider_name = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) | |||
| def set_embedding(self, embedding_data: list[float]): | |||
| @@ -719,7 +719,7 @@ class DatasetCollectionBinding(db.Model): | |||
| model_name = db.Column(db.String(255), nullable=False) | |||
| type = db.Column(db.String(40), server_default=db.text("'dataset'::character varying"), nullable=False) | |||
| collection_name = db.Column(db.String(64), nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class TidbAuthBinding(db.Model): | |||
| @@ -739,7 +739,7 @@ class TidbAuthBinding(db.Model): | |||
| status = db.Column(db.String(255), nullable=False, server_default=db.text("CREATING")) | |||
| account = db.Column(db.String(255), nullable=False) | |||
| password = db.Column(db.String(255), nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class Whitelist(db.Model): | |||
| @@ -751,7 +751,7 @@ class Whitelist(db.Model): | |||
| id = db.Column(StringUUID, primary_key=True, server_default=db.text("uuid_generate_v4()")) | |||
| tenant_id = db.Column(StringUUID, nullable=True) | |||
| category = db.Column(db.String(255), nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class DatasetPermission(db.Model): | |||
| @@ -768,7 +768,7 @@ class DatasetPermission(db.Model): | |||
| account_id = db.Column(StringUUID, nullable=False) | |||
| tenant_id = db.Column(StringUUID, nullable=False) | |||
| has_permission = db.Column(db.Boolean, nullable=False, server_default=db.text("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=func.current_timestamp()) | |||
| class ExternalKnowledgeApis(db.Model): | |||
| @@ -785,9 +785,9 @@ class ExternalKnowledgeApis(db.Model): | |||
| tenant_id = db.Column(StringUUID, nullable=False) | |||
| settings = db.Column(db.Text, nullable=True) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| def to_dict(self): | |||
| return { | |||
| @@ -840,6 +840,6 @@ class ExternalKnowledgeBindings(db.Model): | |||
| dataset_id = db.Column(StringUUID, nullable=False) | |||
| external_knowledge_id = db.Column(db.Text, nullable=False) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| @@ -30,7 +30,7 @@ class DifySetup(db.Model): | |||
| __table_args__ = (db.PrimaryKeyConstraint("version", name="dify_setup_pkey"),) | |||
| version = db.Column(db.String(255), nullable=False) | |||
| setup_at = db.Column(db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)")) | |||
| setup_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class AppMode(StrEnum): | |||
| @@ -85,9 +85,9 @@ class App(db.Model): | |||
| tracing = db.Column(db.Text, 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| use_icon_as_answer_icon = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| @property | |||
| @@ -226,9 +226,9 @@ class AppModelConfig(db.Model): | |||
| model_id = db.Column(db.String(255), 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| opening_statement = db.Column(db.Text) | |||
| suggested_questions = db.Column(db.Text) | |||
| suggested_questions_after_answer = db.Column(db.Text) | |||
| @@ -482,8 +482,8 @@ class RecommendedApp(db.Model): | |||
| is_listed = db.Column(db.Boolean, nullable=False, default=True) | |||
| install_count = db.Column(db.Integer, nullable=False, default=0) | |||
| language = db.Column(db.String(255), nullable=False, server_default=db.text("'en-US'::character varying")) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def app(self): | |||
| @@ -507,7 +507,7 @@ class InstalledApp(db.Model): | |||
| position = db.Column(db.Integer, nullable=False, default=0) | |||
| is_pinned = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| last_used_at = db.Column(db.DateTime, 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=func.current_timestamp()) | |||
| @property | |||
| def app(self): | |||
| @@ -548,8 +548,8 @@ class Conversation(db.Model): | |||
| read_at = db.Column(db.DateTime) | |||
| read_account_id = db.Column(StringUUID) | |||
| dialogue_count: Mapped[int] = mapped_column(default=0) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| messages = db.relationship("Message", backref="conversation", lazy="select", passive_deletes="all") | |||
| message_annotations = db.relationship( | |||
| @@ -791,8 +791,8 @@ class Message(db.Model): | |||
| from_source = db.Column(db.String(255), nullable=False) | |||
| from_end_user_id: Mapped[Optional[str]] = db.Column(StringUUID) | |||
| from_account_id: Mapped[Optional[str]] = db.Column(StringUUID) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| agent_based = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| workflow_run_id = db.Column(StringUUID) | |||
| @@ -1117,8 +1117,8 @@ class MessageFeedback(db.Model): | |||
| from_source = db.Column(db.String(255), nullable=False) | |||
| from_end_user_id = db.Column(StringUUID) | |||
| from_account_id = db.Column(StringUUID) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def from_account(self): | |||
| @@ -1164,9 +1164,7 @@ class MessageFile(db.Model): | |||
| upload_file_id: Mapped[Optional[str]] = db.Column(StringUUID, nullable=True) | |||
| created_by_role: Mapped[str] = db.Column(db.String(255), nullable=False) | |||
| created_by: Mapped[str] = db.Column(StringUUID, nullable=False) | |||
| created_at: Mapped[datetime] = db.Column( | |||
| db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)") | |||
| ) | |||
| created_at: Mapped[datetime] = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class MessageAnnotation(db.Model): | |||
| @@ -1186,8 +1184,8 @@ class MessageAnnotation(db.Model): | |||
| content = db.Column(db.Text, nullable=False) | |||
| hit_count = db.Column(db.Integer, nullable=False, server_default=db.text("0")) | |||
| account_id = db.Column(StringUUID, nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def account(self): | |||
| @@ -1216,7 +1214,7 @@ class AppAnnotationHitHistory(db.Model): | |||
| source = db.Column(db.Text, nullable=False) | |||
| question = db.Column(db.Text, nullable=False) | |||
| account_id = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| score = db.Column(Float, nullable=False, server_default=db.text("0")) | |||
| message_id = db.Column(StringUUID, nullable=False) | |||
| annotation_question = db.Column(db.Text, nullable=False) | |||
| @@ -1250,9 +1248,9 @@ class AppAnnotationSetting(db.Model): | |||
| score_threshold = db.Column(Float, nullable=False, server_default=db.text("0")) | |||
| collection_binding_id = db.Column(StringUUID, nullable=False) | |||
| created_user_id = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| updated_user_id = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| @property | |||
| def created_account(self): | |||
| @@ -1298,9 +1296,9 @@ class OperationLog(db.Model): | |||
| account_id = db.Column(StringUUID, nullable=False) | |||
| action = db.Column(db.String(255), nullable=False) | |||
| content = db.Column(db.JSON) | |||
| 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=func.current_timestamp()) | |||
| created_ip = db.Column(db.String(255), nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class EndUser(UserMixin, db.Model): | |||
| @@ -1319,8 +1317,8 @@ class EndUser(UserMixin, db.Model): | |||
| name = db.Column(db.String(255)) | |||
| is_anonymous = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) | |||
| session_id = db.Column(db.String(255), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class Site(db.Model): | |||
| @@ -1351,9 +1349,9 @@ class Site(db.Model): | |||
| 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")) | |||
| 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=func.current_timestamp()) | |||
| 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=func.current_timestamp()) | |||
| code = db.Column(db.String(255)) | |||
| @property | |||
| @@ -1395,7 +1393,7 @@ class ApiToken(db.Model): | |||
| type = db.Column(db.String(16), nullable=False) | |||
| token = db.Column(db.String(255), nullable=False) | |||
| last_used_at = db.Column(db.DateTime, 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=func.current_timestamp()) | |||
| @staticmethod | |||
| def generate_api_key(prefix, n): | |||
| @@ -1426,9 +1424,7 @@ class UploadFile(db.Model): | |||
| db.String(255), nullable=False, server_default=db.text("'account'::character varying") | |||
| ) | |||
| created_by: Mapped[str] = db.Column(StringUUID, nullable=False) | |||
| created_at: Mapped[datetime] = db.Column( | |||
| db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)") | |||
| ) | |||
| created_at: Mapped[datetime] = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| used: Mapped[bool] = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| used_by: Mapped[str | None] = db.Column(StringUUID, nullable=True) | |||
| used_at: Mapped[datetime | None] = db.Column(db.DateTime, nullable=True) | |||
| @@ -1485,7 +1481,7 @@ class ApiRequest(db.Model): | |||
| request = db.Column(db.Text, nullable=True) | |||
| response = db.Column(db.Text, nullable=True) | |||
| ip = db.Column(db.String(255), nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class MessageChain(db.Model): | |||
| @@ -1657,7 +1653,7 @@ class Tag(db.Model): | |||
| type = db.Column(db.String(16), nullable=False) | |||
| name = db.Column(db.String(255), nullable=False) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class TagBinding(db.Model): | |||
| @@ -1673,7 +1669,7 @@ class TagBinding(db.Model): | |||
| tag_id = db.Column(StringUUID, nullable=True) | |||
| target_id = db.Column(StringUUID, nullable=True) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| class TraceAppConfig(db.Model): | |||
| @@ -1687,8 +1683,10 @@ class TraceAppConfig(db.Model): | |||
| app_id = db.Column(StringUUID, nullable=False) | |||
| tracing_provider = db.Column(db.String(255), nullable=True) | |||
| tracing_config = db.Column(db.JSON, nullable=True) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.now()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.now(), onupdate=func.now()) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column( | |||
| db.DateTime, nullable=False, server_default=func.current_timestamp(), onupdate=func.current_timestamp() | |||
| ) | |||
| is_active = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) | |||
| @property | |||
| @@ -1,5 +1,7 @@ | |||
| from enum import Enum | |||
| from sqlalchemy import func | |||
| from .engine import db | |||
| from .types import StringUUID | |||
| @@ -60,8 +62,8 @@ class Provider(db.Model): | |||
| quota_limit = db.Column(db.BigInteger, nullable=True) | |||
| quota_used = db.Column(db.BigInteger, default=0) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| def __repr__(self): | |||
| return ( | |||
| @@ -108,8 +110,8 @@ class ProviderModel(db.Model): | |||
| model_type = db.Column(db.String(40), nullable=False) | |||
| encrypted_config = db.Column(db.Text, nullable=True) | |||
| is_valid = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class TenantDefaultModel(db.Model): | |||
| @@ -124,8 +126,8 @@ class TenantDefaultModel(db.Model): | |||
| provider_name = db.Column(db.String(255), nullable=False) | |||
| model_name = db.Column(db.String(255), nullable=False) | |||
| model_type = db.Column(db.String(40), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class TenantPreferredModelProvider(db.Model): | |||
| @@ -139,8 +141,8 @@ class TenantPreferredModelProvider(db.Model): | |||
| tenant_id = db.Column(StringUUID, nullable=False) | |||
| provider_name = db.Column(db.String(255), nullable=False) | |||
| preferred_provider_type = db.Column(db.String(40), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class ProviderOrder(db.Model): | |||
| @@ -164,8 +166,8 @@ class ProviderOrder(db.Model): | |||
| paid_at = db.Column(db.DateTime) | |||
| pay_failed_at = db.Column(db.DateTime) | |||
| refunded_at = db.Column(db.DateTime) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class ProviderModelSetting(db.Model): | |||
| @@ -186,8 +188,8 @@ class ProviderModelSetting(db.Model): | |||
| model_type = db.Column(db.String(40), nullable=False) | |||
| enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) | |||
| load_balancing_enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class LoadBalancingModelConfig(db.Model): | |||
| @@ -209,5 +211,5 @@ class LoadBalancingModelConfig(db.Model): | |||
| name = db.Column(db.String(255), nullable=False) | |||
| encrypted_config = db.Column(db.Text, nullable=True) | |||
| enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @@ -1,5 +1,6 @@ | |||
| import json | |||
| from sqlalchemy import func | |||
| from sqlalchemy.dialects.postgresql import JSONB | |||
| from .engine import db | |||
| @@ -19,8 +20,8 @@ class DataSourceOauthBinding(db.Model): | |||
| access_token = db.Column(db.String(255), nullable=False) | |||
| provider = db.Column(db.String(255), nullable=False) | |||
| source_info = db.Column(JSONB, nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| disabled = db.Column(db.Boolean, nullable=True, server_default=db.text("false")) | |||
| @@ -37,8 +38,8 @@ class DataSourceApiKeyAuthBinding(db.Model): | |||
| category = db.Column(db.String(255), nullable=False) | |||
| provider = db.Column(db.String(255), nullable=False) | |||
| credentials = db.Column(db.Text, nullable=True) # JSON | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| disabled = db.Column(db.Boolean, nullable=True, server_default=db.text("false")) | |||
| def to_dict(self): | |||
| @@ -2,7 +2,7 @@ import json | |||
| from typing import Optional | |||
| import sqlalchemy as sa | |||
| from sqlalchemy import ForeignKey | |||
| from sqlalchemy import ForeignKey, func | |||
| from sqlalchemy.orm import Mapped, mapped_column | |||
| from core.tools.entities.common_entities import I18nObject | |||
| @@ -36,8 +36,8 @@ class BuiltinToolProvider(db.Model): | |||
| provider = db.Column(db.String(40), nullable=False) | |||
| # credential of the tool provider | |||
| encrypted_credentials = db.Column(db.Text, nullable=True) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def credentials(self) -> dict: | |||
| @@ -74,8 +74,8 @@ class PublishedAppTool(db.Model): | |||
| tool_name = db.Column(db.String(40), nullable=False) | |||
| # author | |||
| author = db.Column(db.String(40), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def description_i18n(self) -> I18nObject: | |||
| @@ -120,8 +120,8 @@ class ApiToolProvider(db.Model): | |||
| # custom_disclaimer | |||
| custom_disclaimer: Mapped[str] = mapped_column(sa.TEXT, default="") | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def schema_type(self) -> ApiProviderSchemaType: | |||
| @@ -198,8 +198,8 @@ class WorkflowToolProvider(db.Model): | |||
| # privacy policy | |||
| privacy_policy = db.Column(db.String(255), nullable=True, server_default="") | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def user(self) -> Account | None: | |||
| @@ -251,8 +251,8 @@ class ToolModelInvoke(db.Model): | |||
| provider_response_latency = db.Column(db.Float, nullable=False, server_default=db.text("0")) | |||
| total_price = db.Column(db.Numeric(10, 7)) | |||
| currency = db.Column(db.String(255), nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| class ToolConversationVariables(db.Model): | |||
| @@ -278,8 +278,8 @@ class ToolConversationVariables(db.Model): | |||
| # variables pool | |||
| variables_str = db.Column(db.Text, nullable=False) | |||
| created_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)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| @property | |||
| def variables(self) -> dict: | |||
| @@ -1,3 +1,5 @@ | |||
| from sqlalchemy import func | |||
| from .engine import db | |||
| from .model import Message | |||
| from .types import StringUUID | |||
| @@ -15,7 +17,7 @@ class SavedMessage(db.Model): | |||
| message_id = db.Column(StringUUID, nullable=False) | |||
| created_by_role = db.Column(db.String(255), nullable=False, server_default=db.text("'end_user'::character varying")) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| @property | |||
| def message(self): | |||
| @@ -34,4 +36,4 @@ class PinnedConversation(db.Model): | |||
| conversation_id = db.Column(StringUUID, nullable=False) | |||
| created_by_role = db.Column(db.String(255), nullable=False, server_default=db.text("'end_user'::character varying")) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| @@ -1,6 +1,6 @@ | |||
| import json | |||
| from collections.abc import Mapping, Sequence | |||
| from datetime import UTC, datetime | |||
| from datetime import datetime | |||
| from enum import Enum, StrEnum | |||
| from typing import Any, Optional, Union | |||
| @@ -103,12 +103,10 @@ class Workflow(db.Model): | |||
| graph: Mapped[str] = mapped_column(sa.Text) | |||
| _features: Mapped[str] = mapped_column("features", sa.TEXT) | |||
| created_by: Mapped[str] = mapped_column(StringUUID, nullable=False) | |||
| created_at: Mapped[datetime] = mapped_column( | |||
| db.DateTime, nullable=False, server_default=db.text("CURRENT_TIMESTAMP(0)") | |||
| ) | |||
| created_at: Mapped[datetime] = mapped_column(db.DateTime, nullable=False, server_default=func.current_timestamp()) | |||
| updated_by: Mapped[Optional[str]] = mapped_column(StringUUID) | |||
| updated_at: Mapped[datetime] = mapped_column( | |||
| sa.DateTime, nullable=False, default=datetime.now(tz=UTC), server_onupdate=func.current_timestamp() | |||
| db.DateTime, nullable=False, server_default=func.current_timestamp(), server_onupdate=func.current_timestamp() | |||
| ) | |||
| _environment_variables: Mapped[str] = mapped_column( | |||
| "environment_variables", db.Text, nullable=False, server_default="{}" | |||
| @@ -406,7 +404,7 @@ class WorkflowRun(db.Model): | |||
| total_steps = db.Column(db.Integer, server_default=db.text("0")) | |||
| created_by_role = db.Column(db.String(255), nullable=False) # account, end_user | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| finished_at = db.Column(db.DateTime) | |||
| exceptions_count = db.Column(db.Integer, server_default=db.text("0")) | |||
| @@ -636,7 +634,7 @@ class WorkflowNodeExecution(db.Model): | |||
| error = db.Column(db.Text) | |||
| elapsed_time = db.Column(db.Float, nullable=False, server_default=db.text("0")) | |||
| execution_metadata = db.Column(db.Text) | |||
| 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=func.current_timestamp()) | |||
| created_by_role = db.Column(db.String(255), nullable=False) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| finished_at = db.Column(db.DateTime) | |||
| @@ -755,7 +753,7 @@ class WorkflowAppLog(db.Model): | |||
| created_from = db.Column(db.String(255), nullable=False) | |||
| created_by_role = db.Column(db.String(255), nullable=False) | |||
| created_by = db.Column(StringUUID, nullable=False) | |||
| 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=func.current_timestamp()) | |||
| @property | |||
| def workflow_run(self): | |||
| @@ -781,7 +779,7 @@ class ConversationVariable(db.Model): | |||
| conversation_id: Mapped[str] = db.Column(StringUUID, nullable=False, primary_key=True) | |||
| app_id: Mapped[str] = db.Column(StringUUID, nullable=False, index=True) | |||
| data = db.Column(db.Text, nullable=False) | |||
| created_at = db.Column(db.DateTime, nullable=False, index=True, server_default=db.text("CURRENT_TIMESTAMP(0)")) | |||
| created_at = db.Column(db.DateTime, nullable=False, index=True, server_default=func.current_timestamp()) | |||
| updated_at = db.Column( | |||
| db.DateTime, nullable=False, server_default=func.current_timestamp(), onupdate=func.current_timestamp() | |||
| ) | |||