bcee009917
* Add Novita as an LLM provider Registers Novita (novita.ai) as an OpenAI-routed provider, following the same pattern as Requesty/Atlas Cloud/SiliconFlow: a base_url + API key env var entry in _OPENAI_ROUTED_PROVIDERS, a handful of model registry entries (DeepSeek/Qwen/GLM), onboarding wizard support (constants/steps/wizard/ helpers), a key validator using the auth-preflight sentinel pattern (Novita's /v1/models endpoint returns the public catalog even for an invalid key, so auth must be checked via a chat completion instead), and a host-to-provider mapping entry for error attribution. * Recommend Novita's current flagship models The models listed for Novita were older ids that no longer reflect what the platform leads with. Point the recommendations at the three current flagships instead, each verified against api.novita.ai: moonshotai/kimi-k3 1M context, native vision zai-org/glm-5.2 1M context, long-horizon agentic work deepseek/deepseek-v4-flash-0731 1M context, cheapest of the three Context windows, output limits, input modalities and pricing were taken from the live /openai/v1/models response rather than carried over. * Keep branch CI workflow files unchanged (no workflow OAuth scope) Co-authored-by: multica-agent <github@multica.ai> * ci: restore workflow files to match main --------- Co-authored-by: jax-novita <jax-novita@users.noreply.github.com> Co-authored-by: multica-agent <github@multica.ai> Co-authored-by: Dinos Papakostas <dinospk1999@gmail.com> Co-authored-by: Xi Zhang <106144707+X-iZhang@users.noreply.github.com>
52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
"""Canonical valid-value sets shared by the wizard and CLI flag validation.
|
|
|
|
The interactive ``_step_*`` functions in ``steps.py`` use these for ``Choice``
|
|
construction (or are checked against them by tests). The CLI ``onboard``
|
|
command in ``cli/commands.py`` uses them to validate ``--provider`` /
|
|
``--ui`` / ``--workspace-mode`` flag inputs.
|
|
|
|
Single source of truth — adding a new provider here AND to the corresponding
|
|
``Choice(value=...)`` in ``steps.py`` is required; a drift test in
|
|
``tests/test_onboard.py`` keeps both sides in sync.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
VALID_PROVIDERS: frozenset[str] = frozenset(
|
|
{
|
|
"anthropic",
|
|
"openai",
|
|
"google-genai",
|
|
"minimax",
|
|
"zhipu",
|
|
"zhipu-code",
|
|
"volcengine",
|
|
"volcengine-code",
|
|
"dashscope",
|
|
"dashscope-code",
|
|
"deepseek",
|
|
"moonshot",
|
|
"kimi-coding",
|
|
"ollama",
|
|
"nvidia",
|
|
"siliconflow",
|
|
"openrouter",
|
|
"atlascloud",
|
|
"requesty",
|
|
"novita",
|
|
"custom-openai",
|
|
"custom-anthropic",
|
|
}
|
|
)
|
|
|
|
VALID_UI_BACKENDS: frozenset[str] = frozenset({"tui", "cli", "webui"})
|
|
|
|
VALID_WORKSPACE_MODES: frozenset[str] = frozenset({"daemon", "run"})
|
|
|
|
|
|
__all__ = [
|
|
"VALID_PROVIDERS",
|
|
"VALID_UI_BACKENDS",
|
|
"VALID_WORKSPACE_MODES",
|
|
]
|