Skip to content

Add Novita AI provider support#696

Closed
alexyang-novita wants to merge 1 commit into
Zoo-Code-Org:mainfrom
alexyang-novita:add-novita-ai-provider
Closed

Add Novita AI provider support#696
alexyang-novita wants to merge 1 commit into
Zoo-Code-Org:mainfrom
alexyang-novita:add-novita-ai-provider

Conversation

@alexyang-novita

@alexyang-novita alexyang-novita commented Jun 23, 2026

Copy link
Copy Markdown

Summary

  • Add Novita AI as a first-class OpenAI-compatible LLM provider
  • Wire Novita into provider settings, model metadata, API handler, Settings UI, validation, secret storage, and selected-model handling
  • Add CLI support via --provider novita and NOVITA_API_KEY
  • Add Novita docs wording and e2e fixture/test coverage

Testing

  • git diff --check
  • vitest packages/types/src/__tests__/provider-settings.test.ts
  • vitest apps/cli/src/lib/utils/__tests__/provider.test.ts
  • vitest webview-ui/src/utils/__tests__/validate.spec.ts
  • vitest src/shared/__tests__/ProfileValidator.spec.ts src/api/providers/__tests__/novita.spec.ts
  • tsc -p apps/vscode-e2e/tsconfig.esm.json --noEmit
  • Live Novita API smoke: models, chat completion, and tool calling passed with moonshotai/kimi-k2.7-code

Summary by CodeRabbit

  • New Features

    • Added Novita AI as a supported LLM provider with configurable settings (API key, base URL, model selection)
    • Multi-language support for Novita configuration across settings UI
  • Documentation

    • Updated README and CLI documentation with Novita provider information
  • Tests

    • Added comprehensive test coverage for Novita provider integration

@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2e1cc542-25de-47ed-b3ca-46887d64935f

📥 Commits

Reviewing files that changed from the base of the PR and between e8acc6a and 9efaf63.

📒 Files selected for processing (46)
  • README.md
  • apps/cli/README.md
  • apps/cli/src/lib/utils/__tests__/provider.test.ts
  • apps/cli/src/lib/utils/provider.ts
  • apps/cli/src/types/types.ts
  • apps/vscode-e2e/AGENTS.md
  • apps/vscode-e2e/fixtures/novita.json
  • apps/vscode-e2e/src/runTest.ts
  • apps/vscode-e2e/src/suite/providers/novita.test.ts
  • packages/types/src/__tests__/provider-settings.test.ts
  • packages/types/src/global-settings.ts
  • packages/types/src/provider-settings.ts
  • packages/types/src/providers/index.ts
  • packages/types/src/providers/novita.ts
  • src/api/index.ts
  • src/api/providers/__tests__/novita.spec.ts
  • src/api/providers/index.ts
  • src/api/providers/novita.ts
  • src/shared/ProfileValidator.ts
  • src/shared/__tests__/ProfileValidator.spec.ts
  • webview-ui/src/components/settings/ApiOptions.tsx
  • webview-ui/src/components/settings/constants.ts
  • webview-ui/src/components/settings/providers/Novita.tsx
  • webview-ui/src/components/settings/providers/index.ts
  • webview-ui/src/components/settings/utils/providerModelConfig.ts
  • webview-ui/src/components/ui/hooks/useSelectedModel.ts
  • webview-ui/src/i18n/locales/ca/settings.json
  • webview-ui/src/i18n/locales/de/settings.json
  • webview-ui/src/i18n/locales/en/settings.json
  • webview-ui/src/i18n/locales/es/settings.json
  • webview-ui/src/i18n/locales/fr/settings.json
  • webview-ui/src/i18n/locales/hi/settings.json
  • webview-ui/src/i18n/locales/id/settings.json
  • webview-ui/src/i18n/locales/it/settings.json
  • webview-ui/src/i18n/locales/ja/settings.json
  • webview-ui/src/i18n/locales/ko/settings.json
  • webview-ui/src/i18n/locales/nl/settings.json
  • webview-ui/src/i18n/locales/pl/settings.json
  • webview-ui/src/i18n/locales/pt-BR/settings.json
  • webview-ui/src/i18n/locales/ru/settings.json
  • webview-ui/src/i18n/locales/tr/settings.json
  • webview-ui/src/i18n/locales/vi/settings.json
  • webview-ui/src/i18n/locales/zh-CN/settings.json
  • webview-ui/src/i18n/locales/zh-TW/settings.json
  • webview-ui/src/utils/__tests__/validate.spec.ts
  • webview-ui/src/utils/validate.ts

📝 Walkthrough

Walkthrough

Adds Novita AI as a fully supported LLM provider end-to-end: a new model registry (novitaModels), NovitaHandler extending OpenAICompatibleHandler, CLI env-var mapping, settings UI component, API key secret registration, profile validator wiring, input validation, i18n strings across 17 locales, a VS Code e2e test suite with fixture, and documentation updates.

Changes

Novita AI Provider Integration

