| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package handler
- import (
- "errors"
- "net/http"
- infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
- "github.com/Wei-Shaw/sub2api/internal/service"
- "github.com/gin-gonic/gin"
- )
- func (h *GatewayHandler) pinnedOpenAIModels(c *gin.Context, group *service.Group) {
- if c.Request.Context().Err() != nil {
- return
- }
- if h.openAIGatewayService == nil {
- writeOpenAIModelsError(c, http.StatusInternalServerError, "api_error", "OpenAI model discovery is not configured")
- return
- }
- response, account, err := h.openAIGatewayService.FetchPinnedOpenAIModelsList(
- c.Request.Context(), group, h.maxAccountSwitches, c.GetHeader("If-None-Match"),
- )
- if c.Request.Context().Err() != nil {
- return
- }
- if err != nil {
- if errors.Is(err, service.ErrNoPinnedCodexModelsAccounts) {
- writeOpenAIModelsError(c, http.StatusServiceUnavailable, "upstream_error", "No available OpenAI model discovery accounts")
- return
- }
- writeOpenAIModelsError(c, infraerrors.Code(err), "upstream_error", infraerrors.Message(err))
- return
- }
- setOpsSelectedAccount(c, account.ID, account.Platform)
- writeOpenAIModelsResponse(c, response)
- }
- func writeOpenAIModelsError(c *gin.Context, status int, errorType, message string) {
- c.JSON(status, gin.H{"error": gin.H{"type": errorType, "message": message}})
- }
- func writeOpenAIModelsResponse(c *gin.Context, manifest *service.OpenAIModelsResponse) {
- if manifest.ETag != "" {
- c.Header("ETag", manifest.ETag)
- }
- if manifest.NotModified {
- c.Status(http.StatusNotModified)
- c.Writer.WriteHeaderNow()
- return
- }
- c.Data(http.StatusOK, "application/json", manifest.Body)
- }
|