Hoppa till innehållet
Krypterade endpoints, Tor och I2P

Krypterade endpoints, Tor och I2P

API:et publiceras också som en Tor onion-tjänst och en I2P eepsite. Samma sökvägar, samma nyckel; bara bas-URL:en och proxyn ändras.

Bas-URL:er

Fyra adresser leder till samma API. Använd den som passar ditt nätverk, med samma API-nyckel och samma begäranden.

Nätverk Bas-URL Så når du den
Öppna webben https://api.shannon-ai.com/v1 Direkt, över HTTPS.
Krypterad spegel https://api-encrypted.shannon-ai.com/v1 Direkt, över HTTPS. Ett andra värdnamn för samma API.
Tor (onion-tjänst) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Via en Tor-klient: en SOCKS5-proxy, som standard på 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Via en I2P-router: en HTTP-proxy, som standard på 127.0.0.1:4444.
  • En OpenAI-SDK tar bas-URL:en som den visas, med /v1. En Anthropic-SDK tar den utan /v1.
  • För att kontrollera en adress, läs svarsheadrarna från https://api.shannon-ai.com: Onion-Location bär onion-adressen och X-I2P-Location I2P-adressen. Onion-adressen börjar med shannon.

Vilka sökvägar som fungerar

Varje /v1-sökväg svarar på alla fyra adresserna:

  • POST /v1/chat/completions
  • POST /v1/responses
  • POST /v1/messages
  • POST /v1/messages/count_tokens
  • POST /v1/tokenize
  • GET /v1/models

GET /v1/models kräver ingen nyckel, vilket gör den till ett snabbt test av att din proxy når API:et.

Vad som är lika och vad som skiljer sig

Punkt Samma? Detalj
Sökvägar, begäranfält, svar, fel Lika Samma på varje adress. Ingen sökväg beter sig annorlunda beroende på värdnamn.
API-nyckel Lika En nyckel fungerar på varje adress, som Authorization: Bearer eller x-api-key. Cookies läses aldrig på /v1.
Balans och gränser Lika Samma balans och samma gräns på 120 begäranden per minut. Båda räknas per konto, inte per adress.
Begärans storlek Lika Upp till 32 MiB per begäranbody.
Schema Skiljer sig https:// på den öppna webben och på spegeln. http:// på adresserna .onion och .b32.i2p, där nätverket självt krypterar anslutningen från ände till ände.
Proxy Skiljer sig Ingen på den öppna webben. En SOCKS5-proxy för Tor, en HTTP-proxy för I2P. Namnet måste slås upp av proxyn, inte av din dator.
Hastighet Skiljer sig Båda nätverken lägger till fördröjning för varje byte. I2P är det långsammaste av de två.

Balans och gränser beskrivs på sin egen sida. Gränser och balans

cURL via Tor

Kör en Tor-klient på din dator. Den erbjuder en SOCKS5-proxy på 127.0.0.1:9050. --socks5-hostname lämnar .onion-namnet till den proxyn.

cURL · Tor
# 1. Is the onion service reachable? No key needed.
curl --socks5-hostname 127.0.0.1:9050 http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1/models

# 2. A streamed chat call. -N prints the stream as it arrives.
curl -N --socks5-hostname 127.0.0.1:9050 http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shannon-3",
    "stream": true,
    "messages": [{"role": "user", "content": "Hello over Tor"}]
  }'

cURL via I2P

Kör en I2P-router på din dator. Den erbjuder en HTTP-proxy på 127.0.0.1:4444, som tar .b32.i2p-namnet som det är.

cURL · I2P
# 1. Is the eepsite reachable? No key needed.
curl --proxy http://127.0.0.1:4444 http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1/models

# 2. A streamed chat call.
curl -N --proxy http://127.0.0.1:4444 http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shannon-3",
    "stream": true,
    "messages": [{"role": "user", "content": "Hello over I2P"}]
  }'

SDK:ns bas-URL

En SDK behöver två ändringar: nätverkets bas-URL och en HTTP-klient som går via proxyn. I Python tar båda de officiella SDK:erna en httpx-klient. För en SOCKS-proxy installerar du httpx[socks].

# pip install openai "httpx[socks]"
import httpx
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1",
    http_client=httpx.Client(proxy="socks5h://127.0.0.1:9050", timeout=600),
)

stream = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Hello over Tor"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Streaming fungerar över båda nätverken. Medan en ström är öppen och modellen ännu inte har något att skicka skickar API:et en keep-alive, så att anslutningen inte ser död ut för en proxy eller för din klient.

Endpoint Keep-alive på en öppen ström Skickas för
/v1/chat/completions En kommentarsrad (den börjar med :) var 15:e sekund. Alla modeller
/v1/messages En event: ping, eller en kommentarsrad, var 15:e sekund. Alla modeller
/v1/responses En kommentarsrad var 15:e sekund. Hostade open-weight-modeller
  • Skicka "stream": true. Ett streamat svar börjar komma så snart modellen skriver, och keep-alive visar att begäran fortfarande bearbetas. Ett svar som inte streamas skickar ingenting förrän hela svaret är klart.
  • Ge klienten en lång läs-timeout. Exemplen använder 600 sekunder. En timeout kortare än 15 sekunder kan avsluta en ström mellan två keep-alives.
  • Låt din SSE-läsare hoppa över kommentarsrader och ping-händelser. SDK:erna gör redan detta.
  • Skicka inte om en begäran i samma stund som en anslutning bryts. En begäran som nådde API:et körs till slut och räknas, även när anslutningen är borta.
  • Testa vägen med GET /v1/models först. Den kräver ingen nyckel och returnerar en kort JSON-lista.

Anslutningsproblem

Symptom Orsak och åtgärd
Anslutningen till 127.0.0.1:9050 eller 127.0.0.1:4444 nekas Ingen Tor-klient eller I2P-router körs på din dator, eller så lyssnar den på en annan port. Tor Browser erbjuder sin SOCKS-proxy på port 9150.
Could not resolve host för .onion-namnet Klienten försökte slå upp namnet själv. Använd --socks5-hostname i cURL och socks5h:// i en proxy-URL, så att Tor-klienten slår upp det.
I2P-proxyn svarar med sin egen felsida Routern har inte hittat adressen än. En router behöver några minuter efter start. Försök igen.
401 med Missing authentication Begäran kom utan nyckel. Skicka samma header som på den öppna webben.

Varje annat fel är detsamma som på den öppna webben. Felhantering

Din nyckel utan JavaScript

Shannon har också en webbplats utan JavaScript, nåbar på den öppna webben, som onion-tjänst och som eepsite. Dess sida /keys visar din API-nyckel och låter dig byta den, så att du kan få en nyckel utan att lämna Tor eller I2P. encrypted.shannon-ai.com/keys

Adresserna till den webbplatsen på alla tre nätverken listas här: Krypterad åtkomst