| from collections.abc import Mapping | |||||
| from typing import Any | |||||
| from core.app.app_config.entities import ModelConfigEntity | from core.app.app_config.entities import ModelConfigEntity | ||||
| from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelType | from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelType | ||||
| from core.model_runtime.model_providers import model_provider_factory | from core.model_runtime.model_providers import model_provider_factory | ||||
| ) | ) | ||||
| @classmethod | @classmethod | ||||
| def validate_and_set_defaults(cls, tenant_id: str, config: dict) -> tuple[dict, list[str]]: | |||||
| def validate_and_set_defaults(cls, tenant_id: str, config: Mapping[str, Any]) -> tuple[dict, list[str]]: | |||||
| """ | """ | ||||
| Validate and set defaults for model config | Validate and set defaults for model config | ||||
| import logging | import logging | ||||
| import threading | import threading | ||||
| import uuid | import uuid | ||||
| from collections.abc import Generator | |||||
| from typing import Any, Literal, Optional, Union, overload | |||||
| from collections.abc import Generator, Mapping | |||||
| from typing import Any, Optional, Union | |||||
| from flask import Flask, current_app | from flask import Flask, current_app | ||||
| from pydantic import ValidationError | from pydantic import ValidationError | ||||
| class AdvancedChatAppGenerator(MessageBasedAppGenerator): | class AdvancedChatAppGenerator(MessageBasedAppGenerator): | ||||
| @overload | |||||
| def generate( | def generate( | ||||
| self, | self, | ||||
| app_model: App, | app_model: App, | ||||
| workflow: Workflow, | workflow: Workflow, | ||||
| user: Union[Account, EndUser], | user: Union[Account, EndUser], | ||||
| args: dict, | |||||
| args: Mapping[str, Any], | |||||
| invoke_from: InvokeFrom, | invoke_from: InvokeFrom, | ||||
| stream: Literal[True] = True, | |||||
| ) -> Generator[str, None, None]: ... | |||||
| @overload | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| workflow: Workflow, | |||||
| user: Union[Account, EndUser], | |||||
| args: dict, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: Literal[False] = False, | |||||
| ) -> dict: ... | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| workflow: Workflow, | |||||
| user: Union[Account, EndUser], | |||||
| args: dict, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: bool = True, | |||||
| ) -> dict[str, Any] | Generator[str, Any, None]: | |||||
| streaming: bool = True, | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| files=file_objs, | files=file_objs, | ||||
| parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL, | parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL, | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| extras=extras, | extras=extras, | ||||
| trace_manager=trace_manager, | trace_manager=trace_manager, | ||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| application_generate_entity=application_generate_entity, | application_generate_entity=application_generate_entity, | ||||
| conversation=conversation, | conversation=conversation, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| def single_iteration_generate( | def single_iteration_generate( | ||||
| self, app_model: App, workflow: Workflow, node_id: str, user: Account, args: dict, stream: bool = True | |||||
| ) -> dict[str, Any] | Generator[str, Any, None]: | |||||
| self, app_model: App, workflow: Workflow, node_id: str, user: Account, args: dict, streaming: bool = True | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| query="", | query="", | ||||
| files=[], | files=[], | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=InvokeFrom.DEBUGGER, | invoke_from=InvokeFrom.DEBUGGER, | ||||
| extras={"auto_generate_conversation_name": False}, | extras={"auto_generate_conversation_name": False}, | ||||
| single_iteration_run=AdvancedChatAppGenerateEntity.SingleIterationRunEntity( | single_iteration_run=AdvancedChatAppGenerateEntity.SingleIterationRunEntity( | ||||
| invoke_from=InvokeFrom.DEBUGGER, | invoke_from=InvokeFrom.DEBUGGER, | ||||
| application_generate_entity=application_generate_entity, | application_generate_entity=application_generate_entity, | ||||
| conversation=None, | conversation=None, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| def _generate( | def _generate( | ||||
| application_generate_entity: AdvancedChatAppGenerateEntity, | application_generate_entity: AdvancedChatAppGenerateEntity, | ||||
| conversation: Optional[Conversation] = None, | conversation: Optional[Conversation] = None, | ||||
| stream: bool = True, | stream: bool = True, | ||||
| ) -> dict[str, Any] | Generator[str, Any, None]: | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| import uuid | import uuid | ||||
| from typing import Optional | |||||
| from collections.abc import Mapping | |||||
| from typing import Any, Optional | |||||
| from core.agent.entities import AgentEntity | from core.agent.entities import AgentEntity | ||||
| from core.app.app_config.base_app_config_manager import BaseAppConfigManager | from core.app.app_config.base_app_config_manager import BaseAppConfigManager | ||||
| return app_config | return app_config | ||||
| @classmethod | @classmethod | ||||
| def config_validate(cls, tenant_id: str, config: dict) -> dict: | |||||
| def config_validate(cls, tenant_id: str, config: Mapping[str, Any]) -> dict: | |||||
| """ | """ | ||||
| Validate for agent chat app model config | Validate for agent chat app model config | ||||
| import logging | import logging | ||||
| import threading | import threading | ||||
| import uuid | import uuid | ||||
| from collections.abc import Generator | |||||
| from typing import Any, Literal, Union, overload | |||||
| from collections.abc import Generator, Mapping | |||||
| from typing import Any, Union | |||||
| from flask import Flask, current_app | from flask import Flask, current_app | ||||
| from pydantic import ValidationError | from pydantic import ValidationError | ||||
| class AgentChatAppGenerator(MessageBasedAppGenerator): | class AgentChatAppGenerator(MessageBasedAppGenerator): | ||||
| @overload | |||||
| def generate( | def generate( | ||||
| self, | self, | ||||
| *, | |||||
| app_model: App, | app_model: App, | ||||
| user: Union[Account, EndUser], | user: Union[Account, EndUser], | ||||
| args: dict, | |||||
| args: Mapping[str, Any], | |||||
| invoke_from: InvokeFrom, | invoke_from: InvokeFrom, | ||||
| stream: Literal[True] = True, | |||||
| ) -> Generator[dict, None, None]: ... | |||||
| @overload | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| user: Union[Account, EndUser], | |||||
| args: dict, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: Literal[False] = False, | |||||
| ) -> dict: ... | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| user: Union[Account, EndUser], | |||||
| args: Any, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: bool = True, | |||||
| ) -> Union[dict, Generator[dict, None, None]]: | |||||
| streaming: bool = True, | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| :param invoke_from: invoke from source | :param invoke_from: invoke from source | ||||
| :param stream: is stream | :param stream: is stream | ||||
| """ | """ | ||||
| if not stream: | |||||
| if not streaming: | |||||
| raise ValueError("Agent Chat App does not support blocking mode") | raise ValueError("Agent Chat App does not support blocking mode") | ||||
| if not args.get("query"): | if not args.get("query"): | ||||
| # validate config | # validate config | ||||
| override_model_config_dict = AgentChatAppConfigManager.config_validate( | override_model_config_dict = AgentChatAppConfigManager.config_validate( | ||||
| tenant_id=app_model.tenant_id, config=args.get("model_config") | |||||
| tenant_id=app_model.tenant_id, | |||||
| config=args["model_config"], | |||||
| ) | ) | ||||
| # always enable retriever resource in debugger mode | # always enable retriever resource in debugger mode | ||||
| files=file_objs, | files=file_objs, | ||||
| parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL, | parent_message_id=args.get("parent_message_id") if invoke_from != InvokeFrom.SERVICE_API else UUID_NIL, | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| extras=extras, | extras=extras, | ||||
| call_depth=0, | call_depth=0, | ||||
| conversation=conversation, | conversation=conversation, | ||||
| message=message, | message=message, | ||||
| user=user, | user=user, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| return AgentChatAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) | return AgentChatAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) |
| import logging | import logging | ||||
| from abc import ABC, abstractmethod | from abc import ABC, abstractmethod | ||||
| from collections.abc import Generator | |||||
| from collections.abc import Generator, Mapping | |||||
| from typing import Any, Union | from typing import Any, Union | ||||
| from core.app.entities.app_invoke_entities import InvokeFrom | from core.app.entities.app_invoke_entities import InvokeFrom | ||||
| @classmethod | @classmethod | ||||
| def convert( | def convert( | ||||
| cls, response: Union[AppBlockingResponse, Generator[AppStreamResponse, Any, None]], invoke_from: InvokeFrom | |||||
| ) -> dict[str, Any] | Generator[str, Any, None]: | |||||
| cls, | |||||
| response: Union[AppBlockingResponse, Generator[AppStreamResponse, Any, None]], | |||||
| invoke_from: InvokeFrom, | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| if invoke_from in {InvokeFrom.DEBUGGER, InvokeFrom.SERVICE_API}: | if invoke_from in {InvokeFrom.DEBUGGER, InvokeFrom.SERVICE_API}: | ||||
| if isinstance(response, AppBlockingResponse): | if isinstance(response, AppBlockingResponse): | ||||
| return cls.convert_blocking_full_response(response) | return cls.convert_blocking_full_response(response) |
| user: Union[Account, EndUser], | user: Union[Account, EndUser], | ||||
| args: Any, | args: Any, | ||||
| invoke_from: InvokeFrom, | invoke_from: InvokeFrom, | ||||
| stream: bool = True, | |||||
| streaming: bool = True, | |||||
| ) -> Union[dict, Generator[str, None, None]]: | ) -> Union[dict, Generator[str, None, None]]: | ||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| extras=extras, | extras=extras, | ||||
| trace_manager=trace_manager, | trace_manager=trace_manager, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| # init generate records | # init generate records | ||||
| conversation=conversation, | conversation=conversation, | ||||
| message=message, | message=message, | ||||
| user=user, | user=user, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| return ChatAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) | return ChatAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) |
| ) -> dict: ... | ) -> dict: ... | ||||
| def generate( | def generate( | ||||
| self, app_model: App, user: Union[Account, EndUser], args: Any, invoke_from: InvokeFrom, stream: bool = True | |||||
| self, app_model: App, user: Union[Account, EndUser], args: Any, invoke_from: InvokeFrom, streaming: bool = True | |||||
| ) -> Union[dict, Generator[str, None, None]]: | ) -> Union[dict, Generator[str, None, None]]: | ||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| query=query, | query=query, | ||||
| files=file_objs, | files=file_objs, | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| extras=extras, | extras=extras, | ||||
| trace_manager=trace_manager, | trace_manager=trace_manager, | ||||
| conversation=conversation, | conversation=conversation, | ||||
| message=message, | message=message, | ||||
| user=user, | user=user, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| return CompletionAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) | return CompletionAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) |
| import threading | import threading | ||||
| import uuid | import uuid | ||||
| from collections.abc import Generator, Mapping, Sequence | from collections.abc import Generator, Mapping, Sequence | ||||
| from typing import Any, Literal, Optional, Union, overload | |||||
| from typing import Any, Optional, Union | |||||
| from flask import Flask, current_app | from flask import Flask, current_app | ||||
| from pydantic import ValidationError | from pydantic import ValidationError | ||||
| class WorkflowAppGenerator(BaseAppGenerator): | class WorkflowAppGenerator(BaseAppGenerator): | ||||
| @overload | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| workflow: Workflow, | |||||
| user: Union[Account, EndUser], | |||||
| args: dict, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: Literal[True] = True, | |||||
| call_depth: int = 0, | |||||
| workflow_thread_pool_id: Optional[str] = None, | |||||
| ) -> Generator[str, None, None]: ... | |||||
| @overload | |||||
| def generate( | |||||
| self, | |||||
| app_model: App, | |||||
| workflow: Workflow, | |||||
| user: Union[Account, EndUser], | |||||
| args: dict, | |||||
| invoke_from: InvokeFrom, | |||||
| stream: Literal[False] = False, | |||||
| call_depth: int = 0, | |||||
| workflow_thread_pool_id: Optional[str] = None, | |||||
| ) -> dict: ... | |||||
| def generate( | def generate( | ||||
| self, | self, | ||||
| *, | |||||
| app_model: App, | app_model: App, | ||||
| workflow: Workflow, | workflow: Workflow, | ||||
| user: Union[Account, EndUser], | |||||
| user: Account | EndUser, | |||||
| args: Mapping[str, Any], | args: Mapping[str, Any], | ||||
| invoke_from: InvokeFrom, | invoke_from: InvokeFrom, | ||||
| stream: bool = True, | |||||
| streaming: bool = True, | |||||
| call_depth: int = 0, | call_depth: int = 0, | ||||
| workflow_thread_pool_id: Optional[str] = None, | workflow_thread_pool_id: Optional[str] = None, | ||||
| ): | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| files: Sequence[Mapping[str, Any]] = args.get("files") or [] | files: Sequence[Mapping[str, Any]] = args.get("files") or [] | ||||
| # parse files | # parse files | ||||
| ), | ), | ||||
| files=system_files, | files=system_files, | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| call_depth=call_depth, | call_depth=call_depth, | ||||
| trace_manager=trace_manager, | trace_manager=trace_manager, | ||||
| user=user, | user=user, | ||||
| application_generate_entity=application_generate_entity, | application_generate_entity=application_generate_entity, | ||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| stream=stream, | |||||
| streaming=streaming, | |||||
| workflow_thread_pool_id=workflow_thread_pool_id, | workflow_thread_pool_id=workflow_thread_pool_id, | ||||
| ) | ) | ||||
| user: Union[Account, EndUser], | user: Union[Account, EndUser], | ||||
| application_generate_entity: WorkflowAppGenerateEntity, | application_generate_entity: WorkflowAppGenerateEntity, | ||||
| invoke_from: InvokeFrom, | invoke_from: InvokeFrom, | ||||
| stream: bool = True, | |||||
| streaming: bool = True, | |||||
| workflow_thread_pool_id: Optional[str] = None, | workflow_thread_pool_id: Optional[str] = None, | ||||
| ) -> dict[str, Any] | Generator[str, None, None]: | |||||
| """ | |||||
| Generate App response. | |||||
| :param app_model: App | |||||
| :param workflow: Workflow | |||||
| :param user: account or end user | |||||
| :param application_generate_entity: application generate entity | |||||
| :param invoke_from: invoke from source | |||||
| :param stream: is stream | |||||
| :param workflow_thread_pool_id: workflow thread pool id | |||||
| """ | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| # init queue manager | # init queue manager | ||||
| queue_manager = WorkflowAppQueueManager( | queue_manager = WorkflowAppQueueManager( | ||||
| task_id=application_generate_entity.task_id, | task_id=application_generate_entity.task_id, | ||||
| workflow=workflow, | workflow=workflow, | ||||
| queue_manager=queue_manager, | queue_manager=queue_manager, | ||||
| user=user, | user=user, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| ) | ) | ||||
| return WorkflowAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) | return WorkflowAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from) | ||||
| def single_iteration_generate( | def single_iteration_generate( | ||||
| self, app_model: App, workflow: Workflow, node_id: str, user: Account, args: dict, stream: bool = True | |||||
| ) -> dict[str, Any] | Generator[str, Any, None]: | |||||
| self, | |||||
| app_model: App, | |||||
| workflow: Workflow, | |||||
| node_id: str, | |||||
| user: Account, | |||||
| args: Mapping[str, Any], | |||||
| streaming: bool = True, | |||||
| ) -> Mapping[str, Any] | Generator[str, None, None]: | |||||
| """ | """ | ||||
| Generate App response. | Generate App response. | ||||
| inputs={}, | inputs={}, | ||||
| files=[], | files=[], | ||||
| user_id=user.id, | user_id=user.id, | ||||
| stream=stream, | |||||
| stream=streaming, | |||||
| invoke_from=InvokeFrom.DEBUGGER, | invoke_from=InvokeFrom.DEBUGGER, | ||||
| extras={"auto_generate_conversation_name": False}, | extras={"auto_generate_conversation_name": False}, | ||||
| single_iteration_run=WorkflowAppGenerateEntity.SingleIterationRunEntity( | single_iteration_run=WorkflowAppGenerateEntity.SingleIterationRunEntity( | ||||
| user=user, | user=user, | ||||
| invoke_from=InvokeFrom.DEBUGGER, | invoke_from=InvokeFrom.DEBUGGER, | ||||
| application_generate_entity=application_generate_entity, | application_generate_entity=application_generate_entity, | ||||
| stream=stream, | |||||
| streaming=streaming, | |||||
| ) | ) | ||||
| def _generate_worker( | def _generate_worker( |
| import logging | import logging | ||||
| import time | import time | ||||
| import uuid | import uuid | ||||
| from collections.abc import Generator | |||||
| from collections.abc import Generator, Mapping | |||||
| from datetime import timedelta | from datetime import timedelta | ||||
| from typing import Optional, Union | |||||
| from typing import Any, Optional, Union | |||||
| from core.errors.error import AppInvokeQuotaExceededError | from core.errors.error import AppInvokeQuotaExceededError | ||||
| from extensions.ext_redis import redis_client | from extensions.ext_redis import redis_client | ||||
| def gen_request_key() -> str: | def gen_request_key() -> str: | ||||
| return str(uuid.uuid4()) | return str(uuid.uuid4()) | ||||
| def generate(self, generator: Union[Generator, callable, dict], request_id: str): | |||||
| if isinstance(generator, dict): | |||||
| def generate(self, generator: Union[Generator[str, None, None], Mapping[str, Any]], request_id: str): | |||||
| if isinstance(generator, Mapping): | |||||
| return generator | return generator | ||||
| else: | else: | ||||
| return RateLimitGenerator(self, generator, request_id) | |||||
| return RateLimitGenerator(rate_limit=self, generator=generator, request_id=request_id) | |||||
| class RateLimitGenerator: | class RateLimitGenerator: | ||||
| def __init__(self, rate_limit: RateLimit, generator: Union[Generator, callable], request_id: str): | |||||
| def __init__(self, rate_limit: RateLimit, generator: Generator[str, None, None], request_id: str): | |||||
| self.rate_limit = rate_limit | self.rate_limit = rate_limit | ||||
| if callable(generator): | |||||
| self.generator = generator() | |||||
| else: | |||||
| self.generator = generator | |||||
| self.generator = generator | |||||
| self.request_id = request_id | self.request_id = request_id | ||||
| self.closed = False | self.closed = False | ||||
| import subprocess | import subprocess | ||||
| import time | import time | ||||
| import uuid | import uuid | ||||
| from collections.abc import Generator | |||||
| from collections.abc import Generator, Mapping | |||||
| from datetime import datetime | from datetime import datetime | ||||
| from hashlib import sha256 | from hashlib import sha256 | ||||
| from typing import Any, Optional, Union | from typing import Any, Optional, Union | ||||
| return sha256(hash_text.encode()).hexdigest() | return sha256(hash_text.encode()).hexdigest() | ||||
| def compact_generate_response(response: Union[dict, RateLimitGenerator]) -> Response: | |||||
| def compact_generate_response( | |||||
| response: Union[Mapping[str, Any], RateLimitGenerator, Generator[str, None, None]], | |||||
| ) -> Response: | |||||
| if isinstance(response, dict): | if isinstance(response, dict): | ||||
| return Response(response=json.dumps(response), status=200, mimetype="application/json") | return Response(response=json.dumps(response), status=200, mimetype="application/json") | ||||
| else: | else: |
| request_id = rate_limit.enter(request_id) | request_id = rate_limit.enter(request_id) | ||||
| if app_model.mode == AppMode.COMPLETION.value: | if app_model.mode == AppMode.COMPLETION.value: | ||||
| return rate_limit.generate( | return rate_limit.generate( | ||||
| CompletionAppGenerator().generate( | |||||
| app_model=app_model, user=user, args=args, invoke_from=invoke_from, stream=streaming | |||||
| generator=CompletionAppGenerator().generate( | |||||
| app_model=app_model, | |||||
| user=user, | |||||
| args=args, | |||||
| invoke_from=invoke_from, | |||||
| streaming=streaming, | |||||
| ), | ), | ||||
| request_id, | |||||
| request_id=request_id, | |||||
| ) | ) | ||||
| elif app_model.mode == AppMode.AGENT_CHAT.value or app_model.is_agent: | elif app_model.mode == AppMode.AGENT_CHAT.value or app_model.is_agent: | ||||
| generator = AgentChatAppGenerator().generate( | |||||
| app_model=app_model, | |||||
| user=user, | |||||
| args=args, | |||||
| invoke_from=invoke_from, | |||||
| streaming=streaming, | |||||
| ) | |||||
| return rate_limit.generate( | return rate_limit.generate( | ||||
| AgentChatAppGenerator().generate( | |||||
| app_model=app_model, user=user, args=args, invoke_from=invoke_from, stream=streaming | |||||
| ), | |||||
| request_id, | |||||
| generator=generator, | |||||
| request_id=request_id, | |||||
| ) | ) | ||||
| elif app_model.mode == AppMode.CHAT.value: | elif app_model.mode == AppMode.CHAT.value: | ||||
| return rate_limit.generate( | return rate_limit.generate( | ||||
| ChatAppGenerator().generate( | |||||
| app_model=app_model, user=user, args=args, invoke_from=invoke_from, stream=streaming | |||||
| generator=ChatAppGenerator().generate( | |||||
| app_model=app_model, | |||||
| user=user, | |||||
| args=args, | |||||
| invoke_from=invoke_from, | |||||
| streaming=streaming, | |||||
| ), | ), | ||||
| request_id, | |||||
| request_id=request_id, | |||||
| ) | ) | ||||
| elif app_model.mode == AppMode.ADVANCED_CHAT.value: | elif app_model.mode == AppMode.ADVANCED_CHAT.value: | ||||
| workflow = cls._get_workflow(app_model, invoke_from) | workflow = cls._get_workflow(app_model, invoke_from) | ||||
| return rate_limit.generate( | return rate_limit.generate( | ||||
| AdvancedChatAppGenerator().generate( | |||||
| generator=AdvancedChatAppGenerator().generate( | |||||
| app_model=app_model, | app_model=app_model, | ||||
| workflow=workflow, | workflow=workflow, | ||||
| user=user, | user=user, | ||||
| args=args, | args=args, | ||||
| invoke_from=invoke_from, | invoke_from=invoke_from, | ||||
| stream=streaming, | |||||
| streaming=streaming, | |||||
| ), | ), | ||||
| request_id, | |||||
| request_id=request_id, | |||||
| ) | ) | ||||
| elif app_model.mode == AppMode.WORKFLOW.value: | elif app_model.mode == AppMode.WORKFLOW.value: | ||||
| workflow = cls._get_workflow(app_model, invoke_from) | workflow = cls._get_workflow(app_model, invoke_from) | ||||
| generator = WorkflowAppGenerator().generate( | |||||
| app_model=app_model, | |||||
| workflow=workflow, | |||||
| user=user, | |||||
| args=args, | |||||
| invoke_from=invoke_from, | |||||
| streaming=streaming, | |||||
| call_depth=0, | |||||
| workflow_thread_pool_id=None, | |||||
| ) | |||||
| return rate_limit.generate( | return rate_limit.generate( | ||||
| WorkflowAppGenerator().generate( | |||||
| app_model=app_model, | |||||
| workflow=workflow, | |||||
| user=user, | |||||
| args=args, | |||||
| invoke_from=invoke_from, | |||||
| stream=streaming, | |||||
| ), | |||||
| request_id, | |||||
| generator=generator, | |||||
| request_id=request_id, | |||||
| ) | ) | ||||
| else: | else: | ||||
| raise ValueError(f"Invalid app mode {app_model.mode}") | raise ValueError(f"Invalid app mode {app_model.mode}") | ||||
| if app_model.mode == AppMode.ADVANCED_CHAT.value: | if app_model.mode == AppMode.ADVANCED_CHAT.value: | ||||
| workflow = cls._get_workflow(app_model, InvokeFrom.DEBUGGER) | workflow = cls._get_workflow(app_model, InvokeFrom.DEBUGGER) | ||||
| return AdvancedChatAppGenerator().single_iteration_generate( | return AdvancedChatAppGenerator().single_iteration_generate( | ||||
| app_model=app_model, workflow=workflow, node_id=node_id, user=user, args=args, stream=streaming | |||||
| app_model=app_model, | |||||
| workflow=workflow, | |||||
| node_id=node_id, | |||||
| user=user, | |||||
| args=args, | |||||
| streaming=streaming, | |||||
| ) | ) | ||||
| elif app_model.mode == AppMode.WORKFLOW.value: | elif app_model.mode == AppMode.WORKFLOW.value: | ||||
| workflow = cls._get_workflow(app_model, InvokeFrom.DEBUGGER) | workflow = cls._get_workflow(app_model, InvokeFrom.DEBUGGER) | ||||
| return WorkflowAppGenerator().single_iteration_generate( | return WorkflowAppGenerator().single_iteration_generate( | ||||
| app_model=app_model, workflow=workflow, node_id=node_id, user=user, args=args, stream=streaming | |||||
| app_model=app_model, workflow=workflow, node_id=node_id, user=user, args=args, streaming=streaming | |||||
| ) | ) | ||||
| else: | else: | ||||
| raise ValueError(f"Invalid app mode {app_model.mode}") | raise ValueError(f"Invalid app mode {app_model.mode}") |