769d6123d5
Implements the AWS Bedrock Converse streaming protocol as the 5th first-class adapter in @opencode-ai/llm. Single `bedrock-converse` adapter covers all underlying models (Anthropic, Llama, Mistral, Cohere, Nova, Titan) since Converse is uniform. Wire format: messages with text / reasoning / toolUse / toolResult content blocks, system blocks, inferenceConfig, toolConfig with toolSpec + toolChoice. Image / document / cache-point content types are still TODO. Streaming: AWS event stream binary framing via @smithy/eventstream-codec. Each frame is decoded then dispatched by `:event-type` header into the chunk schema. Bedrock splits the finish across `messageStop` (reason) and `metadata` (usage) — the parser stashes the reason and emits a single consolidated `request-finish` event when metadata arrives, with an `onHalt` fallback for truncated streams. Auth: two paths. Bearer API key (newer) when the consumer sets `model.headers.authorization = 'Bearer <key>'`. SigV4 signing via aws4fetch otherwise — credentials live on `model.native.aws_credentials` and are signed at `toHttp` time so STS-vended tokens are picked up when the consumer rebuilds the model. The adapter rejects requests with neither auth path with a clear InvalidRequestError. Routing: `@ai-sdk/amazon-bedrock` lowers to `bedrock-converse` via the new `AmazonBedrock` provider routing module; the OpenCode `llm-bridge.ts` registers it. Cassette format: response bodies under `application/vnd.amazon.eventstream` and `application/octet-stream` content types are now stored as base64 with `bodyEncoding: 'base64'` on the response snapshot — text round-tripping mangled the CRC32 fields in event-stream frames. Existing cassettes (SSE/JSON) omit the field and decode as text unchanged. Tests: 11 deterministic fixtures (prepare / lower messages / lower tool config / decode text+usage / decode tool calls / decode reasoning / decode throttling exception / auth path validation / SigV4 plumbing) + 2 recorded cassettes against live Bedrock (`us.amazon.nova-micro-v1:0` in us-east-1) for streaming text and streaming tool calls. AGENTS.md: documents the Bedrock auth model, binary cassette format, and updates the protocol coverage / cassette backlog. Deps: @smithy/eventstream-codec, @smithy/util-utf8, aws4fetch (~40KB combined; matches AI SDK's approach).
29 lines
669 B
JSON
29 lines
669 B
JSON
{
|
|
"$schema": "https://json.schemastore.org/package.json",
|
|
"version": "1.14.25",
|
|
"name": "@opencode-ai/llm",
|
|
"type": "module",
|
|
"license": "MIT",
|
|
"private": true,
|
|
"scripts": {
|
|
"test": "bun test --timeout 30000",
|
|
"typecheck": "tsgo --noEmit"
|
|
},
|
|
"exports": {
|
|
".": "./src/index.ts",
|
|
"./*": "./src/*.ts"
|
|
},
|
|
"devDependencies": {
|
|
"@effect/platform-node": "catalog:",
|
|
"@tsconfig/bun": "catalog:",
|
|
"@types/bun": "catalog:",
|
|
"@typescript/native-preview": "catalog:"
|
|
},
|
|
"dependencies": {
|
|
"@smithy/eventstream-codec": "4.2.14",
|
|
"@smithy/util-utf8": "4.2.2",
|
|
"aws4fetch": "1.0.20",
|
|
"effect": "catalog:"
|
|
}
|
|
}
|