- 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.
170 lines
3.9 KiB
Go
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
|
|
}
|