Naar de inhoud
Versleutelde, Tor- en I2P-endpoints

Versleutelde, Tor- en I2P-endpoints

De API wordt ook gepubliceerd als Tor-onion-service en als I2P-eepsite. Dezelfde routes, dezelfde sleutel; alleen de basis-URL en de proxy veranderen.

Basis-URL's

Vier adressen leiden naar dezelfde API. Gebruik het adres dat bij je netwerk past, met dezelfde API-sleutel en dezelfde aanvragen.

Netwerk Basis-URL Hoe je het bereikt
Gewoon web https://api.shannon-ai.com/v1 Direct, via HTTPS.
Versleutelde mirror https://api-encrypted.shannon-ai.com/v1 Direct, via HTTPS. Een tweede hostnaam voor dezelfde API.
Tor (onion-service) http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 Via een Tor-client: een SOCKS5-proxy, standaard op 127.0.0.1:9050.
I2P (eepsite) http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 Via een I2P-router: een HTTP-proxy, standaard op 127.0.0.1:4444.
  • Een OpenAI-SDK neemt de basis-URL zoals getoond, met /v1. Een Anthropic-SDK neemt hem zonder /v1.
  • Om een adres te controleren, lees je de antwoordheaders van https://api.shannon-ai.com: Onion-Location bevat het onion-adres en X-I2P-Location het I2P-adres. Het onion-adres begint met shannon.

Welke routes werken

Elke /v1-route antwoordt op alle vier de adressen:

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

GET /v1/models heeft geen sleutel nodig, waardoor het een snelle test is of je proxy de API bereikt.

Wat hetzelfde is en wat verschilt

Onderdeel Hetzelfde? Detail
Routes, aanvraagvelden, antwoorden, fouten Hetzelfde Op elk adres hetzelfde. Geen enkele route gedraagt zich anders per hostnaam.
API-sleutel Hetzelfde Eén sleutel werkt op elk adres, als Authorization: Bearer of x-api-key. Cookies worden op /v1 nooit gelezen.
Saldo en limieten Hetzelfde Hetzelfde saldo en dezelfde limiet van 120 aanvragen per minuut. Beide worden per account geteld, niet per adres.
Aanvraaggrootte Hetzelfde Tot 32 MiB per aanvraagbody.
Schema Verschilt https:// op het gewone web en op de mirror. http:// op de adressen .onion en .b32.i2p, waar het netwerk zelf de verbinding van begin tot eind versleutelt.
Proxy Verschilt Geen op het gewone web. Een SOCKS5-proxy voor Tor, een HTTP-proxy voor I2P. De naam moet door de proxy worden omgezet, niet door je machine.
Snelheid Verschilt Beide netwerken voegen vertraging toe aan elke byte. I2P is van de twee de langzaamste.

Saldo en limieten worden op hun eigen pagina beschreven. Limieten en saldo

cURL via Tor

Draai een Tor-client op je machine. Die biedt een SOCKS5-proxy op 127.0.0.1:9050. --socks5-hostname geeft de .onion-naam door aan die proxy.

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

Draai een I2P-router op je machine. Die biedt een HTTP-proxy op 127.0.0.1:4444, die de .b32.i2p-naam accepteert zoals hij is.

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"}]
  }'

Basis-URL voor de SDK

Een SDK heeft twee wijzigingen nodig: de basis-URL van het netwerk, en een HTTP-client die via de proxy gaat. In Python accepteren beide officiële SDK's een httpx-client. Installeer voor een SOCKS-proxy 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 werkt over beide netwerken. Zolang een stream open is en het model nog niets te sturen heeft, stuurt de API een keep-alive, zodat de verbinding voor een proxy of voor je client niet dood lijkt.

Endpoint Keep-alive op een open stream Verstuurd voor
/v1/chat/completions Elke 15 seconden een commentaarregel (die begint met :). Alle modellen
/v1/messages Elke 15 seconden een event: ping, of een commentaarregel. Alle modellen
/v1/responses Elke 15 seconden een commentaarregel. Gehoste open-weight modellen
  • Stuur "stream": true. Een antwoord met streaming begint binnen te komen zodra het model schrijft, en de keep-alive laat zien dat de aanvraag nog in behandeling is. Een antwoord zonder streaming stuurt niets tot het hele antwoord klaar is.
  • Geef de client een lange leestimeout. De voorbeelden gebruiken 600 seconden. Een timeout korter dan 15 seconden kan een stream tussen twee keep-alives beëindigen.
  • Laat je SSE-lezer commentaarregels en ping-events overslaan. De SDK's doen dit al.
  • Verstuur een aanvraag niet opnieuw op het moment dat een verbinding wegvalt. Een aanvraag die de API heeft bereikt, loopt tot het einde door en wordt geteld, ook als de verbinding weg is.
  • Test het pad eerst met GET /v1/models. Dat heeft geen sleutel nodig en geeft een korte JSON-lijst terug.

Verbindingsproblemen

Symptoom Oorzaak en oplossing
De verbinding met 127.0.0.1:9050 of 127.0.0.1:4444 wordt geweigerd Er draait geen Tor-client of I2P-router op je machine, of hij luistert op een andere poort. Tor Browser biedt zijn SOCKS-proxy aan op poort 9150.
Could not resolve host voor de .onion-naam De client probeerde de naam zelf om te zetten. Gebruik --socks5-hostname in cURL en socks5h:// in een proxy-URL, zodat de Tor-client hem omzet.
De I2P-proxy antwoordt met zijn eigen foutpagina De router heeft het adres nog niet gevonden. Een router heeft na het starten enkele minuten nodig. Probeer het opnieuw.
401 met Missing authentication De aanvraag kwam zonder sleutel binnen. Stuur dezelfde header als op het gewone web.

Elke andere fout is dezelfde als op het gewone web. Foutafhandeling

Je sleutel zonder JavaScript

Shannon heeft ook een website zonder JavaScript, bereikbaar op het gewone web, als onion-service en als eepsite. De pagina /keys toont je API-sleutel en laat je hem vernieuwen, zodat je een sleutel kunt krijgen zonder Tor of I2P te verlaten. encrypted.shannon-ai.com/keys

De adressen van die website op alle drie de netwerken staan hier: Versleutelde toegang