diff --git a/internal/cli/user_command.go b/internal/cli/user_command.go index ac6d5b3bc8..87fca57092 100644 --- a/internal/cli/user_command.go +++ b/internal/cli/user_command.go @@ -1483,13 +1483,15 @@ func (c *RAGFlowClient) ChatToModel(cmd *Command) (ResponseIf, error) { effort := cmd.Params["effort"].(string) verbosity := cmd.Params["verbosity"].(string) - url := fmt.Sprintf("/providers/%s/instances/%s/models", providerName, instanceName) + url := fmt.Sprintf("/chat/completions") payload := map[string]interface{}{ - "model_name": modelName, - "message": message, - "stream": stream, // use stream API - "thinking": thinking, + "provider_name": providerName, + "instance_name": instanceName, + "model_name": modelName, + "message": message, + "stream": stream, // use stream API + "thinking": thinking, } if thinking { diff --git a/internal/handler/providers.go b/internal/handler/providers.go index 7c49186f77..1446a94a82 100644 --- a/internal/handler/providers.go +++ b/internal/handler/providers.go @@ -646,17 +646,28 @@ func (h *ProviderHandler) EnableOrDisableModel(c *gin.Context) { } type ChatToModelRequest struct { - ModelName string `json:"model_name" binding:"required"` - Message string `json:"message" binding:"required"` - Stream bool `json:"stream"` - Thinking bool `json:"thinking"` - Effort *string `json:"effort"` - Verbosity *string `json:"verbosity"` + ProviderName *string `json:"provider_name"` + InstanceName *string `json:"instance_name"` + ModelName *string `json:"model_name"` + Message string `json:"message" binding:"required"` + Stream bool `json:"stream"` + Thinking bool `json:"thinking"` + Effort *string `json:"effort"` + Verbosity *string `json:"verbosity"` } func (h *ProviderHandler) ChatToModel(c *gin.Context) { - providerName := c.Param("provider_name") - if providerName == "" { + var req ChatToModelRequest + if err := c.ShouldBindJSON(&req); err != nil { + println("JSON bind error: %v (type: %T)", err, err) + c.JSON(http.StatusOK, gin.H{ + "code": common.CodeBadRequest, + "message": err.Error(), + }) + return + } + + if req.ProviderName == nil || *req.ProviderName == "" { c.JSON(http.StatusBadRequest, gin.H{ "code": 400, "message": "Provider name is required", @@ -664,8 +675,7 @@ func (h *ProviderHandler) ChatToModel(c *gin.Context) { return } - instanceName := c.Param("instance_name") - if instanceName == "" { + if req.InstanceName == nil || *req.InstanceName == "" { c.JSON(http.StatusBadRequest, gin.H{ "code": 400, "message": "Instance name is required", @@ -673,12 +683,10 @@ func (h *ProviderHandler) ChatToModel(c *gin.Context) { return } - var req ChatToModelRequest - if err := c.ShouldBindJSON(&req); err != nil { - println("JSON bind error: %v (type: %T)", err, err) - c.JSON(http.StatusOK, gin.H{ - "code": common.CodeBadRequest, - "message": err.Error(), + if req.ModelName == nil || *req.ModelName == "" { + c.JSON(http.StatusBadRequest, gin.H{ + "code": 400, + "message": "Model name is required", }) return } @@ -740,7 +748,7 @@ func (h *ProviderHandler) ChatToModel(c *gin.Context) { } // Stream response using sender function (best performance, no channel) - errorCode, err := h.modelProviderService.ChatToModelStreamWithSender(providerName, instanceName, req.ModelName, userID, req.Message, &apiConfig, &chatConfig, sender) + errorCode, err := h.modelProviderService.ChatToModelStreamWithSender(*req.ProviderName, *req.InstanceName, *req.ModelName, userID, req.Message, &apiConfig, &chatConfig, sender) if errorCode != common.CodeSuccess { c.SSEvent("error", err.Error()) @@ -749,7 +757,7 @@ func (h *ProviderHandler) ChatToModel(c *gin.Context) { } // Non-stream response - response, errorCode, err := h.modelProviderService.ChatToModel(providerName, instanceName, req.ModelName, userID, req.Message, &apiConfig, &chatConfig) + response, errorCode, err := h.modelProviderService.ChatToModel(*req.ProviderName, *req.InstanceName, *req.ModelName, userID, req.Message, &apiConfig, &chatConfig) if err != nil { c.JSON(http.StatusOK, gin.H{ "code": errorCode, diff --git a/internal/router/router.go b/internal/router/router.go index 6eca00edc2..bc33f995c7 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -218,7 +218,7 @@ func (r *Router) Setup(engine *gin.Engine) { provider.DELETE("/:provider_name/instances", r.providerHandler.DropProviderInstance) provider.GET("/:provider_name/instances/:instance_name/models", r.providerHandler.ListInstanceModels) provider.PATCH("/:provider_name/instances/:instance_name/models/*model_name", r.providerHandler.EnableOrDisableModel) - provider.POST("/:provider_name/instances/:instance_name/models", r.providerHandler.ChatToModel) + v1.POST("/chat/completions", r.providerHandler.ChatToModel) } model := v1.Group("/models")