एन्क्रिप्टेड, Tor और I2P endpoints
API Tor onion सेवा और I2P eepsite के रूप में भी प्रकाशित है। वही रूट, वही key; केवल बेस URL और प्रॉक्सी बदलते हैं।
बेस URL
चार पते एक ही API तक ले जाते हैं। वह चुनें जो आपके नेटवर्क के अनुकूल हो, उसी API key और उन्हीं अनुरोधों के साथ।
| नेटवर्क | बेस 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 प्रॉक्सी, डिफ़ॉल्ट रूप से 127.0.0.1:9050 पर। |
| I2P (eepsite) | http://acvnvkdea4xaczzjap7chysqqi4kkvp2eorfwkasindzmjpa47da.b32.i2p/v1 | I2P राउटर के ज़रिए: एक HTTP प्रॉक्सी, डिफ़ॉल्ट रूप से 127.0.0.1:4444 पर। |
- OpenAI SDK बेस URL को दिखाए अनुसार
/v1के साथ लेता है। Anthropic SDK उसे/v1के बिना लेता है। - पता जाँचने के लिए
https://api.shannon-ai.comके उत्तर हेडर पढ़ें:Onion-Locationमें onion पता होता है औरX-I2P-Locationमें I2P पता। onion पताshannonसे शुरू होता है।
कौन से रूट काम करते हैं
हर /v1 रूट चारों पतों पर उत्तर देता है:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesPOST /v1/messages/count_tokensPOST /v1/tokenizeGET /v1/models
GET /v1/models को key नहीं चाहिए, इसलिए यह जाँचने का तेज़ तरीका है कि आपकी प्रॉक्सी API तक पहुँचती है।
क्या समान है और क्या अलग
| मद | समान? | ब्योरा |
|---|---|---|
| रूट, अनुरोध फ़ील्ड, उत्तर, एरर | समान | हर पते पर समान। कोई रूट होस्ट नाम के अनुसार अलग व्यवहार नहीं करता। |
| API key | समान | एक key हर पते पर काम करती है, Authorization: Bearer या x-api-key के रूप में। /v1 पर कुकीज़ कभी नहीं पढ़ी जातीं। |
| बैलेंस और सीमाएँ | समान | वही बैलेंस और प्रति मिनट 120 अनुरोध की वही सीमा। दोनों प्रति अकाउंट गिने जाते हैं, प्रति पता नहीं। |
| अनुरोध का आकार | समान | प्रति अनुरोध बॉडी 32 MiB तक। |
| स्कीम | अलग | क्लियर वेब पर और मिरर पर https://। .onion और .b32.i2p पतों पर http://, जहाँ नेटवर्क खुद कनेक्शन को शुरू से अंत तक एन्क्रिप्ट करता है। |
| प्रॉक्सी | अलग | क्लियर वेब पर कोई नहीं। Tor के लिए SOCKS5 प्रॉक्सी, I2P के लिए HTTP प्रॉक्सी। नाम प्रॉक्सी को हल करना चाहिए, आपकी मशीन को नहीं। |
| गति | अलग | दोनों नेटवर्क हर बाइट में देरी जोड़ते हैं। दोनों में I2P धीमा है। |
बैलेंस और सीमाएँ अपने पेज पर वर्णित हैं। सीमाएँ और बैलेंस
Tor के ज़रिए cURL
अपनी मशीन पर Tor क्लाइंट चलाएँ। वह 127.0.0.1:9050 पर SOCKS5 प्रॉक्सी देता है। --socks5-hostname .onion नाम उस प्रॉक्सी को सौंपता है।
# 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"}]
}' I2P के ज़रिए cURL
अपनी मशीन पर I2P राउटर चलाएँ। वह 127.0.0.1:4444 पर एक HTTP प्रॉक्सी देता है, जो .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"}]
}' SDK बेस URL
SDK में दो बदलाव चाहिए: नेटवर्क का बेस URL, और ऐसा HTTP क्लाइंट जो प्रॉक्सी से गुज़रे। Python में दोनों आधिकारिक SDK httpx क्लाइंट लेते हैं। SOCKS प्रॉक्सी के लिए 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) धीमे लिंक पर स्ट्रीमिंग और keep-alive
स्ट्रीमिंग दोनों नेटवर्क पर काम करती है। जब स्ट्रीम खुली हो और मॉडल के पास भेजने को अभी कुछ न हो, तब API एक keep-alive भेजती है, ताकि कनेक्शन प्रॉक्सी या आपके क्लाइंट को मरा हुआ न लगे।
| Endpoint | खुली स्ट्रीम पर keep-alive | किसके लिए भेजा जाता है |
|---|---|---|
/v1/chat/completions | हर 15 सेकंड पर एक कमेंट पंक्ति (वह : से शुरू होती है)। | सभी मॉडल |
/v1/messages | हर 15 सेकंड पर एक event: ping, या एक कमेंट पंक्ति। | सभी मॉडल |
/v1/responses | हर 15 सेकंड पर एक कमेंट पंक्ति। | होस्टेड ओपन-वेट मॉडल |
"stream": trueभेजें। स्ट्रीम किया गया उत्तर मॉडल के लिखते ही आना शुरू हो जाता है, और keep-alive दिखाता है कि अनुरोध पर अब भी काम हो रहा है। स्ट्रीम न किया गया उत्तर पूरा जवाब तैयार होने तक कुछ नहीं भेजता।- क्लाइंट को लंबा रीड टाइमआउट दें। नमूने 600 सेकंड इस्तेमाल करते हैं। 15 सेकंड से छोटा टाइमआउट दो keep-alive के बीच स्ट्रीम खत्म कर सकता है।
- अपने SSE रीडर को कमेंट पंक्तियाँ और
pingइवेंट छोड़ने दें। SDK यह पहले से करते हैं। - कनेक्शन टूटते ही अनुरोध दोबारा न भेजें। जो अनुरोध API तक पहुँच गया वह अंत तक चलता है और गिना जाता है, कनेक्शन चले जाने पर भी।
- रास्ते को पहले
GET /v1/modelsसे जाँचें। इसे key नहीं चाहिए और यह एक छोटी JSON सूची लौटाता है।
कनेक्शन की समस्याएँ
| लक्षण | कारण और समाधान |
|---|---|
127.0.0.1:9050 या 127.0.0.1:4444 से कनेक्शन अस्वीकार हो गया | आपकी मशीन पर कोई Tor क्लाइंट या I2P राउटर नहीं चल रहा, या वह किसी दूसरे पोर्ट पर सुन रहा है। Tor Browser अपनी SOCKS प्रॉक्सी पोर्ट 9150 पर देता है। |
.onion नाम के लिए Could not resolve host | क्लाइंट ने नाम खुद हल करने की कोशिश की। cURL में --socks5-hostname और प्रॉक्सी URL में socks5h:// इस्तेमाल करें, ताकि Tor क्लाइंट उसे हल करे। |
| I2P प्रॉक्सी अपना एरर पेज दिखाती है | राउटर को अभी पता नहीं मिला है। राउटर को शुरू होने के बाद कुछ मिनट चाहिए। फिर कोशिश करें। |
Missing authentication के साथ 401 | अनुरोध बिना key के पहुँचा। वही हेडर भेजें जो क्लियर वेब पर भेजते हैं। |
बाकी हर एरर वैसा ही है जैसा क्लियर वेब पर। त्रुटि प्रबंधन
JavaScript के बिना आपकी key
Shannon की एक बिना JavaScript वाली वेबसाइट भी है, जो क्लियर वेब पर, onion सेवा के रूप में और eepsite के रूप में उपलब्ध है। उसका /keys पेज आपकी API key दिखाता है और उसे बदलने देता है, इसलिए आप Tor या I2P छोड़े बिना key पा सकते हैं। encrypted.shannon-ai.com/keys
उस वेबसाइट के तीनों नेटवर्क पर पते यहाँ सूचीबद्ध हैं: एन्क्रिप्टेड एक्सेस