Add CLIProxyAPI provider support (#375)

This commit is contained in:
TOM
2026-05-01 17:46:08 +10:00
committed by GitHub
parent 3ba76ad19b
commit ed147d378d
6 changed files with 40 additions and 8 deletions
@@ -134,13 +134,13 @@ export async function getAvailable(ctx: any) {
}
if (Object.keys(modelMeta).length === 0) modelMeta = undefined
}
} else if (providerKey === 'openrouter') {
// OpenRouter has 200+ models — fetch dynamically like Copilot
} else if (providerKey === 'openrouter' || providerKey === 'cliproxyapi') {
// OpenRouter and local CLIProxyAPI expose dynamic OpenAI-compatible /models catalogs.
if (envMapping.api_key_env) {
const orKey = envGetValue(envMapping.api_key_env)
if (orKey) {
const apiKey = envGetValue(envMapping.api_key_env)
if (apiKey) {
try {
const fetched = await fetchProviderModels(baseUrl, orKey, true)
const fetched = await fetchProviderModels(baseUrl, apiKey, providerKey === 'openrouter')
if (fetched.length > 0) modelsList = fetched
} catch { /* ignore — leave empty, won't show */ }
}
@@ -5,6 +5,8 @@ import * as hermesCli from '../../services/hermes/hermes-cli'
import { readConfigYaml, writeConfigYaml, saveEnvValue, PROVIDER_ENV_MAP } from '../../services/config-helpers'
import { logger } from '../../services/logger'
const OPTIONAL_API_KEY_PROVIDERS = new Set(['cliproxyapi'])
function buildProviderEntry(name: string, base_url: string, api_key: string, model: string, context_length?: number) {
const entry: any = { name, base_url, api_key, model }
if (context_length && context_length > 0) {
@@ -20,7 +22,7 @@ export async function create(ctx: any) {
if (!name || !base_url || !model) {
ctx.status = 400; ctx.body = { error: 'Missing name, base_url, or model' }; return
}
if (!api_key) {
if (!api_key && !OPTIONAL_API_KEY_PROVIDERS.has(String(providerKey || ''))) {
ctx.status = 400; ctx.body = { error: 'Missing API key' }; return
}
try {