დაშიფრული, Tor და I2P endpoint-ები
API ასევე გამოქვეყნებულია როგორც Tor onion სერვისი და I2P eepsite. იგივე მარშრუტები, იგივე გასაღები; იცვლება მხოლოდ base URL და პროქსი.
Base URL-ები
ოთხი მისამართი ერთსა და იმავე API-მდე მიდის. გამოიყენეთ ის, რომელიც თქვენს ქსელს ერგება, იმავე API გასაღებითა და იმავე მოთხოვნებით.
| ქსელი | 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-Locationonion მისამართს შეიცავს,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-ს გასაღები არ სჭირდება, ამიტომ ის სწრაფი ტესტია იმისა, რომ თქვენი პროქსი API-მდე აღწევს.
რა არის იგივე და რა განსხვავდება
| პუნქტი | იგივეა? | დეტალი |
|---|---|---|
| მარშრუტები, მოთხოვნის ველები, პასუხები, შეცდომები | იგივე | ყველა მისამართზე ერთნაირია. არც ერთი მარშრუტი ჰოსტის სახელის მიხედვით სხვაგვარად არ იქცევა. |
| API გასაღები | იგივე | ერთი გასაღები ყველა მისამართზე მუშაობს, როგორც Authorization: Bearer ან x-api-key. cookie-ები /v1-ზე არასოდეს იკითხება. |
| ბალანსი და ლიმიტები | იგივე | იგივე ბალანსი და წუთში 120 მოთხოვნის იგივე ლიმიტი. ორივე ანგარიშის მიხედვით ითვლება და არა მისამართის მიხედვით. |
| მოთხოვნის ზომა | იგივე | მოთხოვნის სხეულზე 32 MiB-მდე. |
| სქემა | განსხვავდება | https:// ღია ვებში და სარკეზე. http:// .onion და .b32.i2p მისამართებზე, სადაც თავად ქსელი აშიფრავს კავშირს ბოლოდან ბოლომდე. |
| პროქსი | განსხვავდება | ღია ვებში არა. Tor-ისთვის SOCKS5 პროქსი, I2P-სთვის HTTP პროქსი. სახელი პროქსიმ უნდა გადაწყვიტოს და არა თქვენმა მანქანამ. |
| სიჩქარე | განსხვავდება | ორივე ქსელი ყოველ ბაიტს დაყოვნებას მატებს. I2P ორიდან უფრო ნელია. |
ბალანსი და ლიმიტები ცალკე გვერდზეა აღწერილი. ლიმიტები და ბალანსი
cURL Tor-ით
გაუშვით Tor კლიენტი თქვენს მანქანაზე. ის გთავაზობთ SOCKS5 პროქსის 127.0.0.1:9050-ზე. --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"}]
}' cURL I2P-ით
გაუშვით I2P როუტერი თქვენს მანქანაზე. ის გთავაზობთ HTTP პროქსის 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"}]
}' 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) სტრიმინგი და keep-alive ნელ კავშირებზე
სტრიმინგი ორივე ქსელზე მუშაობს. სანამ სტრიმი ღიაა და მოდელს გასაგზავნი ჯერ არაფერი აქვს, API keep-alive-ს აგზავნის, რათა კავშირი პროქსის ან თქვენი კლიენტისთვის მკვდარი არ ჩანდეს.
| Endpoint | Keep-alive გახსნილ სტრიმზე | ვისთვის იგზავნება |
|---|---|---|
/v1/chat/completions | კომენტარის ხაზი (იწყება :-ით) ყოველ 15 წამში. | ყველა მოდელი |
/v1/messages | event: ping ან კომენტარის ხაზი ყოველ 15 წამში. | ყველა მოდელი |
/v1/responses | კომენტარის ხაზი ყოველ 15 წამში. | Hosted open-weight მოდელები |
- გაგზავნეთ
"stream": true. სტრიმით მიღებული პასუხი მოსვლას იწყებს, როგორც კი მოდელი წერს, ხოლო keep-alive აჩვენებს, რომ მოთხოვნა ჯერ კიდევ მუშავდება. სტრიმის გარეშე პასუხი არაფერს აგზავნის, სანამ მთელი პასუხი მზად არ იქნება. - კლიენტს გრძელი read timeout მიეცით. მაგალითები 600 წამს იყენებენ. 15 წამზე მოკლე timeout-მა შეიძლება სტრიმი ორ keep-alive-ს შორის გაწყვიტოს.
- თქვენმა SSE მკითხველმა კომენტარის ხაზები და
pingმოვლენები გამოტოვოს. SDK-ები ამას უკვე აკეთებენ. - მოთხოვნას კავშირის გაწყვეტისთანავე ნუ გაგზავნით ხელახლა. მოთხოვნა, რომელიც API-მდე მივიდა, ბოლომდე სრულდება და ითვლება, მაშინაც, როცა კავშირი აღარ არსებობს.
- გზა ჯერ
GET /v1/models-ით შეამოწმეთ. მას გასაღები არ სჭირდება და მოკლე JSON სიას აბრუნებს.
კავშირის პრობლემები
| სიმპტომი | მიზეზი და გამოსწორება |
|---|---|
კავშირი 127.0.0.1:9050-თან ან 127.0.0.1:4444-თან უარყოფილია | თქვენს მანქანაზე Tor კლიენტი ან I2P როუტერი არ მუშაობს, ან სხვა პორტზე უსმენს. Tor Browser თავის SOCKS პროქსის 9150 პორტზე გთავაზობთ. |
Could not resolve host .onion სახელისთვის | კლიენტმა სახელის გადაწყვეტა თავად სცადა. გამოიყენეთ --socks5-hostname cURL-ში და socks5h:// პროქსის URL-ში, რომ სახელი Tor კლიენტმა გადაწყვიტოს. |
| I2P პროქსი საკუთარი შეცდომის გვერდით პასუხობს | როუტერმა მისამართი ჯერ ვერ იპოვა. როუტერს გაშვების შემდეგ რამდენიმე წუთი სჭირდება. სცადეთ ხელახლა. |
401 Missing authentication-ით | მოთხოვნა გასაღების გარეშე მოვიდა. გაგზავნეთ იგივე სათაური, რაც ღია ვებში. |
ყველა სხვა შეცდომა იგივეა, რაც ღია ვებში. შეცდომების დამუშავება
თქვენი გასაღები JavaScript-ის გარეშე
Shannon-ს ასევე აქვს ვებსაიტი JavaScript-ის გარეშე, რომელიც ღია ვებში, onion სერვისად და eepsite-ად ხელმისაწვდომია. მისი /keys გვერდი თქვენს API გასაღებს აჩვენებს და მის შეცვლის საშუალებას გაძლევთ, ასე რომ გასაღები Tor-ის ან I2P-ის დატოვების გარეშე შეგიძლიათ მიიღოთ. encrypted.shannon-ai.com/keys
ამ ვებსაიტის მისამართები სამივე ქსელში აქ არის ჩამოთვლილი: დაშიფრული წვდომა