Шифрирани, Tor и I2P ендпоинти
API-то е објавено и како Tor onion услуга и како I2P eepsite. Исти патеки, ист клуч; се менуваат само основниот URL и proxy-то.
Основни URL-а
Четири адреси водат до истото API. Користете ја онаа што одговара на вашата мрежа, со истиот API клуч и истите барања.
| Мрежа | Основен URL | Како да стигнете до него |
|---|---|---|
| Обичен веб | https://api.shannon-ai.com/v1 | Директно, преку HTTPS. |
| Шифрирано огледало | https://api-encrypted.shannon-ai.com/v1 | Директно, преку HTTPS. Второ име на хост за истото API. |
| Tor (onion услуга) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Преку Tor клиент: SOCKS5 proxy, стандардно на 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Преку I2P router: HTTP proxy, стандардно на 127.0.0.1:4444. |
- SDK на OpenAI го прима основниот URL како што е прикажан, со
/v1. SDK на Anthropic го прима без/v1. - За да проверите адреса, прочитајте ги header-ите на одговорот од
https://api.shannon-ai.com:Onion-Locationја носи onion адресата, аX-I2P-LocationI2P адресата. Onion адресата започнува соshannon.
Кои патеки работат
Секоја патека /v1 одговара на сите четири адреси:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models не бара клуч, па е брз тест дали вашиот proxy стигнува до API-то.
Што е исто, а што се разликува
| Ставка | Исто? | Детали |
|---|---|---|
| Патеки, полиња на барање, одговори, грешки | Исто | Исто на секоја адреса. Ниту една патека не се однесува поинаку според името на хостот. |
| API клуч | Исто | Еден клуч работи на секоја адреса, како Authorization: Bearer или x-api-key. Колачињата никогаш не се читаат на /v1. |
| Салдо и ограничувања | Исто | Исто салдо и исто ограничување од 120 барања во минута. И двете се бројат по сметка, а не по адреса. |
| Големина на барањето | Исто | До 32 MiB по тело на барање. |
| Шема | Се разликува | https:// на обичниот веб и на огледалото. http:// на адресите .onion и .b32.i2p, каде самата мрежа ја шифрира врската од крај до крај. |
| Proxy | Се разликува | Нема на обичниот веб. SOCKS5 proxy за Tor, HTTP proxy за I2P. Името мора да го разрешува proxy-то, а не вашата машина. |
| Брзина | Се разликува | Двете мрежи додаваат доцнење на секој бајт. I2P е побавната од двете. |
Салдото и ограничувањата се опишани на нивна страница. Ограничувања и салдо
cURL преку Tor
Пуштете Tor клиент на вашата машина. Нуди SOCKS5 proxy на 127.0.0.1:9050. --socks5-hostname му го предава името .onion на тој 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 преку I2P
Пуштете I2P router на вашата машина. Нуди HTTP proxy на 127.0.0.1:4444, што го прима името .b32.i2p како што е.
# 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 за SDK
SDK-то бара две промени: основниот URL на мрежата и HTTP клиент што минува низ proxy-то. Во Python двете официјални SDK-а примаат клиент httpx. За 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 и keep-alive на бавни врски
Streaming работи преку двете мрежи. Додека streaming е отворен и моделот сè уште нема што да испрати, API-то испраќа keep-alive, па врската не изгледа мртва за proxy или за вашиот клиент.
| Ендпоинт | Keep-alive на отворен streaming | Се испраќа за |
|---|---|---|
/v1/chat/completions | Ред-коментар (започнува со :) на секои 15 секунди. | Сите модели |
/v1/messages | event: ping, или ред-коментар, на секои 15 секунди. | Сите модели |
/v1/responses | Ред-коментар на секои 15 секунди. | Хостирани open-weight модели |
- Испратете
"stream": true. Одговорот со streaming започнува да пристигнува штом моделот пишува, а keep-alive покажува дека барањето сè уште се работи. Одговор без streaming не испраќа ништо додека целиот одговор не е готов. - Дајте му на клиентот долг read timeout. Примерите користат 600 секунди. Timeout пократок од 15 секунди може да го прекине streaming-от меѓу два keep-alive.
- Дозволете вашиот SSE читач да прескокнува редови-коментари и настани
ping. SDK-ата тоа веќе го прават. - Не го испраќајте барањето повторно веднаш штом врската ќе падне. Барање што стигнало до API-то се извршува до крај и се брои, и кога врската ја нема.
- Прво тестирајте ја патеката со
GET /v1/models. Не бара клуч и враќа кратка JSON листа.
Проблеми со врската
| Симптом | Причина и решение |
|---|---|
Врската со 127.0.0.1:9050 или 127.0.0.1:4444 е одбиена | На вашата машина не работи Tor клиент или I2P router, или слуша на друг порт. Tor Browser го нуди својот SOCKS proxy на порт 9150. |
Could not resolve host за името .onion | Клиентот се обидел сам да го разреши името. Користете --socks5-hostname во cURL и socks5h:// во proxy URL, за Tor клиентот да го разреши. |
| I2P proxy-то одговара со своја страница за грешка | Router-от сè уште не ја пронашол адресата. На router-от му требаат неколку минути откако ќе стартува. Обидете се повторно. |
401 со Missing authentication | Барањето пристигнало без клуч. Испратете го истиот header како на обичниот веб. |
Секоја друга грешка е иста како на обичниот веб. Ракување со грешки
Вашиот клуч без JavaScript
Shannon има и веб-страница без JavaScript, достапна на обичниот веб, како onion услуга и како eepsite. Нејзината страница /keys го прикажува вашиот API клуч и ви дозволува да го смените, па можете да добиете клуч без да ги напуштите Tor или I2P. encrypted.shannon-ai.com/keys
Адресите на таа веб-страница на сите три мрежи се наведени овде: Шифриран пристап