| @@ -1,6 +1,6 @@ | |||
| from typing import Optional | |||
| from pydantic import Field, NonNegativeInt, computed_field | |||
| from pydantic import Field, NonNegativeInt | |||
| from pydantic_settings import BaseSettings | |||
| @@ -1,5 +1,3 @@ | |||
| from typing import Optional | |||
| from pydantic import Field | |||
| from .apollo import ApolloSettingsSourceInfo | |||
| @@ -142,6 +142,7 @@ class DatasetApi(DatasetApiResource): | |||
| Deletes a dataset given its ID. | |||
| Args: | |||
| _: ignore | |||
| dataset_id (UUID): The ID of the dataset to be deleted. | |||
| Returns: | |||
| @@ -16,7 +16,6 @@ class ModelConfigConverter: | |||
| """ | |||
| Convert app model config dict to entity. | |||
| :param app_config: app config | |||
| :param skip_check: skip check | |||
| :raises ProviderTokenNotInitError: provider token not init error | |||
| :return: app orchestration config entity | |||
| """ | |||
| @@ -88,7 +88,7 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator): | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| """ | |||
| if not args.get("query"): | |||
| raise ValueError("query is required") | |||
| @@ -181,10 +181,10 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator): | |||
| :param app_model: App | |||
| :param workflow: Workflow | |||
| :param node_id: the node id | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is streamed | |||
| """ | |||
| if not node_id: | |||
| raise ValueError("node_id is required") | |||
| @@ -238,10 +238,10 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator): | |||
| :param app_model: App | |||
| :param workflow: Workflow | |||
| :param node_id: the node id | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| """ | |||
| if not node_id: | |||
| raise ValueError("node_id is required") | |||
| @@ -80,7 +80,7 @@ class AgentChatAppGenerator(MessageBasedAppGenerator): | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| """ | |||
| if not streaming: | |||
| raise ValueError("Agent Chat App does not support blocking mode") | |||
| @@ -157,6 +157,7 @@ class AppRunner: | |||
| :param files: files | |||
| :param query: query | |||
| :param memory: memory | |||
| :param image_detail_config: the image quality config | |||
| :return: | |||
| """ | |||
| # get prompt without memory and context | |||
| @@ -76,7 +76,7 @@ class ChatAppGenerator(MessageBasedAppGenerator): | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| """ | |||
| if not args.get("query"): | |||
| raise ValueError("query is required") | |||
| @@ -74,7 +74,7 @@ class CompletionAppGenerator(MessageBasedAppGenerator): | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| """ | |||
| query = args["query"] | |||
| if not isinstance(query, str): | |||
| @@ -158,7 +158,7 @@ class WorkflowAppGenerator(BaseAppGenerator): | |||
| :param user: account or end user | |||
| :param application_generate_entity: application generate entity | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is stream | |||
| :param workflow_thread_pool_id: workflow thread pool id | |||
| """ | |||
| # init queue manager | |||
| @@ -208,10 +208,10 @@ class WorkflowAppGenerator(BaseAppGenerator): | |||
| :param app_model: App | |||
| :param workflow: Workflow | |||
| :param node_id: the node id | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is streamed | |||
| """ | |||
| if not node_id: | |||
| raise ValueError("node_id is required") | |||
| @@ -264,10 +264,10 @@ class WorkflowAppGenerator(BaseAppGenerator): | |||
| :param app_model: App | |||
| :param workflow: Workflow | |||
| :param node_id: the node id | |||
| :param user: account or end user | |||
| :param args: request args | |||
| :param invoke_from: invoke from source | |||
| :param stream: is stream | |||
| :param streaming: is streamed | |||
| """ | |||
| if not node_id: | |||
| raise ValueError("node_id is required") | |||
| @@ -44,9 +44,6 @@ class WorkflowAppRunner(WorkflowBasedAppRunner): | |||
| def run(self) -> None: | |||
| """ | |||
| Run application | |||
| :param application_generate_entity: application generate entity | |||
| :param queue_manager: application queue manager | |||
| :return: | |||
| """ | |||
| app_config = self.application_generate_entity.app_config | |||
| app_config = cast(WorkflowAppConfig, app_config) | |||
| @@ -48,7 +48,7 @@ class MessageCycleManage: | |||
| def _generate_conversation_name(self, *, conversation_id: str, query: str) -> Optional[Thread]: | |||
| """ | |||
| Generate conversation name. | |||
| :param conversation: conversation | |||
| :param conversation_id: conversation id | |||
| :param query: query | |||
| :return: thread | |||
| """ | |||
| @@ -153,7 +153,7 @@ class WorkflowCycleManage: | |||
| ) -> WorkflowRun: | |||
| """ | |||
| Workflow run success | |||
| :param workflow_run: workflow run | |||
| :param workflow_run_id: workflow run id | |||
| :param start_at: start time | |||
| :param total_tokens: total tokens | |||
| :param total_steps: total steps | |||
| @@ -236,7 +236,7 @@ class WorkflowCycleManage: | |||
| ) -> WorkflowRun: | |||
| """ | |||
| Workflow run failed | |||
| :param workflow_run: workflow run | |||
| :param workflow_run_id: workflow run id | |||
| :param start_at: start time | |||
| :param total_tokens: total tokens | |||
| :param total_steps: total steps | |||
| @@ -36,7 +36,7 @@ class UploadFileParser: | |||
| """ | |||
| get signed url from upload file | |||
| :param upload_file: UploadFile object | |||
| :param upload_file_id: the id of UploadFile object | |||
| :return: | |||
| """ | |||
| base_url = dify_config.FILES_URL | |||
| @@ -60,6 +60,7 @@ class CodeExecutor: | |||
| """ | |||
| Execute code | |||
| :param language: code language | |||
| :param preload: the preload script | |||
| :param code: code | |||
| :return: | |||
| """ | |||
| @@ -53,7 +53,7 @@ def pin_position_map(original_position_map: dict[str, int], pin_list: list[str]) | |||
| """ | |||
| Pin the items in the pin list to the beginning of the position map. | |||
| Overall logic: exclude > include > pin | |||
| :param position_map: the position map to be sorted and filtered | |||
| :param original_position_map: the position map to be sorted and filtered | |||
| :param pin_list: the list of pins to be put at the beginning | |||
| :return: the sorted position map | |||
| """ | |||
| @@ -38,12 +38,7 @@ class ToolParameterCache: | |||
| return None | |||
| def set(self, parameters: dict) -> None: | |||
| """ | |||
| Cache model provider credentials. | |||
| :param credentials: provider credentials | |||
| :return: | |||
| """ | |||
| """Cache model provider credentials.""" | |||
| redis_client.setex(self.cache_key, 86400, json.dumps(parameters)) | |||
| def delete(self) -> None: | |||
| @@ -38,7 +38,6 @@ class TTSModel(AIModel): | |||
| :param credentials: model credentials | |||
| :param voice: model timbre | |||
| :param content_text: text content to be translated | |||
| :param streaming: output is streaming | |||
| :param user: unique user id | |||
| :return: translated audio file | |||
| """ | |||
| @@ -177,7 +177,6 @@ class OpenGauss(BaseVector): | |||
| Search the nearest neighbors to a vector. | |||
| :param query_vector: The input vector to search for similar items. | |||
| :param top_k: The number of nearest neighbors to return, default is 5. | |||
| :return: List of Documents that are nearest to the query vector. | |||
| """ | |||
| top_k = kwargs.get("top_k", 4) | |||
| @@ -197,7 +197,6 @@ class OracleVector(BaseVector): | |||
| Search the nearest neighbors to a vector. | |||
| :param query_vector: The input vector to search for similar items. | |||
| :param top_k: The number of nearest neighbors to return, default is 5. | |||
| :return: List of Documents that are nearest to the query vector. | |||
| """ | |||
| top_k = kwargs.get("top_k", 4) | |||
| @@ -167,7 +167,6 @@ class PGVector(BaseVector): | |||
| Search the nearest neighbors to a vector. | |||
| :param query_vector: The input vector to search for similar items. | |||
| :param top_k: The number of nearest neighbors to return, default is 5. | |||
| :return: List of Documents that are nearest to the query vector. | |||
| """ | |||
| top_k = kwargs.get("top_k", 4) | |||
| @@ -22,7 +22,6 @@ class TidbService: | |||
| :param iam_url: The URL of the TiDB Cloud IAM API (required). | |||
| :param public_key: The public key for the API (required). | |||
| :param private_key: The private key for the API (required). | |||
| :param display_name: The user-friendly display name of the cluster (required). | |||
| :param region: The region where the cluster will be created (required). | |||
| :return: The response from the API. | |||
| @@ -149,13 +148,12 @@ class TidbService: | |||
| ): | |||
| """ | |||
| Update the status of a new TiDB Serverless cluster. | |||
| :param tidb_serverless_list: The TiDB serverless list (required). | |||
| :param project_id: The project ID of the TiDB Cloud project (required). | |||
| :param api_url: The URL of the TiDB Cloud API (required). | |||
| :param iam_url: The URL of the TiDB Cloud IAM API (required). | |||
| :param public_key: The public key for the API (required). | |||
| :param private_key: The private key for the API (required). | |||
| :param display_name: The user-friendly display name of the cluster (required). | |||
| :param region: The region where the cluster will be created (required). | |||
| :return: The response from the API. | |||
| """ | |||
| @@ -186,12 +184,12 @@ class TidbService: | |||
| ) -> list[dict]: | |||
| """ | |||
| Creates a new TiDB Serverless cluster. | |||
| :param batch_size: The batch size (required). | |||
| :param project_id: The project ID of the TiDB Cloud project (required). | |||
| :param api_url: The URL of the TiDB Cloud API (required). | |||
| :param iam_url: The URL of the TiDB Cloud IAM API (required). | |||
| :param public_key: The public key for the API (required). | |||
| :param private_key: The private key for the API (required). | |||
| :param display_name: The user-friendly display name of the cluster (required). | |||
| :param region: The region where the cluster will be created (required). | |||
| :return: The response from the API. | |||
| @@ -226,7 +226,6 @@ class WeaviateVector(BaseVector): | |||
| Args: | |||
| query: Text to look up documents similar to. | |||
| k: Number of Documents to return. Defaults to 4. | |||
| Returns: | |||
| List of Documents most similar to the query. | |||
| @@ -7,11 +7,10 @@ class FirecrawlWebExtractor(BaseExtractor): | |||
| """ | |||
| Crawl and scrape websites and return content in clean llm-ready markdown. | |||
| Args: | |||
| url: The URL to scrape. | |||
| api_key: The API key for Firecrawl. | |||
| base_url: The base URL for the Firecrawl API. Defaults to 'https://api.firecrawl.dev'. | |||
| job_id: The crawl job id. | |||
| tenant_id: The tenant id. | |||
| mode: The mode of operation. Defaults to 'scrape'. Options are 'crawl', 'scrape' and 'crawl_return_urls'. | |||
| only_main_content: Only return the main content of the page excluding headers, navs, footers, etc. | |||
| """ | |||
| @@ -14,15 +14,6 @@ class UnstructuredMarkdownExtractor(BaseExtractor): | |||
| Args: | |||
| file_path: Path to the file to load. | |||
| remove_hyperlinks: Whether to remove hyperlinks from the text. | |||
| remove_images: Whether to remove images from the text. | |||
| encoding: File encoding to use. If `None`, the file will be loaded | |||
| with the default system encoding. | |||
| autodetect_encoding: Whether to try to autodetect the file encoding | |||
| if the specified encoding fails. | |||
| """ | |||
| def __init__(self, file_path: str, api_url: Optional[str] = None, api_key: str = ""): | |||
| @@ -100,6 +100,7 @@ class DatasetRetrieval: | |||
| :param hit_callback: hit callback | |||
| :param message_id: message id | |||
| :param memory: memory | |||
| :param inputs: inputs | |||
| :return: | |||
| """ | |||
| dataset_ids = config.dataset_ids | |||
| @@ -734,6 +735,7 @@ class DatasetRetrieval: | |||
| Calculate keywords scores | |||
| :param query: search query | |||
| :param documents: documents for reranking | |||
| :param top_k: top k | |||
| :return: | |||
| """ | |||
| @@ -1031,8 +1033,6 @@ class DatasetRetrieval: | |||
| ) -> tuple[ModelInstance, ModelConfigWithCredentialsEntity]: | |||
| """ | |||
| Fetch model config | |||
| :param node_data: node data | |||
| :return: | |||
| """ | |||
| if model is None: | |||
| raise ValueError("single_retrieval_config is required") | |||
| @@ -235,6 +235,7 @@ class ReactMultiDatasetRouter: | |||
| tools: List of tools the agent will have access to, used to format the | |||
| prompt. | |||
| prefix: String to put before the list of tools. | |||
| format_instructions: The format instruction prompt. | |||
| Returns: | |||
| A PromptTemplate with the template assembled from the pieces here. | |||
| """ | |||
| @@ -29,9 +29,7 @@ class Tool(ABC): | |||
| def fork_tool_runtime(self, runtime: ToolRuntime) -> "Tool": | |||
| """ | |||
| fork a new tool with meta data | |||
| :param meta: the meta data of a tool call processing, tenant_id is required | |||
| fork a new tool with metadata | |||
| :return: the new tool | |||
| """ | |||
| return self.__class__( | |||
| @@ -206,6 +204,7 @@ class Tool(ABC): | |||
| create a blob message | |||
| :param blob: the blob | |||
| :param meta: the meta info of blob object | |||
| :return: the blob message | |||
| """ | |||
| return ToolInvokeMessage( | |||
| @@ -153,7 +153,7 @@ class BuiltinToolProviderController(ToolProviderController): | |||
| """ | |||
| validate the credentials of the provider | |||
| :param tool_name: the name of the tool, defined in `get_tools` | |||
| :param user_id: use id | |||
| :param credentials: the credentials of the tool | |||
| """ | |||
| # validate credentials format | |||
| @@ -167,7 +167,7 @@ class BuiltinToolProviderController(ToolProviderController): | |||
| """ | |||
| validate the credentials of the provider | |||
| :param tool_name: the name of the tool, defined in `get_tools` | |||
| :param user_id: use id | |||
| :param credentials: the credentials of the tool | |||
| """ | |||
| pass | |||
| @@ -28,9 +28,7 @@ class BuiltinTool(Tool): | |||
| def fork_tool_runtime(self, runtime: ToolRuntime) -> "BuiltinTool": | |||
| """ | |||
| fork a new tool with meta data | |||
| :param meta: the meta data of a tool call processing, tenant_id is required | |||
| fork a new tool with metadata | |||
| :return: the new tool | |||
| """ | |||
| return self.__class__( | |||
| @@ -43,7 +41,7 @@ class BuiltinTool(Tool): | |||
| """ | |||
| invoke model | |||
| :param model_config: the model config | |||
| :param user_id: the user id | |||
| :param prompt_messages: the prompt messages | |||
| :param stop: the stop words | |||
| :return: the model result | |||
| @@ -64,7 +62,6 @@ class BuiltinTool(Tool): | |||
| """ | |||
| get max tokens | |||
| :param model_config: the model config | |||
| :return: the max tokens | |||
| """ | |||
| if self.runtime is None: | |||
| @@ -145,7 +145,6 @@ class ApiToolProviderController(ToolProviderController): | |||
| """ | |||
| fetch tools from database | |||
| :param user_id: the user id | |||
| :param tenant_id: the tenant id | |||
| :return: the tools | |||
| """ | |||
| @@ -35,9 +35,7 @@ class ApiTool(Tool): | |||
| def fork_tool_runtime(self, runtime: ToolRuntime): | |||
| """ | |||
| fork a new tool with meta data | |||
| :param meta: the meta data of a tool call processing, tenant_id is required | |||
| fork a new tool with metadata | |||
| :return: the new tool | |||
| """ | |||
| if self.api_bundle is None: | |||
| @@ -264,7 +264,7 @@ class ToolParameter(PluginParameter): | |||
| :param name: the name of the parameter | |||
| :param llm_description: the description presented to the LLM | |||
| :param type: the type of the parameter | |||
| :param typ: the type of the parameter | |||
| :param required: if the parameter is required | |||
| :param options: the options of the parameter | |||
| """ | |||
| @@ -313,7 +313,6 @@ class ToolEngine: | |||
| """ | |||
| Create message file | |||
| :param messages: messages | |||
| :return: message file ids | |||
| """ | |||
| result = [] | |||
| @@ -161,8 +161,11 @@ class ToolManager: | |||
| get the tool runtime | |||
| :param provider_type: the type of the provider | |||
| :param provider_name: the name of the provider | |||
| :param provider_id: the id of the provider | |||
| :param tool_name: the name of the tool | |||
| :param tenant_id: the tenant id | |||
| :param invoke_from: invoke from | |||
| :param tool_invoke_from: the tool invoke from | |||
| :return: the tool | |||
| """ | |||
| @@ -427,8 +430,6 @@ class ToolManager: | |||
| get the absolute path of the icon of the hardcoded provider | |||
| :param provider: the name of the provider | |||
| :param tenant_id: the id of the tenant | |||
| :return: the absolute path of the icon, the mime type of the icon | |||
| """ | |||
| # get provider | |||
| @@ -672,7 +673,8 @@ class ToolManager: | |||
| """ | |||
| get the api provider | |||
| :param provider_name: the name of the provider | |||
| :param tenant_id: the id of the tenant | |||
| :param provider_id: the id of the provider | |||
| :return: the provider controller, the credentials | |||
| """ | |||
| @@ -84,12 +84,8 @@ class ModelInvocationUtils: | |||
| :param user_id: user id | |||
| :param tenant_id: tenant id, the tenant id of the creator of the tool | |||
| :param tool_provider: tool provider | |||
| :param tool_id: tool id | |||
| :param tool_type: tool type | |||
| :param tool_name: tool name | |||
| :param provider: model provider | |||
| :param model: model name | |||
| :param model_parameters: model parameters | |||
| :param prompt_messages: prompt messages | |||
| :return: AssistantPromptMessage | |||
| """ | |||
| @@ -200,6 +200,8 @@ class ApiBasedToolSchemaParser: | |||
| parse openapi yaml to tool bundle | |||
| :param yaml: the yaml string | |||
| :param extra_info: the extra info | |||
| :param warning: the warning message | |||
| :return: the tool bundle | |||
| """ | |||
| warning = warning if warning is not None else {} | |||
| @@ -281,6 +283,8 @@ class ApiBasedToolSchemaParser: | |||
| parse openapi plugin yaml to tool bundle | |||
| :param json: the json string | |||
| :param extra_info: the extra info | |||
| :param warning: the warning message | |||
| :return: the tool bundle | |||
| """ | |||
| warning = warning if warning is not None else {} | |||
| @@ -315,6 +319,8 @@ class ApiBasedToolSchemaParser: | |||
| auto parse to tool bundle | |||
| :param content: the content | |||
| :param extra_info: the extra info | |||
| :param warning: the warning message | |||
| :return: tools bundle, schema_type | |||
| """ | |||
| warning = warning if warning is not None else {} | |||
| @@ -182,7 +182,6 @@ class WorkflowToolProviderController(ToolProviderController): | |||
| """ | |||
| fetch tools from database | |||
| :param user_id: the user id | |||
| :param tenant_id: the tenant id | |||
| :return: the tools | |||
| """ | |||
| @@ -127,9 +127,8 @@ class WorkflowTool(Tool): | |||
| def fork_tool_runtime(self, runtime: ToolRuntime) -> "WorkflowTool": | |||
| """ | |||
| fork a new tool with meta data | |||
| fork a new tool with metadata | |||
| :param meta: the meta data of a tool call processing, tenant_id is required | |||
| :return: the new tool | |||
| """ | |||
| return self.__class__( | |||
| @@ -212,7 +211,6 @@ class WorkflowTool(Tool): | |||
| """ | |||
| extract files from the result | |||
| :param result: the result | |||
| :return: the result, files | |||
| """ | |||
| files: list[File] = [] | |||
| @@ -95,7 +95,6 @@ class VariableTemplateParser: | |||
| Args: | |||
| inputs: A dictionary containing the values for the template variables. | |||
| remove_template_variables: A boolean indicating whether to remove the template variables from the output. | |||
| Returns: | |||
| The formatted string with template variables replaced by their values. | |||
| @@ -204,6 +204,8 @@ class WorkflowEntry: | |||
| NOTE: only parameter_extractor/question_classifier are supported | |||
| :param node_data: node data | |||
| :param node_id: node id | |||
| :param tenant_id: tenant id | |||
| :param user_id: user id | |||
| :param user_inputs: user inputs | |||
| :return: | |||
| @@ -513,6 +513,7 @@ class AppDslService: | |||
| """ | |||
| Export app | |||
| :param app_model: App instance | |||
| :param include_secret: Whether include secret variable | |||
| :return: | |||
| """ | |||
| app_mode = AppMode.value_of(app_model.mode) | |||
| @@ -28,7 +28,6 @@ class BuiltinToolManageService: | |||
| """ | |||
| list builtin tool provider tools | |||
| :param user_id: the id of the user | |||
| :param tenant_id: the id of the tenant | |||
| :param provider: the name of the provider | |||
| @@ -60,6 +60,7 @@ class ToolTransformService: | |||
| """ | |||
| repack provider | |||
| :param tenant_id: the tenant id | |||
| :param provider: the provider dict | |||
| """ | |||
| if isinstance(provider, dict) and "icon" in provider: | |||
| @@ -222,7 +222,7 @@ class WorkflowToolManageService: | |||
| Delete a workflow tool. | |||
| :param user_id: the user id | |||
| :param tenant_id: the tenant id | |||
| :param workflow_app_id: the workflow app id | |||
| :param workflow_tool_id: the workflow tool id | |||
| """ | |||
| db.session.query(WorkflowToolProvider).filter( | |||
| WorkflowToolProvider.tenant_id == tenant_id, WorkflowToolProvider.id == workflow_tool_id | |||
| @@ -238,7 +238,7 @@ class WorkflowToolManageService: | |||
| Get a workflow tool. | |||
| :param user_id: the user id | |||
| :param tenant_id: the tenant id | |||
| :param workflow_app_id: the workflow app id | |||
| :param workflow_tool_id: the workflow tool id | |||
| :return: the tool | |||
| """ | |||
| db_tool: WorkflowToolProvider | None = ( | |||
| @@ -313,7 +313,7 @@ class WorkflowToolManageService: | |||
| List workflow tool provider tools. | |||
| :param user_id: the user id | |||
| :param tenant_id: the tenant id | |||
| :param workflow_app_id: the workflow app id | |||
| :param workflow_tool_id: the workflow tool id | |||
| :return: the list of tools | |||
| """ | |||
| db_tool: WorkflowToolProvider | None = ( | |||
| @@ -10,11 +10,7 @@ from extensions.ext_mail import mail | |||
| @shared_task(queue="mail") | |||
| def send_deletion_success_task(to): | |||
| """Send email to user regarding account deletion. | |||
| Args: | |||
| log (AccountDeletionLog): Account deletion log object | |||
| """ | |||
| """Send email to user regarding account deletion.""" | |||
| if not mail.is_inited(): | |||
| return | |||
| @@ -17,8 +17,6 @@ from models.workflow import WorkflowRun | |||
| def process_trace_tasks(file_info): | |||
| """ | |||
| Async process trace tasks | |||
| :param tasks_data: List of dictionaries containing task data | |||
| Usage: process_trace_tasks.delay(tasks_data) | |||
| """ | |||
| from core.ops.ops_trace_manager import OpsTraceManager | |||