mirror of
https://github.com/Warky-Devs/vecna.git
synced 2026-05-05 01:26:58 +00:00
feat(server): add support for extra maps in adapter configuration
* Introduced ExtraMapConfig to allow multiple adapter configurations. * Updated server and handler to utilize extra maps for routing. * Added dashboard handler for metrics visualization.
This commit is contained in:
@@ -14,12 +14,28 @@ import (
|
||||
"github.com/Warky-Devs/vecna.git/pkg/embedclient"
|
||||
)
|
||||
|
||||
// ExtraMap pairs a dimension adapter with an optional forward-target override.
|
||||
type ExtraMap struct {
|
||||
Adapter adapter.Adapter
|
||||
ForwardTarget string // named target in forward.targets; empty = model-based resolution
|
||||
}
|
||||
|
||||
// handler holds shared dependencies for all HTTP handlers.
|
||||
type handler struct {
|
||||
cfg *config.Config
|
||||
clients map[string]embedclient.Client
|
||||
adapter adapter.Adapter
|
||||
logger *zap.Logger
|
||||
cfg *config.Config
|
||||
clients map[string]embedclient.Client
|
||||
adapter adapter.Adapter
|
||||
extraMaps map[string]ExtraMap
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// resolveExtraMap returns the ExtraMap for the named extra_map entry.
|
||||
func (h *handler) resolveExtraMap(name string) (ExtraMap, error) {
|
||||
em, ok := h.extraMaps[name]
|
||||
if !ok {
|
||||
return ExtraMap{}, fmt.Errorf("extra_map %q not configured", name)
|
||||
}
|
||||
return em, nil
|
||||
}
|
||||
|
||||
// resolveClient selects the embed client for the given model name.
|
||||
@@ -32,12 +48,24 @@ func (h *handler) resolveClient(model string) (embedclient.Client, string, strin
|
||||
name := h.cfg.Forward.Default
|
||||
c, ok := h.clients[name]
|
||||
if !ok {
|
||||
// No configured client — return a nil-safe error client
|
||||
return &errClient{err: fmt.Errorf("no client configured for model %q and no default", model)}, name, ""
|
||||
}
|
||||
return c, name, firstEndpointURL(h.cfg, name)
|
||||
}
|
||||
|
||||
// resolveClientOverride selects the client for targetOverride when set,
|
||||
// otherwise falls back to model-based resolution.
|
||||
func (h *handler) resolveClientOverride(targetOverride, model string) (embedclient.Client, string, string) {
|
||||
if targetOverride == "" {
|
||||
return h.resolveClient(model)
|
||||
}
|
||||
c, ok := h.clients[targetOverride]
|
||||
if !ok {
|
||||
return &errClient{err: fmt.Errorf("extra_map forward_target %q not configured", targetOverride)}, targetOverride, ""
|
||||
}
|
||||
return c, targetOverride, firstEndpointURL(h.cfg, targetOverride)
|
||||
}
|
||||
|
||||
func firstEndpointURL(cfg *config.Config, targetName string) string {
|
||||
t, ok := cfg.Forward.Targets[targetName]
|
||||
if !ok || len(t.Endpoints) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user