feat(llm): add native Novita AI provider via OpenAI-compatible endpoint (#155)

* feat(llm): add native Novita AI provider via OpenAI-compatible endpoint

Wire Novita AI (https://api.novita.ai/openai/v1) as a first-class LLM
provider, following the same pattern used for DeepSeek/HuggingFace/NanoGPT:
dispatched through the existing OpenAIAdapter, resolved via NOVITA_API_KEY,
with a default model, model catalog entries, config/setup wiring, and
regression tests.

* fixup(llm): use deepseek/deepseek-v4-flash-0731 as the second Novita model

Swap the curated Novita model catalog's second entry from
qwen/qwen3-coder-30b-a3b-instruct to deepseek/deepseek-v4-flash-0731 per
requested model selection. Verified live against api.novita.ai/openai/v1/models.

* fixup(llm): replace superseded DeepSeek Flash id with current Pro flagship

QA flagged that deepseek/deepseek-v4-flash-0731 has been superseded in the
live Novita catalog; deepseek/deepseek-v4-pro-0813 is now the current
serving DeepSeek flagship. Swap the second Novita model catalog entry
accordingly.

---------

Co-authored-by: jax-novita <jax-novita@users.noreply.github.com>
Co-authored-by: Joseph Magly <1159087+jmagly@users.noreply.github.com>
This commit is contained in:
authored and GitHub committed 2026-08-23 16:29:46 -04:00
1 parent 41f0c14039
commit e05bdc4311
13 files changed
+274 -7

No files matched your search

+2
View File
@@ -5621,6 +5621,7 @@
<option value="venice">Venice · OpenAI-compatible</option>
<option value="openai">OpenAI · OpenAI-compatible</option>
<option value="nanogpt">NanoGPT · OpenAI-compatible</option>
<option value="novita">Novita AI · OpenAI-compatible</option>
<option value="anthropic">Claude · Anthropic Messages API</option>
</select>
</div>
@@ -9244,6 +9245,7 @@ o.id === 'coordinator' ? `1. MISSION_STATUS: Progress assessment
venice: 'https://api.venice.ai/api/v1',
openai: 'https://api.openai.com/v1',
nanogpt: 'https://nano-gpt.com/api/v1',
novita: 'https://api.novita.ai/openai/v1',
anthropic: 'https://api.anthropic.com',
};
function uacProvider() { return document.getElementById('uacProvider')?.value || 'openrouter'; }