SDK
JavaScript / TypeScript
ZvenoAI полностью совместим с OpenAI SDK для Node.js. Меняем только baseURL и ключ — остальной код продолжает работать в серверных, серверлес и Edge окружениях.
Установка
npm install openai
# или
yarn add openaiДля TypeScript автоматически подтянутся типы. Убедитесь, что ZVENOAI_API_KEY доступен в среде выполнения (env variables, секреты Vercel/Cloudflare и т. д.).
Node.js пример
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.ZVENOAI_API_KEY,
baseURL: 'https://api.zveno.ai/v1',
});
const completion = await client.chat.completions.create({
model: 'openai/gpt-4o',
messages: [{ role: 'user', content: 'Напиши summary о ZvenoAI.' }],
});
console.log(completion.choices[0].message.content);Streaming в консоль
const response = await client.chat.completions.create({
model: 'openai/gpt-4o-mini',
stream: true,
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Сгенерируй welcome-сообщение.' },
],
});
for await (const event of response) {
if (event.type === 'token') {
process.stdout.write(event.token.text);
}
}
console.log('\n--- done ---');Next.js / Edge
export const runtime = 'edge';
export async function POST(req: Request) {
const { messages } = await req.json();
const upstream = await fetch('https://api.zveno.ai/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.ZVENOAI_API_KEY}`,
},
body: JSON.stringify({
model: 'openai/gpt-4o-mini',
messages,
stream: true,
}),
});
return new Response(upstream.body, {
headers: { 'Content-Type': 'text/event-stream' },
});
}Ретраи и обработка ошибок
import pRetry from 'p-retry';
await pRetry(
() => client.chat.completions.create({
model: 'openai/gpt-4o-mini',
messages,
}),
{
retries: 3,
onFailedAttempt: (error) => {
if (error.name === 'RateLimitError') {
console.warn('Превышен лимит, повторим попытку', error);
} else {
throw error;
}
},
}
);