@ -1,5 +1,6 @@
import logging
import uuid
from collections . abc import Mapping
from enum import StrEnum
from typing import Optional
from urllib . parse import urlparse
@ -256,6 +257,16 @@ class AppDslService:
check_dependencies_pending_data = None
if 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
app = self . _create_or_update_app (
@ -558,7 +569,7 @@ class AppDslService:
raise ValueError ( " Missing app configuration, please check. " )
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 " ] = [
jsonable_encoder ( d . model_dump ( ) )
for d in DependenciesAnalysisService . generate_dependencies (
@ -574,6 +585,16 @@ class AppDslService:
: return : dependencies list format like [ " langgenius/google " ]
"""
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 = [ ]
for node in graph . get ( " nodes " , [ ] ) :
try :
@ -647,24 +668,24 @@ class AppDslService:
return dependencies
@classmethod
def _extract_dependencies_from_model_config ( cls , model_config : AppModelConfi g) - > list [ str ] :
def _extract_dependencies_from_model_config ( cls , model_config : Mappin g) - > list [ str ] :
"""
Extract dependencies from model config
: param model_config : AppModelConfig instance
: return : dependencies list format like [ " langgenius/google :1.0.0@abcdef1234567890 " ]
: param model_config : model config dict
: return : dependencies list format like [ " langgenius/google " ]
"""
dependencies = [ ]
try :
# completion model
model_dict = model_config . model_dict
model_dict = model_config . get( " model " , { } )
if model_dict :
dependencies . append (
DependenciesAnalysisService . analyze_model_provider_dependency ( model_dict . get ( " provider " , " " ) )
)
# reranking model
dataset_configs = model_config . dataset_configs_dict
dataset_configs = model_config . get( " dataset_configs " , { } )
if dataset_configs :
for dataset_config in dataset_configs . get ( " datasets " , { } ) . get ( " datasets " , [ ] ) :
if dataset_config . get ( " reranking_model " ) :
@ -677,7 +698,7 @@ class AppDslService:
)
# tools
agent_configs = model_config . agent_mode_dict
agent_configs = model_config . get( " agent_mode " , { } )
if agent_configs :
for agent_config in agent_configs . get ( " tools " , [ ] ) :
dependencies . append (