This commit is contained in:
史悦
2025-08-13 19:03:20 +08:00
commit d62a2e9ed9
73 changed files with 7296 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
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)
}