Šifrirani, Tor i I2P endpointi
API je objavljen i kao Tor onion servis i I2P eepsite. Iste rute, isti ključ; mijenjaju se samo base URL i proxy.
Base URL-ovi
Četiri adrese vode do istog API-ja. Koristite onu koja odgovara vašoj mreži, s istim API ključem i istim zahtjevima.
| Mreža | Base URL | Kako ga dosegnuti |
|---|---|---|
| Obični web | https://api.shannon-ai.com/v1 | Izravno, preko HTTPS-a. |
| Šifrirani mirror | https://api-encrypted.shannon-ai.com/v1 | Izravno, preko HTTPS-a. Drugo ime hosta za isti API. |
| Tor (onion servis) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Preko Tor klijenta: SOCKS5 proxy, zadano na 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Preko I2P routera: HTTP proxy, zadano na 127.0.0.1:4444. |
- OpenAI SDK prima base URL kako je prikazan, sa
/v1. Anthropic SDK ga prima bez/v1. - Za provjeru adrese pročitajte zaglavlja odgovora s
https://api.shannon-ai.com:Onion-Locationnosi onion adresu, aX-I2P-LocationI2P adresu. Onion adresa počinje sshannon.
Koje rute rade
Svaka ruta /v1 odgovara na sve četiri adrese:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models ne treba ključ, pa je to brz test dosiže li vaš proxy API.
Što je isto, a što se razlikuje
| Stavka | Isto? | Pojedinost |
|---|---|---|
| Rute, polja zahtjeva, odgovori, greške | Isto | Isto na svakoj adresi. Nijedna ruta se ne ponaša drugačije prema imenu hosta. |
| API ključ | Isto | Jedan ključ radi na svakoj adresi, kao Authorization: Bearer ili x-api-key. Kolačići se na /v1 nikada ne čitaju. |
| Stanje i ograničenja | Isto | Isto stanje i isto ograničenje od 120 zahtjeva u minuti. Oba se broje po računu, a ne po adresi. |
| Veličina zahtjeva | Isto | Do 32 MiB po tijelu zahtjeva. |
| Shema | Razlikuje se | https:// na običnom webu i na mirroru. http:// na adresama .onion i .b32.i2p, gdje sama mreža šifrira vezu od kraja do kraja. |
| Proxy | Razlikuje se | Nema ga na običnom webu. SOCKS5 proxy za Tor, HTTP proxy za I2P. Ime mora razriješiti proxy, a ne vaše računalo. |
| Brzina | Razlikuje se | Obje mreže dodaju kašnjenje svakom bajtu. I2P je sporiji od ta dva. |
Stanje i ograničenja opisani su na vlastitoj stranici. Ograničenja i stanje
cURL preko Tora
Pokrenite Tor klijent na svom računalu. Nudi SOCKS5 proxy na 127.0.0.1:9050. --socks5-hostname predaje ime .onion tom proxyju.
# 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 preko I2P-a
Pokrenite I2P router na svom računalu. Nudi HTTP proxy na 127.0.0.1:4444, koji prima ime .b32.i2p kakvo jest.
# 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"}]
}' Base URL za SDK
SDK treba dvije promjene: base URL mreže i HTTP klijent koji ide kroz proxy. U Pythonu oba službena SDK-a primaju httpx klijent. Za SOCKS proxy instalirajte 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 i keep-alive na sporim vezama
Streaming radi preko obiju mreža. Dok je stream otvoren, a model još nema što poslati, API šalje keep-alive, pa veza ne izgleda mrtva proxyju ili vašem klijentu.
| Endpoint | Keep-alive na otvorenom streamu | Šalje se za |
|---|---|---|
/v1/chat/completions | Redak komentara (počinje s :) svakih 15 sekundi. | Svi modeli |
/v1/messages | event: ping ili redak komentara svakih 15 sekundi. | Svi modeli |
/v1/responses | Redak komentara svakih 15 sekundi. | Hostirani open-weight modeli |
- Pošaljite
"stream": true. Streamani odgovor počinje stizati čim model piše, a keep-alive pokazuje da se na zahtjevu još radi. Odgovor bez streaminga ne šalje ništa dok cijeli odgovor nije spreman. - Klijentu dajte dug read timeout. Primjeri koriste 600 sekundi. Timeout kraći od 15 sekundi može prekinuti stream između dva keep-alivea.
- Neka vaš SSE čitač preskače retke komentara i događaje
ping. SDK-ovi to već rade. - Ne šaljite zahtjev ponovno čim se veza prekine. Zahtjev koji je stigao do API-ja izvršava se do kraja i naplaćuje, i kada veze više nema.
- Putanju prvo testirajte s
GET /v1/models. Ne treba ključ i vraća kratak JSON popis.
Problemi s vezom
| Simptom | Uzrok i rješenje |
|---|---|
Veza na 127.0.0.1:9050 ili 127.0.0.1:4444 je odbijena | Na vašem računalu ne radi Tor klijent ili I2P router ili sluša na drugom portu. Tor Browser nudi svoj SOCKS proxy na portu 9150. |
Could not resolve host za ime .onion | Klijent je pokušao sam razriješiti ime. Koristite --socks5-hostname u cURL-u i socks5h:// u URL-u proxyja, da ga razriješi Tor klijent. |
| I2P proxy odgovara vlastitom stranicom greške | Router još nije pronašao adresu. Routeru treba nekoliko minuta nakon pokretanja. Pokušajte ponovno. |
401 s Missing authentication | Zahtjev je stigao bez ključa. Pošaljite isto zaglavlje kao na običnom webu. |
Svaka druga greška ista je kao na običnom webu. Upravljanje greškama
Vaš ključ bez JavaScripta
Shannon ima i web mjesto bez JavaScripta, dostupno na običnom webu, kao onion servis i kao eepsite. Njegova stranica /keys prikazuje vaš API ključ i omogućuje vam da ga zamijenite, pa ključ možete dobiti a da ne napustite Tor ili I2P. encrypted.shannon-ai.com/keys
Adrese tog web mjesta na sve tri mreže navedene su ovdje: Šifrirani pristup