25 lines
1.1 KiB
Go
25 lines
1.1 KiB
Go
package workflow
|
||
|
||
import (
|
||
"ai_scheduler/internal/config"
|
||
"ai_scheduler/internal/domain/workflow/runtime"
|
||
"ai_scheduler/internal/pkg/utils_ollama"
|
||
|
||
toolManager "ai_scheduler/internal/domain/tools"
|
||
|
||
"github.com/google/wire"
|
||
)
|
||
|
||
var ProviderSetWorkflow = wire.NewSet(NewRegistry)
|
||
|
||
// NewRegistry 注入共享依赖并注册默认 Registry,确保自注册工作流可被发现
|
||
func NewRegistry(conf *config.Config, llm *utils_ollama.Client) *runtime.Registry {
|
||
// 步骤1:设置运行时依赖(配置与LLM客户端),供工作流工厂在首次实例化时使用;必须在任何调用 Invoke 之前完成,否则会触发 "deps not set"
|
||
runtime.SetDeps(&runtime.Deps{Conf: conf, LLM: llm, ToolManager: toolManager.NewManager(conf)})
|
||
// 步骤2:创建新的工作流注册表;注册表负责按工作流ID惰性实例化并缓存单例实例,保障并发访问下的安全
|
||
r := runtime.NewRegistry()
|
||
// 步骤3:将该注册表设置为全局默认,便于通过 runtime.Default() 获取;自注册的工作流可通过默认注册表被发现并调用
|
||
runtime.SetDefault(r)
|
||
return r
|
||
}
|