Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .changeset/tall-houses-relax.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
"@ai-sdk/harness-github-copilot": patch
"@ai-sdk/harness-claude-code": patch
"@ai-sdk/harness-deepagents": patch
"@ai-sdk/harness-grok-build": patch
"@ai-sdk/black-forest-labs": patch
"@ai-sdk/openai-compatible": patch
"@ai-sdk/sandbox-just-bash": patch
"@ai-sdk/harness-opencode": patch
"@ai-sdk/workflow-harness": patch
"@ai-sdk/amazon-bedrock": patch
"@ai-sdk/harness-cursor": patch
"@ai-sdk/open-responses": patch
"@ai-sdk/provider-utils": patch
"@ai-sdk/sandbox-vercel": patch
"@ai-sdk/tool-web-fetch": patch
"@ai-sdk/anthropic-aws": patch
"@ai-sdk/google-vertex": patch
"@ai-sdk/harness-cline": patch
"@ai-sdk/harness-codex": patch
"@ai-sdk/harness-acp": patch
"@ai-sdk/huggingface": patch
"@ai-sdk/typesafe-ai": patch
"@ai-sdk/assemblyai": patch
"@ai-sdk/elevenlabs": patch
"@ai-sdk/fish-audio": patch
"@ai-sdk/harness-fx": patch
"@ai-sdk/harness-pi": patch
"@ai-sdk/llamaindex": patch
"@ai-sdk/moonshotai": patch
"@ai-sdk/perplexity": patch
"@ai-sdk/policy-opa": patch
"@ai-sdk/togetherai": patch
"@ai-sdk/anthropic": patch
"@ai-sdk/bytedance": patch
"@ai-sdk/code-mode": patch
"@ai-sdk/deepinfra": patch
"@ai-sdk/fireworks": patch
"@ai-sdk/langchain": patch
"@ai-sdk/replicate": patch
"@ai-sdk/tool-bash": patch
"@ai-sdk/cartesia": patch
"@ai-sdk/cerebras": patch
"@ai-sdk/deepgram": patch
"@ai-sdk/deepseek": patch
"@ai-sdk/devtools": patch
"@ai-sdk/gmicloud": patch
"@ai-sdk/provider": patch
"@ai-sdk/quiverai": patch
"@ai-sdk/workflow": patch
"@ai-sdk/alibaba": patch
"@ai-sdk/baseten": patch
"@ai-sdk/gateway": patch
"@ai-sdk/harness": patch
"@ai-sdk/klingai": patch
"@ai-sdk/minimax": patch
"@ai-sdk/mistral": patch
"@ai-sdk/valibot": patch
"@ai-sdk/cohere": patch
"@ai-sdk/gladia": patch
"@ai-sdk/google": patch
"@ai-sdk/heygen": patch
"@ai-sdk/openai": patch
"@ai-sdk/prodia": patch
"@ai-sdk/svelte": patch
"@ai-sdk/voyage": patch
"@ai-sdk/azure": patch
"@ai-sdk/react": patch
"@ai-sdk/revai": patch
"@ai-sdk/topaz": patch
"@ai-sdk/groq": patch
"@ai-sdk/hume": patch
"@ai-sdk/luma": patch
"@ai-sdk/otel": patch
"@ai-sdk/fal": patch
"@ai-sdk/mcp": patch
"@ai-sdk/rsc": patch
"@ai-sdk/tui": patch
"@ai-sdk/vue": patch
"@ai-sdk/xai": patch
"@ai-sdk/zai": patch
---

chore(docs): update `README.md` for consistent format and to avoid duplication
178 changes: 3 additions & 175 deletions packages/alibaba/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@ The **[Alibaba provider](https://ai-sdk.dev/providers/ai-sdk-providers/alibaba)*
## Setup

The Alibaba provider is available in the `@ai-sdk/alibaba` module. You can install it with

```bash
npm i @ai-sdk/alibaba
npm i ai @ai-sdk/alibaba
```

## Skill for Coding Agents
Expand All @@ -20,15 +18,7 @@ If you use coding agents such as Claude Code or Cursor, we highly recommend addi
npx skills add vercel/ai
```

## Provider Instance

You can import the default provider instance `alibaba` from `@ai-sdk/alibaba`:

```ts
import { alibaba } from '@ai-sdk/alibaba';
```

## Language Model Example
## Usage

```ts
import { alibaba } from '@ai-sdk/alibaba';
Expand All @@ -40,166 +30,4 @@ const { text } = await generateText({
});
```

## Thinking Mode Example (Qwen Reasoning Models)

Alibaba's Qwen models support thinking/reasoning mode for complex problem-solving:

```ts
import { alibaba } from '@ai-sdk/alibaba';
import { generateText } from 'ai';

const { text, reasoningText } = await generateText({
model: alibaba('qwen3-max'),
providerOptions: {
alibaba: {
enableThinking: true,
thinkingBudget: 2048,
},
},
prompt: 'How many "r"s are in the word "strawberry"?',
});

console.log('Reasoning:', reasoningText);
console.log('Answer:', text);
```

## Preserved Thinking Example (Multi-Turn Reasoning)

For models that support preserved thinking, the AI SDK sends reasoning from
previous assistant messages back as Alibaba `reasoning_content` by default
(`preserve_thinking`), so the model can build on its earlier thought process:

```ts
import { alibaba } from '@ai-sdk/alibaba';
import { generateText } from 'ai';

const providerOptions = {
alibaba: {
enableThinking: true,
thinkingBudget: 2048,
},
};

const opening = {
role: 'user' as const,
content: 'Is Kafka or RocketMQ a better fit for transactional messages?',
};

const first = await generateText({
model: alibaba('qwen3.7-max'),
messages: [opening],
providerOptions,
});

const second = await generateText({
model: alibaba('qwen3.7-max'),
messages: [
opening,
...first.responseMessages, // append unchanged to keep the reasoning parts
{ role: 'user', content: 'Which tradeoff mattered most?' },
],
providerOptions,
});
```

When continuing the conversation, append `responseMessages` unchanged so the
reasoning parts survive to be serialized as `reasoning_content`. Set the
`preserveThinking` provider option to `false` to opt out. Keep in mind:

- `preserveThinking` does not enable thinking by itself.
- It is enabled by default only for models that Alibaba documents as supporting
preserved thinking; for other models the option is not sent unless you set it
explicitly. See Alibaba's
[preserved-thinking documentation](https://docs.qwencloud.com/developer-guides/text-generation/thinking#preserve-thinking-in-multi-turn).
- Reasoning from the current tool-call round is always sent back with tool
results, as Alibaba recommends.
- Preserved reasoning increases input token usage and billing.
- Historical reasoning remains separate from visible assistant text; it is never
merged into `content`.

## Embedding Model Example

```ts
import { alibaba, type AlibabaEmbeddingModelOptions } from '@ai-sdk/alibaba';
import { embed } from 'ai';

const { embedding, usage } = await embed({
model: alibaba.embedding('text-embedding-v4'),
value: 'sunny day at the beach',
providerOptions: {
alibaba: {
textType: 'document',
dimension: 1024,
outputType: 'dense',
} satisfies AlibabaEmbeddingModelOptions,
},
});
```

## Tool Calling Example

```ts
import { alibaba } from '@ai-sdk/alibaba';
import { generateText, tool } from 'ai';
import { z } from 'zod';

const { text } = await generateText({
model: alibaba('qwen-plus'),
tools: {
weather: tool({
description: 'Get the weather in a location',
inputSchema: z.object({
location: z.string().describe('The location to get the weather for'),
}),
execute: async ({ location }) => ({
location,
temperature: 72 + Math.floor(Math.random() * 21) - 10,
}),
}),
},
prompt: 'What is the weather in San Francisco?',
});
```

## Explicit Caching Example

Alibaba supports both implicit and explicit prompt caching to reduce costs for repeated prompts.

**Implicit caching** works automatically - the provider caches appropriate content without any configuration. For more control, you can use **explicit caching** by marking specific messages with `cacheControl`:

```ts
import { alibaba } from '@ai-sdk/alibaba';
import { generateText } from 'ai';

const longDocument = '... large document content ...';

const { text, usage } = await generateText({
model: alibaba('qwen-plus'),
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'Context: Please analyze this document.',
},
{
type: 'text',
text: longDocument,
providerOptions: {
alibaba: {
cacheControl: { type: 'ephemeral' },
},
},
},
],
},
],
});
```

**Note:** The minimum content length for a cache block is 1,024 tokens.

## Documentation

Please check out the **[Alibaba provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/alibaba)** for more information.
See the [Alibaba Provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/alibaba) for more information.
93 changes: 3 additions & 90 deletions packages/amazon-bedrock/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ contains language model support for the Amazon Bedrock [converse API](https://do
## Setup

The Amazon Bedrock provider is available in the `@ai-sdk/amazon-bedrock` module. You can install it with

```bash
npm i @ai-sdk/amazon-bedrock
npm i ai @ai-sdk/amazon-bedrock
```

## Skill for Coding Agents
Expand All @@ -21,90 +19,7 @@ If you use coding agents such as Claude Code or Cursor, we highly recommend addi
npx skills add vercel/ai
```