Layer / File(s) Summary
Novita model registry and provider type contracts
packages/types/src/providers/novita.ts, packages/types/src/providers/index.ts, packages/types/src/provider-settings.ts, packages/types/src/global-settings.ts, packages/types/src/__tests__/provider-settings.test.ts
Defines NovitaModelId, novitaModels, novitaDefaultModelId; registers novita in providerNames, novitaSchema, modelIdKeysByProvider, MODELS_BY_PROVIDER, SECRET_STATE_KEYS (novitaApiKey), and getProviderDefaultModelId.
NovitaHandler API implementation and factory wiring
src/api/providers/novita.ts, src/api/providers/index.ts, src/api/index.ts, src/shared/ProfileValidator.ts, src/api/providers/__tests__/novita.spec.ts, src/shared/__tests__/ProfileValidator.spec.ts
Implements NovitaHandler extending OpenAICompatibleHandler with constructor config and getModel() override; wires into buildApiHandler; adds novita fallthrough in ProfileValidator.getModelIdFromProfile; adds unit tests for both.
Settings UI: Novita component, provider registration, and validation
webview-ui/src/components/settings/providers/Novita.tsx, webview-ui/src/components/settings/providers/index.ts, webview-ui/src/components/settings/ApiOptions.tsx, webview-ui/src/components/settings/constants.ts, webview-ui/src/components/settings/utils/providerModelConfig.ts, webview-ui/src/components/ui/hooks/useSelectedModel.ts, webview-ui/src/utils/validate.ts, webview-ui/src/utils/__tests__/validate.spec.ts
Adds the Novita settings component (base URL + API key), registers it in PROVIDERS/MODELS_BY_PROVIDER/service/model configs, mounts it in ApiOptions, extends useSelectedModel and validateModelsAndKeysProvided with novita cases, and tests validation.
i18n locale strings for Novita (17 languages)
webview-ui/src/i18n/locales/*/settings.json
Adds novitaApiKey, getNovitaApiKey, and novitaBaseUrl translation keys across all supported locale files.
CLI provider registration and env-var wiring
apps/cli/src/types/types.ts, apps/cli/src/lib/utils/provider.ts, apps/cli/src/lib/utils/__tests__/provider.test.ts
Adds "novita" to supportedProviders, maps NOVITA_API_KEY in envVarMap, adds getProviderSettings case, and tests getApiKeyFromEnv("novita").
Novita e2e test suite, fixture, and runTest routing
apps/vscode-e2e/fixtures/novita.json, apps/vscode-e2e/src/suite/providers/novita.test.ts, apps/vscode-e2e/src/runTest.ts, apps/vscode-e2e/AGENTS.md
Adds the two-step tool-use fixture, the full VS Code E2E test suite with fetch interception and tool probe, extends runTest.ts with isNovitaTargetedRun detection and LLMock URL routing, and documents the provider.
README and CLI docs
README.md, apps/cli/README.md
Adds Novita AI to the v3.62.0 release notes and documents NOVITA_API_KEY, --provider novita, and dev examples in the CLI README.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ApiOptions as ApiOptions.tsx
  participant NovitaComp as Novita.tsx
  participant validate as validate.ts
  participant buildApiHandler as buildApiHandler
  participant NovitaHandler
  participant OpenAICompatible as OpenAICompatibleHandler

  User->>ApiOptions: select provider "novita"
  ApiOptions->>NovitaComp: render with apiConfiguration
  NovitaComp->>NovitaComp: render novitaBaseUrl + novitaApiKey fields
  User->>NovitaComp: enter API key
  NovitaComp->>validate: validateApiConfigurationExcludingModelErrors
  validate->>validate: check novitaApiKey present
  validate-->>NovitaComp: undefined (valid) or apiKey error
  User->>buildApiHandler: start task with apiProvider="novita"
  buildApiHandler->>NovitaHandler: new NovitaHandler(options)
  NovitaHandler->>NovitaHandler: resolve modelId, build OpenAICompatibleConfig
  NovitaHandler->>OpenAICompatible: super(config) → api.novita.ai/openai
  OpenAICompatible-->>NovitaHandler: ready
  NovitaHandler-->>User: streaming response
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Zoo-Code-Org/Zoo-Code#81: Adds a new provider entry through the same packages/types/src/provider-settings.ts and provider default-model plumbing that this PR modifies for Novita.
  • Zoo-Code-Org/Zoo-Code#319: Extends SECRET_STATE_KEYS in packages/types/src/global-settings.ts and the provider-settings/model routing in the same structural locations as this PR.
  • Zoo-Code-Org/Zoo-Code#345: Modifies ApiOptions.tsx and webview-ui/src/utils/validate.ts with provider-specific branches using the same pattern as the Novita additions here.

Suggested reviewers

  • navedmerchant
  • hannesrudolph
  • JamesRobert20
  • taltas
  • edelauna

Poem

🐰 A new provider hops into the warren today,
Novita AI joins the burrow, hip-hip-hooray!
novitaModels registered, the handler deployed,
API keys secured, locale strings overjoyed.
From fixtures to fetch mocks, e2e passed with care —
The rabbit stamps "LGTM" and leaps through the air! 🌟

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Alex-yang00

Copy link
Copy Markdown

Closing in favor of a PR from the Alex-yang00 fork.

@alexyang-novita

Copy link
Copy Markdown
Author

Closing in favor of #697 from the Alex-yang00 fork.

@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants