fix: restrict Model Pricing table to core providers and actual usage
Filtered registry iteration to only include openai, gemini, deepseek, and grok. Improved used_only logic to match specific (model, provider) pairs from logs.
This commit is contained in:
@@ -954,10 +954,13 @@ func (s *Server) handleTestProvider(c *gin.Context) {
|
||||
func (s *Server) handleGetModels(c *gin.Context) {
|
||||
usedOnly := c.Query("used_only") == "true"
|
||||
|
||||
// Provider name mapping (Registry -> Proxy)
|
||||
providerMap := map[string]string{
|
||||
"google": "gemini",
|
||||
"xai": "grok",
|
||||
// Registry provider normalized name -> Proxy-internal provider ID
|
||||
// This ensures we only show models from YOUR providers.
|
||||
allowedRegistryProviders := map[string]string{
|
||||
"openai": "openai",
|
||||
"google": "gemini",
|
||||
"deepseek": "deepseek",
|
||||
"xai": "grok",
|
||||
}
|
||||
|
||||
// Merge registry models with DB overrides
|
||||
@@ -969,33 +972,35 @@ func (s *Server) handleGetModels(c *gin.Context) {
|
||||
dbMap[m.ID] = m
|
||||
}
|
||||
|
||||
// Fetch set of used model IDs if requested
|
||||
usedModels := make(map[string]bool)
|
||||
// Fetch specific (model, provider) combinations that have been used
|
||||
type modelProvider struct {
|
||||
Model string `db:"model"`
|
||||
Provider string `db:"provider"`
|
||||
}
|
||||
usedPairs := make(map[string]bool)
|
||||
if usedOnly {
|
||||
rows, err := s.database.Queryx("SELECT DISTINCT model FROM llm_requests")
|
||||
var pairs []modelProvider
|
||||
err := s.database.Select(&pairs, "SELECT DISTINCT model, provider FROM llm_requests WHERE status = 'success'")
|
||||
if err == nil {
|
||||
for rows.Next() {
|
||||
var mID string
|
||||
if err := rows.Scan(&mID); err == nil {
|
||||
usedModels[mID] = true
|
||||
}
|
||||
for _, p := range pairs {
|
||||
// Key format: "gpt-4o:openai"
|
||||
usedPairs[fmt.Sprintf("%s:%s", p.Model, p.Provider)] = true
|
||||
}
|
||||
rows.Close()
|
||||
}
|
||||
}
|
||||
|
||||
var result []gin.H
|
||||
if s.registry != nil {
|
||||
for pID, pInfo := range s.registry.Providers {
|
||||
// Normalize provider name for UI
|
||||
uiProvider := pID
|
||||
if mapped, ok := providerMap[pID]; ok {
|
||||
uiProvider = mapped
|
||||
// Only include models from the 4 allowed registry IDs
|
||||
proxyProvider, allowed := allowedRegistryProviders[pID]
|
||||
if !allowed {
|
||||
continue
|
||||
}
|
||||
|
||||
for mID, mMeta := range pInfo.Models {
|
||||
// Filter if used_only requested
|
||||
if usedOnly && !usedModels[mID] {
|
||||
// If usedOnly is true, only include if this exact (model, provider) was logged
|
||||
if usedOnly && !usedPairs[fmt.Sprintf("%s:%s", mID, proxyProvider)] {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -1038,7 +1043,7 @@ func (s *Server) handleGetModels(c *gin.Context) {
|
||||
result = append(result, gin.H{
|
||||
"id": mID,
|
||||
"name": mMeta.Name,
|
||||
"provider": uiProvider,
|
||||
"provider": proxyProvider, // Correctly normalized provider name
|
||||
"enabled": enabled,
|
||||
"prompt_cost": promptCost,
|
||||
"completion_cost": completionCost,
|
||||
|
||||
Reference in New Issue
Block a user