POST /v1/chat/completions et obtenir une réponse complète. Pour les nouvelles intégrations, l’API Responses offre une seule forme de requête pour le texte, les entrées multimodales, les outils et des éléments de sortie plus riches.
const chat = await client.generateText({
model: "openai/gpt-6-astra",
messages: [
{ role: "system", content: "You are helpful." },
{ role: "user", content: "Write a limerick about lighthouses." },
],
});
console.log(chat.choices[0].message.content);
chat = client.generate_text({
"model": "openai/gpt-6-astra",
"messages": [
{"role": "system", "content": "You are helpful."},
{"role": "user", "content": "Write a limerick about lighthouses."},
],
})
print(chat["choices"][0]["message"]["content"])
import (
"context"
"fmt"
phaseo "github.com/phaseoteam/Phaseo/packages/sdk/sdk-go/v3"
)
client, err := phaseo.NewFromEnv()
if err != nil {
panic(err)
}
resp, err := client.GenerateText(context.Background(), phaseo.ChatCompletionsRequest{
Model: "openai/gpt-6-astra",
Messages: []map[string]interface{}{
{"role": "user", "content": "Write a one-line haiku."},
},
})
if err != nil {
panic(err)
}
fmt.Println(resp["choices"])
using PhaseoSdk;
var client = new Phaseo();
var response = await client.GenerateText(new Dictionary<string, object>
{
["model"] = "openai/gpt-6-astra",
["messages"] = new[]
{
new Dictionary<string, object>
{
["role"] = "user",
["content"] = "Write a limerick about lighthouses.",
},
},
});
<?php
require 'vendor/autoload.php';
use Phaseo\Sdk\Phaseo;
$client = new Phaseo();
$response = $client->createChatCompletion([
'model' => 'openai/gpt-6-astra',
'messages' => [[
'role' => 'user',
'content' => 'Write a limerick about lighthouses.',
]],
]);
echo $response['choices'][0]['message']['content'];
require 'phaseo_sdk'
client = PhaseoSdk::Phaseo.new
response = client.create_chat_completion(
model: 'openai/gpt-6-astra',
messages: [{ role: 'user', content: 'Write a limerick about lighthouses.' }]
)
import app.phaseo.sdk.Phaseo;
import java.util.List;
import java.util.Map;
Phaseo client = new Phaseo(System.getenv("PHASEO_API_KEY"));
var response = client.createChatCompletion(Map.of(
"model", "openai/gpt-6-astra",
"messages", List.of(
Map.of("role", "user", "content", "Write a one-line haiku.")
)
));
System.out.println(response.path("choices").path(0).path("message").path("content").asText());
use phaseo::Phaseo;
use serde_json::json;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Phaseo::from_env()?;
let response = client.chat_completions(&json!({
"model": "openai/gpt-6-astra",
"messages": [
{
"role": "system",
"content": "Answer concisely."
},
{
"role": "user",
"content": "What is provider fallback?"
}
]
}))?;
let text = response
.body
.pointer("/choices/0/message/content")
.and_then(|value| value.as_str())
.unwrap_or("");
println!("{text}");
Ok(())
}
| Langage | Méthode | Renvoie |
|---|---|---|
| TypeScript | client.generateText(request) ; client.chat.completions.create(request) fait la même chose et passe en streaming quand stream vaut true | ChatCompletionsResponse |
| Python | client.generate_text(request) ; aussi client.chat.completions.create(request) | Un dict APIResponse |
| Go | client.GenerateText(ctx, req), alias CreateChatCompletion ; prend un phaseo.ChatCompletionsRequest | map[string]interface{} |
| C# | client.GenerateText(request), alias CreateChatCompletion | Dictionary<string, object>? |
| PHP | $client->generateText($request), alias createChatCompletion() | Un tableau |
| Ruby | client.generate_text(...), alias create_chat_completion | Un Hash |
| Java | client.createChatCompletion(request) ; prend une Map ou un JsonNode Jackson | Un JsonNode Jackson |
| Rust | client.chat_completions(&request) | PhaseoResponse, avec le JSON dans body |
choices[0].message.content, accompagnée de finish_reason et usage.
Diffuser la réponse en streaming
for await (const chunk of client.streamChat({
model: "openai/gpt-6-astra",
messages: [{ role: "user", content: "Stream a story" }],
})) {
if (chunk.text) process.stdout.write(chunk.text);
}
for chunk in client.stream_chat({
"model": "openai/gpt-6-astra",
"messages": [{"role": "user", "content": "Stream a story"}],
}):
if chunk.get("text"):
print(chunk["text"], end="", flush=True)
import app.phaseo.sdk.Phaseo;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
Phaseo client = new Phaseo(System.getenv("PHASEO_API_KEY"));
var payload = Map.of(
"model", "openai/gpt-6-astra",
"messages", List.of(Map.of("role", "user", "content", "Hello")),
"stream", true
);
try (var lines = client.rawClient().requestLines(
"POST", "/chat/completions", null, null,
new ObjectMapper().writeValueAsString(payload)
)) {
lines.forEach(System.out::println);
}
| Langage | Comment diffuser |
|---|---|
| TypeScript | client.streamChat(request) renvoie des fragments analysés ; client.streamText() renvoie les lignes SSE brutes. |
| Python | client.stream_chat(request) renvoie des fragments analysés ; client.stream_text() renvoie les lignes SSE brutes. |
| Java | createChatCompletion renvoie un seul corps JSON. Définissez stream: true et envoyez la requête avec rawClient().requestLines, qui renvoie les lignes SSE au fur et à mesure de leur arrivée ; fermez-le avec un try-with-resources. |
| Go, C#, PHP, Ruby, Rust | Pas d’assistant de streaming pour Chat Completions ; ne définissez pas stream. En C#, PHP et Ruby, Responses propose une méthode de streaming. |
choices, id, …) et ajoute text (le contenu ajouté par ce fragment), usage et les tokens de raisonnement (reasoningTokens / reasoning_tokens).
Paramètres
Les noms de champs sont ceux du corps JSON, dans tous les SDK. Le typephaseo.ChatCompletionsRequest de Go utilise des champs de struct en PascalCase (Model, Messages).
| Groupe | Champs |
|---|---|
| Obligatoires | model ; messages avec les rôles system, developer, user, assistant ou tool, et un contenu sous forme de chaîne ou de parties |
| Échantillonnage | temperature (0–2), top_p (0–1), top_k (-1 ou plus), min_p (0–1), seed, quand le modèle les prend en charge |
| Longueur et pénalités | max_tokens ou max_completion_tokens, presence_penalty et frequency_penalty (-2 à 2), repetition_penalty (supérieur à 0), stop (chaîne ou tableau) |
| Outils | tools, tool_choice, max_tool_calls, parallel_tool_calls |
| Raisonnement | Objet reasoning ou reasoning_effort |
| Log-probabilités | logprobs, top_logprobs (0–20) |
| Sortie | response_format, n (1–16), stream, service_tier, metadata (valeurs de type chaîne) |
| Gateway | Routage provider, usage (inclure l’usage), meta (inclure le bloc meta du gateway) |
Réponse
ChatCompletionsResponse :
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "openai/gpt-6-astra",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
stream: true, l’endpoint envoie des trames SSE qui se terminent par data: [DONE] :
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-6-astra","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-6-astra","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-6-astra","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":9,"completion_tokens":12,"total_tokens":21}}
data: [DONE]