# @standardagents/novita

Novita AI provider for Standard Agents.

This package wraps Novita's OpenAI-compatible Chat Completions API behind the
Standard Agents provider interface. It supports:

- streaming and non-streaming text generation
- local function tool calling on supported models
- JSON and structured output modes
- live model discovery from Novita's `/openai/v1/models` endpoint
- usage normalization and live provider pricing from Novita's model catalog,
  including cache-read token prices when Novita reports them

## Install

```bash
npm install @standardagents/novita @standardagents/spec
```

## Usage

```ts
import { novita } from '@standardagents/novita';

const provider = novita({
  apiKey: process.env.NOVITA_API_KEY!,
});

const result = await provider.generate({
  model: 'deepseek/deepseek-v3.2',
  messages: [{ role: 'user', content: 'Give me three concise launch names.' }],
});

console.log(result.content);
console.log(result.usage?.cost);
```

## Factory

The package exports:

- `novita(config)` - provider factory
- `NovitaProvider` - provider class
- `novitaProviderOptions` - Zod schema for provider-specific options

## Model Discovery And Pricing

Novita model metadata is read from `https://api.novita.ai/openai/v1/models`.
The response includes model IDs, context size, and token prices. Novita reports
prices as scaled integers, so this provider converts values like `14000` to
`$1.40` per million tokens before exposing `inputPrice`, `outputPrice`,
`cachedPrice`, and `usage.pricing`.

When Novita includes `pricing.input_cache_read.price_per_m`, the provider maps
that value to `cachedInputPerMillion` and uses it for cached prompt tokens.
Cache write tokens remain part of uncached prompt input usage and are priced at
the normal input rate.

When response usage includes token counts, generated and streamed responses also
attach `usage.cost`. If the live catalog cannot be reached, the provider falls
back to a small static set of currently recommended Novita models.

For custom or private Novita models, set explicit model pricing in AgentBuilder
if the model does not appear in Novita's catalog.
