Geënkripteerde, Tor- en I2P-eindpunte
Die API word ook as 'n Tor-onion-diens en 'n I2P-eepsite gepubliseer. Dieselfde roetes, dieselfde sleutel; net die basis-URL en die proxy verander.
Basis-URL's
Vier adresse lei na dieselfde API. Gebruik die een wat by jou netwerk pas, met dieselfde API-sleutel en dieselfde versoeke.
| Netwerk | Basis-URL | Hoe jy dit bereik |
|---|---|---|
| Oop web | https://api.shannon-ai.com/v1 | Direk, oor HTTPS. |
| Geënkripteerde spieël | https://api-encrypted.shannon-ai.com/v1 | Direk, oor HTTPS. 'n Tweede gasheernaam vir dieselfde API. |
| Tor (onion-diens) | http://shannonmd773o5vxz75byha5rkea7nzr3srotw46uwythq3pjl6y4cad.onion/v1 | Deur 'n Tor-kliënt: 'n SOCKS5-proxy, by verstek by 127.0.0.1:9050. |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | Deur 'n I2P-router: 'n HTTP-proxy, by verstek by 127.0.0.1:4444. |
- 'n OpenAI-SDK neem die basis-URL soos gewys, met
/v1. 'n Anthropic-SDK neem dit sonder/v1. - Om 'n adres na te gaan, lees die antwoord-headers van
https://api.shannon-ai.com:Onion-Locationdra die onion-adres enX-I2P-Locationdie I2P-adres. Die onion-adres begin metshannon.
Watter roetes werk
Elke /v1-roete antwoord op al vier adresse:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models het geen sleutel nodig nie, wat dit 'n vinnige toets maak dat jou proxy die API bereik.
Wat dieselfde is en wat verskil
| Item | Dieselfde? | Besonderhede |
|---|---|---|
| Roetes, versoekvelde, antwoorde, foute | Dieselfde | Dieselfde op elke adres. Geen roete gedra hom anders volgens gasheernaam nie. |
| API-sleutel | Dieselfde | Een sleutel werk op elke adres, as Authorization: Bearer of x-api-key. Koekies word nooit op /v1 gelees nie. |
| Balans en perke | Dieselfde | Dieselfde balans en dieselfde perk van 120 versoeke per minuut. Albei word per rekening getel, nie per adres nie. |
| Versoekgrootte | Dieselfde | Tot 32 MiB per versoekliggaam. |
| Skema | Verskil | https:// op die oop web en op die spieël. http:// op die .onion- en .b32.i2p-adresse, waar die netwerk self die verbinding van punt tot punt enkripteer. |
| Proxy | Verskil | Geen op die oop web nie. 'n SOCKS5-proxy vir Tor, 'n HTTP-proxy vir I2P. Die naam moet deur die proxy opgelos word, nie deur jou masjien nie. |
| Spoed | Verskil | Albei netwerke voeg vertraging by elke greep by. I2P is die stadiger van die twee. |
Balans en perke word op hul eie bladsy beskryf. Perke en balans
cURL deur Tor
Laat 'n Tor-kliënt op jou masjien loop. Dit bied 'n SOCKS5-proxy op 127.0.0.1:9050. --socks5-hostname gee die .onion-naam aan daardie 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 deur I2P
Laat 'n I2P-router op jou masjien loop. Dit bied 'n HTTP-proxy op 127.0.0.1:4444 wat die .b32.i2p-naam soos dit is neem.
# 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"}]
}' SDK-basis-URL
'n SDK het twee veranderings nodig: die basis-URL van die netwerk, en 'n HTTP-kliënt wat deur die proxy gaan. In Python neem albei amptelike SDK's 'n httpx-kliënt. Vir 'n SOCKS-proxy, installeer 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) Stroming en keep-alive op stadige skakels
Stroming werk oor albei netwerke. Terwyl 'n stroom oop is en die model nog niks het om te stuur nie, stuur die API 'n keep-alive, sodat die verbinding nie vir 'n proxy of vir jou kliënt dood lyk nie.
| Eindpunt | Keep-alive op 'n oop stroom | Gestuur vir |
|---|---|---|
/v1/chat/completions | 'n Kommentaarreël (dit begin met :) elke 15 sekondes. | Alle modelle |
/v1/messages | 'n event: ping, of 'n kommentaarreël, elke 15 sekondes. | Alle modelle |
/v1/responses | 'n Kommentaarreël elke 15 sekondes. | Gehuisveste oopgewig-modelle |
- Stuur
"stream": true. 'n Gestroomde antwoord begin aankom sodra die model skryf, en die keep-alive wys dat daar nog aan die versoek gewerk word. 'n Antwoord sonder stroming stuur niks voordat die hele antwoord gereed is nie. - Gee die kliënt 'n lang lees-time-out. Die voorbeelde gebruik 600 sekondes. 'n Time-out korter as 15 sekondes kan 'n stroom tussen twee keep-alives beëindig.
- Laat jou SSE-leser kommentaarreëls en
ping-gebeure oorslaan. Die SDK's doen dit reeds. - Moenie 'n versoek weer stuur sodra 'n verbinding val nie. 'n Versoek wat die API bereik het, loop tot sy einde en word getel, ook wanneer die verbinding weg is.
- Toets die pad eers met
GET /v1/models. Dit het geen sleutel nodig nie en gee 'n kort JSON-lys terug.
Verbindingsprobleme
| Simptoom | Oorsaak en regstelling |
|---|---|
Die verbinding met 127.0.0.1:9050 of 127.0.0.1:4444 word geweier | Geen Tor-kliënt of I2P-router loop op jou masjien nie, of dit luister op 'n ander poort. Tor Browser bied sy SOCKS-proxy op poort 9150. |
Could not resolve host vir die .onion-naam | Die kliënt het probeer om die naam self op te los. Gebruik --socks5-hostname in cURL en socks5h:// in 'n proxy-URL, sodat die Tor-kliënt dit oplos. |
| Die I2P-proxy antwoord met sy eie foutbladsy | Die router het die adres nog nie gevind nie. 'n Router het 'n paar minute nodig nadat dit begin het. Probeer weer. |
401 met Missing authentication | Die versoek het sonder 'n sleutel aangekom. Stuur dieselfde header as op die oop web. |
Elke ander fout is dieselfde as op die oop web. Fouthantering
Jou sleutel sonder JavaScript
Shannon het ook 'n webwerf sonder JavaScript, bereikbaar op die oop web, as 'n onion-diens en as 'n eepsite. Sy /keys-bladsy wys jou API-sleutel en laat jou dit wissel, sodat jy 'n sleutel kan kry sonder om Tor of I2P te verlaat. encrypted.shannon-ai.com/keys
Die adresse van daardie webwerf op al drie netwerke word hier gelys: Geënkripteerde toegang