Перейти к содержимому

Pi

Pi читает провайдеров из одного глобального JSON-файла, а не из переменных окружения, поэтому opencodex не запускает его сам. Вместо этого ocx export сериализует блок провайдера opencodex — base URL, список моделей и env-ссылку, которую интерполирует Pi, — а вы сливаете его в свою конфигурацию.

Сначала запустите прокси, затем выведите конфиг:

Terminal window
ocx start
ocx export --client pi

Сначала выводится JSON, затем путь назначения, предупреждение о merge, строка export для переменной окружения и число моделей, для которых есть авторитетные контекстные лимиты.

{
"providers": {
"opencodex": {
"baseUrl": "http://127.0.0.1:10100/v1",
"api": "openai-completions",
"apiKey": "$OPENCODEX_API_KEY",
"models": [
{
"id": "anthropic/claude-opus-5",
"name": "Claude Opus 5 (anthropic)",
"input": ["text"],
"contextWindow": 200000,
"maxTokens": 32000
}
]
}
}
}

Id моделей — это канонические селекторы прокси, поэтому маршрутизируемые модели появляются как provider/model (anthropic/claude-opus-5), а нативные slug OpenAI остаются без префикса (gpt-5.6-sol). Суффикс в name(anthropic), (native), (routed) — как раз и позволяет различать в picker’е Pi две модели с одинаковым именем, пришедшие с разных upstream.

Глобальная конфигурация моделей Pi находится здесь:

~/.pi/agent/models.json

Экспортируемый блок — это статический снимок, а не живое представление. После добавления провайдера или изменения видимости моделей заново выполняйте ocx export, а новый блок вливайте поверх старого.

Здесь легко перепутать два разных ключа, и в этом файле появляется только первый:

Ключ Что это Где хранится
Ключ допуска прокси собственная учётная запись opencodex, генерируемая на вкладке API в дашборде указывается в apiKey как $OPENCODEX_API_KEY; само значение остаётся в окружении
Ключ провайдера ваш ключ Anthropic / OpenAI / OpenRouter хранится в конфигурации самого opencodex, см. Провайдеры

Экспортируемая конфигурация несёт только ссылку, а не секрет. Pi интерполирует голый $NAME, поэтому переменная должна выглядеть так:

Terminal window
export OPENCODEX_API_KEY=<your key>

Это имя переменной относится только к Pi. opencode использует другую переменную (OPENCODEX_OPENCODE_API_KEY в форме {env:…}) — см. руководство по opencode.

Прокси на loopback вообще не требует ключа. По умолчанию opencodex привязывается к 127.0.0.1 и ничего там не аутентифицирует, поэтому ссылка $OPENCODEX_API_KEY инертна и переменную можно не задавать. Она нужна только когда hostname выходит за пределы loopback — а именно в этом случае прокси и отказывается запускаться без токена; см. Удалённый доступ.

contextWindow и maxTokens выводятся только тогда, когда каталог сообщает авторитетное контекстное окно. Если его нет, оба поля для этой модели опускаются, и Pi использует собственные значения по умолчанию; ocx export печатает, сколько строк попали в эту категорию.

maxTokens — это удовлетворяющий схеме бюджет 32000, ограниченный сверху контекстным окном, чтобы у модели с маленьким контекстом никогда не было больше output, чем сам context. Это не утверждение о реальном максимуме какой-либо модели.

Два поля намеренно отсутствуют. cost требует всех четырёх ценовых полей, а у opencodex нет данных о ценах для маршрутизируемых моделей — вывести нули означало бы заявить, что каждая модель бесплатна. reasoning в Pi — булево поле, тогда как каталог несёт целую лестницу effort, и отображать одно на другое пришлось бы догадкой.

Нужны запущенный прокси opencodex (ocx start) и установленный Pi. ocx export читает живой каталог через management API прокси, поэтому конфиг никогда не будет сгенерирован с пустым списком моделей.