初始提交:边缘AI算力机统一AI通讯层
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"github.com/edgeai/gateway/internal/config"
|
||||
)
|
||||
|
||||
// LogicalModelMapping maps logical model names to actual model configurations.
|
||||
type LogicalModelMapping struct {
|
||||
mu sync.RWMutex
|
||||
mapping map[string]*ModelTarget
|
||||
}
|
||||
|
||||
// ModelTarget represents the resolved target for a logical model.
|
||||
type ModelTarget struct {
|
||||
LogicalModel string
|
||||
ActualModel string
|
||||
Provider string
|
||||
Endpoint string
|
||||
ContextWindow int
|
||||
MaxOutputTokens int
|
||||
MaxConcurrency int
|
||||
CancelSupported bool
|
||||
}
|
||||
|
||||
// NewLogicalModelMapping creates a mapping from config.
|
||||
func NewLogicalModelMapping(cfg *config.Config) *LogicalModelMapping {
|
||||
m := &LogicalModelMapping{mapping: make(map[string]*ModelTarget)}
|
||||
for logical, mc := range cfg.Models {
|
||||
m.mapping[logical] = &ModelTarget{
|
||||
LogicalModel: logical,
|
||||
ActualModel: mc.ActualModel,
|
||||
Provider: mc.Provider,
|
||||
Endpoint: mc.Endpoint,
|
||||
ContextWindow: mc.ContextWindow,
|
||||
MaxOutputTokens: mc.MaxOutputTokens,
|
||||
MaxConcurrency: mc.MaxConcurrency,
|
||||
CancelSupported: mc.CancelSupported,
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Resolve returns the ModelTarget for a logical model name.
|
||||
func (m *LogicalModelMapping) Resolve(logicalModel string) (*ModelTarget, error) {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
|
||||
target, ok := m.mapping[logicalModel]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("logical model not found: %s", logicalModel)
|
||||
}
|
||||
return target, nil
|
||||
}
|
||||
|
||||
// List returns all logical model names.
|
||||
func (m *LogicalModelMapping) List() []string {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
|
||||
names := make([]string, 0, len(m.mapping))
|
||||
for n := range m.mapping {
|
||||
names = append(names, n)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
// Update updates the mapping (for config hot-reload).
|
||||
func (m *LogicalModelMapping) Update(cfg *config.Config) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
m.mapping = make(map[string]*ModelTarget)
|
||||
for logical, mc := range cfg.Models {
|
||||
m.mapping[logical] = &ModelTarget{
|
||||
LogicalModel: logical,
|
||||
ActualModel: mc.ActualModel,
|
||||
Provider: mc.Provider,
|
||||
Endpoint: mc.Endpoint,
|
||||
ContextWindow: mc.ContextWindow,
|
||||
MaxOutputTokens: mc.MaxOutputTokens,
|
||||
MaxConcurrency: mc.MaxConcurrency,
|
||||
CancelSupported: mc.CancelSupported,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user