এনক্রিপ্টেড, Tor ও I2P এন্ডপয়েন্ট
API একটি Tor onion সার্ভিস ও একটি I2P eepsite হিসেবেও প্রকাশিত। একই রুট, একই key; শুধু base URL ও প্রক্সি বদলায়।
Base URL-সমূহ
চারটি ঠিকানা একই API-তে নিয়ে যায়। একই API key ও একই রিকোয়েস্টসহ আপনার নেটওয়ার্কের উপযোগী ঠিকানাটি ব্যবহার করুন।
| নেটওয়ার্ক | Base 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 base 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 base URL
SDK-র জন্য দুটি পরিবর্তন লাগে: নেটওয়ার্কের base 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) ধীর সংযোগে স্ট্রিমিং ও কিপ-অ্যালাইভ
স্ট্রিমিং দুটি নেটওয়ার্কেই কাজ করে। স্ট্রিম খোলা থাকাকালীন মডেলের পাঠানোর মতো কিছু না থাকলে API একটি কিপ-অ্যালাইভ পাঠায়, যাতে প্রক্সি বা আপনার ক্লায়েন্টের কাছে সংযোগ মৃত মনে না হয়।
| এন্ডপয়েন্ট | খোলা স্ট্রিমে কিপ-অ্যালাইভ | যাদের জন্য পাঠানো হয় |
|---|---|---|
/v1/chat/completions | প্রতি 15 সেকেন্ডে একটি মন্তব্য লাইন (এটি : দিয়ে শুরু হয়)। | সব মডেল |
/v1/messages | প্রতি 15 সেকেন্ডে একটি event: ping, অথবা একটি মন্তব্য লাইন। | সব মডেল |
/v1/responses | প্রতি 15 সেকেন্ডে একটি মন্তব্য লাইন। | হোস্টেড ওপেন-ওয়েট মডেল |
"stream": trueপাঠান। মডেল লেখা শুরু করলেই স্ট্রিম করা উত্তর আসতে শুরু করে, এবং কিপ-অ্যালাইভ দেখায় যে রিকোয়েস্টে কাজ চলছে। স্ট্রিম না করা উত্তর পুরো উত্তর তৈরি না হওয়া পর্যন্ত কিছু পাঠায় না।- ক্লায়েন্টকে দীর্ঘ রিড টাইমআউট দিন। নমুনাগুলো 600 সেকেন্ড ব্যবহার করে। 15 সেকেন্ডের কম টাইমআউট দুটি কিপ-অ্যালাইভের মাঝে স্ট্রিম শেষ করে দিতে পারে।
- আপনার 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
ওই ওয়েবসাইটের তিনটি নেটওয়ার্কের ঠিকানা এখানে তালিকাভুক্ত: এনক্রিপ্টেড অ্যাক্সেস