От SpeShu.AI ollama-llm получает ровно две вещи:
base_url = "https://speshu.ai/api/v1" и API-ключ. Больше ничего настраивать не нужно — ни allowlist моделей, ни параметров провайдера, ни плагинов. Любой клиент, умеющий говорить с OpenAI-совместимым адресом, подключается одним аргументом.Установка
1
Установите пакеты
OpenAI-совместимый слой — это обычный OpenAI-клиент:Родной клиент Ollama (
pip install ollama, from ollama import Client) в код генерации не входит — он нужен только для варианта с локальными эмбеддингами из раздела «Эмбеддинги».2
Задайте ключ
3
Возьмите идентификатор модели из каталога
Идентификатор текстовой модели не зашивайте в код: состав каталога меняется, и зашитый в код идентификатор падает с В коде ниже это переменная окружения
404 model_not_found. Возьмите его из GET /api/v1/models:cURL
SPESHU_MODEL. Формат ответа — в разделе Каталог моделей.Конфигурация
Схема подключения зеркальна привычной для Ollama. Локально этоOpenAI(base_url="http://localhost:11434/v1", api_key="ollama"), где api_key — заглушка, которую локальный сервер не проверяет. Через SpeShu.AI меняются два значения — base_url и api_key, и заглушка превращается в настоящий ключ:
Python
langchain_ollama.ChatOllama говорит с Ollama через его родной клиент, поэтому base_url там не переключает протокол — такая конфигурация уйдёт в /api/chat и вернёт 404. OpenAI-совместимый адрес SpeShu.AI принимает langchain_openai.ChatOpenAI с теми же двумя параметрами:
Python
Первый рабочий пример
Тот же вызов, что и локально, — с блокомsystem и печатью списания.
Python
usage.cost.total_cost — сумма в рублях, списанная с кошелька. У Ollama такого поля нет: там расход считает сам сервер и наружу не отдаёт. Разбор — в гайде Учёт средств.
Эмбеддинги
Вариант (а): два клиента в одном процессе.Python
Метод
Client.embed и поле embeddings в ответе появились в ollama 0.3.x; в более ранних версиях был embeddings(model=..., prompt=...) с одиночной строкой. Проверьте версию, если поднимаете окружение с нуля.Продвинутые сценарии
Потоковый ответ
stream=True на chat.completions.create — единственный способ обойти потолок запроса в 300 секунд: поток идёт до 15 минут. На OpenAI-совместимом слое приходит обычный SSE с data:-кадрами, поэтому клиент разбирает его сам, без участия Ollama:
Python
[DONE] и кадр со списанием — в разделе Потоковая передача.
Вызов функций
tools и tool_choice уходят без изменений: схема инструмента та же. Один нюанс миграции — локально вы могли полагаться на то, что конкретная open-weight модель всегда поддерживает вызовы инструментов; в каталоге SpeShu.AI моделей много, и поддержка неодинаковая.
Python
Структурированный вывод
response_format с JSON Schema переезжает как есть. Локально строгий режим часто приходилось обходить парсингом текста — здесь этого не нужно.
Python
json_schema зависит от модели — не все её принимают. Разбор и запасные варианты — в разделе Структурированный вывод.
Генерация изображений
У Ollama нет эндпоинта генерации изображений, поэтому в его API этот сценарий не появится. Медиа-задачи на SpeShu.AI создаются отдельным эндпоинтом и от вашего LLM-клиента не зависят: Создание задачи.cURL
Idempotency-Key вернёт исходную задачу, с новым — создаст новую и спишет снова.
Частые проблемы
404 на первом же запросе
404 на первом же запросе
Проверьте адрес: должно быть
https://speshu.ai/api/v1 — с /api в середине и /v1 на конце. Без суффикса /v1 клиент собирает путь /api/chat/completions и получает 404, хотя ключ при этом рабочий.Адрес задан с лишним слэшем в конце
Адрес задан с лишним слэшем в конце
https://speshu.ai/api/v1/ — вариант хуже неправильного: часть клиентов склеивает его с путём и получает //chat/completions. Не пишите слэш в конце.Остался ollama.Client(host=...)
Остался ollama.Client(host=...)
Родной протокол Ollama —
/api/chat, /api/generate, /api/tags — на SpeShu.AI не отдаётся, и ответ всегда 404, независимо от ключа. Замените клиент на OpenAI-совместимый с base_url, как в разделе «Конфигурация».Вместо своего ключа уходит заглушка ollama
Вместо своего ключа уходит заглушка ollama
Это остаток от локального сервера: в коде осталось
api_key="ollama". У SpeShu.AI ключ проверяется — подставьте os.environ["SPESHU_API_KEY"] и убедитесь, что в переменной полное значение с префиксом sk-, без кавычек и переносов строк.404 model_not_found
404 model_not_found
Идентификатор зашит в код и разошёлся с каталогом — состав меняется, и зашитое значение устаревает молча. Возьмите его заново из
GET /api/v1/models и держите в SPESHU_MODEL.404 при попытке включить поток
404 при попытке включить поток
Отдельного эндпоинта для потока нет: это параметр
stream=True на chat.completions.create. Формат кадров и разбор — в разделе Потоковая передача.Что дальше
Начало работы
Ключ, баланс и первый запрос целиком
Модели и цены
Как выбрать модель под задачу
Вызов функций
Полный цикл вызова инструмента
Медиаввод
Ссылки, base64 и хранилище
