AI网关新增TTS/重排/审核端点,xAI工具扩展,swagger修缺
- 新端点 /ai/v1/audio/speech(xai.grok-tts)、/rerank(cohere.rerank-v4)、/moderations(OCI Guardrails) - Responses 放行 code_interpreter 与远程 mcp 工具,web_search/x_search 解除仅非流式限制 - 模型能力映射扩展:TEXT_RERANK→RERANK、TEXT_TO_AUDIO→TTS - AI 网关文档独立 docs/ai-gateway.md,字段兼容矩阵只列支持项;README 精简引用 - swagger 修缺:135 处响应注解具体化,RawMessage/联合类型统一渲染 AnyJSON,overrides 迁至 docs/.swaggo - CHANGELOG 0.4.0,版本段不再记日期;DASH_VERSION v0.4.0
This commit is contained in:
+15
-12
@@ -6,6 +6,9 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
_ "oci-portal/internal/aiwire" // swagger 注解引用
|
||||
_ "oci-portal/internal/model" // swagger 注解引用
|
||||
|
||||
"oci-portal/internal/service"
|
||||
)
|
||||
|
||||
@@ -18,7 +21,7 @@ type aiAdminHandler struct {
|
||||
|
||||
// @Summary ---- 密钥 ----
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} itemsResponse[model.AiKey]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-keys [get]
|
||||
func (h *aiAdminHandler) listKeys(c *gin.Context) {
|
||||
@@ -35,7 +38,7 @@ func (h *aiAdminHandler) listKeys(c *gin.Context) {
|
||||
// @Summary 生成密钥
|
||||
// @Tags AI 管理
|
||||
// @Param body body object true "请求体(见接口说明)"
|
||||
// @Success 201 {object} map[string]any
|
||||
// @Success 201 {object} aiKeyCreateResponse "key 为明文密钥,仅本次返回"
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-keys [post]
|
||||
func (h *aiAdminHandler) createKey(c *gin.Context) {
|
||||
@@ -110,7 +113,7 @@ func (h *aiAdminHandler) deleteKey(c *gin.Context) {
|
||||
// @Tags AI 管理
|
||||
// @Param id path int true "配置 ID"
|
||||
// @Param body body object true "请求体(见接口说明)"
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} model.AiKey
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-keys/{id}/content-log [put]
|
||||
func (h *aiAdminHandler) updateKeyContentLog(c *gin.Context) {
|
||||
@@ -137,7 +140,7 @@ func (h *aiAdminHandler) updateKeyContentLog(c *gin.Context) {
|
||||
//
|
||||
// @Summary 分页查询内容日志
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} pagedResponse[model.AiCallLog]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-content-logs [get]
|
||||
func (h *aiAdminHandler) listContentLogs(c *gin.Context) {
|
||||
@@ -157,7 +160,7 @@ func (h *aiAdminHandler) listContentLogs(c *gin.Context) {
|
||||
|
||||
// @Summary ---- 渠道 ----
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} itemsResponse[model.AiChannel]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-channels [get]
|
||||
func (h *aiAdminHandler) listChannels(c *gin.Context) {
|
||||
@@ -172,7 +175,7 @@ func (h *aiAdminHandler) listChannels(c *gin.Context) {
|
||||
// @Summary 创建 AI 渠道
|
||||
// @Tags AI 管理
|
||||
// @Param body body service.ChannelInput true "请求体"
|
||||
// @Success 201 {object} map[string]any
|
||||
// @Success 201 {object} model.AiChannel
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-channels [post]
|
||||
func (h *aiAdminHandler) createChannel(c *gin.Context) {
|
||||
@@ -236,7 +239,7 @@ func (h *aiAdminHandler) deleteChannel(c *gin.Context) {
|
||||
// @Summary 触发探测:服务可见性 + 模型同步 + 配额试调,返回更新后的渠道
|
||||
// @Tags AI 管理
|
||||
// @Param id path int true "配置 ID"
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} model.AiChannel
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-channels/{id}/probe [post]
|
||||
func (h *aiAdminHandler) probeChannel(c *gin.Context) {
|
||||
@@ -255,7 +258,7 @@ func (h *aiAdminHandler) probeChannel(c *gin.Context) {
|
||||
// @Summary 同步渠道模型缓存
|
||||
// @Tags AI 管理
|
||||
// @Param id path int true "配置 ID"
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} itemsResponse[model.AiModelCache]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-channels/{id}/sync-models [post]
|
||||
func (h *aiAdminHandler) syncChannelModels(c *gin.Context) {
|
||||
@@ -275,7 +278,7 @@ func (h *aiAdminHandler) syncChannelModels(c *gin.Context) {
|
||||
|
||||
// @Summary ---- 聚合模型与调用日志 ----
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} itemsResponse[aiwire.Model]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-models [get]
|
||||
func (h *aiAdminHandler) gatewayModels(c *gin.Context) {
|
||||
@@ -291,7 +294,7 @@ func (h *aiAdminHandler) gatewayModels(c *gin.Context) {
|
||||
|
||||
// @Summary 模型黑名单列表
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} itemsResponse[model.AiModelBlacklist]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-blacklist [get]
|
||||
func (h *aiAdminHandler) listBlacklist(c *gin.Context) {
|
||||
@@ -308,7 +311,7 @@ func (h *aiAdminHandler) listBlacklist(c *gin.Context) {
|
||||
// @Summary 添加模型黑名单
|
||||
// @Tags AI 管理
|
||||
// @Param body body object true "请求体:{name: 模型名}"
|
||||
// @Success 201 {object} map[string]any
|
||||
// @Success 201 {object} itemResponse[model.AiModelBlacklist]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-blacklist [post]
|
||||
func (h *aiAdminHandler) addBlacklist(c *gin.Context) {
|
||||
@@ -347,7 +350,7 @@ func (h *aiAdminHandler) removeBlacklist(c *gin.Context) {
|
||||
|
||||
// @Summary AI 调用日志列表
|
||||
// @Tags AI 管理
|
||||
// @Success 200 {object} map[string]any
|
||||
// @Success 200 {object} pagedResponse[model.AiContentLog]
|
||||
// @Security BearerAuth
|
||||
// @Router /api/v1/ai-logs [get]
|
||||
func (h *aiAdminHandler) listLogs(c *gin.Context) {
|
||||
|
||||
Reference in New Issue
Block a user