package api import ( "context" "fmt" "github.com/gin-gonic/gin" "gitlab.guxuan.icu/jinshan_community/internal/mods/ai/biz" "gitlab.guxuan.icu/jinshan_community/internal/mods/ai/schema" "gitlab.guxuan.icu/jinshan_community/pkg/ai" "gitlab.guxuan.icu/jinshan_community/pkg/util" "time" ) // Defining the `AiRequest` api. type AiRequest struct { AiRequestBIZ *biz.AiRequest } // @Tags AiRequestAPI // @Security ApiKeyAuth // @Summary Query ai request list // @Param current query int true "pagination index" default(1) // @Param pageSize query int true "pagination size" default(10) // @Success 200 {object} util.ResponseResult{data=[]schema.AiRequest} // @Failure 401 {object} util.ResponseResult // @Failure 500 {object} util.ResponseResult // @Router /api/v1/ai-requests [get] func (a *AiRequest) Query(c *gin.Context) { ctx := c.Request.Context() var params schema.AiRequestQueryParam if err := util.ParseQuery(c, ¶ms); err != nil { util.ResError(c, err) return } result, err := a.AiRequestBIZ.Query(ctx, params) if err != nil { util.ResError(c, err) return } util.ResPage(c, result.Data, result.PageResult) } // @Tags AiRequestAPI // @Security ApiKeyAuth // @Summary Get ai request record by ID // @Param id path string true "unique id" // @Success 200 {object} util.ResponseResult{data=schema.AiRequest} // @Failure 401 {object} util.ResponseResult // @Failure 500 {object} util.ResponseResult // @Router /api/v1/ai-requests/{id} [get] func (a *AiRequest) Get(c *gin.Context) { ctx := c.Request.Context() item, err := a.AiRequestBIZ.Get(ctx, c.Param("id")) if err != nil { util.ResError(c, err) return } util.ResSuccess(c, item) } // @Tags AiRequestAPI // @Security ApiKeyAuth // @Summary Create ai request record // @Param body body schema.AiRequestForm true "Request body" // @Success 200 {object} util.ResponseResult{data=schema.AiRequest} // @Failure 400 {object} util.ResponseResult // @Failure 401 {object} util.ResponseResult // @Failure 500 {object} util.ResponseResult // @Router /api/v1/ai-requests [post] func (a *AiRequest) Create(c *gin.Context) { ctx := c.Request.Context() item := new(schema.AiRequestForm) if err := util.ParseJSON(c, item); err != nil { util.ResError(c, err) return } else if err := item.Validate(); err != nil { util.ResError(c, err) return } apiKey := "sk-f96d78738d3143d3859c63a5715490ac" client := ai.NewBaichuanClient(apiKey) example, err := singleCallExample(ctx, client, item.Msg) if err != nil { util.ResError(c, err) return } util.ResSuccess(c, example) } func singleCallExample(ctx context.Context, client *ai.BaichuanClient, msg string) (string, error) { // 准备消息 messages := []ai.ChatMessage{ {Role: "system", Content: "你是一个专业的科技助手"}, {Role: "user", Content: msg}, } // 设置参数 params := ai.ChatCompletionParams{ Model: "qwen-plus", Messages: messages, MaxToken: 200, } // 调用API ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() response, err := client.ChatCompletion(ctx2, params) if err != nil { fmt.Printf("调用失败: %v\n", err) return "", err } // 输出结果 fmt.Println("=== 单次调用结果 ===") fmt.Printf("请求ID: %s\n", response.ID) fmt.Printf("模型: %s\n", response.Model) fmt.Printf("回复: %s\n", response.Content) fmt.Printf("Token使用: 提示 %d, 完成 %d, 总计 %d\n\n", response.Usage.PromptTokens, response.Usage.CompletionTokens, response.Usage.TotalTokens) return response.Content, nil } // @Tags AiRequestAPI // @Security ApiKeyAuth // @Summary Update ai request record by ID // @Param id path string true "unique id" // @Param body body schema.AiRequestForm true "Request body" // @Success 200 {object} util.ResponseResult // @Failure 400 {object} util.ResponseResult // @Failure 401 {object} util.ResponseResult // @Failure 500 {object} util.ResponseResult // @Router /api/v1/ai-requests/{id} [put] func (a *AiRequest) Update(c *gin.Context) { ctx := c.Request.Context() item := new(schema.AiRequestForm) if err := util.ParseJSON(c, item); err != nil { util.ResError(c, err) return } else if err := item.Validate(); err != nil { util.ResError(c, err) return } err := a.AiRequestBIZ.Update(ctx, c.Param("id"), item) if err != nil { util.ResError(c, err) return } util.ResOK(c) } // @Tags AiRequestAPI // @Security ApiKeyAuth // @Summary Delete ai request record by ID // @Param id path string true "unique id" // @Success 200 {object} util.ResponseResult // @Failure 401 {object} util.ResponseResult // @Failure 500 {object} util.ResponseResult // @Router /api/v1/ai-requests/{id} [delete] func (a *AiRequest) Delete(c *gin.Context) { ctx := c.Request.Context() err := a.AiRequestBIZ.Delete(ctx, c.Param("id")) if err != nil { util.ResError(c, err) return } util.ResOK(c) }