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-Locationbevat het onion-adres enX-I2P-Locationhet I2P-adres. Het onion-adres begint metshannon.
Welke routes werken
Elke /v1-route antwoordt op alle vier de adressen:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /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.
# 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.
# 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) # pip install openai
import httpx
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1",
http_client=httpx.Client(proxy="http://127.0.0.1:4444", timeout=600),
)
stream = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Hello over I2P"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) # pip install anthropic "httpx[socks]"
import anthropic
import httpx
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion",
http_client=httpx.Client(proxy="socks5h://127.0.0.1:9050", timeout=600),
)
with client.messages.stream(
model="shannon-1.6-lite",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello over Tor"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True) Streaming en keep-alive op trage verbindingen
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