- POST /ai/v1/tts:xAI 官方 TTS 格式转换层(text/voice_id→input/voice),复用 Speech 编排,model 缺省 xai.grok-tts;实测 output_format/speed 透传生效 - 「过滤弃用模型」开关(GET/PUT /api/v1/ai-settings,settings 表持久化):开启后已宣布弃用(未退役)模型从列表与路由排除;同步入库与退役提醒不受影响 - AI 网关文档更名 docs/AI网关.md,补 tts 矩阵段与开关说明;README 引用同步 - CHANGELOG 0.5.0(0.4.0 已发版冻结);DASH_VERSION v0.5.0
48 lines
2.0 KiB
Go
48 lines
2.0 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"oci-portal/internal/service"
|
|
)
|
|
|
|
// registerAiGateway 挂载 /ai/v1/* 对外网关端点(独立密钥鉴权,不挂 JWT 与系统日志)。
|
|
// 挂在全局中间件之后,仍受 IP 限速与 Recovery 保护;高频调用自有 AiCallLog。
|
|
func registerAiGateway(r *gin.Engine, aiGateway *service.AiGatewayService) {
|
|
aih := &aiGatewayHandler{gw: aiGateway}
|
|
ai := r.Group("/ai/v1", bodyLimit(10<<20), aih.auth)
|
|
ai.POST("/chat/completions", aih.chatCompletions)
|
|
ai.POST("/responses", aih.responses)
|
|
ai.POST("/messages", aih.messages)
|
|
ai.POST("/embeddings", aih.embeddings)
|
|
ai.POST("/audio/speech", aih.audioSpeech)
|
|
ai.POST("/tts", aih.tts)
|
|
ai.POST("/rerank", aih.rerank)
|
|
ai.POST("/moderations", aih.moderations)
|
|
ai.GET("/models", aih.listModels)
|
|
}
|
|
|
|
// registerAiAdmin 挂载面板管理侧的 AI 密钥/渠道/模型/日志(JWT 组内)。
|
|
func registerAiAdmin(secured *gin.RouterGroup, aiGateway *service.AiGatewayService) {
|
|
aiadmin := &aiAdminHandler{gw: aiGateway}
|
|
secured.GET("/ai-keys", aiadmin.listKeys)
|
|
secured.POST("/ai-keys", aiadmin.createKey)
|
|
secured.PUT("/ai-keys/:id", aiadmin.updateKey)
|
|
secured.PUT("/ai-keys/:id/content-log", aiadmin.updateKeyContentLog)
|
|
secured.DELETE("/ai-keys/:id", aiadmin.deleteKey)
|
|
secured.GET("/ai-channels", aiadmin.listChannels)
|
|
secured.POST("/ai-channels", aiadmin.createChannel)
|
|
secured.PUT("/ai-channels/:id", aiadmin.updateChannel)
|
|
secured.DELETE("/ai-channels/:id", aiadmin.deleteChannel)
|
|
secured.POST("/ai-channels/:id/probe", aiadmin.probeChannel)
|
|
secured.POST("/ai-channels/:id/sync-models", aiadmin.syncChannelModels)
|
|
secured.GET("/ai-models", aiadmin.gatewayModels)
|
|
secured.GET("/ai-settings", aiadmin.aiSettings)
|
|
secured.PUT("/ai-settings", aiadmin.updateAiSettings)
|
|
secured.GET("/ai-blacklist", aiadmin.listBlacklist)
|
|
secured.POST("/ai-blacklist", aiadmin.addBlacklist)
|
|
secured.DELETE("/ai-blacklist/:id", aiadmin.removeBlacklist)
|
|
secured.GET("/ai-logs", aiadmin.listLogs)
|
|
secured.GET("/ai-content-logs", aiadmin.listContentLogs)
|
|
}
|