mirror of
https://github.com/langgenius/dify.git
synced 2026-02-24 11:04:11 -05:00
70 lines
1.4 KiB
Python
70 lines
1.4 KiB
Python
from dataclasses import dataclass, field
|
|
from enum import StrEnum
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from .assets import AssetItem
|
|
|
|
|
|
class ToolType(StrEnum):
|
|
MCP = "mcp"
|
|
BUILTIN = "builtin"
|
|
|
|
|
|
class ToolFieldConfig(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
id: str
|
|
value: Any
|
|
auto: bool = False
|
|
|
|
|
|
class ToolConfiguration(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
fields: list[ToolFieldConfig] = Field(default_factory=list)
|
|
|
|
|
|
class ToolDefinition(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
type: ToolType
|
|
credential_id: str | None = None
|
|
configuration: ToolConfiguration = Field(default_factory=ToolConfiguration)
|
|
|
|
|
|
class ToolReference(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
provider: str
|
|
tool_name: str
|
|
uuid: str
|
|
raw: str
|
|
|
|
|
|
class FileReference(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
source: str
|
|
uuid: str
|
|
raw: str
|
|
|
|
|
|
class SkillMetadata(BaseModel):
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
tools: dict[str, ToolDefinition] = Field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class SkillAsset(AssetItem):
|
|
storage_key: str
|
|
metadata: SkillMetadata
|
|
content: str
|
|
tool_references: list[ToolReference] = field(default_factory=list)
|
|
file_references: list[FileReference] = field(default_factory=list)
|
|
|
|
def get_storage_key(self) -> str:
|
|
return self.storage_key
|