Skip to main content

Chat completions

client.chat.complete() sends a single request and resolves with the full response.

Basic usage

const response = await client.chat.complete({
model: 'auto',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Explain quantum computing in one sentence.' },
],
});

console.log(response.choices[0].message.content);

Parameters

ParameterTypeRequiredDescription
modelstringYesauto for automatic selection, or a specific model identifier, e.g. gpt-4o, claude-sonnet-4-6
messagesChatMessage[]YesConversation history
temperaturenumberNoSampling temperature 0–2
maxTokensnumberNoMaximum tokens in the response
providerstringNoForce a specific provider, e.g. openai, anthropic

Targeting a specific provider

By default AICP selects the provider according to your routing configuration. You can pin a request to a provider:

const response = await client.chat.complete({
model: 'claude-haiku-4-5-20251001',
messages: [{ role: 'user', content: 'Hello!' }],
provider: 'anthropic',
});

Multi-turn conversations

const messages: ChatMessage[] = [
{ role: 'system', content: 'You are a helpful assistant.' },
];

async function chat(userMessage: string) {
messages.push({ role: 'user', content: userMessage });

const response = await client.chat.complete({ model: 'auto', messages });
const reply = response.choices[0].message;

messages.push(reply);
return reply.content;
}

console.log(await chat('What is 2 + 2?'));
console.log(await chat('And multiply that by 10?'));

Response shape

{
id: 'chatcmpl-…',
object: 'chat.completion',
model: 'gpt-4o-mini',
choices: [
{
index: 0,
message: { role: 'assistant', content: '…' },
finish_reason: 'stop',
},
],
usage: {
prompt_tokens: 10,
completion_tokens: 42,
total_tokens: 52,
},
}