diff --git a/internal/router/router.go b/internal/router/router.go index 2e512a83..cc7f1e57 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -36,6 +36,15 @@ func New(groups []db.ModelGroup, classify ClassifierFunc) *Router { return r } +// Groups returns all registered model group IDs. +func (r *Router) Groups() []string { + ids := make([]string, 0, len(r.groups)) + for id := range r.groups { + ids = append(ids, id) + } + return ids +} + // IsGroup returns true if the model name is a group ID. func (r *Router) IsGroup(modelID string) bool { _, ok := r.groups[modelID] diff --git a/internal/server/server.go b/internal/server/server.go index bf8845e7..b1fddab1 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -467,6 +467,20 @@ func (s *Server) handleListModels(c *gin.Context) { } } + // Add model groups so clients can discover them + if s.modelRouter != nil { + for _, gid := range s.modelRouter.Groups() { + if _, exists := modelMap[gid]; !exists { + modelMap[gid] = OpenAIModel{ + ID: gid, + Object: "model", + Created: 1700000000, + OwnedBy: "gophergate", + } + } + } + } + var data []OpenAIModel for _, m := range modelMap { data = append(data, m)