mirror of
https://github.com/langgenius/dify.git
synced 2026-05-02 15:17:39 +08:00
fix: using latest plugin as the dep of DSL under 0.1.15
This commit is contained in:
parent
3e9c3d0bb7
commit
8d5a8f0153
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
from typing import Optional
|
from typing import Mapping, Optional
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
@ -256,6 +256,16 @@ class AppDslService:
|
|||||||
check_dependencies_pending_data = None
|
check_dependencies_pending_data = None
|
||||||
if dependencies:
|
if dependencies:
|
||||||
check_dependencies_pending_data = [PluginDependency.model_validate(d) for d in dependencies]
|
check_dependencies_pending_data = [PluginDependency.model_validate(d) for d in dependencies]
|
||||||
|
elif imported_version <= "0.1.5":
|
||||||
|
if "workflow" in data:
|
||||||
|
graph = data.get("workflow", {}).get("graph", {})
|
||||||
|
dependencies_list = self._extract_dependencies_from_workflow_graph(graph)
|
||||||
|
else:
|
||||||
|
dependencies_list = self._extract_dependencies_from_model_config(data.get("model_config", {}))
|
||||||
|
|
||||||
|
check_dependencies_pending_data = DependenciesAnalysisService.generate_latest_dependencies(
|
||||||
|
dependencies_list
|
||||||
|
)
|
||||||
|
|
||||||
# Create or update app
|
# Create or update app
|
||||||
app = self._create_or_update_app(
|
app = self._create_or_update_app(
|
||||||
@ -558,7 +568,7 @@ class AppDslService:
|
|||||||
raise ValueError("Missing app configuration, please check.")
|
raise ValueError("Missing app configuration, please check.")
|
||||||
|
|
||||||
export_data["model_config"] = app_model_config.to_dict()
|
export_data["model_config"] = app_model_config.to_dict()
|
||||||
dependencies = cls._extract_dependencies_from_model_config(app_model_config)
|
dependencies = cls._extract_dependencies_from_model_config(app_model_config.to_dict())
|
||||||
export_data["dependencies"] = [
|
export_data["dependencies"] = [
|
||||||
jsonable_encoder(d.model_dump())
|
jsonable_encoder(d.model_dump())
|
||||||
for d in DependenciesAnalysisService.generate_dependencies(
|
for d in DependenciesAnalysisService.generate_dependencies(
|
||||||
@ -574,6 +584,16 @@ class AppDslService:
|
|||||||
:return: dependencies list format like ["langgenius/google"]
|
:return: dependencies list format like ["langgenius/google"]
|
||||||
"""
|
"""
|
||||||
graph = workflow.graph_dict
|
graph = workflow.graph_dict
|
||||||
|
dependencies = cls._extract_dependencies_from_workflow_graph(graph)
|
||||||
|
return dependencies
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _extract_dependencies_from_workflow_graph(cls, graph: Mapping) -> list[str]:
|
||||||
|
"""
|
||||||
|
Extract dependencies from workflow graph
|
||||||
|
:param graph: Workflow graph
|
||||||
|
:return: dependencies list format like ["langgenius/google"]
|
||||||
|
"""
|
||||||
dependencies = []
|
dependencies = []
|
||||||
for node in graph.get("nodes", []):
|
for node in graph.get("nodes", []):
|
||||||
try:
|
try:
|
||||||
@ -647,24 +667,24 @@ class AppDslService:
|
|||||||
return dependencies
|
return dependencies
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _extract_dependencies_from_model_config(cls, model_config: AppModelConfig) -> list[str]:
|
def _extract_dependencies_from_model_config(cls, model_config: Mapping) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Extract dependencies from model config
|
Extract dependencies from model config
|
||||||
:param model_config: AppModelConfig instance
|
:param model_config: model config dict
|
||||||
:return: dependencies list format like ["langgenius/google:1.0.0@abcdef1234567890"]
|
:return: dependencies list format like ["langgenius/google"]
|
||||||
"""
|
"""
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# completion model
|
# completion model
|
||||||
model_dict = model_config.model_dict
|
model_dict = model_config.get("model", {})
|
||||||
if model_dict:
|
if model_dict:
|
||||||
dependencies.append(
|
dependencies.append(
|
||||||
DependenciesAnalysisService.analyze_model_provider_dependency(model_dict.get("provider", ""))
|
DependenciesAnalysisService.analyze_model_provider_dependency(model_dict.get("provider", ""))
|
||||||
)
|
)
|
||||||
|
|
||||||
# reranking model
|
# reranking model
|
||||||
dataset_configs = model_config.dataset_configs_dict
|
dataset_configs = model_config.get("dataset_configs", {})
|
||||||
if dataset_configs:
|
if dataset_configs:
|
||||||
for dataset_config in dataset_configs.get("datasets", {}).get("datasets", []):
|
for dataset_config in dataset_configs.get("datasets", {}).get("datasets", []):
|
||||||
if dataset_config.get("reranking_model"):
|
if dataset_config.get("reranking_model"):
|
||||||
@ -677,7 +697,7 @@ class AppDslService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# tools
|
# tools
|
||||||
agent_configs = model_config.agent_mode_dict
|
agent_configs = model_config.get("agent_mode", {})
|
||||||
if agent_configs:
|
if agent_configs:
|
||||||
for agent_config in agent_configs.get("tools", []):
|
for agent_config in agent_configs.get("tools", []):
|
||||||
dependencies.append(
|
dependencies.append(
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
from core.helper import marketplace
|
||||||
from core.plugin.entities.plugin import GenericProviderID, PluginDependency, PluginInstallationSource
|
from core.plugin.entities.plugin import GenericProviderID, PluginDependency, PluginInstallationSource
|
||||||
from core.plugin.manager.plugin import PluginInstallationManager
|
from core.plugin.manager.plugin import PluginInstallationManager
|
||||||
|
|
||||||
@ -98,3 +99,18 @@ class DependenciesAnalysisService:
|
|||||||
raise ValueError(f"Unknown plugin source: {plugin.source}")
|
raise ValueError(f"Unknown plugin source: {plugin.source}")
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def generate_latest_dependencies(cls, dependencies: list[str]) -> list[PluginDependency]:
|
||||||
|
"""
|
||||||
|
Generate the latest version of dependencies
|
||||||
|
"""
|
||||||
|
dependencies = list(set(dependencies))
|
||||||
|
deps = marketplace.batch_fetch_plugin_manifests(dependencies)
|
||||||
|
return [
|
||||||
|
PluginDependency(
|
||||||
|
type=PluginDependency.Type.Marketplace,
|
||||||
|
value=PluginDependency.Marketplace(marketplace_plugin_unique_identifier=dep.latest_package_identifier),
|
||||||
|
)
|
||||||
|
for dep in deps
|
||||||
|
]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user