SDK
कोई भी OpenAI या Anthropic SDK सीधे काम करता है।
Shannon OpenAI और Anthropic दोनों वायर फ़ॉर्मेट बोलता है, इसलिए आप दोनों के आधिकारिक SDK जैसे हैं वैसे इस्तेमाल करते हैं। आप क्लाइंट में तीन मान बदलते हैं: बेस URL, API key और मॉडल id। आपका बाकी कोड वैसा ही रहता है।
क्या सेट करें
| सेटिंग | OpenAI SDK | Anthropic SDK |
|---|---|---|
| बेस URL | https://api.shannon-ai.com/v1 | https://api.shannon-ai.com |
| API key | आपकी Shannon key। SDK इसे Authorization: Bearer के रूप में भेजता है। | आपकी Shannon key। SDK इसे x-api-key के रूप में भेजता है। |
| मॉडल | एक प्रकाशित मॉडल id, उदाहरण के लिए shannon-3। | एक प्रकाशित मॉडल id, उदाहरण के लिए shannon-1.6-lite। |
| यह कौन से endpoints तक पहुँचता है | /v1/chat/completions, /v1/responses, /v1/models | /v1/messages, /v1/messages/count_tokens |
| एनवायरनमेंट वेरिएबल | OPENAI_API_KEY और OPENAI_BASE_URL, जिन्हें Python और JavaScript SDK तब पढ़ते हैं जब आप कोई मान न दें। | ANTHROPIC_API_KEY और ANTHROPIC_BASE_URL, जिन्हें Python और TypeScript SDK तब पढ़ते हैं जब आप कोई मान न दें। |
दोनों बेस URL में /v1 का अंतर है: OpenAI SDK अपने बेस URL में /chat/completions जोड़ता है, Anthropic SDK /v1/messages जोड़ता है। जो मॉडल नाम Shannon प्रकाशित नहीं करता, उसका उत्तर 400 और unknown model से दिया जाता है। मॉडल और कीमतें
आपकी key Keys & usage पेज पर है। Keys और उपयोग
OpenAI SDK
आधिकारिक OpenAI SDK POST /v1/chat/completions और POST /v1/responses कॉल करते हैं। हर नमूना एक यूज़र संदेश भेजता है और उत्तर छापता है।
# pip install openai
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Hello, Shannon!"}],
)
print(response.choices[0].message.content) // npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Hello, Shannon!" }],
});
console.log(response.choices[0].message.content); // go get github.com/openai/openai-go/v3
package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("YOUR_API_KEY"),
option.WithBaseURL("https://api.shannon-ai.com/v1/"),
)
completion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Hello, Shannon!"),
},
})
if err != nil {
panic(err)
}
fmt.Println(completion.Choices[0].Message.Content)
} // Gradle: implementation("com.openai:openai-java:<version>")
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey("YOUR_API_KEY")
.baseUrl("https://api.shannon-ai.com/v1")
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("shannon-3")
.addUserMessage("Hello, Shannon!")
.build();
ChatCompletion completion = client.chat().completions().create(params);
completion.choices().get(0).message().content().ifPresent(System.out::println); // dotnet add package OpenAI
using System.ClientModel;
using OpenAI;
using OpenAI.Chat;
ChatClient client = new(
model: "shannon-3",
credential: new ApiKeyCredential("YOUR_API_KEY"),
options: new OpenAIClientOptions()
{
Endpoint = new Uri("https://api.shannon-ai.com/v1")
});
ChatCompletion completion = client.CompleteChat("Hello, Shannon!");
Console.WriteLine(completion.Content[0].Text); | भाषा | इंस्टॉल | बेस URL विकल्प | स्रोत |
|---|---|---|---|
| Python | pip install openai | base_url | openai/openai-python |
| JavaScript / TypeScript | npm install openai | baseURL | openai/openai-node |
| Go | go get github.com/openai/openai-go/v3 | option.WithBaseURL | openai/openai-go |
| Java | com.openai:openai-java | baseUrl | openai/openai-java |
| .NET | dotnet add package OpenAI | OpenAIClientOptions.Endpoint | openai/openai-dotnet |
दोनों endpoints का हर फ़ील्ड उनके अपने पेज पर वर्णित है। Chat Completions Responses API
Anthropic SDK
आधिकारिक Anthropic SDK POST /v1/messages कॉल करते हैं। वे हर कॉल पर max_tokens माँगते हैं, इसलिए नमूने shannon-1.6-lite इस्तेमाल करते हैं, जो इसे लागू करता है। हर नमूना उत्तर के टेक्स्ट ब्लॉक छापता है।
# pip install anthropic
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="shannon-1.6-lite",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Shannon!"}],
)
for block in message.content:
if block.type == "text":
print(block.text) // npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "shannon-1.6-lite",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Shannon!" }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
} // go get github.com/anthropics/anthropic-sdk-go
package main
import (
"context"
"fmt"
"github.com/anthropics/anthropic-sdk-go"
"github.com/anthropics/anthropic-sdk-go/option"
)
func main() {
client := anthropic.NewClient(
option.WithAPIKey("YOUR_API_KEY"),
option.WithBaseURL("https://api.shannon-ai.com/"),
)
message, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
Model: "shannon-1.6-lite",
MaxTokens: 1024,
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("Hello, Shannon!")),
},
})
if err != nil {
panic(err)
}
for _, block := range message.Content {
if block.Type == "text" {
fmt.Println(block.Text)
}
}
} // Gradle: implementation("com.anthropic:anthropic-java:<version>")
import com.anthropic.client.AnthropicClient;
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
import com.anthropic.models.messages.Message;
import com.anthropic.models.messages.MessageCreateParams;
AnthropicClient client = AnthropicOkHttpClient.builder()
.apiKey("YOUR_API_KEY")
.baseUrl("https://api.shannon-ai.com")
.build();
MessageCreateParams params = MessageCreateParams.builder()
.model("shannon-1.6-lite")
.maxTokens(1024L)
.addUserMessage("Hello, Shannon!")
.build();
Message message = client.messages().create(params);
message.content().stream()
.flatMap(block -> block.text().stream())
.forEach(text -> System.out.println(text.text())); | भाषा | इंस्टॉल | बेस URL विकल्प | स्रोत |
|---|---|---|---|
| Python | pip install anthropic | base_url | anthropics/anthropic-sdk-python |
| TypeScript | npm install @anthropic-ai/sdk | baseURL | anthropics/anthropic-sdk-typescript |
| Go | go get github.com/anthropics/anthropic-sdk-go | option.WithBaseURL | anthropics/anthropic-sdk-go |
| Java | com.anthropic:anthropic-java | baseUrl | anthropics/anthropic-sdk-java |
Messages फ़ॉर्मेट और उसके अंतर Anthropic संगतता पेज पर हैं। Anthropic फ़ॉर्मेट
SDK किस पर भरोसा कर सकते हैं
- जो अनुरोध फ़ील्ड API इस्तेमाल नहीं करती वह स्वीकार हो जाता है। API जिस फ़ील्ड को जानती है, उसे गलत प्रकार के साथ भेजने पर उत्तर
422होता है। - SDK जो वर्शन और बीटा हेडर जोड़ते हैं (
anthropic-version,anthropic-beta,openai-beta) वे स्वीकार किए जाते हैं। इनमें से कोई ज़रूरी नहीं है। - उत्तर का
modelप्रकाशित id है, इसलिए आप उसे जैसा है वैसा वापस भेज सकते हैं। /v1/messagesपर उत्तरthinkingब्लॉक से शुरू हो सकता है। पहला ब्लॉक लेने के बजाय प्रकारtextके ब्लॉक पढ़ें।- स्ट्रीमिंग SDK के अपने स्ट्रीम हेल्पर से काम करती है। usage हर स्ट्रीम के अंत में आता है।
- हर उत्तर में
x-request-idहेडर होता है। अपनाx-request-idभेजें और वही मान लौट आता है।
कम्युनिटी SDK
अन्य लेखकों के OpenAI API के लिए लिखे क्लाइंट इसी तरह काम करते हैं: क्लाइंट को /v1 के साथ बेस URL, अपनी key और एक Shannon मॉडल id दें। इनका रखरखाव इनके लेखक करते हैं, Shannon नहीं।
| भाषा | इंस्टॉल | क्लाइंट |
|---|---|---|
| Go | go get github.com/sashabaranov/go-openai | sashabaranov/go-openai |
| Ruby | gem install ruby-openai | alexrudall/ruby-openai |
| PHP | composer require openai-php/client | openai-php/client |
| Rust | cargo add async-openai | 64bit/async-openai |
SDK के बिना
आपको SDK की ज़रूरत नहीं है। JSON भेज सकने वाला कोई भी HTTP क्लाइंट काम करता है:
- JSON बॉडी और हेडर
Content-Type: application/jsonके साथPOST। इसके बिना अनुरोध का उत्तर415से दिया जाता है। - आपकी key
Authorization: Bearer <key>में याx-api-key: <key>में। दोनों हर endpoint पर काम करते हैं। - 32 MiB तक की बॉडी।
"stream": trueके साथ उत्तर सर्वर-सेंट इवेंट स्ट्रीम (text/event-stream) है। इसे पंक्ति-दर-पंक्ति पढ़ें और बफ़र न करें।- एरर HTTP स्टेटस के साथ
error.typeऔरerror.messageवाली JSON बॉडी है।
curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Hello, Shannon!"}]
}' import requests
response = requests.post(
"https://api.shannon-ai.com/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "shannon-3",
"messages": [{"role": "user", "content": "Hello, Shannon!"}],
},
)
response.raise_for_status()
print(response.json()["choices"][0]["message"]["content"]) const response = await fetch("https://api.shannon-ai.com/v1/chat/completions", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "shannon-3",
messages: [{ role: "user", content: "Hello, Shannon!" }],
}),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data.choices[0].message.content); स्ट्रीम के इवेंट और एरर प्रकारों के लिए देखें: स्ट्रीमिंग त्रुटि प्रबंधन