{"id":18155383,"url":"https://github.com/jparkerweb/bedrock-wrapper","last_synced_at":"2026-04-01T17:43:26.369Z","repository":{"id":237362141,"uuid":"794378199","full_name":"jparkerweb/bedrock-wrapper","owner":"jparkerweb","description":"🪨 Bedrock Wrapper is an npm package that simplifies the integration of existing OpenAI-compatible API objects with AWS Bedrock's serverless inference LLMs.","archived":false,"fork":false,"pushed_at":"2026-03-18T20:02:01.000Z","size":7044,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-19T08:55:02.314Z","etag":null,"topics":["aws","bedrock","inference","llm","openai-api","proxy","serverless","wrapper"],"latest_commit_sha":null,"homepage":"https://www.equilllabs.com/projects/bedrock-wrapper","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jparkerweb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"jparkerweb","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2024-05-01T02:41:54.000Z","updated_at":"2026-03-18T20:01:33.000Z","dependencies_parsed_at":"2024-05-14T15:46:37.071Z","dependency_job_id":"947c5dfa-a749-4b22-9e08-e683c4e9b12c","html_url":"https://github.com/jparkerweb/bedrock-wrapper","commit_stats":null,"previous_names":["jparkerweb/bedrock-tunnel"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/jparkerweb/bedrock-wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jparkerweb%2Fbedrock-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jparkerweb%2Fbedrock-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jparkerweb%2Fbedrock-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jparkerweb%2Fbedrock-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jparkerweb","download_url":"https://codeload.github.com/jparkerweb/bedrock-wrapper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jparkerweb%2Fbedrock-wrapper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","bedrock","inference","llm","openai-api","proxy","serverless","wrapper"],"created_at":"2024-11-02T04:10:50.971Z","updated_at":"2026-04-01T17:43:26.362Z","avatar_url":"https://github.com/jparkerweb.png","language":"JavaScript","funding_links":["https://ko-fi.com/jparkerweb"],"categories":[],"sub_categories":[],"readme":"# 🪨 Bedrock Wrapper\r\n\r\nBedrock Wrapper is an npm package that simplifies the integration of existing OpenAI-compatible API objects with AWS Bedrock's serverless inference LLMs.  Follow the steps below to integrate into your own application, or alternativly use the 🔀 [Bedrock Proxy Endpoint](https://github.com/jparkerweb/bedrock-proxy-endpoint) project to spin up your own custom OpenAI server endpoint for even easier inference (using the standard `baseUrl`, and `apiKey` params).\r\n\r\n![bedrock-wrapper](https://raw.githubusercontent.com/jparkerweb/bedrock-wrapper/refs/heads/main/docs/bedrock-wrapper.jpg)\r\n\r\n---\r\n\r\n### Maintained by\r\n\u003ca href=\"https://www.equilllabs.com\"\u003e\r\n  \u003cimg src=\"https://raw.githubusercontent.com/jparkerweb/eQuill-Labs/refs/heads/main/src/static/images/logo-text-outline.png\" alt=\"eQuill Labs\" height=\"40\"\u003e\r\n\u003c/a\u003e\r\n\r\n---\r\n\r\n### Install\r\n\r\n- install package: `npm install bedrock-wrapper`\r\n\r\n---\r\n\r\n### Usage\r\n\r\n1. import `bedrockWrapper`  \r\n    ```javascript\r\n    import { bedrockWrapper } from \"bedrock-wrapper\";\r\n    ```\r\n\r\n2. create an `awsCreds` object and fill in your AWS credentials  \r\n    ```javascript\r\n    const awsCreds = {\r\n        region: AWS_REGION,\r\n        accessKeyId: AWS_ACCESS_KEY_ID,\r\n        secretAccessKey: AWS_SECRET_ACCESS_KEY,\r\n    };\r\n    ```\r\n\r\n3. clone your openai chat completions object into `openaiChatCompletionsCreateObject` or create a new one and edit the values  \r\n    ```javascript\r\n    const openaiChatCompletionsCreateObject = {\r\n        \"messages\": messages,\r\n        \"model\": \"Claude-4-5-Sonnet\",\r\n        \"max_tokens\": LLM_MAX_GEN_TOKENS,\r\n        \"stream\": true,\r\n        \"temperature\": LLM_TEMPERATURE,\r\n        \"stop_sequences\": [\"STOP\", \"END\"], // Optional: sequences that will stop generation\r\n    };\r\n    ```\r\n\r\n    the `messages` variable should be in openai's role/content format (not all models support system prompts)\r\n    ```javascript\r\n    messages = [\r\n        {\r\n            role: \"system\",\r\n            content: \"You are a helpful AI assistant that follows instructions extremely well. Answer the user questions accurately. Think step by step before answering the question. You will get a $100 tip if you provide the correct answer.\",\r\n        },\r\n        {\r\n            role: \"user\",\r\n            content: \"Describe why openai api standard used by lots of serverless LLM api providers is better than aws bedrock invoke api offered by aws bedrock. Limit your response to five sentences.\",\r\n        },\r\n        {\r\n            role: \"assistant\",\r\n            content: \"\",\r\n        },\r\n    ]\r\n    ```\r\n\r\n    ***the `model` value should be the corresponding `modelName` value in the `bedrock_models` section below (see Supported Models below)***\r\n\r\n4. call the `bedrockWrapper` function and pass in the previously defined `awsCreds` and `openaiChatCompletionsCreateObject` objects  \r\n    ```javascript\r\n    // create a variable to hold the complete response\r\n    let completeResponse = \"\";\r\n    // invoke the streamed bedrock api response\r\n    for await (const chunk of bedrockWrapper(awsCreds, openaiChatCompletionsCreateObject)) {\r\n        completeResponse += chunk;\r\n        // ---------------------------------------------------\r\n        // -- each chunk is streamed as it is received here --\r\n        // ---------------------------------------------------\r\n        process.stdout.write(chunk); // ⇠ do stuff with the streamed chunk\r\n    }\r\n    // console.log(`\\n\\completeResponse:\\n${completeResponse}\\n`); // ⇠ optional do stuff with the complete response returned from the API reguardless of stream or not\r\n    ```\r\n\r\n    if calling the unstreamed version you can call bedrockWrapper like this  \r\n    ```javascript\r\n    // create a variable to hold the complete response\r\n    let completeResponse = \"\";\r\n    if (!openaiChatCompletionsCreateObject.stream){ // invoke the unstreamed bedrock api response\r\n        const response = await bedrockWrapper(awsCreds, openaiChatCompletionsCreateObject);\r\n        for await (const data of response) {\r\n            completeResponse += data;\r\n        }\r\n        // ----------------------------------------------------\r\n        // -- unstreamed complete response is available here --\r\n        // ----------------------------------------------------\r\n        console.log(`\\n\\completeResponse:\\n${completeResponse}\\n`); // ⇠ do stuff with the complete response\r\n    }\r\n\r\n5. **NEW: Using the Converse API (optional)**\r\n    \r\n    You can now optionally use AWS Bedrock's Converse API instead of the Invoke API by passing `useConverseAPI: true` in the options parameter:\r\n    ```javascript\r\n    // Use the Converse API for unified request/response format across all models\r\n    for await (const chunk of bedrockWrapper(awsCreds, openaiChatCompletionsCreateObject, { useConverseAPI: true })) {\r\n        completeResponse += chunk;\r\n        process.stdout.write(chunk);\r\n    }\r\n    ```\r\n    \r\n    The Converse API provides:\r\n    - **Consistent API**: Single request/response format across all models\r\n    - **Simplified conversation management**: Better handling of multi-turn conversations\r\n    - **System prompts**: Cleaner separation of system instructions\r\n    - **Tool use support**: Native support for function calling (where supported)\r\n    - **Unified multimodal**: Consistent handling of text and image inputs\r\n\r\n    **Note**: Some models only support the Converse API and will automatically use it regardless of the `useConverseAPI` flag:\r\n    - DeepSeek-V3.1\r\n\r\n---\r\n\r\n### Supported Models\r\n\r\n| modelName                  | AWS Model Id                                    | Image |\r\n|----------------------------|-------------------------------------------------|-------|\r\n| Claude-3-5-Haiku           | us.anthropic.claude-3-5-haiku-20241022-v1:0     |  ❌  |\r\n| Claude-3-5-Sonnet          | us.anthropic.claude-3-5-sonnet-20240620-v1:0    |  ✅  |\r\n| Claude-3-5-Sonnet-v2       | us.anthropic.claude-3-5-sonnet-20241022-v2:0    |  ✅  |\r\n| Claude-3-7-Sonnet          | us.anthropic.claude-3-7-sonnet-20250219-v1:0    |  ✅  |\r\n| Claude-3-7-Sonnet-Thinking | us.anthropic.claude-3-7-sonnet-20250219-v1:0    |  ✅  |\r\n| Claude-3-Haiku             | us.anthropic.claude-3-haiku-20240307-v1:0       |  ✅  |\r\n| Claude-4-Opus              | us.anthropic.claude-opus-4-20250514-v1:0        |  ✅  |\r\n| Claude-4-Opus-Thinking     | us.anthropic.claude-opus-4-20250514-v1:0        |  ✅  |\r\n| Claude-4-Sonnet            | us.anthropic.claude-sonnet-4-20250514-v1:0      |  ✅  |\r\n| Claude-4-Sonnet-Thinking   | us.anthropic.claude-sonnet-4-20250514-v1:0      |  ✅  |\r\n| Claude-4-1-Opus            | us.anthropic.claude-opus-4-1-20250805-v1:0      |  ✅  |\r\n| Claude-4-1-Opus-Thinking   | us.anthropic.claude-opus-4-1-20250805-v1:0      |  ✅  |\r\n| Claude-4-5-Haiku           | global.anthropic.claude-haiku-4-5-20251001-v1:0 |  ✅  |\r\n| Claude-4-5-Haiku-Thinking  | global.anthropic.claude-haiku-4-5-20251001-v1:0 |  ✅  |\r\n| Claude-4-5-Opus            | global.anthropic.claude-opus-4-5-20251101-v1:0  |  ✅  |\r\n| Claude-4-5-Opus-Thinking   | global.anthropic.claude-opus-4-5-20251101-v1:0  |  ✅  |\r\n| Claude-4-5-Sonnet          | us.anthropic.claude-sonnet-4-5-20250929-v1:0    |  ✅  |\r\n| Claude-4-5-Sonnet-Thinking | us.anthropic.claude-sonnet-4-5-20250929-v1:0    |  ✅  |\r\n| Claude-Opus-4-6            | us.anthropic.claude-opus-4-6-v1                 |  ✅  |\r\n| Claude-Sonnet-4-6          | us.anthropic.claude-sonnet-4-6                  |  ✅  |\r\n| DeepSeek-R1                | us.deepseek.r1-v1:0                             |  ❌  |\r\n| DeepSeek-V3.1              | deepseek.v3-v1:0                                |  ❌  |\r\n| Gemma-3-4b                 | google.gemma-3-4b-it                            |  ✅  |\r\n| Gemma-3-12b                | google.gemma-3-12b-it                           |  ✅  |\r\n| Gemma-3-27b                | google.gemma-3-27b-it                           |  ✅  |\r\n| GPT-OSS-120B               | openai.gpt-oss-120b-1:0                         |  ❌  |\r\n| GPT-OSS-120B-Thinking      | openai.gpt-oss-120b-1:0                         |  ❌  |\r\n| GPT-OSS-20B                | openai.gpt-oss-20b-1:0                          |  ❌  |\r\n| GPT-OSS-20B-Thinking       | openai.gpt-oss-20b-1:0                          |  ❌  |\r\n| Kimi-K2                    | moonshot.kimi-k2-thinking                       |  ❌  |\r\n| Kimi-K2-Thinking           | moonshot.kimi-k2-thinking                       |  ❌  |\r\n| Llama-3-8b                 | meta.llama3-8b-instruct-v1:0                    |  ❌  |\r\n| Llama-3-70b                | meta.llama3-70b-instruct-v1:0                   |  ❌  |\r\n| Llama-3-1-8b               | us.meta.llama3-1-8b-instruct-v1:0               |  ❌  |\r\n| Llama-3-1-70b              | us.meta.llama3-1-70b-instruct-v1:0              |  ❌  |\r\n| Llama-3-1-405b             | meta.llama3-1-405b-instruct-v1:0                |  ❌  |\r\n| Llama-3-2-1b               | us.meta.llama3-2-1b-instruct-v1:0            |  ❌  |\r\n| Llama-3-2-3b               | us.meta.llama3-2-3b-instruct-v1:0            |  ❌  |\r\n| Llama-3-2-11b              | us.meta.llama3-2-11b-instruct-v1:0           |  ❌  |\r\n| Llama-3-2-90b              | us.meta.llama3-2-90b-instruct-v1:0           |  ❌  |\r\n| Llama-3-3-70b              | us.meta.llama3-3-70b-instruct-v1:0           |  ❌  |\r\n| Llama-4-Scout-17b          | us.meta.llama4-scout-17b-instruct-v1:0       |  ✅  |\r\n| Llama-4-Maverick-17b       | us.meta.llama4-maverick-17b-instruct-v1:0    |  ✅  |\r\n| Magistral-Small-2509       | mistral.magistral-small-2509                 |  ❌  |\r\n| MiniMax-M2                 | minimax.minimax-m2                           |  ❌  |\r\n| Ministral-3-3b             | mistral.ministral-3-3b-instruct              |  ✅  |\r\n| Ministral-3-8b             | mistral.ministral-3-8b-instruct              |  ✅  |\r\n| Ministral-3-14b            | mistral.ministral-3-14b-instruct             |  ✅  |\r\n| Mistral-7b                 | mistral.mistral-7b-instruct-v0:2             |  ❌  |\r\n| Mistral-Large              | mistral.mistral-large-2402-v1:0              |  ❌  |\r\n| Mistral-Large-3            | mistral.mistral-large-3-675b-instruct        |  ✅  |\r\n| Mixtral-8x7b               | mistral.mixtral-8x7b-instruct-v0:1           |  ❌  |\r\n| Nova-2-Lite                | us.amazon.nova-2-lite-v1:0                   |  ✅  |\r\n| Nova-Micro                 | us.amazon.nova-micro-v1:0                    |  ❌  |\r\n| Nova-Lite                  | us.amazon.nova-lite-v1:0                     |  ✅  |\r\n| Nova-Pro                   | us.amazon.nova-pro-v1:0                      |  ✅  |\r\n| Qwen3-32B                  | qwen.qwen3-32b-v1:0                          |  ❌  |\r\n| Qwen3-235B-A22B-2507       | qwen.qwen3-235b-a22b-2507-v1:0               |  ❌  |\r\n| Qwen3-Coder-30B-A3B        | qwen.qwen3-coder-30b-a3b-v1:0                |  ❌  |\r\n| Qwen3-Coder-480B-A35B      | qwen.qwen3-coder-480b-a35b-v1:0              |  ❌  |\r\n| Qwen3-Next-80B-A3B         | qwen.qwen3-next-80b-a3b                      |  ❌  |\r\n\r\nTo return the list progrmatically you can import and call `listBedrockWrapperSupportedModels`:  \r\n```javascript\r\nimport { listBedrockWrapperSupportedModels } from 'bedrock-wrapper';\r\nconsole.log(`\\nsupported models:\\n${JSON.stringify(await listBedrockWrapperSupportedModels())}\\n`);\r\n```\r\n\r\nAdditional Bedrock model support can be added.  \r\nPlease modify the `bedrock_models.js` file and submit a PR 🏆 or create an Issue.\r\n\r\n---\r\n\r\n### Thinking Models\r\n\r\nSome models support extended reasoning capabilities through \"thinking mode\". These models include:\r\n- **Claude models**: Claude-4-5-Opus-Thinking, Claude-4-1-Opus-Thinking, Claude-4-Opus-Thinking, Claude-4-5-Sonnet-Thinking, Claude-4-5-Haiku-Thinking, Claude-4-Sonnet-Thinking, Claude-3-7-Sonnet-Thinking\r\n- **GPT-OSS models**: GPT-OSS-120B-Thinking, GPT-OSS-20B-Thinking\r\n- **Kimi models**: Kimi-K2-Thinking (preserves reasoning tags in output)\r\n\r\nTo use thinking mode and see the model's reasoning process, set `include_thinking_data: true` in your request:\r\n\r\n```javascript\r\nconst openaiChatCompletionsCreateObject = {\r\n    \"messages\": messages,\r\n    \"model\": \"Claude-4-5-Sonnet-Thinking\",\r\n    \"max_tokens\": 4000,\r\n    \"stream\": true,\r\n    \"temperature\": 1.0, // Thinking models require temperature of 1.0\r\n    \"include_thinking_data\": true // Enable thinking output\r\n};\r\n\r\nlet completeResponse = \"\";\r\nfor await (const chunk of bedrockWrapper(awsCreds, openaiChatCompletionsCreateObject)) {\r\n    completeResponse += chunk;\r\n    process.stdout.write(chunk); // Shows both thinking and response\r\n}\r\n```\r\n\r\n**Features:**\r\n- Thinking content appears in `\u003cthink\u003e...\u003c/think\u003e` tags for Claude models\r\n- Thinking content appears in `\u003creasoning\u003e...\u003c/reasoning\u003e` tags for GPT-OSS models\r\n- Temperature is automatically set to 1.0 for optimal thinking performance\r\n- Budget tokens are automatically calculated based on max_tokens\r\n\r\n---\r\n\r\n### Image Support\r\n\r\nFor models with image support (Claude 4+ series including Claude Opus 4.6, Claude Sonnet 4.6, Claude 4.5 Opus, Claude 4.5 Sonnet, Claude 4.5 Haiku, Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku, Nova Pro, Nova Lite, Nova 2 Lite, Mistral Large 3, Ministral 3 series, Gemma 3 series, and Llama 4 series), you can include images in your messages using the following format (not all models support system prompts):\r\n\r\n```javascript\r\nmessages = [\r\n    {\r\n        role: \"system\",\r\n        content: \"You are a helpful AI assistant that can analyze images.\",\r\n    },\r\n    {\r\n        role: \"user\",\r\n        content: [\r\n            { type: \"text\", text: \"What's in this image?\" },\r\n            { \r\n                type: \"image_url\", \r\n                image_url: {\r\n                    url: \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA...\" // base64 encoded image\r\n                }\r\n            }\r\n        ]\r\n    }\r\n]\r\n```\r\n\r\nYou can also use a direct URL to an image instead of base64 encoding:\r\n\r\n```javascript\r\nmessages = [\r\n    {\r\n        role: \"user\",\r\n        content: [\r\n            { type: \"text\", text: \"Describe this image in detail.\" },\r\n            { \r\n                type: \"image_url\", \r\n                image_url: {\r\n                    url: \"https://example.com/path/to/image.jpg\" // direct URL to image\r\n                }\r\n            }\r\n        ]\r\n    }\r\n]\r\n```\r\n\r\nYou can include multiple images in a single message by adding more image_url objects to the content array.\r\n\r\n---\r\n\r\n### Stop Sequences\r\n\r\nStop sequences are custom text sequences that cause the model to stop generating text. This is useful for controlling where the model stops its response.\r\n\r\n```javascript\r\nconst openaiChatCompletionsCreateObject = {\r\n    \"messages\": messages,\r\n    \"model\": \"Claude-3-5-Sonnet\",\r\n    \"max_tokens\": 100,\r\n    \"stop_sequences\": [\"STOP\", \"END\", \"\\n\\n\"], // Array of stop sequences\r\n    // OR use single string format:\r\n    // \"stop\": \"STOP\"\r\n};\r\n```\r\n\r\n**Model Support:**\r\n- ✅ **Claude models**: Fully supported (up to 8,191 sequences)\r\n- ✅ **Nova models**: Fully supported (up to 4 sequences)\r\n- ✅ **GPT-OSS models**: Fully supported\r\n- ✅ **Mistral models**: Fully supported (up to 10 sequences)\r\n- ✅ **Qwen models**: Fully supported\r\n- ✅ **Gemma models**: Fully supported\r\n- ✅ **Kimi models**: Fully supported\r\n- ✅ **MiniMax models**: Fully supported\r\n- ❌ **Llama models**: Not supported (AWS Bedrock limitation)\r\n\r\n**Features:**\r\n- Compatible with OpenAI's `stop` parameter (single string or array)\r\n- Also accepts `stop_sequences` parameter for explicit usage\r\n- Automatic conversion between string and array formats\r\n- Model-specific parameter mapping handled automatically\r\n\r\n**Example Usage:**\r\n```javascript\r\n// Stop generation when model tries to output \"7\"\r\nconst result = await bedrockWrapper(awsCreds, {\r\n    messages: [{ role: \"user\", content: \"Count from 1 to 10\" }],\r\n    model: \"Claude-3-5-Sonnet\",  // Use Claude, Nova, Mistral, or Qwen models\r\n    stop_sequences: [\"7\"]\r\n});\r\n// Response: \"1, 2, 3, 4, 5, 6,\" (stops before \"7\")\r\n\r\n// Note: Llama models will ignore stop sequences due to AWS Bedrock limitations\r\n```\r\n\r\n---\r\n\r\n### Parameter Restrictions\r\n\r\nSome AWS Bedrock models have specific parameter restrictions that are automatically handled by the wrapper:\r\n\r\n#### Claude 4+ Models (Temperature/Top-P Mutual Exclusion)\r\n\r\n**Affected Models:**\r\n- Claude-Opus-4-6\r\n- Claude-Sonnet-4-6\r\n- Claude-4-5-Opus \u0026 Claude-4-5-Opus-Thinking\r\n- Claude-4-5-Sonnet \u0026 Claude-4-5-Sonnet-Thinking\r\n- Claude-4-5-Haiku \u0026 Claude-4-5-Haiku-Thinking\r\n- Claude-4-Sonnet \u0026 Claude-4-Sonnet-Thinking\r\n- Claude-4-Opus \u0026 Claude-4-Opus-Thinking\r\n- Claude-4-1-Opus \u0026 Claude-4-1-Opus-Thinking\r\n\r\n---\r\n\r\n### 🧪 Testing\r\n\r\nThe package includes comprehensive test suites to verify functionality:\r\n\r\n```bash\r\n# Test all models with the Both APIs (Comparison)\r\nnpm run test\r\n\r\n# Test all models with the Invoke API\r\nnpm run test:invoke\r\n\r\n# Test all models with the Converse API\r\nnpm run test:converse\r\n\r\n# Test vision/multimodal capabilities with Both APIs (Comparison)\r\nnpm run test-vision\r\n\r\n# Test vision/multimodal capabilities with Invoke API\r\nnpm run test-vision:invoke\r\n\r\n# Test vision/multimodal capabilities with Converse API\r\nnpm run test-vision:converse\r\n\r\n# Test stop sequences functionality with Both APIs (Comparison)\r\nnpm run test-stop\r\n\r\n# Test stop sequences functionality with Invoke API\r\nnpm run test-stop:invoke\r\n\r\n# Test stop sequences functionality with Converse API\r\nnpm run test-stop:converse\r\n\r\n# Test Converse API specifically\r\nnpm run test-converse\r\n\r\n# Run all test suites\r\nnpm run test:all\r\n\r\n# Interactive testing\r\nnpm run interactive\r\n```\r\n\r\n---\r\n\r\n### 📢 P.S.\r\n\r\nIn case you missed it at the beginning of this doc, for an even easier setup, use the 🔀 [Bedrock Proxy Endpoint](https://github.com/jparkerweb/bedrock-proxy-endpoint) project to spin up your own custom OpenAI server endpoint (using the standard `baseUrl`, and `apiKey` params).\r\n\r\n![bedrock-proxy-endpoing](./docs/bedrock-proxy-endpoint.jpg)\r\n\r\n---\r\n\r\n### 📚 References\r\n\r\n- [AWS Meta Llama Models User Guide](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-meta.html)\r\n- [AWS Mistral Models User Guide](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-mistral.html)\r\n- [OpenAI API](https://platform.openai.com/docs/api-reference/chat/create)\r\n- [AWS Bedrock](https://aws.amazon.com/bedrock/)\r\n- [AWS SDK for JavaScript](https://aws.amazon.com/sdk-for-javascript/)\r\n\r\n---\r\n\r\nPlease consider sending me a tip to support my work 😀\r\n# [🍵 tip me here](https://ko-fi.com/jparkerweb)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjparkerweb%2Fbedrock-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjparkerweb%2Fbedrock-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjparkerweb%2Fbedrock-wrapper/lists"}