mirror of
https://github.com/langgenius/dify.git
synced 2025-11-08 23:43:20 +00:00
60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
|
|
"""Provider ID entities for plugin system."""
|
||
|
|
|
||
|
|
import re
|
||
|
|
|
||
|
|
from werkzeug.exceptions import NotFound
|
||
|
|
|
||
|
|
|
||
|
|
class GenericProviderID:
|
||
|
|
organization: str
|
||
|
|
plugin_name: str
|
||
|
|
provider_name: str
|
||
|
|
is_hardcoded: bool
|
||
|
|
|
||
|
|
def to_string(self) -> str:
|
||
|
|
return str(self)
|
||
|
|
|
||
|
|
def __str__(self) -> str:
|
||
|
|
return f"{self.organization}/{self.plugin_name}/{self.provider_name}"
|
||
|
|
|
||
|
|
def __init__(self, value: str, is_hardcoded: bool = False) -> None:
|
||
|
|
if not value:
|
||
|
|
raise NotFound("plugin not found, please add plugin")
|
||
|
|
# check if the value is a valid plugin id with format: $organization/$plugin_name/$provider_name
|
||
|
|
if not re.match(r"^[a-z0-9_-]+\/[a-z0-9_-]+\/[a-z0-9_-]+$", value):
|
||
|
|
# check if matches [a-z0-9_-]+, if yes, append with langgenius/$value/$value
|
||
|
|
if re.match(r"^[a-z0-9_-]+$", value):
|
||
|
|
value = f"langgenius/{value}/{value}"
|
||
|
|
else:
|
||
|
|
raise ValueError(f"Invalid plugin id {value}")
|
||
|
|
|
||
|
|
self.organization, self.plugin_name, self.provider_name = value.split("/")
|
||
|
|
self.is_hardcoded = is_hardcoded
|
||
|
|
|
||
|
|
def is_langgenius(self) -> bool:
|
||
|
|
return self.organization == "langgenius"
|
||
|
|
|
||
|
|
@property
|
||
|
|
def plugin_id(self) -> str:
|
||
|
|
return f"{self.organization}/{self.plugin_name}"
|
||
|
|
|
||
|
|
|
||
|
|
class ModelProviderID(GenericProviderID):
|
||
|
|
def __init__(self, value: str, is_hardcoded: bool = False) -> None:
|
||
|
|
super().__init__(value, is_hardcoded)
|
||
|
|
if self.organization == "langgenius" and self.provider_name == "google":
|
||
|
|
self.plugin_name = "gemini"
|
||
|
|
|
||
|
|
|
||
|
|
class ToolProviderID(GenericProviderID):
|
||
|
|
def __init__(self, value: str, is_hardcoded: bool = False) -> None:
|
||
|
|
super().__init__(value, is_hardcoded)
|
||
|
|
if self.organization == "langgenius":
|
||
|
|
if self.provider_name in ["jina", "siliconflow", "stepfun", "gitee_ai"]:
|
||
|
|
self.plugin_name = f"{self.provider_name}_tool"
|
||
|
|
|
||
|
|
|
||
|
|
class DatasourceProviderID(GenericProviderID):
|
||
|
|
def __init__(self, value: str, is_hardcoded: bool = False) -> None:
|
||
|
|
super().__init__(value, is_hardcoded)
|