Skip to main content

Przegląd

Passthrough API jest w wersji beta. Używaj go, gdy potrzebujesz natywnego kształtu API providera, a gdy zależy Ci na najbardziej stabilnym interfejsie GoModel, wybieraj ścieżki /v1 kompatybilne z OpenAI.
Passthrough API przekazuje natywne requesty providera przez GoModel bez tłumaczenia body requestu ani odpowiedzi. Używaj go, gdy biblioteka kliencka oczekuje natywnego API providera zamiast API kompatybilnego z OpenAI. Na przykład Anthropic SDK wysyła requesty do /v1/messages, więc możesz skierować je na bazowy URL passthrough dla Anthropic w GoModel:
SDK wysyła:
GoModel normalizuje opcjonalny segment v1 i przekazuje request do upstreamu jako natywne wywołanie Anthropic:

Jak to działa

Ścieżki passthrough mają taki kształt:
Dla Anthropic te dwie ścieżki trafiają do tego samego endpointu upstreamu, gdy ALLOW_PASSTHROUGH_V1_ALIAS=true, co jest wartością domyślną:
GoModel najpierw obsługuje uwierzytelnianie w gatewayu. Jeśli włączony jest GOMODEL_MASTER_KEY lub zarządzane klucze uwierzytelniające, klient musi wysłać bearer token GoModel:
GoModel usuwa nagłówki klienta Authorization i X-Api-Key przed przekazaniem requestu, a następnie dołącza dane uwierzytelniające providera upstreamu skonfigurowane na serwerze. Dla Anthropic GoModel używa skonfigurowanego ANTHROPIC_API_KEY. Ponieważ passthrough jest natywny dla providera, odpowiedź również jest natywna. Dla Anthropic messages odpowiedź używa schematu wiadomości Anthropic, a nie schematu chat completion OpenAI. Gdy śledzenie użycia jest włączone, udane odpowiedzi inferencji passthrough są zapisywane: liczby tokenów są odczytywane ze zdarzeń usage SSE w odpowiedziach streamingowych i z pola usage w odpowiedziach JSON, więc koszty i budżety uwzględniają ruch passthrough tak jak każdą inną ścieżkę.

Kontrola dostępu

Passthrough sięga bezpośrednio do konta providera z danymi uwierzytelniającymi serwera, w tym do ścieżek, których gateway nie potrafi ograniczyć do wywołującego, takich jak GET /files. Dlatego dostęp jest ograniczony:
  • GOMODEL_MASTER_KEY – zawsze ma dostęp do passthrough.
  • Zarządzane klucze API – domyślnie tworzone bez dostępu do passthrough. Klucze, które istniały przed wprowadzeniem dostępu do passthrough, go zachowują. Klucz bez dostępu dostaje 403 z kodem błędu passthrough_access_denied.
  • Allowlisty modeli – body, które wskazuje model, jest sprawdzane z allowlistą wywołującego. Request, który nie wskazuje modelu, działa na całym providerze, więc allowlista musi obejmować całego providera (anthropic/) lub wszystko (/). Klucz ograniczony do anthropic/claude-sonnet-4-6 może wywołać POST /p/anthropic/v1/messages dla tego modelu, ale nie GET /p/anthropic/v1/models.
Przyznaj dostęp do passthrough przy tworzeniu klucza ("passthrough_access": true w POST /admin/auth-keys), na stronie API Keys w dashboardzie lub później. Może go przyznać tylko globalny admin (master key lub klucz dashboardu bez ścieżki użytkownika), ponieważ klucz passthrough sięga poza każdą ścieżkę użytkownika; admin ograniczony do ścieżki użytkownika dostaje 403 admin_scope_denied, ale może ten dostęp odebrać.

Przykład z Anthropic SDK

Ustaw bazowy URL Anthropic SDK na ścieżkę passthrough dla Anthropic w GoModel. Użyj tokenu GoModel jako uwierzytelniania bearer w Anthropic SDK.
Jeśli Twój gateway nie wymaga uwierzytelniania, użyj w SDK fikcyjnego klucza API, np. not-needed, zamiast auth_token lub authToken. GoModel usuwa X-Api-Key z requestów passthrough przed przekazaniem ich do upstreamu.

Obecne ograniczenia

Passthrough jest celowo wąski, dopóki API jest w wersji beta.
  • openai, anthropic, openrouter, kilo, zai, sglang, vllm, llamacpp, llmd, deepseek, edenai i jev są włączone domyślnie.
  • Chutes obsługuje passthrough, ale wymaga jawnego włączenia przez operatora, ponieważ passthrough może przekazywać natywne ścieżki providera, które nie identyfikują modelu. Dodaj chutes do ENABLED_PASSTHROUGH_PROVIDERS tylko wtedy, gdy świadomie chcesz udostępnić tę powierzchnię.
  • GoModel nie tłumaczy body requestów ani odpowiedzi passthrough.
  • model wskazany w body JSON passthrough jest sprawdzany z allowlistą modeli wywołującego niezależnie od rozmiaru body, aż do skonfigurowanego limitu body; większe body jest odrzucane z błędem tego limitu. Body, które powtarza pole model najwyższego poziomu, jest odrzucane, ponieważ to upstream decydowałby, które wygrywa. Request, który nie wskazuje modelu, wymaga uprawnienia do całego providera (zobacz Kontrola dostępu).
  • Konto upstreamu jest współdzielone. Klucz z dostępem do passthrough może sięgać do obiektów na nim, takich jak pliki czy batche, utworzonych przez inne klucze. Przyznawaj passthrough_access tylko kluczom, którym ufasz w zakresie całego konta providera.
  • Natywne body błędów i kody statusu providera są przekazywane dalej, zamiast być konwertowane na odpowiedzi kompatybilne z OpenAI.
  • Funkcje zależne od kompatybilnych z OpenAI kształtów requestów lub odpowiedzi mogą nie działać dla ruchu passthrough tak samo jak dla ruchu /v1.

Powiązane zmienne środowiskowe

Ścieżki passthrough są domyślnie włączone:
Ustaw ENABLED_PASSTHROUGH_PROVIDERS na typy providerów, które chcesz udostępnić.
Ostatnia modyfikacja 24 października 2026