Примеры запросов на восьми языках
Во всех примерах используется текстовый POST /v1/chat/completions и модель gpt-oss-20b-free. Она должна быть доступна в каталоге моделей вашего аккаунта. При смене модели укажите её точный id; платные модели расходуют баланс.
Создайте ключ с правом models в Настройки → API и передайте его приложению через переменную окружения OLESA_API_KEY. Держите ключ на сервере, не вставляйте его в клиентский JavaScript и не публикуйте в репозитории. Если аккаунт создан на o-lesa.com, замените в примерах https://api.o-lesa.ru/v1 на https://api.o-lesa.com/v1.
OpenAI SDK здесь работает с совместимым текстовым поднабором Chat Completions O·LESA. Поддержка всех методов OpenAI не подразумевается. Параметры и ограничения перечислены отдельно.
cURL
curl 'https://api.o-lesa.ru/v1/chat/completions' \
-H "Authorization: Bearer $OLESA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-20b-free",
"messages": [
{
"role": "user",
"content": "Составь краткий план запуска сервиса"
}
]
}'
Python
Установка: pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.o-lesa.ru/v1",
api_key=os.environ["OLESA_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-oss-20b-free",
messages=[{
"role": "user",
"content": "Составь краткий план запуска сервиса",
}],
)
print(response.choices[0].message.content)
JavaScript
Установка: npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.o-lesa.ru/v1",
apiKey: process.env.OLESA_API_KEY,
});
async function main() {
const response = await client.chat.completions.create({
model: "gpt-oss-20b-free",
messages: [{
role: "user",
content: "Составь краткий план запуска сервиса",
}],
});
console.log(response.choices[0].message.content);
}
main().catch(console.error);
TypeScript
Установка: npm install openai и npm install --save-dev typescript tsx @types/node
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.o-lesa.ru/v1",
apiKey: process.env.OLESA_API_KEY,
});
async function main(): Promise<void> {
const response = await client.chat.completions.create({
model: "gpt-oss-20b-free",
messages: [{
role: "user",
content: "Составь краткий план запуска сервиса",
}],
});
console.log(response.choices[0].message.content);
}
main().catch(console.error);
PHP
Установка: composer require openai-php/client guzzlehttp/guzzle. Используется community SDK.
<?php
require __DIR__ . '/vendor/autoload.php';
$client = OpenAI::factory()
->withApiKey(getenv('OLESA_API_KEY'))
->withBaseUri('https://api.o-lesa.ru/v1')
->withHttpClient(new GuzzleHttp\Client(['timeout' => 120]))
->make();
$response = $client->chat()->create([
'model' => 'gpt-oss-20b-free',
'messages' => [[
'role' => 'user',
'content' => 'Составь краткий план запуска сервиса',
]],
]);
echo $response->choices[0]->message->content;
Go
Установка: go get github.com/openai/openai-go/v3
package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey(os.Getenv("OLESA_API_KEY")),
option.WithBaseURL("https://api.o-lesa.ru/v1/"),
)
response, err := client.Chat.Completions.New(
context.Background(),
openai.ChatCompletionNewParams{
Model: "gpt-oss-20b-free",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Составь краткий план запуска сервиса"),
},
},
)
if err != nil { panic(err) }
fmt.Println(response.Choices[0].Message.Content)
}
Rust
Установка: cargo add [email protected] и cargo add tokio --features macros,rt-multi-thread. Используется community SDK.
use async_openai::{
config::OpenAIConfig,
types::{ChatCompletionRequestUserMessageArgs, CreateChatCompletionRequestArgs},
Client,
};
use std::{env, error::Error};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let config = OpenAIConfig::new()
.with_api_key(env::var("OLESA_API_KEY")?)
.with_api_base(r#"https://api.o-lesa.ru/v1"#);
let client = Client::with_config(config);
let request = CreateChatCompletionRequestArgs::default()
.model(r#"gpt-oss-20b-free"#)
.messages([ChatCompletionRequestUserMessageArgs::default()
.content(r#"Составь краткий план запуска сервиса"#)
.build()?
.into()])
.build()?;
let response = client.chat().create(request).await?;
if let Some(choice) = response.choices.first() {
println!("{}", choice.message.content.as_deref().unwrap_or(""));
}
Ok(())
}
Java
Добавьте в pom.xml:
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>4.72.0</version>
</dependency>
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
public class Main {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("OLESA_API_KEY"))
.baseUrl("https://api.o-lesa.ru/v1")
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("gpt-oss-20b-free")
.addUserMessage("Составь краткий план запуска сервиса")
.build();
client.chat().completions().create(params).choices().stream()
.flatMap(choice -> choice.message().content().stream())
.forEach(System.out::println);
}
}
Списание зависит от выбранной модели. При сетевом сбое перед повтором запроса проверьте, не был ли он уже выполнен: ключ идемпотентности для этого метода пока не поддерживается.