Бесплатные модели для OpenCode через FreeLLMAPI

Написано

в

OpenCode — открытый агент для программирования, который работает в терминале: читает файлы проекта, правит код, запускает команды и тесты, ищет по репозиторию и работает с git. Он не привязан к одному поставщику моделей, поэтому к нему можно подключить почти любой OpenAI-совместимый сервис.

FreeLLMAPI — открытый self-hosted роутер, который собирает бесплатные тарифы десятков AI-провайдеров за одним OpenAI-совместимым адресом /v1. Вместо тридцати ключей, тридцати лимитов и тридцати мест, где запрос может упасть, у вас один локальный шлюз и один unified-ключ. Роутер сам выбирает доступную модель, переключается на следующую при ошибке 429 или 5xx и следит, чтобы запросы не выходили за квоты бесплатных тарифов.

В этой заметке я опишу установку FreeLLMAPI, добавление провайдеров и подключение шлюза к OpenCode.

Что понадобится

Для работы нужны четыре вещи:

  • Установленный OpenCode. Если агент ещё не стоит, порядок установки я разбирал в отдельной заметке про OpenCode и DeepSeek.
  • Запущенный FreeLLMAPI. Проще всего поставить десктопное приложение или контейнер Docker.
  • Node.js 20.18 или новее. Он нужен для CLI-генератора, который настраивает OpenCode. Сам OpenCode может быть установлен и без Node.
  • Ключи хотя бы одного провайдера. Подойдут бесплатные тарифы Google AI Studio, Groq, Cerebras, Mistral, OpenRouter, NVIDIA, HuggingFace и других сервисов из каталога.

Установка FreeLLMAPI

У проекта есть несколько путей установки. Выбирайте тот, который удобнее для вашей системы.

Десктопное приложение

Самый простой вариант для Windows и macOS — готовый установщик со страницы релизов. В Windows это .exe, в macOS — .dmg для Apple Silicon или Intel. Приложение живёт в трее и поднимает роутер вместе с панелью управления локально.

Пароль для десктопной версии не нужен: панель входит сама через скрытую локальную учётку. Единственные учётные данные, которые вам понадобятся, — unified-ключ из всплывающего окна в трее или с заголовка страницы Keys.

Данные приложения лежат в одном каталоге:

  • Windows — %APPDATA%\FreeLLMAPI\
  • macOS — ~/Library/Application Support/FreeLLMAPI/
  • Linux — ~/.config/FreeLLMAPI/

Docker

Если Docker уже установлен, сервер поднимается одной командой. Скрипт создаёт каталог ~/freellmapi, генерирует ключ шифрования, скачивает образ и запускает контейнер:

curl -fsSL https://freellmapi.co/install.sh | bash

Повторный запуск скрипта безопасен: файл .env и ключ шифрования сохраняются, а контейнер обновляется до свежей версии. В Windows этот способ работает в WSL или в любом bash-окружении.

После запуска панель открывается по адресу:

http://localhost:3001

Для серверной установки нужно создать учётную запись с email и паролем. Если пароль забыт, код сброса печатается в логе контейнера:

docker compose logs -f freellmapi

Docker Compose

Если хочется держать конфигурацию в git и управлять запуском вручную, подойдёт обычный Compose. В macOS и Linux:

git clone https://github.com/tashfeenahmed/freellmapi.git
cd freellmapi
ENCRYPTION_KEY="$(openssl rand -hex 32)"
printf "ENCRYPTION_KEY=%s\nPORT=3001\n" "$ENCRYPTION_KEY" > .env
docker compose up -d

В Windows PowerShell:

