Endpoint-e të enkriptuara, Tor dhe I2P
API-ja publikohet edhe si shërbim Tor onion dhe si eepsite I2P. Të njëjtat rrugë, i njëjti çelës; ndryshojnë vetëm URL-ja bazë dhe proxy.
URL-të bazë
Katër adresa çojnë te i njëjti API. Përdorni atë që i përshtatet rrjetit tuaj, me të njëjtin çelës API dhe të njëjtat kërkesa.
| Rrjeti | URL bazë | Si e arrini |
|---|---|---|
| Uebi i hapur | https://api.shannon-ai.com/v1 | Drejtpërdrejt, përmes HTTPS. |
| Pasqyrë e enkriptuar | https://api-encrypted.shannon-ai.com/v1 | Drejtpërdrejt, përmes HTTPS. Një emër host i dytë për të njëjtin API. |
| Tor (shërbim onion) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Përmes një klienti Tor: një proxy SOCKS5, si parazgjedhje te 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Përmes një routeri I2P: një proxy HTTP, si parazgjedhje te 127.0.0.1:4444. |
- Një SDK OpenAI e merr URL-në bazë siç tregohet, me
/v1. Një SDK Anthropic e merr pa/v1. - Për të kontrolluar një adresë, lexoni header-at e përgjigjes së
https://api.shannon-ai.com:Onion-Locationmban adresën onion dheX-I2P-Locationadresën I2P. Adresa onion fillon meshannon.
Cilat rrugë funksionojnë
Çdo rrugë /v1 përgjigjet në të katër adresat:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models nuk kërkon çelës, gjë që e bën një test të shpejtë që proxy juaj arrin te API-ja.
Çfarë është njësoj dhe çfarë ndryshon
| Elementi | Njësoj? | Detaji |
|---|---|---|
| Rrugët, fushat e kërkesës, përgjigjet, gabimet | Njësoj | Të njëjta në çdo adresë. Asnjë rrugë nuk sillet ndryshe sipas emrit të host-it. |
| Çelësi API | Njësoj | Një çelës funksionon në çdo adresë, si Authorization: Bearer ose x-api-key. Cookies nuk lexohen kurrë në /v1. |
| Bilanci dhe kufijtë | Njësoj | I njëjti bilanc dhe i njëjti kufi prej 120 kërkesash në minutë. Të dyja numërohen për llogari, jo për adresë. |
| Madhësia e kërkesës | Njësoj | Deri në 32 MiB për trup kërkese. |
| Skema | Ndryshon | https:// në uebin e hapur dhe në pasqyrë. http:// në adresat .onion dhe .b32.i2p, ku vetë rrjeti e enkripton lidhjen nga skaji në skaj. |
| Proxy | Ndryshon | Asnjë në uebin e hapur. Një proxy SOCKS5 për Tor, një proxy HTTP për I2P. Emri duhet të zgjidhet nga proxy, jo nga kompjuteri juaj. |
| Shpejtësia | Ndryshon | Të dy rrjetet shtojnë vonesë në çdo bajt. I2P është më i ngadalshmi nga të dy. |
Bilanci dhe kufijtë përshkruhen në faqen e tyre. Kufijtë dhe bilanci
cURL përmes Tor
Ekzekutoni një klient Tor në kompjuterin tuaj. Ofron një proxy SOCKS5 te 127.0.0.1:9050. --socks5-hostname ia jep emrin .onion atij 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 përmes I2P
Ekzekutoni një router I2P në kompjuterin tuaj. Ofron një proxy HTTP te 127.0.0.1:4444, që e merr emrin .b32.i2p siç është.
# 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"}]
}' URL bazë e SDK-së
Një SDK ka nevojë për dy ndryshime: URL-në bazë të rrjetit, dhe një klient HTTP që kalon përmes proxy. Në Python të dyja SDK-të zyrtare pranojnë një klient httpx. Për një proxy SOCKS instaloni 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 dhe keep-alive në lidhje të ngadalta
Streaming funksionon në të dy rrjetet. Ndërsa një stream është i hapur dhe modeli ende nuk ka çfarë të dërgojë, API-ja dërgon një keep-alive, kështu që lidhja nuk duket e vdekur për një proxy ose për klientin tuaj.
| Endpoint | Keep-alive në një stream të hapur | Dërguar për |
|---|---|---|
/v1/chat/completions | Një rresht komenti (fillon me :) çdo 15 sekonda. | Të gjitha modelet |
/v1/messages | Një event: ping, ose një rresht komenti, çdo 15 sekonda. | Të gjitha modelet |
/v1/responses | Një rresht komenti çdo 15 sekonda. | Modele open-weight të hostuara |
- Dërgoni
"stream": true. Një përgjigje me stream fillon të arrijë sapo modeli shkruan, dhe keep-alive tregon se kërkesa ende po përpunohet. Një përgjigje pa stream nuk dërgon asgjë derisa gjithë përgjigjja të jetë gati. - Jepini klientit një read timeout të gjatë. Shembujt përdorin 600 sekonda. Një timeout më i shkurtër se 15 sekonda mund ta mbarojë një stream mes dy keep-alive-ve.
- Lëreni lexuesin tuaj SSE të kapërcejë rreshtat e komenteve dhe ngjarjet
ping. SDK-të e bëjnë këtë tashmë. - Mos ridërgoni një kërkesë në çastin që një lidhje bie. Një kërkesë që arriti te API-ja ekzekutohet deri në fund dhe numërohet, edhe kur lidhja nuk është më.
- Testojeni rrugën fillimisht me
GET /v1/models. Nuk kërkon çelës dhe kthen një listë të shkurtër JSON.
Probleme lidhjeje
| Simptoma | Shkaku dhe zgjidhja |
|---|---|
Lidhja me 127.0.0.1:9050 ose 127.0.0.1:4444 refuzohet | Asnjë klient Tor ose router I2P nuk po ekzekutohet në kompjuterin tuaj, ose dëgjon në një port tjetër. Tor Browser ofron proxy-n e vet SOCKS në portin 9150. |
Could not resolve host për emrin .onion | Klienti u përpoq ta zgjidhte vetë emrin. Përdorni --socks5-hostname në cURL dhe socks5h:// në një URL proxy, që ta zgjidhë klienti Tor. |
| Proxy I2P përgjigjet me faqen e vet të gabimit | Routeri ende nuk e ka gjetur adresën. Një routeri i duhen disa minuta pasi niset. Provoni përsëri. |
401 me Missing authentication | Kërkesa arriti pa çelës. Dërgoni të njëjtin header si në uebin e hapur. |
Çdo gabim tjetër është i njëjtë si në uebin e hapur. Trajtimi i gabimeve
Çelësi juaj pa JavaScript
Shannon ka edhe një faqe uebi pa JavaScript, të arritshme në uebin e hapur, si shërbim onion dhe si eepsite. Faqja e saj /keys tregon çelësin tuaj API dhe ju lejon ta rrotulloni, kështu që mund ta merrni një çelës pa dalë nga Tor ose I2P. encrypted.shannon-ai.com/keys
Adresat e asaj faqeje uebi në të tri rrjetet listohen këtu: Qasje e enkriptuar