feat: 新增语音转文字(ASR)功能
- 后端:新增 /api/audio/transcribe 接口,调用 Ollama whisper 进行语音识别 - 前端:新增 AudioTranscribePage.vue 页面,支持 MP3/WAV/M4A/OGG/FLAC 等格式 - 注册路由、工具卡片、智能助手欢迎语更新 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"eai_agentplatform/backend/internal/config"
|
||||
"eai_agentplatform/backend/internal/web"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// routeItem 路由摘要(返回给前端选择器)
|
||||
type routeItem struct {
|
||||
ID string `json:"id"`
|
||||
Provider string `json:"provider"`
|
||||
Model string `json:"model"`
|
||||
BaseURL string `json:"base_url"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
func toRouteItems(routes []*config.RouteConfig) []routeItem {
|
||||
items := make([]routeItem, 0, len(routes))
|
||||
for _, r := range routes {
|
||||
items = append(items, routeItem{
|
||||
ID: r.RouteID,
|
||||
Provider: r.Provider,
|
||||
Model: r.Model,
|
||||
BaseURL: r.BaseURL,
|
||||
Description: r.Description,
|
||||
})
|
||||
}
|
||||
return items
|
||||
}
|
||||
|
||||
// ListChatRoutes 返回可用 chat 路由列表(供前端选择器使用)
|
||||
func ListChatRoutes(c *gin.Context) {
|
||||
routes, err := config.GetRoutesByCategory("chat")
|
||||
if err != nil {
|
||||
web.Fail(c, web.NewLLMNotConfigured("路由加载失败: "+err.Error()))
|
||||
return
|
||||
}
|
||||
web.OK(c, gin.H{"routes": toRouteItems(routes)})
|
||||
}
|
||||
|
||||
// ListEmbedRoutes 返回可用 embedding 路由列表
|
||||
func ListEmbedRoutes(c *gin.Context) {
|
||||
routes, err := config.GetRoutesByCategory("embed")
|
||||
if err != nil {
|
||||
web.Fail(c, web.NewLLMNotConfigured("路由加载失败: "+err.Error()))
|
||||
return
|
||||
}
|
||||
web.OK(c, gin.H{"routes": toRouteItems(routes)})
|
||||
}
|
||||
Reference in New Issue
Block a user