ai_scheduler/internal/services/chat.go

102 lines
2.4 KiB
Go

package services
import (
"ai_scheduler/internal/entitys"
"encoding/json"
"log"
"github.com/gofiber/websocket/v2"
)
// ChatHandler 聊天处理器
type ChatService struct {
routerService entitys.RouterService
}
// NewChatHandler 创建聊天处理器
func NewChatService(routerService entitys.RouterService) *ChatService {
return &ChatService{
routerService: routerService,
}
}
// ToolCallResponse 工具调用响应
type ToolCallResponse struct {
ID string `json:"id" example:"call_1"`
Type string `json:"type" example:"function"`
Function FunctionCallResponse `json:"function"`
Result interface{} `json:"result,omitempty"`
}
// FunctionCallResponse 函数调用响应
type FunctionCallResponse struct {
Name string `json:"name" example:"get_weather"`
Arguments interface{} `json:"arguments"`
}
func (h *ChatService) ChatFail(c *websocket.Conn, content string) {
//c.WriteMessage(messageType, message)
}
func (h *ChatService) Chat(c *websocket.Conn) {
log.Println("客户端已连接")
// 循环读取客户端消息
for {
messageType, msg, err := c.ReadMessage()
if err != nil {
log.Println("读取错误:", err)
break
}
log.Printf("收到消息: %s", msg)
var req entitys.ChatSockRequest
if err := json.Unmarshal(msg, &req); err != nil {
log.Println("JSON parse error:", err)
continue
}
// 回显消息给客户端
if err := c.WriteMessage(messageType, msg); err != nil {
log.Println("写入错误:", err)
break
}
}
log.Println("客户端已断开")
//var req entitys.ChatRequest
//if err := c.BodyParser(&req); err != nil {
// return errors.ParamError
//}
//
//// 转换为服务层请求
//serviceReq := &entitys.ChatRequest{
// UserInput: req.UserInput,
// Caller: req.Caller,
// SessionID: req.SessionID,
// ChatRequestMeta: entitys.ChatRequestMeta{
// Authorization: c.Request().Header(),
// },
//}
//
//// 调用路由服务
//response, err := h.routerService.Route(c.Request.Context(), serviceReq)
//if err != nil {
// c.JSON(http.StatusInternalServerError, ChatResponse{
// Status: "error",
// Message: err.Error(),
// })
// return
//}
//
//// 转换响应格式
//httpResponse := &ChatResponse{
// Message: response.Message,
// Status: response.Status,
// Data: response.Data,
// TaskCode: response.TaskCode,
//}
//
//c.JSON(http.StatusOK, httpResponse)
}