Šifrované endpointy, Tor a I2P
API je zverejnené aj ako služba Tor onion a eepsite I2P. Rovnaké cesty, rovnaký kľúč; mení sa len základná URL a proxy.
Základné URL
Štyri adresy vedú na to isté API. Použite tú, ktorá sedí vašej sieti, s rovnakým API kľúčom a rovnakými requestmi.
| Sieť | Základná URL | Ako sa dostanete |
|---|---|---|
| Bežný web | https://api.shannon-ai.com/v1 | Priamo, cez HTTPS. |
| Šifrované zrkadlo | https://api-encrypted.shannon-ai.com/v1 | Priamo, cez HTTPS. Druhý názov hostiteľa pre to isté API. |
| Tor (služba onion) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Cez klienta Tor: proxy SOCKS5, predvolene na 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Cez router I2P: proxy HTTP, predvolene na 127.0.0.1:4444. |
- SDK OpenAI berie základnú URL tak, ako je uvedená, s
/v1. SDK Anthropic ju berie bez/v1. - Adresu overíte v hlavičkách odpovede z
https://api.shannon-ai.com:Onion-Locationnesie adresu onion aX-I2P-Locationadresu I2P. Adresa onion začínashannon.
Ktoré cesty fungujú
Každá cesta /v1 odpovedá na všetkých štyroch adresách:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models nepotrebuje kľúč, vďaka čomu je rýchlym testom, že vaša proxy API dosiahne.
Čo je rovnaké a čo sa líši
| Položka | Rovnaké? | Podrobnosť |
|---|---|---|
| Cesty, polia requestu, odpovede, chyby | Rovnaké | Na každej adrese rovnaké. Žiadna cesta sa nespráva inak podľa názvu hostiteľa. |
| API kľúč | Rovnaké | Jeden kľúč funguje na každej adrese, ako Authorization: Bearer alebo x-api-key. Cookies sa na /v1 nikdy nečítajú. |
| Zostatok a limity | Rovnaké | Rovnaký zostatok a rovnaký limit 120 requestov za minútu. Obe sa počítajú na účet, nie na adresu. |
| Veľkosť requestu | Rovnaké | Do 32 MiB na telo requestu. |
| Schéma | Líši sa | https:// na bežnom webe a na zrkadle. http:// na adresách .onion a .b32.i2p, kde samotná sieť šifruje spojenie od konca do konca. |
| Proxy | Líši sa | Na bežnom webe žiadna. Proxy SOCKS5 pre Tor, proxy HTTP pre I2P. Názov musí preložiť proxy, nie váš stroj. |
| Rýchlosť | Líši sa | Obe siete pridávajú oneskorenie ku každému bajtu. I2P je z oboch pomalšia. |
Zostatok a limity sú popísané na vlastnej stránke. Limity a zostatok
cURL cez Tor
Spustite klienta Tor na svojom stroji. Ponúka proxy SOCKS5 na 127.0.0.1:9050. --socks5-hostname odovzdá názov .onion tejto 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 cez I2P
Spustite router I2P na svojom stroji. Ponúka proxy HTTP na 127.0.0.1:4444, ktorá berie názov .b32.i2p tak, ako je.
# 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"}]
}' Základná URL pre SDK
SDK potrebuje dve zmeny: základnú URL siete a klienta HTTP, ktorý ide cez proxy. V Pythone berú obe oficiálne SDK klienta httpx. Pre proxy SOCKS nainštalujte 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) Streamovanie a keep-alive na pomalých linkách
Streamovanie funguje v oboch sieťach. Kým je stream otvorený a model ešte nemá čo poslať, API posiela keep-alive, aby spojenie nevyzeralo mŕtve pre proxy ani pre vášho klienta.
| Endpoint | Keep-alive na otvorenom streame | Posiela sa pre |
|---|---|---|
/v1/chat/completions | Komentárový riadok (začína :) každých 15 sekúnd. | Všetky modely |
/v1/messages | event: ping alebo komentárový riadok každých 15 sekúnd. | Všetky modely |
/v1/responses | Komentárový riadok každých 15 sekúnd. | Hostované open-weight modely |
- Pošlite
"stream": true. Streamovaná odpoveď začne prichádzať hneď, ako model píše, a keep-alive ukazuje, že sa na requeste stále pracuje. Odpoveď bez streamovania nepošle nič, kým nie je celá odpoveď hotová. - Dajte klientovi dlhý timeout čítania. Ukážky používajú 600 sekúnd. Timeout kratší než 15 sekúnd môže ukončiť stream medzi dvoma keep-alive.
- Nechajte svoj čítač SSE preskakovať komentárové riadky a udalosti
ping. SDK to už robia. - Neposielajte request znova v okamihu, keď spojenie padne. Request, ktorý dorazil na API, beží do konca a započíta sa, aj keď spojenie zmizlo.
- Cestu najprv vyskúšajte cez
GET /v1/models. Nepotrebuje kľúč a vráti krátky zoznam JSON.
Problémy so spojením
| Príznak | Príčina a oprava |
|---|---|
Spojenie na 127.0.0.1:9050 alebo 127.0.0.1:4444 je odmietnuté | Na vašom stroji nebeží klient Tor ani router I2P, alebo počúva na inom porte. Tor Browser ponúka svoju proxy SOCKS na porte 9150. |
Could not resolve host pre názov .onion | Klient sa pokúsil preložiť názov sám. V cURL použite --socks5-hostname a v URL proxy socks5h://, aby ho preložil klient Tor. |
| Proxy I2P odpovedá vlastnou chybovou stránkou | Router adresu ešte nenašiel. Router po štarte potrebuje niekoľko minút. Skúste znova. |
401 s Missing authentication | Request dorazil bez kľúča. Pošlite rovnakú hlavičku ako na bežnom webe. |
Každá iná chyba je rovnaká ako na bežnom webe. Spracovanie chýb
Váš kľúč bez JavaScriptu
Shannon má aj web bez JavaScriptu, dostupný na bežnom webe, ako služba onion a ako eepsite. Jeho stránka /keys ukazuje váš API kľúč a umožňuje ho obnoviť, takže kľúč získate bez opustenia Tor alebo I2P. encrypted.shannon-ai.com/keys
Adresy tohto webu vo všetkých troch sieťach sú uvedené tu: Šifrovaný prístup