Chat Completions
Το POST /v1/chat/completions δέχεται μια συνομιλία και επιστρέφει το επόμενο μήνυμα του μοντέλου σε μορφή OpenAI Chat Completions. Χρησιμοποιήστε το από οποιοδήποτε OpenAI SDK ή με απλό HTTP· αυτή η σελίδα είναι η αναφορά πεδίο προς πεδίο.
POST https://api.shannon-ai.com/v1/chat/completions
Το μικρότερο αίτημα είναι ένα id μοντέλου και ένα μήνυμα χρήστη.
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": "Say hello in one sentence."}],
)
print(response.choices[0].message.content) 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: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); 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": "Say hello in one sentence."}]
}' Η απάντηση είναι ένα αντικείμενο JSON:
{
"id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "chat.completion",
"created": 1791625200,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, it is good to meet you.",
"reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1184,
"completion_tokens": 46,
"total_tokens": 1230
}
} Κεφαλίδες
Κεφαλίδες αιτήματος
| Κεφαλίδα | Τιμή | Περιγραφή |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Το κλειδί API σας. Αντί γι' αυτό γίνεται δεκτό το x-api-key: YOUR_API_KEY σε κάθε endpoint. |
Content-Type | application/json | Υποχρεωτικό. Οποιαδήποτε άλλη τιμή επιστρέφει 415. |
x-request-id | Προαιρετικό. Το δικό σας id για το αίτημα. Επιστρέφεται αμετάβλητο στην απάντηση. |
Κεφαλίδες απάντησης
| Κεφαλίδα | Περιγραφή |
|---|---|
x-request-id | Σε κάθε απάντηση, συμπεριλαμβανομένων σφαλμάτων και streams: η τιμή που στείλατε ή 12 δεκαεξαδικοί χαρακτήρες όταν δεν στείλατε καμία. Αναφέρετέ την όταν αναφέρετε ένα πρόβλημα. |
content-type | application/json, ή text/event-stream όταν το stream είναι true. |
Πεδία αιτήματος
Μόνο το messages είναι υποχρεωτικό. Η στήλη Εφαρμόζεται από ονομάζει τα μοντέλα στα οποία ένα πεδίο αλλάζει την απάντηση. Τα φιλοξενούμενα μοντέλα ανοιχτών βαρών είναι τα δώδεκα ids της λίστας μοντέλων· η οικογένεια Shannon 3 είναι τα shannon-3, shannon-3-pro, shannon-3.1 και shannon-3.1-pro. Μοντέλα & τιμές
| Πεδίο | Τύπος | Προεπιλογή | Περιγραφή | Εφαρμόζεται από |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Το μοντέλο που απαντά: ένα id από τη λίστα μοντέλων. Στείλτε το με κάθε αίτημα. Η αντιστοίχιση δεν κάνει διάκριση πεζών-κεφαλαίων. Ένα id που δεν είναι δημοσιευμένο επιστρέφει 400 unknown model. | Όλα τα μοντέλα |
messages | array | Υποχρεωτικό. Η συνομιλία, με το παλαιότερο μήνυμα πρώτο. Δείτε παρακάτω Μηνύματα. | Όλα τα μοντέλα | |
stream | boolean | false | Το true στέλνει την απάντηση ως server-sent events καθώς γράφεται. | Όλα τα μοντέλα |
max_tokens | integer | 4096 | Ανώτατο όριο της απάντησης, σε tokens. Μια τιμή εκτός του εύρους 1 έως 65,536 μετακινείται μέσα σε αυτό το εύρος. Είναι επίσης το ποσό που δεσμεύεται από το υπόλοιπό σας όσο εκτελείται το αίτημα. Δείτε παρακάτω Μήκος εξόδου. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Ίδιο με το max_tokens. Όταν σταλούν και τα δύο, χρησιμοποιείται το max_tokens. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Θερμοκρασία δειγματοληψίας. Στα φιλοξενούμενα μοντέλα ανοιχτών βαρών η προεπιλογή είναι 1 και οι τιμές διατηρούνται μεταξύ 0 και 2. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Δειγματοληψία nucleus. Οι τιμές διατηρούνται μεταξύ 0 και 1. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
seed | integer | Seed του sampler, οποιοσδήποτε ακέραιος. Χωρίς αυτό, το seed προκύπτει από το μοντέλο και τη συνομιλία, οπότε το ίδιο αίτημα που στέλνεται δύο φορές χρησιμοποιεί το ίδιο seed. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών | |
stop | string | array | Ένα string ή ένας πίνακας από strings. Χρησιμοποιούνται έως 4. Η απάντηση τελειώνει πριν από το πρώτο που εμφανίζεται· το ίδιο το κείμενο διακοπής δεν επιστρέφεται. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών | |
reasoning_effort | string | high | Πόσο συλλογίζεται το μοντέλο πριν απαντήσει: off, low, medium ή high. Τα none και minimal σημαίνουν off, το default σημαίνει medium, το max σημαίνει high. Οποιαδήποτε άλλη τιμή επιστρέφει 400. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
reasoning | object | Η ίδια ρύθμιση σε μορφή αντικειμένου: {"effort": "low"}. Όταν σταλούν και τα δύο, χρησιμοποιείται το reasoning_effort. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών | |
tools | array | Οι συναρτήσεις που μπορεί να καλέσει το μοντέλο, η καθεμία ως {"type": "function", "function": {"name", "description", "parameters"}}. Οι κλήσεις του μοντέλου επιστρέφονται στο tool_calls· τις εκτελεί ο κώδικάς σας. | Όλα τα μοντέλα | |
tool_choice | string | object | auto | Το "auto" αφήνει το μοντέλο να αποφασίσει. Το "required" το αναγκάζει να καλέσει εργαλείο. Το {"type": "function", "function": {"name": "…"}} το αναγκάζει να καλέσει εκείνο το εργαλείο. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
response_format | object | {"type": "json_object"} για απάντηση JSON, ή {"type": "json_schema", "json_schema": {…}} για απάντηση που ακολουθεί το schema σας. | Όλα τα επίπεδα Shannon· φιλοξενούμενα μοντέλα ανοιχτών βαρών όπως αναγράφεται ανά id | |
web_search | boolean | false | Το true αφήνει το μοντέλο να αναζητήσει στον ιστό πριν απαντήσει. | shannon-1.6-*, shannon-2-*, οικογένεια Shannon 3 |
Άλλα πεδία του OpenAI, όπως n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store και prompt_cache_key, γίνονται δεκτά ώστε ο υπάρχων κώδικας client να τρέχει αμετάβλητος. Δεν αλλάζουν την απάντηση: υπάρχει πάντα μία επιλογή και ένα stream τελειώνει πάντα με χρήση.
Ένα πεδίο με λάθος τύπο JSON, για παράδειγμα "max_tokens": "100", επιστρέφει 422. Το ίδιο ισχύει για αίτημα χωρίς messages.
Τα εργαλεία, η δομημένη έξοδος, ο συλλογισμός και η αναζήτηση στον ιστό έχουν η καθεμία τη δική της σελίδα: Κλήση συναρτήσεων, Δομημένες έξοδοι, Προσπάθεια συλλογισμού, Ενσωματωμένη αναζήτηση ιστού.
Ένα αίτημα με επιλογές
Αυτό το αίτημα ορίζει ένα μήνυμα system, τα πεδία δειγματοληψίας και την προσπάθεια συλλογισμού. Χρησιμοποιεί φιλοξενούμενο μοντέλο ανοιχτών βαρών, το οποίο τα εφαρμόζει όλα.
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="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages=[
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"},
],
max_tokens=512,
temperature=0.3,
top_p=0.9,
seed=7,
stop=["\n\n"],
reasoning_effort="low",
)
message = response.choices[0].message
print(message.reasoning_content) # the reasoning
print(message.content) # the answer
print(response.usage) 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: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a physics teacher. Answer in two sentences." },
{ role: "user", content: "Why is the sky blue?" },
],
max_tokens: 512,
temperature: 0.3,
top_p: 0.9,
seed: 7,
stop: ["\n\n"],
reasoning_effort: "low",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"seed": 7,
"stop": ["\n\n"],
"reasoning_effort": "low"
}' Η απάντηση έχει την ίδια μορφή με την παραπάνω. Το usage της προσθέτει δύο λεπτομέρειες στα φιλοξενούμενα μοντέλα ανοιχτών βαρών: τα tokens prompt που διαβάστηκαν από το cache και τα tokens που δαπανήθηκαν στον συλλογισμό.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Μήκος εξόδου
Το max_tokens κάνει δύο πράγματα. Πρώτον, είναι ο αριθμός των tokens που δεσμεύονται από το υπόλοιπό σας όταν ξεκινά το αίτημα. Όταν ολοκληρωθεί η απάντηση, το ποσό αυτό αντικαθίσταται από τα tokens που χρησιμοποίησε το αίτημα. Αν το max_tokens είναι μεγαλύτερο από όσο απομένει στο υπόλοιπό σας, το αίτημα επιστρέφει 429 Quota exceeded ακόμη κι αν η ίδια η απάντηση θα χωρούσε. Στείλτε χαμηλότερο max_tokens για να δεσμευτεί λιγότερο.
Το shannon-coder-1 μετριέται διαφορετικά σε αυτό το endpoint: κάθε αίτημα είναι μία από τις κλήσεις Shannon Coder του πλάνου σας και δεν δεσμεύονται tokens γι' αυτό. Όρια και υπόλοιπο
Δεύτερον, περιορίζει το μήκος της απάντησης σε αυτά τα μοντέλα:
| Μοντέλα | Τι κάνει το max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Η απάντηση σταματά όταν φτάσει το όριο. Ένα stream τότε τελειώνει με finish_reason length. |
| Φιλοξενούμενα μοντέλα ανοιχτών βαρών | Το κείμενο της απάντησης σταματά στο max_tokens. Ο συλλογισμός δεν προσμετράται σε αυτό. Τιμές κάτω από 256 λειτουργούν ως 256. |
Χωρίς max_tokens ή max_completion_tokens, η τιμή είναι 4,096. Στο shannon-coder-1 είναι 65,536.
Μηνύματα
Κάθε μήνυμα είναι αντικείμενο με role και content. Το content είναι string ή πίνακας από μέρη όταν το μήνυμα φέρει περισσότερα από κείμενο.
| Ρόλος | Περιγραφή | Εφαρμόζεται από |
|---|---|---|
system | Οδηγίες για το μοντέλο. Βάλτε το πρώτο. Στα επίπεδα Shannon χρησιμοποιείται το πρώτο μήνυμα system. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Διαβάζεται ως system. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
user | Αυτό που ρωτάτε. Στα επίπεδα Shannon το τελευταίο μήνυμα user είναι το prompt και τα μηνύματα πριν από αυτό είναι το ιστορικό. | Όλα τα μοντέλα |
assistant | Προηγούμενες απαντήσεις του μοντέλου. Κρατήστε τα tool_calls του όταν στέλνετε αποτέλεσμα εργαλείου μετά από αυτό. | Όλα τα μοντέλα |
tool | Το αποτέλεσμα μιας κλήσης εργαλείου: το tool_call_id περιέχει το id της κλήσης και το content το αποτέλεσμα ως string. | Όλα τα μοντέλα |
Με id της οικογένειας Shannon 3, βάλτε τις οδηγίες που πρέπει να ισχύουν στο μήνυμα user.
Στα επίπεδα Shannon ένα αίτημα χωρίς κείμενο χρήστη και χωρίς tools επιστρέφει 400 No user message provided.
Μέρη περιεχομένου
| Μέρος | Περιγραφή | Διαθέσιμο σε |
|---|---|---|
{"type": "text", "text": "…"} | Απλό κείμενο. | Όλα τα μοντέλα |
{"type": "image_url", "image_url": {"url": "…"}} | Μια εικόνα, ως URL data: με περιεχόμενο base64 ή ως URL http(s). | Οικογένεια Shannon 3, shannon-1.6-lite, shannon-1.6-pro και τα φιλοξενούμενα μοντέλα ανοιχτών βαρών που δηλώνουν είσοδο εικόνας |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Ένα έγγραφο (PDF, Word, PowerPoint ή Excel), ως base64 ή με URL. | Οικογένεια Shannon 3 |
Τα μεγέθη, τα όρια και ο πλήρης κατάλογος μορφών έχουν τη δική τους σελίδα. Εικόνες και αρχεία
Το αντικείμενο απάντησης
| Πεδίο | Τύπος | Περιγραφή |
|---|---|---|
id | string | chatcmpl- ακολουθούμενο από 32 δεκαεξαδικούς χαρακτήρες. |
object | string | Πάντα chat.completion. |
created | integer | Ώρα της απάντησης, σε δευτερόλεπτα Unix. |
model | string | Το κανονικό id του μοντέλου που απάντησε. Μπορεί να διαφέρει στην ορθογραφία από το id που στείλατε. |
choices | array | Πάντα ακριβώς μία επιλογή, με index 0. |
choices[0].message.role | string | Πάντα assistant. |
choices[0].message.content | string | null | Το κείμενο της απάντησης. Με tool_calls είναι null στα επίπεδα Shannon· τα φιλοξενούμενα μοντέλα ανοιχτών βαρών μπορούν να στείλουν κείμενο δίπλα στις κλήσεις. |
choices[0].message.reasoning_content | string | null | Ο συλλογισμός που έγραψε το μοντέλο πριν από την απάντηση, ή null όταν δεν υπάρχει. |
choices[0].message.tool_calls | array | Υπάρχει μόνο όταν το μοντέλο καλεί εργαλεία. Κάθε εγγραφή έχει ένα id, type function και function με το name και τα arguments ως string JSON. |
choices[0].message.annotations | array | Μόνο σε αίτημα με web_search: true του οποίου η αναζήτηση βρήκε κάτι. Ένα url_citation για κάθε πηγή που κατονομάζει ένας δείκτης στο content, με url, title, start_index και end_index (η θέση του δείκτη, μετρημένη σε χαρακτήρες, το τέλος δεν περιλαμβάνεται). |
choices[0].finish_reason | string | Γιατί τελείωσε η απάντηση. Δείτε Λόγοι ολοκλήρωσης. |
usage | object | Τα tokens του αιτήματος. Δείτε Χρήση. |
sources | array | Μόνο σε αίτημα με web_search: true του οποίου η αναζήτηση βρήκε κάτι: τα αποτελέσματα που δόθηκαν στο μοντέλο, καθένα με index, title και url. Το [1] στην απάντηση είναι η εγγραφή με index 1. |
Λόγοι ολοκλήρωσης
| finish_reason | Περιγραφή |
|---|---|
stop | Το μοντέλο ολοκλήρωσε την απάντησή του ή εμφανίστηκε ένα string stop. |
tool_calls | Το μοντέλο καλεί ένα ή περισσότερα εργαλεία. Εκτελέστε τα και στείλτε τα αποτελέσματα σε μηνύματα tool. |
length | Η απάντηση κόπηκε στο όριο εξόδου. Αναφέρεται σε streams των shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 και της οικογένειας Shannon 3. |
Μια απάντηση χωρίς streaming αναφέρει stop ή tool_calls.
Χρήση
| Πεδίο | Τύπος | Περιγραφή | Διαθέσιμο σε |
|---|---|---|---|
usage.prompt_tokens | integer | Tokens εισόδου. | Όλα τα μοντέλα |
usage.completion_tokens | integer | Tokens εξόδου: συλλογισμός, απάντηση και κλήσεις εργαλείων μαζί. | Όλα τα μοντέλα |
usage.total_tokens | integer | prompt_tokens συν completion_tokens. | Όλα τα μοντέλα |
usage.prompt_tokens_details.cached_tokens | integer | Το μέρος του prompt_tokens που διαβάστηκε από το prompt cache. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
usage.completion_tokens_details.reasoning_tokens | integer | Το μέρος του completion_tokens που δαπανήθηκε στον συλλογισμό. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
Στα φιλοξενούμενα μοντέλα ανοιχτών βαρών, το prompt_tokens είναι τα μηνύματά σας και οι ορισμοί εργαλείων μετρημένα με το δικό του tokenizer του μοντέλου, συν τα tokens τυχόν εικόνων. Τα endpoints μέτρησης tokens επιστρέφουν τον ίδιο αριθμό πριν στείλετε. Καταμέτρηση tokens
Στα επίπεδα Shannon, το prompt_tokens μετρά ό,τι διάβασε το μοντέλο για να γράψει την απάντηση, οπότε είναι μεγαλύτερο από το κείμενο των μηνυμάτων σας μόνο.
Streaming
Με το stream ορισμένο σε true, η απάντηση φτάνει ως συμβάντα chat.completion.chunk και τελειώνει με data: [DONE]. Το τελευταίο chunk πριν από αυτό φέρει finish_reason και usage· δεν χρειάζονται stream_options. Οι μορφές των chunks, οι γραμμές keep-alive και τα σφάλματα μέσα σε stream έχουν τη δική τους σελίδα. Ροή
Σφάλματα
Ένα σφάλμα είναι αντικείμενο JSON με μέλος error. Οι έλεγχοι εκτελούνται με αυτή τη σειρά: κλειδί API, σώμα αιτήματος, id μοντέλου και μετά υπόλοιπο. Ο πίνακας απαριθμεί όσα επιστρέφει πιο συχνά αυτό το endpoint. Ο πλήρης κατάλογος, με το τι να δοκιμάσετε ξανά, έχει τη δική του σελίδα. Χειρισμός σφαλμάτων
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Κατάσταση | Τύπος | Μήνυμα | Πότε |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Δεν στάλθηκε κλειδί API ή το κλειδί είναι άγνωστο ή ανακλήθηκε. |
400 | invalid_request_error | unknown model: <id> | Το model δεν είναι δημοσιευμένο id. |
400 | invalid_request_error | No user message provided | Επίπεδα Shannon: το αίτημα δεν έχει κείμενο χρήστη ούτε tools. |
400 | invalid_request_error | <id> does not accept image input | Στάλθηκε μέρος εικόνας σε φιλοξενούμενο μοντέλο ανοιχτών βαρών χωρίς είσοδο εικόνας. |
400 | invalid_request_error | <id> does not accept response_format | Στάλθηκε response_format σε φιλοξενούμενο μοντέλο ανοιχτών βαρών χωρίς δομημένη έξοδο. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Το reasoning_effort έχει τιμή εκτός της λίστας. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Λείπει το messages ή ένα πεδίο έχει λάθος τύπο JSON. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Το max_tokens είναι μεγαλύτερο από όσο απομένει στο υπόλοιπό σας. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Προστασία από υπερφόρτωση: περισσότερα από 120 αιτήματα σε ένα λεπτό στον λογαριασμό σας. |
500 | server_error | The model backend failed to answer. Please retry. | Το μοντέλο δεν παρήγαγε απάντηση. Στείλτε ξανά το αίτημα. |
502 | api_error | The model backend failed to answer. Please retry. | Το ίδιο, στην οικογένεια Shannon 3 και στα φιλοξενούμενα μοντέλα ανοιχτών βαρών. |