# Model Providers

Configure OrchaJS with OpenAI, Anthropic, DeepSeek, Gemini, Vertex AI, or Amazon Bedrock.

Source: https://orcha.sh/docs/model-providers
Markdown: https://orcha.sh/docs/model-providers.mdx

Configure providers once in `orcha/index.ts`, then select one in each agent's `index.json`.

## API-key providers

OpenAI, Anthropic, DeepSeek, and Google GenAI accept an API key string:

```ts

orcha.init({
  providers: {
    openai: process.env.OPENAI_API_KEY ?? "",
    anthropic: process.env.ANTHROPIC_API_KEY ?? "",
    deepseek: process.env.DEEPSEEK_API_KEY ?? "",
    googlegenai: process.env.GOOGLE_API_KEY ?? "",
  },
  agents: {
    assistant: "./assistant",
  },
});
```

Use an object when you need a custom endpoint:

```ts
providers: {
  openai: {
    apiKey: process.env.OPENAI_API_KEY ?? "",
    baseUrl: "https://api.openai.com/v1",
  },
}
```

## Google Vertex AI

```ts
providers: {
  vertexai: {
    project: process.env.GOOGLE_CLOUD_PROJECT ?? "",
    location: process.env.GOOGLE_CLOUD_LOCATION ?? "us-central1",
  },
}
```

When `credentials` is omitted, the Google SDK uses Application Default Credentials.

For an explicit service account:

```ts
providers: {
  vertexai: {
    project: process.env.GOOGLE_CLOUD_PROJECT ?? "",
    location: process.env.GOOGLE_CLOUD_LOCATION ?? "us-central1",
    credentials: {
      clientEmail: process.env.GOOGLE_CLIENT_EMAIL ?? "",
      privateKey: process.env.GOOGLE_PRIVATE_KEY ?? "",
    },
  },
}
```

## Amazon Bedrock

```ts
providers: {
  bedrock: {
    region: process.env.AWS_REGION ?? "us-east-1",
  },
}
```

When `credentials` is omitted, the AWS SDK uses its normal credential chain. Explicit credentials are also supported:

```ts
providers: {
  bedrock: {
    region: process.env.AWS_REGION ?? "us-east-1",
    credentials: {
      accessKeyId: process.env.AWS_ACCESS_KEY_ID ?? "",
      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY ?? "",
      sessionToken: process.env.AWS_SESSION_TOKEN,
    },
  },
}
```

## Select a provider and model

In the agent's `index.json`:

```json
{
  "name": "Assistant",
  "provider": "openai",
  "model": "gpt-5-mini",
  "outputType": "text"
}
```

`model` is the exact provider model identifier. Orcha does not rename models or translate `reasoningLevel` values between providers.

Different agents and evaluations may use different configured providers:

```text
assistant       → OpenAI
policyReviewer  → Anthropic
qualityJudge    → Google Gemini
```

## Environment variables

The Orcha library reads the host application's existing `process.env`. Standalone CLI commands also load `.env` from the project root without overriding variables already present.

```bash
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
DEEPSEEK_API_KEY=...
GOOGLE_API_KEY=...
```

Never place credentials in agent JSON, instructions, run metadata, prompt variables, tests, or session logs.

## Provider capabilities

Text is broadly supported. Structured output, reasoning controls, multimodal input, caching, and replay behavior vary by provider and model. Orcha normalizes supported behavior and returns a clear capability error instead of silently dropping unsupported input.