git clone https://github.com/tashfeenahmed/freellmapi.git
cd freellmapi
$Bytes = New-Object Byte[] 32
[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($Bytes)
$ENCRYPTION_KEY = -join ($Bytes | ForEach-Object { "{0:x2}" -f $_ })
"ENCRYPTION_KEY=$ENCRYPTION_KEY`nPORT=3001" | Out-File -Encoding utf8 .env
docker compose up -d

Ключ ENCRYPTION_KEY обязателен: им шифруются ключи провайдеров в базе SQLite. Менять его на лету нельзя — старые секреты перестанут расшифровываться. Для ротации в проекте есть отдельная команда rotate-encryption-key.

Запуск из исходников

Для разработки или отладки можно запустить проект через Node.js:

git clone https://github.com/tashfeenahmed/freellmapi.git
cd freellmapi
npm install
ENCRYPTION_KEY="$(node -e 'console.log(require("crypto").randomBytes(32).toString("hex"))')"
printf "ENCRYPTION_KEY=%s\nPORT=3001\n" "$ENCRYPTION_KEY" > .env
npm run dev

В этом режиме API и панель поднимаются на порту 3001, а Vite-интерфейс — на 5173.

Первый запуск и ключи провайдеров

Открываем панель, заходим на страницу Keys и добавляем ключи тех сервисов, которыми пользуемся. Для каждого провайдера в интерфейсе есть ссылка на регистрацию и подсказка, где взять ключ. Начать достаточно с одного-двух: например, Google AI Studio и Groq.

После добавления ключ проходит проверку здоровья. Если провайдер ответил ошибкой, ключ останется в списке, но будет помечен как нездоровый — его можно проверить повторно или удалить.

Дальше стоит зайти на страницу Models и посмотреть, какие модели доступны. Там же настраивается стратегия маршрутизации и порядок Fallback Chain — цепочки, по которой роутер идёт при ошибках и лимитах. Модель auto означает, что выбор делает сам роутер. Кроме неё доступны варианты вроде auto:fast, auto:smart и именованные профили под конкретные задачи.

Отдельно стоит проверить, что в цепочке есть модели с поддержкой инструментов. OpenCode активно использует tool calling, и модель без этой возможности не сможет нормально читать файлы и запускать команды.

Unified-ключ берётся там же, на странице Keys, либо в трее десктопного приложения. Он выглядит как строка с префиксом:

freellmapi-...

Именно этот ключ, а не ключи отдельных провайдеров, указывается в OpenCode.

Подключение к OpenCode

У FreeLLMAPI есть генератор конфигурации, который сам читает каталог моделей с запущенного шлюза, делает резервную копию существующего конфига и аккуратно добавляет в него провайдера.

Сначала выставим unified-ключ переменной окружения. Генератор читает её вместо отдельного флага, поэтому секрет не попадёт в историю команд.

В macOS и Linux:

export FREELLMAPI_API_KEY=freellmapi-YOUR_KEY

В Windows PowerShell:

$env:FREELLMAPI_API_KEY="freellmapi-YOUR_KEY"

Теперь смотрим, что именно будет записано:

npx freellmapi setup-opencode --url http://localhost:3001 --dry-run

Если diff устраивает, повторяем команду без флага:

npx freellmapi setup-opencode --url http://localhost:3001

Генератор пишет глобальный конфиг OpenCode:

~/.config/opencode/opencode.json

В нём появляется провайдер freellmapi с пакетом @ai-sdk/openai-compatible, базовым адресом http://localhost:3001/v1 и картой моделей из живого каталога. Моделью по умолчанию становится freellmapi/auto.

Сам ключ в файл не попадает: в конфиге стоит подстановка {env:FREELLMAPI_API_KEY}. Поэтому переменная должна оставаться выставленной и при запуске агента:

opencode

Такой способ удобен ещё и тем, что секрет не оседает в конфиге и не попадёт в git. Для CI и одноразовых запусков это правильнее, чем хранить ключ в файле.

Ручная настройка

Если не хочется запускать генератор, провайдера можно описать в opencode.json вручную. Минимальный вариант выглядит так:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "freellmapi/auto",
  "provider": {
    "freellmapi": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "FreeLLMAPI",
      "options": {
        "baseURL": "http://localhost:3001/v1",
        "apiKey": "{env:FREELLMAPI_API_KEY}"
      },
      "models": {
        "auto": {
          "name": "FreeLLMAPI Auto Router",
          "limit": { "context": 1048576, "output": 65536 }
        }
      }
    }
  }
}