## Provider Instance

You can import the default provider instance `bedrock` from `@ai-sdk/amazon-bedrock`:

```ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
```

## Authentication

The Amazon Bedrock provider supports two authentication methods with automatic fallback:

### API Key Authentication (Recommended)

API key authentication provides a simpler setup process compared to traditional AWS SigV4 authentication. You can authenticate using either environment variables or direct configuration.

#### Using Environment Variable

Set the `AWS_BEARER_TOKEN_BEDROCK` environment variable with your API key:

```bash
export AWS_BEARER_TOKEN_BEDROCK=your-api-key-here
```

```ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
import { generateText } from 'ai';

const { text } = await generateText({
model: bedrock('us.anthropic.claude-haiku-5-5'),
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
// API key is automatically loaded from AWS_BEARER_TOKEN_BEDROCK
});
```

#### Using Direct Configuration

You can also pass the API key directly in the provider configuration:

```ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
import { generateText } from 'ai';

const bedrockWithApiKey = bedrock.withSettings({
apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK, // or your API key directly
region: 'us-east-1', // Optional: specify region
});

const { text } = await generateText({
model: bedrockWithApiKey('us.anthropic.claude-haiku-5-5'),
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
});
```

### SigV4 Authentication (Fallback)

If no API key is provided, the provider automatically falls back to AWS SigV4 authentication using standard AWS credentials:

```ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
import { generateText } from 'ai';

// Uses AWS credentials from environment variables or AWS credential chain
const { text } = await generateText({
model: bedrock('us.anthropic.claude-haiku-5-5'),
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
});
```

This method requires standard AWS environment variables:

- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
- `AWS_SESSION_TOKEN` (optional, for temporary credentials)

### Authentication Precedence

The provider uses the following authentication precedence:

1. **API key from direct configuration** (`apiKey` in `withSettings()`)
2. **API key from environment variable** (`AWS_BEARER_TOKEN_BEDROCK`)
3. **SigV4 authentication** (AWS credential chain fallback)

## Example
## Usage

```ts
import { bedrock } from '@ai-sdk/amazon-bedrock';
Expand All @@ -116,6 +31,4 @@ const { text } = await generateText({
});
```

## Documentation

Please check out the **[Amazon Bedrock provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock)** for more information.
See the [Amazon Bedrock Provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock) for more information.
Loading
Loading