yao/llmprovider/process.go
Max 934424f9ea feat(load): add initialization and reloading for Setting Registry
- Implemented initialization for the Setting Registry during the Load process.
- Added reload functionality to refresh the Setting Registry as needed.
- Enhanced error handling to capture and report issues during initialization and reloading.
2026-04-28 15:08:22 +08:00

170 lines
3.9 KiB
Go

package llmprovider
import (
"encoding/json"
"github.com/yaoapp/gou/process"
"github.com/yaoapp/kun/exception"
)
func init() {
process.RegisterGroup("llmprovider", map[string]process.Handler{
"get": ProcessGet,
"getmasked": ProcessGetMasked,
"create": ProcessCreate,
"update": ProcessUpdate,
"delete": ProcessDelete,
"list": ProcessList,
"getsetting": ProcessGetSetting,
"getpresets": ProcessGetPresets,
"getpreset": ProcessGetPreset,
})
}
func requireGlobal() {
if Global == nil {
exception.New("LLM Provider Registry not initialized", 500).Throw()
}
}
// ProcessGet retrieves a provider by key.
// Args[0] string: provider key
func ProcessGet(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
key := p.ArgsString(0)
provider, err := Global.Get(key)
if err != nil {
exception.New(err.Error(), 404).Throw()
}
return provider
}
// ProcessGetMasked retrieves a provider with API key masked.
// Args[0] string: provider key
func ProcessGetMasked(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
key := p.ArgsString(0)
provider, err := Global.GetMasked(key)
if err != nil {
exception.New(err.Error(), 404).Throw()
}
return provider
}
// ProcessCreate adds a new provider.
// Args[0] map: Provider data
func ProcessCreate(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
var provider Provider
raw, err := json.Marshal(p.Args[0])
if err != nil {
exception.New("invalid provider data: "+err.Error(), 400).Throw()
}
if err := json.Unmarshal(raw, &provider); err != nil {
exception.New("invalid provider data: "+err.Error(), 400).Throw()
}
result, err := Global.Create(&provider)
if err != nil {
exception.New(err.Error(), 400).Throw()
}
return result
}
// ProcessUpdate modifies an existing provider.
// Args[0] string: provider key
// Args[1] map: Provider data
func ProcessUpdate(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(2)
key := p.ArgsString(0)
var provider Provider
raw, err := json.Marshal(p.Args[1])
if err != nil {
exception.New("invalid provider data: "+err.Error(), 400).Throw()
}
if err := json.Unmarshal(raw, &provider); err != nil {
exception.New("invalid provider data: "+err.Error(), 400).Throw()
}
result, err := Global.Update(key, &provider)
if err != nil {
exception.New(err.Error(), 400).Throw()
}
return result
}
// ProcessDelete removes a provider by key.
// Args[0] string: provider key
func ProcessDelete(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
key := p.ArgsString(0)
if err := Global.Delete(key); err != nil {
exception.New(err.Error(), 404).Throw()
}
return nil
}
// ProcessList returns providers matching a filter.
// Args[0] map: ProviderFilter (optional)
func ProcessList(p *process.Process) interface{} {
requireGlobal()
var filter *ProviderFilter
if len(p.Args) > 0 && p.Args[0] != nil {
raw, err := json.Marshal(p.Args[0])
if err == nil {
var f ProviderFilter
if json.Unmarshal(raw, &f) == nil {
filter = &f
}
}
}
result, err := Global.List(filter)
if err != nil {
exception.New(err.Error(), 500).Throw()
}
return result
}
// ProcessGetSetting returns the runtime connector setting map.
// Args[0] string: provider key
func ProcessGetSetting(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
key := p.ArgsString(0)
setting, err := Global.GetSetting(key)
if err != nil {
exception.New(err.Error(), 404).Throw()
}
return setting
}
// ProcessGetPresets returns all provider presets.
func ProcessGetPresets(p *process.Process) interface{} {
return GetPresets()
}
// ProcessGetPreset returns a single preset by key.
// Args[0] string: preset key
func ProcessGetPreset(p *process.Process) interface{} {
p.ValidateArgNums(1)
key := p.ArgsString(0)
preset := GetPreset(key)
if preset == nil {
exception.New("preset "+key+" not found", 404).Throw()
}
return preset
}