diff --git a/services/llm-api/internal/interfaces/httpserver/handlers/chathandler/chat_handler.go b/services/llm-api/internal/interfaces/httpserver/handlers/chathandler/chat_handler.go index 06db1fe2..191b4026 100644 --- a/services/llm-api/internal/interfaces/httpserver/handlers/chathandler/chat_handler.go +++ b/services/llm-api/internal/interfaces/httpserver/handlers/chathandler/chat_handler.go @@ -192,7 +192,14 @@ func (h *ChatHandler) CreateChatCompletion( // Get provider based on the requested model observability.AddSpanEvent(ctx, "selecting_provider") - selectedProviderModel, selectedProvider, err := h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + isAPIKeyAuth := strings.EqualFold(reqCtx.GetHeader("X-Auth-Method"), "apikey") + var selectedProviderModel *domainmodel.ProviderModel + var selectedProvider *domainmodel.Provider + if isAPIKeyAuth { + selectedProviderModel, selectedProvider, err = h.providerHandler.SelectProviderModelForModelPublicIDIncludingInactive(ctx, request.Model) + } else { + selectedProviderModel, selectedProvider, err = h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + } if err != nil { observability.RecordError(ctx, err) return nil, platformerrors.AsError(ctx, platformerrors.LayerHandler, err, "failed to select provider model") @@ -220,7 +227,6 @@ func (h *ChatHandler) CreateChatCompletion( // Check if we should use the instruct model instead // This happens when enable_thinking is explicitly false and the model has an instruct model configured // Skip instruct fallback for API key authentication (API users should get the model they requested) - isAPIKeyAuth := strings.EqualFold(reqCtx.GetHeader("X-Auth-Method"), "apikey") if !isAPIKeyAuth && request.EnableThinking != nil && !*request.EnableThinking && selectedProviderModel.InstructModelID != nil && !imageRequested { instructModel, instructProvider, err := h.providerHandler.GetProviderModelByID(ctx, *selectedProviderModel.InstructModelID) if err == nil && instructModel != nil && instructProvider != nil { diff --git a/services/llm-api/internal/interfaces/httpserver/handlers/messageshandler/messages_handler.go b/services/llm-api/internal/interfaces/httpserver/handlers/messageshandler/messages_handler.go index 7425ac50..3c8de7c1 100644 --- a/services/llm-api/internal/interfaces/httpserver/handlers/messageshandler/messages_handler.go +++ b/services/llm-api/internal/interfaces/httpserver/handlers/messageshandler/messages_handler.go @@ -15,6 +15,7 @@ import ( "go.opentelemetry.io/otel/codes" "jan-server/services/llm-api/internal/domain/conversation" + domainmodel "jan-server/services/llm-api/internal/domain/model" "jan-server/services/llm-api/internal/domain/tokenusage" "jan-server/services/llm-api/internal/infrastructure/inference" "jan-server/services/llm-api/internal/infrastructure/metrics" @@ -74,7 +75,15 @@ func (h *MessagesHandler) CreateMessage(ctx context.Context, reqCtx *gin.Context // Get provider for the requested model observability.AddSpanEvent(ctx, "selecting_provider") - selectedProviderModel, selectedProvider, err := h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + isAPIKeyAuth := strings.EqualFold(reqCtx.GetHeader("X-Auth-Method"), "apikey") + var selectedProviderModel *domainmodel.ProviderModel + var selectedProvider *domainmodel.Provider + var err error + if isAPIKeyAuth { + selectedProviderModel, selectedProvider, err = h.providerHandler.SelectProviderModelForModelPublicIDIncludingInactive(ctx, request.Model) + } else { + selectedProviderModel, selectedProvider, err = h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + } if err != nil { observability.RecordError(ctx, err) return h.writeErrorResponse(reqCtx, http.StatusBadRequest, "invalid_request_error", fmt.Sprintf("Model not found: %s", request.Model)) @@ -450,7 +459,14 @@ func (h *MessagesHandler) CountTokens(ctx context.Context, reqCtx *gin.Context, ) // Get provider for the requested model to validate it exists - selectedProviderModel, _, err := h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + isAPIKeyAuth := strings.EqualFold(reqCtx.GetHeader("X-Auth-Method"), "apikey") + var selectedProviderModel *domainmodel.ProviderModel + var err error + if isAPIKeyAuth { + selectedProviderModel, _, err = h.providerHandler.SelectProviderModelForModelPublicIDIncludingInactive(ctx, request.Model) + } else { + selectedProviderModel, _, err = h.providerHandler.SelectProviderModelForModelPublicID(ctx, request.Model) + } if err != nil || selectedProviderModel == nil { return h.writeErrorResponse(reqCtx, http.StatusBadRequest, "invalid_request_error", fmt.Sprintf("Model not found: %s", request.Model)) }