Аутентификация
Аутентификация осуществляется с помощью одного API-ключа. Вы можете войти, используя Google или пароль по электронной почте, на странице Получить API-ключ. Ключ отображается сразу и привязан к вашему предоплаченному балансу. В отличие от крупных вендоров, для пробного периода не требуются ежемесячные подписки или кредитные карты. Используйте заголовок Authorization: Bearer YOUR_API_KEY для всех запросов. Ваш ключ — единственный активный учетный документ на аккаунт; генерация нового ключа аннулирует предыдущий.
Базовое завершение
Отправьте стандартный запрос на завершение чата к совместимому с OpenAI эндпоинту. Идентификатор модели — uncensored. Это модель с открытыми весами, настроенная на ответы без отказов в контенте для законного использования взрослыми. Это не GPT, Claude или другая модель вендора. Базовый URL для этого сервиса указан ниже.
curl https://api.ornith.top/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'Замените YOUR_API_KEY на ваш ключ из панели управления. Ответ включает сгенерированный текст в поле choices[0].message.content. Ошибки типа 401 указывают на недействительный ключ, а 402 означает, что ваш предоплаченный баланс исчерпан.
SDK Python
Используйте официальный пакет Python openai. Укажите базовый URL Ornith и предоставьте ваш API-ключ. Это обеспечивает совместимость со стандартной структурой клиента OpenAI. Вы можете передавать сообщения в виде списка словарей, содержащих role и content. Клиент автоматически обрабатывает HTTP-запросы. Этот подход работает как для простой генерации текста, так и для более сложных взаимодействий с использованием инструментов или JSON-режима.
from openai import OpenAI
client = OpenAI(base_url="https://api.ornith.top/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)Объект ответа зеркально отражает стандартную структуру OpenAI. Вы можете получить доступ к сгенерированному тексту напрямую из объекта ответа. Этот метод идеален для бэкенд-сервисов или скриптов, где вам нужен программный доступ к результату модели.
SDK Node.js
Установите пакет npm openai. Инициализируйте клиент с базовым URL Ornith и вашим API-ключом. Структура запроса идентична SDK Python. Используйте метод chat.completions.create. Это подходит для сред JavaScript, создаете ли вы веб-бэкенд или инструмент CLI. Клиент обрабатывает сериализацию и десериализацию ответа.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.ornith.top/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);Обработайте ошибки соответствующим образом. Ошибки сети или API вызовут исключения. Проверяйте код состояния, чтобы различать ошибки аутентификации, лимиты запросов или ошибки сервера. Ответ содержит детали завершения в том же формате, что и SDK Python.
Потоковые ответы
Включите потоковую передачу, установив stream: true в запросе. Это возвращает поток токенов по мере их генерации. Используйте это для обновлений пользовательского интерфейса в реальном времени или постепенного отображения текста. Потоковая передача завершается последним фрагментом, содержащим общее использование токенов. Это позволяет отслеживать расходы в реальном времени, не ожидая полного ответа. Это эффективно для длинных контекстов, где вы хотите показать прогресс.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)Итерируйте по потоку, чтобы обработать каждый фрагмент. Последний фрагмент включает поле usage. Это полезно для прозрачности биллинга. Убедитесь, что ваш клиент правильно обрабатывает поток, чтобы избежать проблем с памятью при больших ответах.
Ограничения, ошибки и контекст
Контекстное окно составляет 100 000 токенов для промпта и ответа модели в сумме. Максимальный объём ответа за один запрос — 32 000 токенов (2 048, если max_tokens не задан). Лимит: 300 запросов в минуту и 8 параллельных запросов на ключ. Тело запроса должно быть не более 8 МБ. При превышении лимита запросов вы получите ошибку 429. Отказы по контенту, связанному с несовершеннолетними, жёстко заданы и применяются всегда. Ошибки не списывают предоплаченный баланс. Баланс не сгорает.