Changeset 0.29.0 (#195)
This commit is contained in:
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
capspkg "git.gobha.me/xcaliber/chat-switchboard/capabilities"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/auth"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/database"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/health"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/models"
|
||||
"git.gobha.me/xcaliber/chat-switchboard/store"
|
||||
@@ -90,10 +89,11 @@ func (h *ModelHandler) buildHealthMap(ctx context.Context) map[string]models.Pro
|
||||
}
|
||||
|
||||
// ResolveModelCaps is the canonical capability resolver for any model.
|
||||
func ResolveModelCaps(c *gin.Context, modelID, configID string) models.ModelCapabilities {
|
||||
// v0.29.0: accepts CatalogStore instead of using database.DB directly.
|
||||
func ResolveModelCaps(catalog store.CatalogStore, modelID, configID string) models.ModelCapabilities {
|
||||
// 1. Exact match: model_id + provider_config_id
|
||||
if configID != "" {
|
||||
caps, ok := capsFromCatalog(modelID, configID)
|
||||
caps, ok := capsFromCatalog(catalog, modelID, configID)
|
||||
if ok {
|
||||
caps.MaxOutputTokens = capspkg.ResolveMaxOutput(modelID, caps)
|
||||
return caps
|
||||
@@ -101,7 +101,7 @@ func ResolveModelCaps(c *gin.Context, modelID, configID string) models.ModelCapa
|
||||
}
|
||||
|
||||
// 2. Any provider: same model_id, any config
|
||||
caps, ok := capsFromCatalog(modelID, "")
|
||||
caps, ok := capsFromCatalog(catalog, modelID, "")
|
||||
if ok {
|
||||
caps.MaxOutputTokens = capspkg.ResolveMaxOutput(modelID, caps)
|
||||
return caps
|
||||
@@ -114,23 +114,17 @@ func ResolveModelCaps(c *gin.Context, modelID, configID string) models.ModelCapa
|
||||
}
|
||||
|
||||
// capsFromCatalog looks up capabilities from the model_catalog table.
|
||||
func capsFromCatalog(modelID, configID string) (models.ModelCapabilities, bool) {
|
||||
if database.DB == nil {
|
||||
func capsFromCatalog(catalog store.CatalogStore, modelID, configID string) (models.ModelCapabilities, bool) {
|
||||
if catalog == nil {
|
||||
return models.ModelCapabilities{}, false
|
||||
}
|
||||
|
||||
var capsJSON []byte
|
||||
var err error
|
||||
if configID != "" {
|
||||
err = database.DB.QueryRow(database.Q(`
|
||||
SELECT capabilities FROM model_catalog
|
||||
WHERE model_id = $1 AND provider_config_id = $2
|
||||
`), modelID, configID).Scan(&capsJSON)
|
||||
capsJSON, err = catalog.GetCapabilities(context.Background(), modelID, configID)
|
||||
} else {
|
||||
err = database.DB.QueryRow(database.Q(`
|
||||
SELECT capabilities FROM model_catalog
|
||||
WHERE model_id = $1 ORDER BY last_synced_at DESC LIMIT 1
|
||||
`), modelID).Scan(&capsJSON)
|
||||
capsJSON, err = catalog.GetCapabilitiesAny(context.Background(), modelID)
|
||||
}
|
||||
if err != nil || len(capsJSON) == 0 {
|
||||
return models.ModelCapabilities{}, false
|
||||
|
||||
Reference in New Issue
Block a user