Files
copilot-app/internal/controller/copilot/embeddings.go
2025-08-13 19:03:20 +08:00

59 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package copilot
import (
"github.com/gofrs/uuid"
"net/http"
"os"
"strconv"
"github.com/gin-gonic/gin"
)
// EmbeddingsAPIRequest 表示嵌入API的请求结构
type EmbeddingsAPIRequest struct {
Input []string `json:"input" binding:"required"`
Model string `json:"model,omitempty"`
Dimensions int `json:"dimensions,omitempty"`
}
// HandleEmbeddings 处理嵌入请求的HTTP处理器
func HandleEmbeddings(c *gin.Context) {
requestID := uuid.Must(uuid.NewV4()).String()
c.Header("x-github-request-id", requestID)
var req EmbeddingsAPIRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// 从环境变量获取维度大小默认为1536
dimensionSize := 1536
if dimSizeStr := os.Getenv("EMBEDDING_DIMENSION_SIZE"); dimSizeStr != "" {
if dimSize, err := strconv.Atoi(dimSizeStr); err == nil {
dimensionSize = dimSize
}
}
// 创建嵌入客户端
client, err := NewEmbeddingClient(dimensionSize)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
// 如果请求中指定了模型,则使用请求中的模型
if req.Model != "" {
client.SetModel(req.Model)
}
// 获取嵌入,使用请求上下文以支持取消操作
resp, err := client.GetEmbeddings(c.Request.Context(), req.Input)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, resp)
}