package services import ( errors "ai_scheduler/internal/data/error" "ai_scheduler/internal/entitys" "net/http" "github.com/gin-gonic/gin" "github.com/gofiber/fiber/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) Chat(c *fiber.Ctx) error { 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) }