Šifrovani, Tor i I2P endpointi
API je objavljen i kao Tor onion servis i I2P eepsite. Iste rute, isti ključ; menjaju se samo osnovni URL i proksi.
Osnovni URL-ovi
Četiri adrese vode do istog API-ja. Koristite onu koja odgovara vašoj mreži, sa istim API ključem i istim zahtevima.
| Mreža | Osnovni URL | Kako mu pristupate |
|---|---|---|
| Običan web | https://api.shannon-ai.com/v1 | Direktno, preko HTTPS-a. |
| Šifrovano ogledalo | https://api-encrypted.shannon-ai.com/v1 | Direktno, preko HTTPS-a. Drugo ime hosta za isti API. |
| Tor (onion servis) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Preko Tor klijenta: SOCKS5 proksi, podrazumevano na 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Preko I2P rutera: HTTP proksi, podrazumevano na 127.0.0.1:4444. |
- OpenAI SDK prima osnovni URL kako je prikazan, sa
/v1. Anthropic SDK ga prima bez/v1. - Da proverite adresu, pročitajte zaglavlja odgovora sa
https://api.shannon-ai.com:Onion-Locationnosi onion adresu, aX-I2P-LocationI2P adresu. Onion adresa počinje sashannon.
Koje rute rade
Svaka /v1 ruta 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 traži ključ, pa je brz test da li vaš proksi dopire do API-ja.
Šta je isto, a šta se razlikuje
| Stavka | Isto? | Detalj |
|---|---|---|
| Rute, polja zahteva, 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 nikad ne čitaju. |
| Stanje i ograničenja | Isto | Isto stanje i isto ograničenje od 120 zahteva u minuti. Oba se računaju po nalogu, a ne po adresi. |
| Veličina zahteva | Isto | Do 32 MiB po telu zahteva. |
| Šema | Razlikuje se | https:// na običnom webu i na ogledalu. http:// na adresama .onion i .b32.i2p, gde sama mreža šifruje vezu od kraja do kraja. |
| Proksi | Razlikuje se | Nema ga na običnom webu. SOCKS5 proksi za Tor, HTTP proksi za I2P. Ime mora da razreši proksi, a ne vaš računar. |
| Brzina | Razlikuje se | Obe mreže dodaju kašnjenje svakom bajtu. I2P je sporiji od ta dva. |
Stanje i ograničenja opisani su na svojoj stranici. Ograničenja i stanje
cURL preko Tora
Pokrenite Tor klijent na svom računaru. On nudi SOCKS5 proksi na 127.0.0.1:9050. --socks5-hostname predaje ime .onion tom proksiju.
# 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 ruter na svom računaru. On nudi HTTP proksi na 127.0.0.1:4444, koji prima ime .b32.i2p takvo kakvo jeste.
# 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"}]
}' Osnovni URL za SDK
SDK-u trebaju dve promene: osnovni URL mreže i HTTP klijent koji ide preko proksija. U Pythonu oba zvanična SDK-a primaju httpx klijent. Za SOCKS proksi 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 obe mreže. Dok je stream otvoren, a model još nema šta da pošalje, API šalje keep-alive, da veza ne izgleda mrtva proksiju ni vašem klijentu.
| Endpoint | Keep-alive na otvorenom streamu | Šalje se za |
|---|---|---|
/v1/chat/completions | Komentarska linija (počinje sa :) na svakih 15 sekundi. | Svi modeli |
/v1/messages | event: ping, ili komentarska linija, na svakih 15 sekundi. | Svi modeli |
/v1/responses | Komentarska linija na svakih 15 sekundi. | Hostovani open-weight modeli |
- Pošaljite
"stream": true. Strimovani odgovor počinje da stiže čim model piše, a keep-alive pokazuje da se na zahtevu i dalje radi. Odgovor bez streama ne šalje ništa dok ceo odgovor nije spreman. - Dajte klijentu dug read timeout. Primeri koriste 600 sekundi. Timeout kraći od 15 sekundi može prekinuti stream između dva keep-alive-a.
- Pustite svoj SSE čitač da preskače komentarske linije i
pingdogađaje. SDK-ovi to već rade. - Ne šaljite zahtev ponovo čim se veza prekine. Zahtev koji je stigao do API-ja izvršava se do kraja i računa se, i kada veze više nema.
- Prvo testirajte putanju pomoću
GET /v1/models. Ne traži ključ i vraća kratku JSON listu.
Problemi sa vezom
| Simptom | Uzrok i rešenje |
|---|---|
Veza sa 127.0.0.1:9050 ili 127.0.0.1:4444 je odbijena | Na vašem računaru ne radi Tor klijent ili I2P ruter, ili sluša na drugom portu. Tor Browser nudi svoj SOCKS proksi na portu 9150. |
Could not resolve host za ime .onion | Klijent je pokušao sam da razreši ime. Koristite --socks5-hostname u cURL-u i socks5h:// u URL-u proksija, da ga razreši Tor klijent. |
| I2P proksi odgovara sopstvenom stranicom greške | Ruter još nije pronašao adresu. Ruteru treba nekoliko minuta nakon pokretanja. Pokušajte ponovo. |
401 sa Missing authentication | Zahtev 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 veb sajt bez JavaScripta, dostupan na običnom webu, kao onion servis i kao eepsite. Njegova stranica /keys prikazuje vaš API ključ i dozvoljava da ga rotirate, pa možete dobiti ključ bez napuštanja Tora ili I2P-a. encrypted.shannon-ai.com/keys
Adrese tog veb sajta na sve tri mreže navedene su ovde: Šifrovani pristup