- from collections.abc import Mapping
 - from datetime import datetime
 - from enum import StrEnum
 - from typing import Any, Generic, Optional, TypeVar
 - 
 - from pydantic import BaseModel, ConfigDict, Field
 - 
 - from core.agent.plugin_entities import AgentProviderEntityWithPlugin
 - from core.model_runtime.entities.model_entities import AIModelEntity
 - from core.model_runtime.entities.provider_entities import ProviderEntity
 - from core.plugin.entities.base import BasePluginEntity
 - from core.plugin.entities.plugin import PluginDeclaration
 - from core.tools.entities.common_entities import I18nObject
 - from core.tools.entities.tool_entities import ToolProviderEntityWithPlugin
 - 
 - T = TypeVar("T", bound=(BaseModel | dict | list | bool | str))
 - 
 - 
 - class PluginDaemonBasicResponse(BaseModel, Generic[T]):
 -     """
 -     Basic response from plugin daemon.
 -     """
 - 
 -     code: int
 -     message: str
 -     data: Optional[T]
 - 
 - 
 - class InstallPluginMessage(BaseModel):
 -     """
 -     Message for installing a plugin.
 -     """
 - 
 -     class Event(StrEnum):
 -         Info = "info"
 -         Done = "done"
 -         Error = "error"
 - 
 -     event: Event
 -     data: str
 - 
 - 
 - class PluginToolProviderEntity(BaseModel):
 -     provider: str
 -     plugin_unique_identifier: str
 -     plugin_id: str
 -     declaration: ToolProviderEntityWithPlugin
 - 
 - 
 - class PluginAgentProviderEntity(BaseModel):
 -     provider: str
 -     plugin_unique_identifier: str
 -     plugin_id: str
 -     declaration: AgentProviderEntityWithPlugin
 - 
 - 
 - class PluginBasicBooleanResponse(BaseModel):
 -     """
 -     Basic boolean response from plugin daemon.
 -     """
 - 
 -     result: bool
 -     credentials: dict | None = None
 - 
 - 
 - class PluginModelSchemaEntity(BaseModel):
 -     model_schema: AIModelEntity = Field(description="The model schema.")
 - 
 -     # pydantic configs
 -     model_config = ConfigDict(protected_namespaces=())
 - 
 - 
 - class PluginModelProviderEntity(BaseModel):
 -     id: str = Field(description="ID")
 -     created_at: datetime = Field(description="The created at time of the model provider.")
 -     updated_at: datetime = Field(description="The updated at time of the model provider.")
 -     provider: str = Field(description="The provider of the model.")
 -     tenant_id: str = Field(description="The tenant ID.")
 -     plugin_unique_identifier: str = Field(description="The plugin unique identifier.")
 -     plugin_id: str = Field(description="The plugin ID.")
 -     declaration: ProviderEntity = Field(description="The declaration of the model provider.")
 - 
 - 
 - class PluginTextEmbeddingNumTokensResponse(BaseModel):
 -     """
 -     Response for number of tokens.
 -     """
 - 
 -     num_tokens: list[int] = Field(description="The number of tokens.")
 - 
 - 
 - class PluginLLMNumTokensResponse(BaseModel):
 -     """
 -     Response for number of tokens.
 -     """
 - 
 -     num_tokens: int = Field(description="The number of tokens.")
 - 
 - 
 - class PluginStringResultResponse(BaseModel):
 -     result: str = Field(description="The result of the string.")
 - 
 - 
 - class PluginVoiceEntity(BaseModel):
 -     name: str = Field(description="The name of the voice.")
 -     value: str = Field(description="The value of the voice.")
 - 
 - 
 - class PluginVoicesResponse(BaseModel):
 -     voices: list[PluginVoiceEntity] = Field(description="The result of the voices.")
 - 
 - 
 - class PluginDaemonError(BaseModel):
 -     """
 -     Error from plugin daemon.
 -     """
 - 
 -     error_type: str
 -     message: str
 - 
 - 
 - class PluginDaemonInnerError(Exception):
 -     code: int
 -     message: str
 - 
 -     def __init__(self, code: int, message: str):
 -         self.code = code
 -         self.message = message
 - 
 - 
 - class PluginInstallTaskStatus(StrEnum):
 -     Pending = "pending"
 -     Running = "running"
 -     Success = "success"
 -     Failed = "failed"
 - 
 - 
 - class PluginInstallTaskPluginStatus(BaseModel):
 -     plugin_unique_identifier: str = Field(description="The plugin unique identifier of the install task.")
 -     plugin_id: str = Field(description="The plugin ID of the install task.")
 -     status: PluginInstallTaskStatus = Field(description="The status of the install task.")
 -     message: str = Field(description="The message of the install task.")
 -     icon: str = Field(description="The icon of the plugin.")
 -     labels: I18nObject = Field(description="The labels of the plugin.")
 - 
 - 
 - class PluginInstallTask(BasePluginEntity):
 -     status: PluginInstallTaskStatus = Field(description="The status of the install task.")
 -     total_plugins: int = Field(description="The total number of plugins to be installed.")
 -     completed_plugins: int = Field(description="The number of plugins that have been installed.")
 -     plugins: list[PluginInstallTaskPluginStatus] = Field(description="The status of the plugins.")
 - 
 - 
 - class PluginInstallTaskStartResponse(BaseModel):
 -     all_installed: bool = Field(description="Whether all plugins are installed.")
 -     task_id: str = Field(description="The ID of the install task.")
 - 
 - 
 - class PluginUploadResponse(BaseModel):
 -     unique_identifier: str = Field(description="The unique identifier of the plugin.")
 -     manifest: PluginDeclaration
 - 
 - 
 - class PluginOAuthAuthorizationUrlResponse(BaseModel):
 -     authorization_url: str = Field(description="The URL of the authorization.")
 - 
 - 
 - class PluginOAuthCredentialsResponse(BaseModel):
 -     credentials: Mapping[str, Any] = Field(description="The credentials of the OAuth.")
 
 
  |