Feat/workflow phase2 (#4687)
This commit is contained in:
@@ -100,7 +100,7 @@ class App(db.Model):
|
||||
return None
|
||||
|
||||
@property
|
||||
def workflow(self):
|
||||
def workflow(self) -> Optional['Workflow']:
|
||||
if self.workflow_id:
|
||||
from .workflow import Workflow
|
||||
return db.session.query(Workflow).filter(Workflow.id == self.workflow_id).first()
|
||||
|
@@ -3,8 +3,8 @@ import json
|
||||
from sqlalchemy import ForeignKey
|
||||
|
||||
from core.tools.entities.common_entities import I18nObject
|
||||
from core.tools.entities.tool_bundle import ApiBasedToolBundle
|
||||
from core.tools.entities.tool_entities import ApiProviderSchemaType
|
||||
from core.tools.entities.tool_bundle import ApiToolBundle
|
||||
from core.tools.entities.tool_entities import ApiProviderSchemaType, WorkflowToolParameterConfiguration
|
||||
from extensions.ext_database import db
|
||||
from models import StringUUID
|
||||
from models.model import Account, App, Tenant
|
||||
@@ -118,8 +118,8 @@ class ApiToolProvider(db.Model):
|
||||
return ApiProviderSchemaType.value_of(self.schema_type_str)
|
||||
|
||||
@property
|
||||
def tools(self) -> list[ApiBasedToolBundle]:
|
||||
return [ApiBasedToolBundle(**tool) for tool in json.loads(self.tools_str)]
|
||||
def tools(self) -> list[ApiToolBundle]:
|
||||
return [ApiToolBundle(**tool) for tool in json.loads(self.tools_str)]
|
||||
|
||||
@property
|
||||
def credentials(self) -> dict:
|
||||
@@ -132,7 +132,84 @@ class ApiToolProvider(db.Model):
|
||||
@property
|
||||
def tenant(self) -> Tenant:
|
||||
return db.session.query(Tenant).filter(Tenant.id == self.tenant_id).first()
|
||||
|
||||
class ToolLabelBinding(db.Model):
|
||||
"""
|
||||
The table stores the labels for tools.
|
||||
"""
|
||||
__tablename__ = 'tool_label_bindings'
|
||||
__table_args__ = (
|
||||
db.PrimaryKeyConstraint('id', name='tool_label_bind_pkey'),
|
||||
db.UniqueConstraint('tool_id', 'label_name', name='unique_tool_label_bind'),
|
||||
)
|
||||
|
||||
id = db.Column(StringUUID, server_default=db.text('uuid_generate_v4()'))
|
||||
# tool id
|
||||
tool_id = db.Column(db.String(64), nullable=False)
|
||||
# tool type
|
||||
tool_type = db.Column(db.String(40), nullable=False)
|
||||
# label name
|
||||
label_name = db.Column(db.String(40), nullable=False)
|
||||
|
||||
class WorkflowToolProvider(db.Model):
|
||||
"""
|
||||
The table stores the workflow providers.
|
||||
"""
|
||||
__tablename__ = 'tool_workflow_providers'
|
||||
__table_args__ = (
|
||||
db.PrimaryKeyConstraint('id', name='tool_workflow_provider_pkey'),
|
||||
db.UniqueConstraint('name', 'tenant_id', name='unique_workflow_tool_provider'),
|
||||
db.UniqueConstraint('tenant_id', 'app_id', name='unique_workflow_tool_provider_app_id'),
|
||||
)
|
||||
|
||||
id = db.Column(StringUUID, server_default=db.text('uuid_generate_v4()'))
|
||||
# name of the workflow provider
|
||||
name = db.Column(db.String(40), nullable=False)
|
||||
# label of the workflow provider
|
||||
label = db.Column(db.String(255), nullable=False, server_default='')
|
||||
# icon
|
||||
icon = db.Column(db.String(255), nullable=False)
|
||||
# app id of the workflow provider
|
||||
app_id = db.Column(StringUUID, nullable=False)
|
||||
# version of the workflow provider
|
||||
version = db.Column(db.String(255), nullable=False, server_default='')
|
||||
# who created this tool
|
||||
user_id = db.Column(StringUUID, nullable=False)
|
||||
# tenant id
|
||||
tenant_id = db.Column(StringUUID, nullable=False)
|
||||
# description of the provider
|
||||
description = db.Column(db.Text, nullable=False)
|
||||
# parameter configuration
|
||||
parameter_configuration = db.Column(db.Text, nullable=False, server_default='[]')
|
||||
# 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)'))
|
||||
|
||||
@property
|
||||
def schema_type(self) -> ApiProviderSchemaType:
|
||||
return ApiProviderSchemaType.value_of(self.schema_type_str)
|
||||
|
||||
@property
|
||||
def user(self) -> Account:
|
||||
return db.session.query(Account).filter(Account.id == self.user_id).first()
|
||||
|
||||
@property
|
||||
def tenant(self) -> Tenant:
|
||||
return db.session.query(Tenant).filter(Tenant.id == self.tenant_id).first()
|
||||
|
||||
@property
|
||||
def parameter_configurations(self) -> list[WorkflowToolParameterConfiguration]:
|
||||
return [
|
||||
WorkflowToolParameterConfiguration(**config)
|
||||
for config in json.loads(self.parameter_configuration)
|
||||
]
|
||||
|
||||
@property
|
||||
def app(self) -> App:
|
||||
return db.session.query(App).filter(App.id == self.app_id).first()
|
||||
|
||||
class ToolModelInvoke(db.Model):
|
||||
"""
|
||||
store the invoke logs from tool invoke
|
||||
|
@@ -2,7 +2,6 @@ import json
|
||||
from enum import Enum
|
||||
from typing import Optional, Union
|
||||
|
||||
from core.tools.tool_manager import ToolManager
|
||||
from extensions.ext_database import db
|
||||
from libs import helper
|
||||
from models import StringUUID
|
||||
@@ -171,6 +170,12 @@ class Workflow(db.Model):
|
||||
|
||||
return helper.generate_text_hash(json.dumps(entity, sort_keys=True))
|
||||
|
||||
@property
|
||||
def tool_published(self) -> bool:
|
||||
from models.tools import WorkflowToolProvider
|
||||
return db.session.query(WorkflowToolProvider).filter(
|
||||
WorkflowToolProvider.app_id == self.app_id
|
||||
).first() is not None
|
||||
|
||||
class WorkflowRunTriggeredFrom(Enum):
|
||||
"""
|
||||
@@ -473,6 +478,7 @@ class WorkflowNodeExecution(db.Model):
|
||||
|
||||
@property
|
||||
def extras(self):
|
||||
from core.tools.tool_manager import ToolManager
|
||||
extras = {}
|
||||
if self.execution_metadata_dict:
|
||||
from core.workflow.entities.node_entities import NodeType
|
||||
|
Reference in New Issue
Block a user