Weatmood API
Weatmood API даёт доступ к языковым моделям через единый интерфейс, совместимый с [OI] Chat Completions API. Если у вас уже есть код под [OI], достаточно заменить base_url и API-ключ.
Поддерживаются официальные SDK [OI] для Python, Node.js, Go и Java, а также любые библиотеки, работающие с Chat Completions API.
Быстрый старт
Получите API-ключ в разделе API ключи, затем отправьте первый запрос.
Доступ к провайдеру ещё не открыт, поэтому запросы к моделям сейчас возвращают ошибку. Примеры ниже описывают рабочий формат — они заработают сразу после включения моделей.
Python
pip install openai
from openai import OpenAI
client = OpenAI(
api_key="wm-ваш-ключ",
base_url="https://api.weatmood.com/v1"
)
response = client.chat.completions.create(
model="weatmood-alpha",
messages=[
{"role": "system", "content": "Ты — полезный ассистент."},
{"role": "user", "content": "Объясни, что такое рекурсия"}
]
)
print(response.choices[0].message.content)
Node.js
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "wm-ваш-ключ",
baseURL: "https://api.weatmood.com/v1"
});
const response = await client.chat.completions.create({
model: "weatmood-alpha",
messages: [{ role: "user", content: "Привет!" }]
});
console.log(response.choices[0].message.content);
cURL
curl https://api.weatmood.com/v1/chat/completions \
-H "Authorization: Bearer wm-ваш-ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "weatmood-alpha",
"messages": [{"role": "user", "content": "Привет!"}]
}'
Аутентификация
Каждый запрос должен содержать заголовок Authorization с вашим API-ключом:
Authorization: Bearer wm-YOUR_API_KEY
Ключи имеют префикс wm- и создаются в разделе API ключи. Храните ключ в переменной окружения, а не в коде:
# .env
WEATMOOD_API_KEY=wm-ваш-ключ
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["WEATMOOD_API_KEY"],
base_url="https://api.weatmood.com/v1"
)
Никогда не публикуйте ключ в открытых репозиториях и не используйте его в клиентском коде (браузер, мобильное приложение) — только на сервере. При утечке немедленно отзовите ключ в консоли.
Chat Completions
Основной эндпоинт для генерации ответов. Принимает историю сообщений и возвращает ответ модели.
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
model | string | Обязательно. ID модели, например weatmood-alpha |
messages | array | Обязательно. История диалога |
stream | boolean | Печатать ответ по мере генерации. По умолчанию false |
temperature | number | Случайность ответа, 0–2. По умолчанию 1 |
max_tokens | integer | Максимум токенов в ответе |
top_p | number | Nucleus sampling, 0–1 |
stop | string / array | Последовательности, останавливающие генерацию |
Формат сообщений
{
"messages": [
{"role": "system", "content": "Ты — ассистент поддержки."},
{"role": "user", "content": "Как сбросить пароль?"},
{"role": "assistant", "content": "Откройте настройки..."},
{"role": "user", "content": "А если нет доступа к почте?"}
]
}
Роли: system — задаёт поведение, user — сообщения пользователя, assistant — предыдущие ответы модели.
Ответ
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1726900000,
"model": "weatmood-alpha",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Для сброса пароля..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 156,
"total_tokens": 180
}
}
Стриминг
Установите stream: true, чтобы получать ответ по частям. Это снижает задержку до первого символа.
stream = client.chat.completions.create(
model="weatmood-alpha",
messages=[{"role": "user", "content": "Напиши хокку"}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Каждый чанк — отдельная строка data: в формате SSE. Поток завершается строкой data: [DONE].
data: {"choices":[{"delta":{"content":"Ти"}}]}
data: {"choices":[{"delta":{"content":"хий"}}]}
data: {"choices":[{"delta":{"content":" пруд"}}]}
data: [DONE]
Модели
Возвращает список доступных моделей с параметрами и ценами.
models = client.models.list()
for m in models.data:
print(m.id)
Характеристики
Доступ к провайдеру ещё не открыт, поэтому модели линейки Weatmood отключены. Характеристики появятся здесь после запуска.
| Модель | Принимает | Отдаёт | Контекст | Макс. вход | Макс. выход | Кеш | Статус |
|---|---|---|---|---|---|---|---|
weatmood-alpha |
неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | Отключена |
weatmood-flash-alpha |
неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | Отключена |
weatmood-omni-alpha |
неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | неизвестно | Отключена |
Когда модели заработают
Как только доступ к провайдеру будет открыт, здесь появится полная спецификация каждой модели: что она принимает и отдаёт, размер контекста, максимальные вход и выход, поддержка кеширования промпта, стриминга и вызова инструментов.
Изображения
Модель weatmood-omni-alpha с поддержкой изображений ещё не включена. Формат запроса ниже описывает, как это будет работать после запуска.
Модель принимает изображения вместе с текстом. Передавайте их как URL или base64.
response = client.chat.completions.create(
model="weatmood-omni-alpha",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Что на этом изображении?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
)
Для локальных файлов используйте data-URL:
import base64
with open("photo.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode()
image_url = f"data:image/jpeg;base64,{encoded}"
Tool Calling
Модель может вызывать ваши функции. Опишите инструменты в параметре tools.
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Узнать погоду в городе",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Название города"}
},
"required": ["city"]
}
}
}]
response = client.chat.completions.create(
model="weatmood-alpha",
messages=[{"role": "user", "content": "Какая погода в Москве?"}],
tools=tools
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name) # get_weather
print(tool_call.function.arguments) # {"city": "Москва"}
Затем верните результат модели:
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": '{"temp": -3, "condition": "снег"}'
})
final = client.chat.completions.create(
model="weatmood-alpha",
messages=messages,
tools=tools
)
Параметры генерации
| Параметр | Диапазон | Когда менять |
|---|---|---|
temperature | 0–2 | 0 — точные ответы, 1.5 — творческие |
top_p | 0–1 | Альтернатива temperature, используйте одно из двух |
max_tokens | 1–128000 | Ограничить длину ответа |
presence_penalty | -2–2 | Штраф за повторение тем |
frequency_penalty | -2–2 | Штраф за повторение слов |
seed | integer | Воспроизводимость ответов |
Ошибки
API возвращает стандартные HTTP-коды. Тело ответа содержит описание:
{
"error": {
"message": "Invalid API key provided",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
| Код | Значение | Что делать |
|---|---|---|
400 | Некорректный запрос | Проверьте тело запроса и параметры |
401 | Неверный ключ | Проверьте Authorization |
402 | Недостаточно средств | Пополните баланс |
403 | Доступ запрещён | Ключ отозван или заблокирован |
404 | Модель не найдена | Проверьте ID в /v1/models |
429 | Превышен лимит | Снизьте частоту, повторите с задержкой |
500 | Ошибка сервера | Повторите запрос |
503 | Модель недоступна | Повторите позже или выберите другую |
Повторные попытки
При 429 и 5xx используйте экспоненциальную задержку:
import time
def request_with_retry(fn, attempts=5):
for i in range(attempts):
try:
return fn()
except Exception as e:
if i == attempts - 1:
raise
time.sleep(2 ** i) # 1, 2, 4, 8 секунд
Лимиты
| Лимит | Значение |
|---|---|
| Запросов в секунду | 15 |
| Всплеск (burst) | 30 запросов |
| Размер запроса | 32 МБ |
| Таймаут ответа | 620 секунд |
Заголовки ответа содержат текущее состояние:
X-RateLimit-Limit: 15
X-RateLimit-Remaining: 12
Цены
Списание идёт с баланса аккаунта. Актуальные цены на модели смотрите в разделе Модели или через /v1/models.
Повторяющиеся части промпта кэшируются и тарифицируются дешевле. Кэш включается автоматически для моделей с поддержкой supports_cache.
SDK и библиотеки
API совместим с [OI]-форматом, поэтому подходят официальные и сторонние SDK.
| Язык | Установка |
|---|---|
| Python | pip install openai |
| Node.js | npm install openai |
| Go | go get github.com/sashabaranov/go-openai |
| PHP | composer require openai-php/client |
| Ruby | gem install ruby-openai |
LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="weatmood-alpha",
api_key="wm-ваш-ключ",
base_url="https://api.weatmood.com/v1"
)
Нужна помощь?
Пишите в поддержку через страницу помощи или в чат на weatmood.com.