Files
SakurasanandClaude Sonnet 5 d0e31b198f feat(server): API relay gateway backend M0-M4
Gin + GORM + pure-Go SQLite. Users/auth (JWT), API key management with
quotas, proxy gateway with weighted channel failover and health checks,
usage/billing ledger, cross-protocol conversion (Anthropic Messages /
OpenAI Chat Completions / OpenAI Responses), and channel/model admin API.
Channels declare native API formats and auto-convert the rest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:05:02 +08:00

35 lines
780 B
Go

package proxy
import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
// ModelsHandler serves GET /v1/models (OpenAI-style list).
type ModelsHandler struct {
db *gorm.DB
gw *Gateway
}
func NewModelsHandler(db *gorm.DB, gw *Gateway) *ModelsHandler {
return &ModelsHandler{db: db, gw: gw}
}
func (h *ModelsHandler) List(c *gin.Context) {
models, err := h.gw.channel.ListEnabledModels()
if err != nil {
c.JSON(502, gin.H{"error": gin.H{"message": "list models failed", "type": "api_error"}})
return
}
data := make([]gin.H, 0, len(models))
for _, m := range models {
data = append(data, gin.H{
"id": m.Name,
"object": "model",
"created": m.CreatedAt.Unix(),
"owned_by": "openteam",
})
}
c.JSON(200, gin.H{"object": "list", "data": data})
}