diff --git a/api/controllers/console/agent/composer.py b/api/controllers/console/agent/composer.py index d716ab9fd2..85b54ce7cc 100644 --- a/api/controllers/console/agent/composer.py +++ b/api/controllers/console/agent/composer.py @@ -5,7 +5,7 @@ from controllers.console import console_ns from controllers.console.app.wraps import get_app_model from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required from libs.login import current_account_with_tenant, login_required -from models.model import AppMode +from models.model import App, AppMode from services.agent.composer_service import AgentComposerService from services.agent.composer_validator import ComposerConfigValidator from services.entities.agent_entities import ComposerSavePayload @@ -19,7 +19,7 @@ class WorkflowAgentComposerApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def get(self, app_model, node_id: str): + def get(self, app_model: App, node_id: str): _, tenant_id = current_account_with_tenant() return AgentComposerService.load_workflow_composer( tenant_id=tenant_id, @@ -33,7 +33,7 @@ class WorkflowAgentComposerApi(Resource): @account_initialization_required @edit_permission_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def put(self, app_model, node_id: str): + def put(self, app_model: App, node_id: str): account, tenant_id = current_account_with_tenant() payload = ComposerSavePayload.model_validate(console_ns.payload or {}) return AgentComposerService.save_workflow_composer( @@ -52,7 +52,7 @@ class WorkflowAgentComposerValidateApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def post(self, app_model, node_id: str): + def post(self, app_model: App, node_id: str): payload = ComposerSavePayload.model_validate(console_ns.payload or {}) ComposerConfigValidator.validate_save_payload(payload) return {"result": "success", "errors": []} @@ -64,7 +64,7 @@ class WorkflowAgentComposerCandidatesApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def get(self, app_model, node_id: str): + def get(self, app_model: App, node_id: str): return AgentComposerService.get_workflow_candidates(app_id=app_model.id) @@ -74,7 +74,7 @@ class WorkflowAgentComposerImpactApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def post(self, app_model, node_id: str): + def post(self, app_model: App, node_id: str): _, tenant_id = current_account_with_tenant() payload = ComposerSavePayload.model_validate(console_ns.payload or {}) current_snapshot_id = payload.binding.current_snapshot_id if payload.binding else None @@ -91,7 +91,7 @@ class WorkflowAgentComposerSaveToRosterApi(Resource): @account_initialization_required @edit_permission_required @get_app_model(mode=[AppMode.WORKFLOW, AppMode.ADVANCED_CHAT]) - def post(self, app_model, node_id: str): + def post(self, app_model: App, node_id: str): account, tenant_id = current_account_with_tenant() payload = ComposerSavePayload.model_validate(console_ns.payload or {}) return AgentComposerService.save_workflow_composer( @@ -109,7 +109,7 @@ class AgentAppComposerApi(Resource): @login_required @account_initialization_required @get_app_model() - def get(self, app_model): + def get(self, app_model: App): _, tenant_id = current_account_with_tenant() return AgentComposerService.load_agent_app_composer(tenant_id=tenant_id, app_id=app_model.id) @@ -119,7 +119,7 @@ class AgentAppComposerApi(Resource): @account_initialization_required @edit_permission_required @get_app_model() - def put(self, app_model): + def put(self, app_model: App): account, tenant_id = current_account_with_tenant() payload = ComposerSavePayload.model_validate(console_ns.payload or {}) return AgentComposerService.save_agent_app_composer( @@ -137,7 +137,7 @@ class AgentAppComposerValidateApi(Resource): @login_required @account_initialization_required @get_app_model() - def post(self, app_model): + def post(self, app_model: App): payload = ComposerSavePayload.model_validate(console_ns.payload or {}) ComposerConfigValidator.validate_save_payload(payload) return {"result": "success", "errors": []} @@ -149,5 +149,5 @@ class AgentAppComposerCandidatesApi(Resource): @login_required @account_initialization_required @get_app_model() - def get(self, app_model): + def get(self, app_model: App): return AgentComposerService.get_agent_app_candidates(app_id=app_model.id) diff --git a/api/controllers/console/app/agent.py b/api/controllers/console/app/agent.py index c05600ced5..277c86ced3 100644 --- a/api/controllers/console/app/agent.py +++ b/api/controllers/console/app/agent.py @@ -8,7 +8,7 @@ from controllers.console.app.wraps import get_app_model from controllers.console.wraps import account_initialization_required, setup_required from libs.helper import uuid_value from libs.login import login_required -from models.model import AppMode +from models.model import App, AppMode from services.agent_service import AgentService @@ -39,7 +39,7 @@ class AgentLogApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.AGENT_CHAT]) - def get(self, app_model): + def get(self, app_model: App): """Get agent logs""" args = AgentLogQuery.model_validate(request.args.to_dict(flat=True)) diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py index 5a965208c6..06555e5842 100644 --- a/api/controllers/console/app/app.py +++ b/api/controllers/console/app/app.py @@ -573,7 +573,7 @@ class AppApi(Resource): @account_initialization_required @enterprise_license_required @get_app_model(mode=None) - def get(self, app_model): + def get(self, app_model: App): """Get app detail""" app_service = AppService() @@ -581,7 +581,7 @@ class AppApi(Resource): if FeatureService.get_system_features().webapp_auth.enabled: app_setting = EnterpriseService.WebAppAuth.get_app_access_mode_by_id(app_id=str(app_model.id)) - app_model.access_mode = app_setting.access_mode + app_model.access_mode = app_setting.access_mode # type: ignore[attr-defined] response_model = AppDetailWithSite.model_validate(app_model, from_attributes=True) return response_model.model_dump(mode="json") @@ -598,7 +598,7 @@ class AppApi(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def put(self, app_model): + def put(self, app_model: App): """Update app""" args = UpdateAppPayload.model_validate(console_ns.payload) @@ -627,7 +627,7 @@ class AppApi(Resource): @login_required @account_initialization_required @edit_permission_required - def delete(self, app_model): + def delete(self, app_model: App): """Delete app""" app_service = AppService() app_service.delete_app(app_model) @@ -648,7 +648,7 @@ class AppCopyApi(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): """Copy app""" # The role of the current user in the ta table must be admin, owner, or editor current_user, _ = current_account_with_tenant() @@ -709,7 +709,7 @@ class AppExportApi(Resource): @login_required @account_initialization_required @edit_permission_required - def get(self, app_model): + def get(self, app_model: App): """Export app""" args = AppExportQuery.model_validate(request.args.to_dict(flat=True)) @@ -731,7 +731,7 @@ class AppPublishToCreatorsPlatformApi(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): """Publish app to Creators Platform""" from configs import dify_config from core.helper.creators import get_redirect_url, upload_dsl @@ -762,7 +762,7 @@ class AppNameApi(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): args = AppNamePayload.model_validate(console_ns.payload) app_service = AppService() @@ -784,7 +784,7 @@ class AppIconApi(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): args = AppIconPayload.model_validate(console_ns.payload or {}) app_service = AppService() @@ -811,7 +811,7 @@ class AppSiteStatus(Resource): @account_initialization_required @get_app_model(mode=None) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): args = AppSiteStatusPayload.model_validate(console_ns.payload) app_service = AppService() @@ -833,7 +833,7 @@ class AppApiStatus(Resource): @is_admin_or_owner_required @account_initialization_required @get_app_model(mode=None) - def post(self, app_model): + def post(self, app_model: App): args = AppApiStatusPayload.model_validate(console_ns.payload) app_service = AppService() @@ -874,7 +874,7 @@ class AppTraceApi(Resource): @account_initialization_required @edit_permission_required @get_app_model - def post(self, app_model): + def post(self, app_model: App): # add app trace args = AppTracePayload.model_validate(console_ns.payload) diff --git a/api/controllers/console/app/audio.py b/api/controllers/console/app/audio.py index 5b673f3394..acf2215e45 100644 --- a/api/controllers/console/app/audio.py +++ b/api/controllers/console/app/audio.py @@ -70,7 +70,7 @@ class ChatMessageAudioApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) - def post(self, app_model): + def post(self, app_model: App): file = request.files["file"] try: @@ -171,7 +171,7 @@ class TextModesApi(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): try: args = TextToSpeechVoiceQuery.model_validate(request.args.to_dict(flat=True)) diff --git a/api/controllers/console/app/completion.py b/api/controllers/console/app/completion.py index fddfe2f4bc..8983a33d16 100644 --- a/api/controllers/console/app/completion.py +++ b/api/controllers/console/app/completion.py @@ -33,7 +33,7 @@ from libs import helper from libs.helper import uuid_value from libs.login import current_user, login_required from models import Account -from models.model import AppMode +from models.model import App, AppMode from services.app_generate_service import AppGenerateService from services.app_task_service import AppTaskService from services.errors.llm import InvokeRateLimitError @@ -84,7 +84,7 @@ class CompletionMessageApi(Resource): @login_required @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) - def post(self, app_model): + def post(self, app_model: App): args_model = CompletionMessagePayload.model_validate(console_ns.payload) args = args_model.model_dump(exclude_none=True, by_alias=True) @@ -131,7 +131,7 @@ class CompletionMessageStopApi(Resource): @login_required @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) - def post(self, app_model, task_id: str): + def post(self, app_model: App, task_id: str): if not isinstance(current_user, Account): raise ValueError("current_user must be an Account instance") @@ -159,7 +159,7 @@ class ChatMessageApi(Resource): @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT]) @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): args_model = ChatMessagePayload.model_validate(console_ns.payload) args = args_model.model_dump(exclude_none=True, by_alias=True) @@ -212,7 +212,7 @@ class ChatMessageStopApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) - def post(self, app_model, task_id: str): + def post(self, app_model: App, task_id: str): if not isinstance(current_user, Account): raise ValueError("current_user must be an Account instance") diff --git a/api/controllers/console/app/conversation.py b/api/controllers/console/app/conversation.py index 0ca7a08286..a5b1a8c77d 100644 --- a/api/controllers/console/app/conversation.py +++ b/api/controllers/console/app/conversation.py @@ -33,7 +33,7 @@ from fields.conversation_fields import ( from libs.datetime_utils import naive_utc_now, parse_time_range from libs.login import current_account_with_tenant, login_required from models import Conversation, EndUser, Message, MessageAnnotation -from models.model import AppMode +from models.model import App, AppMode from services.conversation_service import ConversationService from services.errors.conversation import ConversationNotExistsError @@ -93,7 +93,7 @@ class CompletionConversationApi(Resource): @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) @edit_permission_required - def get(self, app_model): + def get(self, app_model: App): current_user, _ = current_account_with_tenant() args = CompletionConversationQuery.model_validate(request.args.to_dict(flat=True)) @@ -165,7 +165,7 @@ class CompletionConversationDetailApi(Resource): @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) @edit_permission_required - def get(self, app_model, conversation_id: UUID): + def get(self, app_model: App, conversation_id: UUID): conversation_id_str = str(conversation_id) return ConversationMessageDetailResponse.model_validate( _get_conversation(app_model, conversation_id_str), from_attributes=True @@ -182,7 +182,7 @@ class CompletionConversationDetailApi(Resource): @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) @edit_permission_required - def delete(self, app_model, conversation_id: UUID): + def delete(self, app_model: App, conversation_id: UUID): current_user, _ = current_account_with_tenant() conversation_id_str = str(conversation_id) @@ -207,7 +207,7 @@ class ChatConversationApi(Resource): @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) @edit_permission_required - def get(self, app_model): + def get(self, app_model: App): current_user, _ = current_account_with_tenant() args = ChatConversationQuery.model_validate(request.args.to_dict(flat=True)) @@ -318,7 +318,7 @@ class ChatConversationDetailApi(Resource): @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) @edit_permission_required - def get(self, app_model, conversation_id: UUID): + def get(self, app_model: App, conversation_id: UUID): conversation_id_str = str(conversation_id) return ConversationDetailResponse.model_validate( _get_conversation(app_model, conversation_id_str), from_attributes=True @@ -335,7 +335,7 @@ class ChatConversationDetailApi(Resource): @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) @account_initialization_required @edit_permission_required - def delete(self, app_model, conversation_id: UUID): + def delete(self, app_model: App, conversation_id: UUID): current_user, _ = current_account_with_tenant() conversation_id_str = str(conversation_id) diff --git a/api/controllers/console/app/conversation_variables.py b/api/controllers/console/app/conversation_variables.py index 5951f7405a..beaef48275 100644 --- a/api/controllers/console/app/conversation_variables.py +++ b/api/controllers/console/app/conversation_variables.py @@ -19,7 +19,7 @@ from fields.base import ResponseModel from libs.helper import to_timestamp from libs.login import login_required from models import ConversationVariable -from models.model import AppMode +from models.model import App, AppMode class ConversationVariablesQuery(BaseModel): @@ -94,7 +94,7 @@ class ConversationVariablesApi(Resource): @login_required @account_initialization_required @get_app_model(mode=AppMode.ADVANCED_CHAT) - def get(self, app_model): + def get(self, app_model: App): args = ConversationVariablesQuery.model_validate(request.args.to_dict(flat=True)) stmt = ( diff --git a/api/controllers/console/app/mcp_server.py b/api/controllers/console/app/mcp_server.py index a5259527ea..e5ef15c3e1 100644 --- a/api/controllers/console/app/mcp_server.py +++ b/api/controllers/console/app/mcp_server.py @@ -17,7 +17,7 @@ from fields.base import ResponseModel from libs.helper import to_timestamp from libs.login import current_account_with_tenant, login_required from models.enums import AppMCPServerStatus -from models.model import AppMCPServer +from models.model import App, AppMCPServer class MCPServerCreatePayload(BaseModel): @@ -73,7 +73,7 @@ class AppMCPServerController(Resource): @account_initialization_required @setup_required @get_app_model - def get(self, app_model): + def get(self, app_model: App): server = db.session.scalar(select(AppMCPServer).where(AppMCPServer.app_id == app_model.id).limit(1)) if server is None: return {} @@ -92,7 +92,7 @@ class AppMCPServerController(Resource): @login_required @setup_required @edit_permission_required - def post(self, app_model): + def post(self, app_model: App): _, current_tenant_id = current_account_with_tenant() payload = MCPServerCreatePayload.model_validate(console_ns.payload or {}) @@ -127,7 +127,7 @@ class AppMCPServerController(Resource): @setup_required @account_initialization_required @edit_permission_required - def put(self, app_model): + def put(self, app_model: App): payload = MCPServerUpdatePayload.model_validate(console_ns.payload or {}) server = db.session.get(AppMCPServer, payload.id) if not server: diff --git a/api/controllers/console/app/message.py b/api/controllers/console/app/message.py index 7445fed86c..15b3437bf9 100644 --- a/api/controllers/console/app/message.py +++ b/api/controllers/console/app/message.py @@ -45,7 +45,7 @@ from libs.helper import to_timestamp, uuid_value from libs.infinite_scroll_pagination import InfiniteScrollPagination from libs.login import current_account_with_tenant, login_required from models.enums import FeedbackFromSource, FeedbackRating -from models.model import AppMode, Conversation, Message, MessageAnnotation, MessageFeedback +from models.model import App, AppMode, Conversation, Message, MessageAnnotation, MessageFeedback from services.errors.conversation import ConversationNotExistsError from services.errors.message import MessageNotExistsError, SuggestedQuestionsAfterAnswerDisabledError from services.message_service import MessageService, attach_message_extra_contents @@ -180,7 +180,7 @@ class ChatMessageListApi(Resource): @setup_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) @edit_permission_required - def get(self, app_model): + def get(self, app_model: App): args = ChatMessagesQuery.model_validate(request.args.to_dict()) conversation = db.session.scalar( @@ -257,7 +257,7 @@ class MessageFeedbackApi(Resource): @setup_required @login_required @account_initialization_required - def post(self, app_model): + def post(self, app_model: App): current_user, _ = current_account_with_tenant() args = MessageFeedbackPayload.model_validate(console_ns.payload) @@ -314,7 +314,7 @@ class MessageAnnotationCountApi(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): count = db.session.scalar( select(func.count(MessageAnnotation.id)).where(MessageAnnotation.app_id == app_model.id) ) @@ -337,7 +337,7 @@ class MessageSuggestedQuestionApi(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) - def get(self, app_model, message_id: UUID): + def get(self, app_model: App, message_id: UUID): current_user, _ = current_account_with_tenant() message_id_str = str(message_id) @@ -379,7 +379,7 @@ class MessageFeedbackExportApi(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): args = FeedbackExportQuery.model_validate(request.args.to_dict()) # Import the service function @@ -417,7 +417,7 @@ class MessageApi(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model, message_id: UUID): + def get(self, app_model: App, message_id: UUID): message_id_str = str(message_id) message = db.session.scalar( diff --git a/api/controllers/console/app/model_config.py b/api/controllers/console/app/model_config.py index 1869cbf5f6..a893b66911 100644 --- a/api/controllers/console/app/model_config.py +++ b/api/controllers/console/app/model_config.py @@ -16,7 +16,7 @@ from events.app_event import app_model_config_was_updated from extensions.ext_database import db from libs.datetime_utils import naive_utc_now from libs.login import current_account_with_tenant, login_required -from models.model import AppMode, AppModelConfig +from models.model import App, AppMode, AppModelConfig from services.app_model_config_service import AppModelConfigService @@ -52,7 +52,7 @@ class ModelConfigResource(Resource): @edit_permission_required @account_initialization_required @get_app_model(mode=[AppMode.AGENT_CHAT, AppMode.CHAT, AppMode.COMPLETION]) - def post(self, app_model): + def post(self, app_model: App): """Modify app model config""" current_user, current_tenant_id = current_account_with_tenant() # validate config diff --git a/api/controllers/console/app/site.py b/api/controllers/console/app/site.py index 9991d78d94..ca7f194a35 100644 --- a/api/controllers/console/app/site.py +++ b/api/controllers/console/app/site.py @@ -20,6 +20,7 @@ from fields.base import ResponseModel from libs.datetime_utils import naive_utc_now from libs.login import current_account_with_tenant, login_required from models import Site +from models.model import App class AppSiteUpdatePayload(BaseModel): @@ -84,7 +85,7 @@ class AppSite(Resource): @edit_permission_required @account_initialization_required @get_app_model - def post(self, app_model): + def post(self, app_model: App): args = AppSiteUpdatePayload.model_validate(console_ns.payload or {}) current_user, _ = current_account_with_tenant() site = db.session.scalar(select(Site).where(Site.app_id == app_model.id).limit(1)) @@ -133,7 +134,7 @@ class AppSiteAccessTokenReset(Resource): @is_admin_or_owner_required @account_initialization_required @get_app_model - def post(self, app_model): + def post(self, app_model: App): current_user, _ = current_account_with_tenant() site = db.session.scalar(select(Site).where(Site.app_id == app_model.id).limit(1)) diff --git a/api/controllers/console/app/statistic.py b/api/controllers/console/app/statistic.py index d23b2837c9..dd3cf273a2 100644 --- a/api/controllers/console/app/statistic.py +++ b/api/controllers/console/app/statistic.py @@ -15,6 +15,7 @@ from libs.datetime_utils import parse_time_range from libs.helper import convert_datetime_to_date from libs.login import current_account_with_tenant, login_required from models import AppMode +from models.model import App class StatisticTimeRangeQuery(BaseModel): @@ -47,7 +48,7 @@ class DailyMessageStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -61,8 +62,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -104,7 +109,7 @@ class DailyConversationStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -118,8 +123,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -160,7 +169,7 @@ class DailyTerminalsStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -174,8 +183,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -217,7 +230,7 @@ class DailyTokenCostStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -232,8 +245,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -277,7 +294,7 @@ class AverageSessionInteractionStatistic(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT]) - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -299,8 +316,12 @@ FROM WHERE c.app_id = :app_id AND m.invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -353,7 +374,7 @@ class UserSatisfactionRateStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -371,8 +392,12 @@ LEFT JOIN WHERE m.app_id = :app_id AND m.invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -419,7 +444,7 @@ class AverageResponseTimeStatistic(Resource): @login_required @account_initialization_required @get_app_model(mode=AppMode.COMPLETION) - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -433,8 +458,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) @@ -476,7 +505,7 @@ class TokensPerSecondStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = StatisticTimeRangeQuery.model_validate(request.args.to_dict(flat=True)) @@ -492,8 +521,12 @@ FROM WHERE app_id = :app_id AND invoke_from != :invoke_from""" - arg_dict = {"tz": account.timezone, "app_id": app_model.id, "invoke_from": InvokeFrom.DEBUGGER} assert account.timezone is not None + arg_dict: dict[str, object] = { + "tz": account.timezone, + "app_id": app_model.id, + "invoke_from": InvokeFrom.DEBUGGER, + } try: start_datetime_utc, end_datetime_utc = parse_time_range(args.start, args.end, account.timezone) diff --git a/api/controllers/console/app/workflow_statistic.py b/api/controllers/console/app/workflow_statistic.py index ca899d8784..7b5a628561 100644 --- a/api/controllers/console/app/workflow_statistic.py +++ b/api/controllers/console/app/workflow_statistic.py @@ -11,7 +11,7 @@ from extensions.ext_database import db from libs.datetime_utils import parse_time_range from libs.login import current_account_with_tenant, login_required from models.enums import WorkflowRunTriggeredFrom -from models.model import AppMode +from models.model import App, AppMode from repositories.factory import DifyAPIRepositoryFactory @@ -46,7 +46,7 @@ class WorkflowDailyRunsStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = WorkflowStatisticQuery.model_validate(request.args.to_dict(flat=True)) @@ -86,7 +86,7 @@ class WorkflowDailyTerminalsStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = WorkflowStatisticQuery.model_validate(request.args.to_dict(flat=True)) @@ -126,7 +126,7 @@ class WorkflowDailyTokenCostStatistic(Resource): @setup_required @login_required @account_initialization_required - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = WorkflowStatisticQuery.model_validate(request.args.to_dict(flat=True)) @@ -166,7 +166,7 @@ class WorkflowAverageAppInteractionStatistic(Resource): @login_required @account_initialization_required @get_app_model(mode=[AppMode.WORKFLOW]) - def get(self, app_model): + def get(self, app_model: App): account, _ = current_account_with_tenant() args = WorkflowStatisticQuery.model_validate(request.args.to_dict(flat=True))