81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"infinite-canvas/backend/internal/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// RegisterModelCatalogRoutes 注册统一模型目录路由
|
|
func RegisterModelCatalogRoutes(r *gin.RouterGroup, svc *service.Service) {
|
|
r.GET("/model-catalog", func(c *gin.Context) {
|
|
if _, err := currentUser(c, svc); err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
catalog, err := svc.ModelCatalog(nil)
|
|
if err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
ok(c, catalog)
|
|
})
|
|
|
|
r.POST("/model-catalog/available", func(c *gin.Context) {
|
|
if _, err := currentUser(c, svc); err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
var intent service.ModelRequestIntent
|
|
if err := c.ShouldBindJSON(&intent); err != nil {
|
|
fail(c, http.StatusBadRequest, errors.New("模型能力请求格式错误"))
|
|
return
|
|
}
|
|
catalog, err := svc.ModelCatalog(&intent)
|
|
if err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
ok(c, catalog)
|
|
})
|
|
|
|
r.POST("/model-catalog/quote", func(c *gin.Context) {
|
|
if _, err := currentUser(c, svc); err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
var req struct {
|
|
ModelID string `json:"modelId"`
|
|
Intent service.ModelRequestIntent `json:"intent"`
|
|
}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
fail(c, http.StatusBadRequest, errors.New("模型报价请求格式错误"))
|
|
return
|
|
}
|
|
|
|
// 根据 frontendModelsEnabled 决定使用哪种报价方式
|
|
frontendEnabled, err := svc.FeatureEnabled(service.FeatureFrontendModels)
|
|
if err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
|
|
if frontendEnabled {
|
|
// 使用前台模型报价
|
|
quote, err := svc.QuoteLogicalModel(req.ModelID, req.Intent)
|
|
if err != nil {
|
|
failService(c, err)
|
|
return
|
|
}
|
|
ok(c, gin.H{"quote": quote})
|
|
} else {
|
|
// 使用系统渠道模型报价
|
|
// TODO: 实现系统渠道模型报价逻辑
|
|
fail(c, http.StatusNotImplemented, errors.New("系统渠道模型报价功能尚未实现"))
|
|
}
|
|
})
|
|
}
|