Поле model на верхнем уровне важно: без него OpenCode может продолжить использовать прежнюю модель или не выбрать ничего на свежей установке. Лимиты контекста и вывода лучше брать из ответа шлюза, а не придумывать:

curl http://localhost:3001/v1/models

В список models можно добавить конкретные идентификаторы, если нужно переключаться на них вручную. Но для повседневной работы достаточно auto: роутер сам подберёт живую модель и переключится при лимите.

Как этим пользоваться

После запуска opencode список моделей открывается знакомой командой:

/models

В нём будет провайдер FreeLLMAPI и модель auto. Дальше работа идёт как обычно: описываем задачу, указываем файлы через @, переключаем режим планирования клавишей Tab, откатываем правки командой /undo. Для нового проекта полезно выполнить /init, чтобы агент создал AGENTS.md.

Пара практических приёмов:

  • Маршрутизация. Для рутины оставляйте auto. Если нужна скорость, попробуйте auto:fast, если качество — auto:smart или конкретную сильную модель из каталога.
  • Диагностика. Каждый ответ шлюза содержит заголовок X-Routed-Via с именем провайдера и модели, которые реально обслужили запрос. По нему видно, куда роутер отправил задачу.
  • Аналитика. На странице Analytics в панели видны объём запросов, успешность, задержки p50/p95 и расход токенов по провайдерам.
  • Непрерывность диалога. При переключении модели посреди разговора шлюз может добавить короткую заметку о передаче контекста. Включается переменной FREELLMAPI_CONTEXT_HANDOFF=on_model_switch.

Если OpenCode запущен в контейнере, а FreeLLMAPI — на хосте, адрес localhost будет указывать на сам контейнер. В этом случае в baseURL нужно использовать host.docker.internal или другой доступный из контейнера адрес.

На что обратить внимание

FreeLLMAPI — это не замена платным моделям и не сервис с SLA. Это способ собрать бесплатные тарифы в один аккуратный шлюз. Отсюда несколько ограничений:

  • Качество плавает. Бесплатные тарифы заканчиваются, и поздно вечером, ближе к исчерпанию дневных квот, роутер может уходить на модели слабее. Квоты обычно сбрасываются в полночь по UTC.
  • Задержки нестабильны. Разные провайдеры отвечают по-разному, а при переключении на резервную модель запрос может занять заметно больше времени.
  • Флагманских моделей нет. В бесплатных тарифах доступны хорошие, но не топовые модели. Для сложной архитектуры это стоит учитывать.
  • Шлюз должен быть запущен. Если приложение или контейнер остановлены, OpenCode не получит ответа. Автозапуск приложения в трее или рестарт политики контейнера решают эту проблему.
  • Проект рассчитан на одного пользователя. Ключи провайдеров хранятся локально и шифруются, но общая панель на несколько человек — не сценарий этого инструмента. Unified-ключ и .env стоит беречь так же, как обычный секрет.

И ещё один нюанс: каталог моделей обновляется сам, но бесплатная установка получает снимок каталога с задержкой около тридцати дней. Платный тариф Premium ускоряет обновление, однако для знакомства с проектом он не нужен — сам роутер остаётся бесплатным и открытым.

Ссылки

https://github.com/tashfeenahmed/freellmapi
https://freellmapi.co/
https://freellmapi.co/models
https://github.com/tashfeenahmed/freellmapi/releases/latest
https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/install/01-install.md
https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/clients/01-agent-clients.md
https://github.com/tashfeenahmed/freellmapi/blob/main/cli/README.md
https://opencode.ai/
https://opencode.ai/docs/
https://opencode.ai/docs/providers/

Источники

https://github.com/tashfeenahmed/freellmapi
https://github.com/tashfeenahmed/freellmapi/blob/main/README.ru.md
https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/install/01-install.md
https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/clients/01-agent-clients.md
https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/clients/02-supported-agents.md
https://github.com/tashfeenahmed/freellmapi/blob/main/cli/README.md
https://opencode.ai/docs/providers/

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

DemensDeum
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.