@forestadmin/ai-proxy 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,8 +2,27 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createBaseChatModel = createBaseChatModel;
4
4
  const anthropic_1 = require("@langchain/anthropic");
5
+ const aws_1 = require("@langchain/aws");
5
6
  const openai_1 = require("@langchain/openai");
6
7
  const errors_1 = require("./errors");
8
+ // LangChain infers tool_choice support from a hardcoded family list (claude-3/4, mistral-large)
9
+ // and throws client-side for anything else, so every claude-5 id would be rejected before reaching
10
+ // AWS. Let Bedrock be the authority instead: a model that truly cannot do it answers with a
11
+ // ValidationException, and its id leaves the allowlist in supported-models.ts.
12
+ const BEDROCK_TOOL_CHOICE_VALUES = ['auto', 'any', 'tool'];
13
+ // LangChain reads AWS_DEFAULT_REGION only, and its own error names just that one — unhelpful to
14
+ // anyone who set AWS_REGION, the variable the AWS SDK and CLI treat as primary.
15
+ // `||` rather than `??`: an exported-but-empty AWS_REGION is how a container ships a variable it
16
+ // never filled, and `??` would keep that empty string and refuse a deployment whose
17
+ // AWS_DEFAULT_REGION is perfectly good. Matches cli-core.ts, which the standalone path uses.
18
+ function resolveBedrockRegion(region) {
19
+ const resolved = region || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
20
+ if (!resolved) {
21
+ throw new errors_1.AIBadRequestError('Bedrock requires a region: set `region` in the AI configuration, AWS_REGION or ' +
22
+ 'AWS_DEFAULT_REGION.');
23
+ }
24
+ return resolved;
25
+ }
7
26
  // eslint-disable-next-line import/prefer-default-export
8
27
  function createBaseChatModel(config) {
9
28
  if (config.provider === 'openai') {
@@ -14,6 +33,15 @@ function createBaseChatModel(config) {
14
33
  const { provider, name, model, ...opts } = config;
15
34
  return new anthropic_1.ChatAnthropic({ maxRetries: 0, ...opts, model });
16
35
  }
36
+ if (config.provider === 'bedrock') {
37
+ const { provider, name, region, ...opts } = config;
38
+ return new aws_1.ChatBedrockConverse({
39
+ maxRetries: 0,
40
+ supportsToolChoiceValues: [...BEDROCK_TOOL_CHOICE_VALUES],
41
+ ...opts,
42
+ region: resolveBedrockRegion(region),
43
+ });
44
+ }
17
45
  throw new errors_1.AIBadRequestError(`Unsupported AI provider '${config.provider}'.`);
18
46
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2UtY2hhdC1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGUtYmFzZS1jaGF0LW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esa0RBZ0JDO0FBdEJELG9EQUFxRDtBQUNyRCw4Q0FBK0M7QUFFL0MscUNBQTZDO0FBRTdDLHdEQUF3RDtBQUN4RCxTQUFnQixtQkFBbUIsQ0FBQyxNQUF1QjtJQUN6RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFM0MsT0FBTyxJQUFJLG1CQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVsRCxPQUFPLElBQUkseUJBQWEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxJQUFJLDBCQUFpQixDQUN6Qiw0QkFBNkIsTUFBK0IsQ0FBQyxRQUFRLElBQUksQ0FDMUUsQ0FBQztBQUNKLENBQUMifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2UtY2hhdC1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGUtYmFzZS1jaGF0LW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0NBLGtEQTJCQztBQTFERCxvREFBcUQ7QUFDckQsd0NBQXFEO0FBQ3JELDhDQUErQztBQUUvQyxxQ0FBNkM7QUFFN0MsZ0dBQWdHO0FBQ2hHLG1HQUFtRztBQUNuRyw0RkFBNEY7QUFDNUYsK0VBQStFO0FBQy9FLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBVSxDQUFDO0FBRXBFLGdHQUFnRztBQUNoRyxnRkFBZ0Y7QUFDaEYsaUdBQWlHO0FBQ2pHLG9GQUFvRjtBQUNwRiw2RkFBNkY7QUFDN0YsU0FBUyxvQkFBb0IsQ0FBQyxNQUFlO0lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBRXBGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSwwQkFBaUIsQ0FDekIsaUZBQWlGO1lBQy9FLHFCQUFxQixDQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsU0FBZ0IsbUJBQW1CLENBQUMsTUFBdUI7SUFDekQsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRTNDLE9BQU8sSUFBSSxtQkFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFbEQsT0FBTyxJQUFJLHlCQUFhLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFbkQsT0FBTyxJQUFJLHlCQUFtQixDQUFDO1lBQzdCLFVBQVUsRUFBRSxDQUFDO1lBQ2Isd0JBQXdCLEVBQUUsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO1lBQ3pELEdBQUcsSUFBSTtZQUNQLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSwwQkFBaUIsQ0FDekIsNEJBQTZCLE1BQStCLENBQUMsUUFBUSxJQUFJLENBQzFFLENBQUM7QUFDSixDQUFDIn0=
package/dist/errors.d.ts CHANGED
@@ -9,6 +9,9 @@ export declare class AIBadRequestError extends BadRequestError {
9
9
  export declare class AIModelNotSupportedError extends AIBadRequestError {
10
10
  constructor(model: string);
11
11
  }
12
+ export declare class AIModelNotAllowlistedError extends AIBadRequestError {
13
+ constructor(model: string);
14
+ }
12
15
  export declare class AINotFoundError extends NotFoundError {
13
16
  constructor(message: string);
14
17
  }
package/dist/errors.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * This allows the agent's error middleware to map them to their natural HTTP status codes.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.McpConfigError = exports.McpConflictError = exports.McpLoadTimeoutError = exports.McpConnectionError = exports.McpError = exports.AIToolNotFoundError = exports.AIToolUnprocessableError = exports.AINotConfiguredError = exports.AIForbiddenError = exports.AIUnauthorizedError = exports.AITooManyRequestsError = exports.AIProviderUnavailableError = exports.AIProviderError = exports.AINotFoundError = exports.AIModelNotSupportedError = exports.AIBadRequestError = void 0;
7
+ exports.McpConfigError = exports.McpConflictError = exports.McpLoadTimeoutError = exports.McpConnectionError = exports.McpError = exports.AIToolNotFoundError = exports.AIToolUnprocessableError = exports.AINotConfiguredError = exports.AIForbiddenError = exports.AIUnauthorizedError = exports.AITooManyRequestsError = exports.AIProviderUnavailableError = exports.AIProviderError = exports.AINotFoundError = exports.AIModelNotAllowlistedError = exports.AIModelNotSupportedError = exports.AIBadRequestError = void 0;
8
8
  // eslint-disable-next-line max-classes-per-file
9
9
  const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
10
10
  class AIBadRequestError extends datasource_toolkit_1.BadRequestError {
@@ -21,6 +21,16 @@ class AIModelNotSupportedError extends AIBadRequestError {
21
21
  }
22
22
  }
23
23
  exports.AIModelNotSupportedError = AIModelNotSupportedError;
24
+ class AIModelNotAllowlistedError extends AIBadRequestError {
25
+ constructor(model) {
26
+ super(`Model '${model}' is not supported on Amazon Bedrock. Supported ids are the Claude sonnet, ` +
27
+ `haiku and opus lines, as a model id or a cross-region inference profile id ` +
28
+ `(e.g. 'eu.anthropic.claude-sonnet-4-6-v1:0') or its inference-profile ARN. Application ` +
29
+ `inference profiles carry an opaque id and are not accepted.`);
30
+ this.name = 'AIModelNotAllowlistedError';
31
+ }
32
+ }
33
+ exports.AIModelNotAllowlistedError = AIModelNotAllowlistedError;
24
34
  class AINotFoundError extends datasource_toolkit_1.NotFoundError {
25
35
  constructor(message) {
26
36
  super(message);
@@ -136,4 +146,4 @@ class McpConfigError extends McpError {
136
146
  }
137
147
  }
138
148
  exports.McpConfigError = McpConfigError;
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxnREFBZ0Q7QUFDaEQsd0VBUXlDO0FBRXpDLE1BQWEsaUJBQWtCLFNBQVEsb0NBQWU7SUFDcEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0M7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGlCQUFpQjtJQUM3RCxZQUFZLEtBQWE7UUFDdkIsS0FBSyxDQUNILFVBQVUsS0FBSyw4RUFBOEUsQ0FDOUYsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBUEQsNERBT0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsa0NBQWE7SUFDaEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBTEQsMENBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBSXJELFlBQVksUUFBZ0IsRUFBRSxPQUEyQjtRQUN2RCxLQUFLLENBQUMsdUJBQXVCLFFBQVEsS0FBSyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxPQUFPLEVBQUUsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFWRCwwQ0FVQztBQUVELE1BQWEsMEJBQTJC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
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxnREFBZ0Q7QUFDaEQsd0VBUXlDO0FBRXpDLE1BQWEsaUJBQWtCLFNBQVEsb0NBQWU7SUFDcEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0M7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGlCQUFpQjtJQUM3RCxZQUFZLEtBQWE7UUFDdkIsS0FBSyxDQUNILFVBQVUsS0FBSyw4RUFBOEUsQ0FDOUYsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBUEQsNERBT0M7QUFFRCxNQUFhLDBCQUEyQixTQUFRLGlCQUFpQjtJQUMvRCxZQUFZLEtBQWE7UUFDdkIsS0FBSyxDQUNILFVBQVUsS0FBSyw2RUFBNkU7WUFDMUYsNkVBQTZFO1lBQzdFLHlGQUF5RjtZQUN6Riw2REFBNkQsQ0FDaEUsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsNEJBQTRCLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBVkQsZ0VBVUM7QUFFRCxNQUFhLGVBQWdCLFNBQVEsa0NBQWE7SUFDaEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBTEQsMENBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBSXJELFlBQVksUUFBZ0IsRUFBRSxPQUEyQjtRQUN2RCxLQUFLLENBQUMsdUJBQXVCLFFBQVEsS0FBSyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxD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
@@ -1,7 +1,7 @@
1
1
  import type { AiConfiguration, ChatCompletionResponse } from './provider';
2
2
  import type { RemoteTools } from './remote-tools';
3
3
  import type { DispatchBody } from './schemas/route';
4
- export type { AiConfiguration, AiProvider, AnthropicConfiguration, BaseAiConfiguration, ChatCompletionMessage, ChatCompletionResponse, ChatCompletionTool, ChatCompletionToolChoice, OpenAiConfiguration, } from './provider';
4
+ export type { AiConfiguration, AiProvider, AnthropicConfiguration, BaseAiConfiguration, BedrockConfiguration, ChatCompletionMessage, ChatCompletionResponse, ChatCompletionTool, ChatCompletionToolChoice, OpenAiConfiguration, } from './provider';
5
5
  export type { DispatchBody } from './schemas/route';
6
6
  export default class ProviderDispatcher {
7
7
  private readonly openaiModel;
@@ -131,4 +131,4 @@ class ProviderDispatcher {
131
131
  }
132
132
  }
133
133
  exports.default = ProviderDispatcher;
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsd0VBQW9GO0FBQ3BGLG9EQUFxRDtBQUNyRCw2RUFBaUY7QUFDakYsOENBQStDO0FBRS9DLDRFQUFtRDtBQUNuRCxxQ0FRa0I7QUFDbEIsMkRBQXVEO0FBZ0J2RCxNQUFxQixrQkFBa0I7SUFTckMsWUFBWSxhQUFxQyxFQUFFLFdBQXdCO1FBUjFELGdCQUFXLEdBQXNCLElBQUksQ0FBQztRQUV0QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFFNUMsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFL0IsSUFBSSxhQUFhLEVBQUUsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG1CQUFVLENBQUM7Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDLEVBQUUsb0RBQW9EO2dCQUNuRSxHQUFHLGlCQUFpQjtnQkFDcEIsb0JBQW9CLEVBQUUsSUFBSTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxhQUFhLEVBQUUsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25ELE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLGFBQWEsQ0FBQztZQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkseUJBQWEsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLENBQUMsRUFBRSxvREFBb0Q7Z0JBQ25FLEdBQUcsYUFBYTtnQkFDaEIsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILElBQUks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
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsd0VBQW9GO0FBQ3BGLG9EQUFxRDtBQUNyRCw2RUFBaUY7QUFDakYsOENBQStDO0FBRS9DLDRFQUFtRDtBQUNuRCxxQ0FRa0I7QUFDbEIsMkRBQXVEO0FBaUJ2RCxNQUFxQixrQkFBa0I7SUFTckMsWUFBWSxhQUFxQyxFQUFFLFdBQXdCO1FBUjFELGdCQUFXLEdBQXNCLElBQUksQ0FBQztRQUV0QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFFNUMsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFL0IsSUFBSSxhQUFhLEVBQUUsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG1CQUFVLENBQUM7Z0JBQ2hDLFVBQVUsRUFBRSxDQUFDLEVBQUUsb0RBQW9EO2dCQUNuRSxHQUFHLGlCQUFpQjtnQkFDcEIsb0JBQW9CLEVBQUUsSUFBSTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxhQUFhLEVBQUUsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25ELE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLGFBQWEsQ0FBQztZQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkseUJBQWEsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLENBQUMsRUFBRSxvREFBb0Q7Z0JBQ25FLEdBQUcsYUFBYTtnQkFDaEIsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILElBQUks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
@@ -1,12 +1,13 @@
1
1
  import type Anthropic from '@anthropic-ai/sdk';
2
2
  import type { AnthropicInput } from '@langchain/anthropic';
3
+ import type { ChatBedrockConverseInput } from '@langchain/aws';
3
4
  import type { ChatOpenAIFields } from '@langchain/openai';
4
5
  import type OpenAI from 'openai';
5
6
  export type ChatCompletionResponse = OpenAI.Chat.Completions.ChatCompletion;
6
7
  export type ChatCompletionMessage = OpenAI.Chat.Completions.ChatCompletionMessageParam;
7
8
  export type ChatCompletionTool = OpenAI.Chat.Completions.ChatCompletionTool;
8
9
  export type ChatCompletionToolChoice = OpenAI.Chat.Completions.ChatCompletionToolChoiceOption;
9
- export type AiProvider = 'openai' | 'anthropic';
10
+ export type AiProvider = 'openai' | 'anthropic' | 'bedrock';
10
11
  /**
11
12
  * Base configuration common to all AI providers.
12
13
  */
@@ -33,5 +34,9 @@ export type AnthropicConfiguration = Omit<BaseAiConfiguration, 'model'> & Omit<A
33
34
  provider: 'anthropic';
34
35
  model: Anthropic.Messages.Model;
35
36
  };
36
- export type AiConfiguration = OpenAiConfiguration | AnthropicConfiguration;
37
+ export type BedrockConfiguration = Omit<BaseAiConfiguration, 'model' | 'apiKey'> & Omit<ChatBedrockConverseInput, 'model'> & {
38
+ provider: 'bedrock';
39
+ model: string;
40
+ };
41
+ export type AiConfiguration = OpenAiConfiguration | AnthropicConfiguration | BedrockConfiguration;
37
42
  //# sourceMappingURL=provider.d.ts.map
package/dist/router.d.ts CHANGED
@@ -12,6 +12,7 @@ export declare class Router {
12
12
  localToolsApiKeys?: Record<string, string>;
13
13
  logger?: Logger;
14
14
  });
15
+ private static readonly DISPATCHABLE_PROVIDERS;
15
16
  private static createLocalToolProviders;
16
17
  private validateConfigurations;
17
18
  /**
package/dist/router.js CHANGED
@@ -17,14 +17,19 @@ class Router {
17
17
  this.logger = params?.logger;
18
18
  this.validateConfigurations();
19
19
  }
20
- // Extension point for server-side tool providers. Currently empty — the Brave Search provider
21
- // was removed (deprecated, unused). The `localToolsApiKeys` constructor param is kept so callers
22
- // don't break and future local tools can be wired here from those keys.
23
20
  static createLocalToolProviders() {
24
21
  return [];
25
22
  }
26
23
  validateConfigurations() {
27
24
  for (const config of this.aiConfigurations) {
25
+ // ProviderDispatcher only implements openai and anthropic. Without this, a bedrock config
26
+ // constructs cleanly, gets published in the provider metadata, and then fails every end-user
27
+ // query with a 400 — three green lights before the refusal.
28
+ if (!Router.DISPATCHABLE_PROVIDERS.includes(config.provider)) {
29
+ throw new errors_1.AIBadRequestError(`AI configuration '${config.name}' uses provider '${config.provider}', which the AI ` +
30
+ `proxy cannot serve. Bedrock is only available to the self-hosted workflow executor ` +
31
+ `(AI_PROVIDER=bedrock, or addWorkflowExecutor({ ai })).`);
32
+ }
28
33
  if (!(0, supported_models_1.default)(config.model, config.provider)) {
29
34
  throw new errors_1.AIModelNotSupportedError(config.model);
30
35
  }
@@ -109,4 +114,8 @@ class Router {
109
114
  }
110
115
  }
111
116
  exports.Router = Router;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxxQ0FBdUU7QUFDdkUsZ0ZBQXVEO0FBQ3ZELGlEQUE2QztBQUM3QywyQ0FBa0Q7QUFDbEQsMEVBQXdEO0FBQ3hELG1FQUE4RDtBQWdCOUQsTUFBYSxNQUFNO0lBS2pCLFlBQVksTUFJWDtRQUNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELDhGQUE4RjtJQUM5RixpR0FBaUc7SUFDakcsd0VBQXdFO0lBQ2hFLE1BQU0sQ0FBQyx3QkFBd0I7UUFDckMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUEsMEJBQXNCLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxJQUFJLGlDQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFxQjtRQUMvQixpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsdUJBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUs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
117
+ // Extension point for server-side tool providers. Currently empty — the Brave Search provider
118
+ // was removed (deprecated, unused). The `localToolsApiKeys` constructor param is kept so callers
119
+ // don't break and future local tools can be wired here from those keys.
120
+ Router.DISPATCHABLE_PROVIDERS = ['openai', 'anthropic'];
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxxQ0FBdUU7QUFDdkUsZ0ZBQXVEO0FBQ3ZELGlEQUE2QztBQUM3QywyQ0FBa0Q7QUFDbEQsMEVBQXdEO0FBQ3hELG1FQUE4RDtBQWdCOUQsTUFBYSxNQUFNO0lBS2pCLFlBQVksTUFJWDtRQUNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQU9PLE1BQU0sQ0FBQyx3QkFBd0I7UUFDckMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0MsMEZBQTBGO1lBQzFGLDZGQUE2RjtZQUM3Riw0REFBNEQ7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sSUFBSSwwQkFBaUIsQ0FDekIscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLG9CQUFvQixNQUFNLENBQUMsUUFBUSxrQkFBa0I7b0JBQ25GLHFGQUFxRjtvQkFDckYsd0RBQXdELENBQzNELENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUEsMEJBQXNCLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxJQUFJLGlDQUF3QixDQUFDLE1B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
@@ -32,6 +32,7 @@ const OPENAI_UNSUPPORTED_PREFIXES = [
32
32
  const OPENAI_UNSUPPORTED_PATTERNS = [
33
33
  // Non-chat model variants (can appear in the middle of model names)
34
34
  '-realtime',
35
+ '-live',
35
36
  '-audio',
36
37
  '-transcribe',
37
38
  '-tts',
@@ -70,6 +71,7 @@ const ANTHROPIC_UNSUPPORTED_MODELS = [
70
71
  'claude-3-5-haiku-20241022', // EOL 2026-02-19
71
72
  'claude-3-5-haiku-latest', // Points to deprecated claude-3-5-haiku-20241022
72
73
  'claude-3-7-sonnet-20250219', // EOL 2026-02-19
74
+ 'claude-3-sonnet-20240229', // EOL 2025-07-21
73
75
  'claude-opus-4-20250514', // Requires streaming (non-streaming times out)
74
76
  'claude-opus-4-1-20250805', // Requires streaming (non-streaming times out)
75
77
  ];
@@ -85,10 +87,62 @@ function isAnthropicModelSupported(model) {
85
87
  return false;
86
88
  return !ANTHROPIC_UNSUPPORTED_PREFIXES.some(prefix => model === prefix || model.startsWith(`${prefix}-`));
87
89
  }
90
+ // ─── Bedrock ─────────────────────────────────────────────────────────────────
91
+ // Allowlist, unlike the two providers above: Bedrock resells hundreds of models and we vouch for
92
+ // none of them beyond the Claude lines the integration test actually exercises. Nova, Llama,
93
+ // Mistral and Titan are rejected on purpose — several cannot honour the forced tool call every AI
94
+ // step makes, and a permissive default would surface that as a failure mid-run rather than a
95
+ // refusal at startup.
96
+ const BEDROCK_INFERENCE_PROFILE_PREFIXES = [
97
+ 'us.',
98
+ 'us-gov.',
99
+ 'eu.',
100
+ 'apac.',
101
+ 'jp.',
102
+ 'au.',
103
+ 'global.',
104
+ ];
105
+ // Anthropic renamed its lines mid-Claude-4: `claude-3-5-sonnet` became `claude-sonnet-4-6`. Both
106
+ // spellings are live on Bedrock, and matching only the new one silently excludes every Claude 3.x.
107
+ const BEDROCK_SUPPORTED_ANTHROPIC_FAMILIES = [
108
+ 'claude-sonnet',
109
+ 'claude-haiku',
110
+ 'claude-opus',
111
+ 'claude-3-sonnet',
112
+ 'claude-3-haiku',
113
+ 'claude-3-opus',
114
+ 'claude-3-5-sonnet',
115
+ 'claude-3-5-haiku',
116
+ 'claude-3-7-sonnet',
117
+ ];
118
+ const BEDROCK_VERSION_SUFFIX = /-v\d+:\d+(:\w+)?$/;
119
+ // `arn:aws:bedrock:<region>:<account>:inference-profile/<profile id>` is a documented modelId, and
120
+ // the profile id is the tail — so the ARN form reduces to the id form. Application inference
121
+ // profiles carry an opaque id instead and cannot be resolved without calling Bedrock, so they stay
122
+ // out of the allowlist.
123
+ const BEDROCK_INFERENCE_PROFILE_ARN = /^arn:aws[\w-]*:bedrock:[^:]*:[^:]*:inference-profile\/(.+)$/;
124
+ function isBedrockModelSupported(model) {
125
+ const arnMatch = BEDROCK_INFERENCE_PROFILE_ARN.exec(model);
126
+ if (arnMatch)
127
+ return isBedrockModelSupported(arnMatch[1]);
128
+ const profilePrefix = BEDROCK_INFERENCE_PROFILE_PREFIXES.find(prefix => model.startsWith(prefix));
129
+ const vendorId = profilePrefix ? model.slice(profilePrefix.length) : model;
130
+ const separatorIndex = vendorId.indexOf('.');
131
+ if (separatorIndex === -1)
132
+ return false;
133
+ const vendor = vendorId.slice(0, separatorIndex);
134
+ const vendorModel = vendorId.slice(separatorIndex + 1).replace(BEDROCK_VERSION_SUFFIX, '');
135
+ if (vendor !== 'anthropic')
136
+ return false;
137
+ const isSupportedFamily = BEDROCK_SUPPORTED_ANTHROPIC_FAMILIES.some(family => vendorModel.startsWith(`${family}-`));
138
+ return isSupportedFamily && isAnthropicModelSupported(vendorModel);
139
+ }
88
140
  // ─── Public API ──────────────────────────────────────────────────────────────
89
- function isModelSupportingTools(model, provider) {
141
+ function isModelSupportingTools(model, provider = 'openai') {
90
142
  if (provider === 'anthropic')
91
143
  return isAnthropicModelSupported(model);
144
+ if (provider === 'bedrock')
145
+ return isBedrockModelSupported(model);
92
146
  return isOpenAIModelSupported(model);
93
147
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdXBwb3J0ZWQtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEdBLHlDQUlDO0FBNUdELGdGQUFnRjtBQUNoRiwwREFBMEQ7QUFFMUQsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxnQkFBZ0I7SUFDaEIsT0FBTyxFQUFFLGlEQUFpRDtJQUMxRCxjQUFjO0lBQ2QsU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsS0FBSztJQUNMLGdFQUFnRTtJQUNoRSxJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSiwwQkFBMEI7SUFDMUIsUUFBUTtJQUNSLFNBQVM7SUFDVCxLQUFLO0lBQ0wsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixTQUFTLEVBQUUsMENBQTBDO0lBQ3JELGNBQWMsRUFBRSx1QkFBdUI7SUFDdkMsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQyxjQUFjLEVBQUUsa0NBQWtDO0lBQ2xELFdBQVcsRUFBRSxZQUFZO0lBQ3pCLE1BQU0sRUFBRSxxQkFBcUI7SUFDN0IsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxvRUFBb0U7SUFDcEUsV0FBVztJQUNYLFFBQVE7SUFDUixhQUFhO0lBQ2IsTUFBTTtJQUNOLFNBQVM7SUFDVCxRQUFRO0lBQ1IsV0FBVztJQUNYLGlFQUFpRTtJQUNqRSxNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLDBGQUEwRjtJQUMxRixjQUFjO0NBQ2YsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsa0JBQWtCLEVBQUUseUNBQXlDO0lBQzdELHlGQUF5RjtJQUN6RixjQUFjO0lBQ2QsYUFBYTtJQUNiLGVBQWU7SUFDZixhQUFhO0NBQ2QsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRXhFLFNBQVMsc0JBQXNCLENBQUMsS0FBYTtJQUMzQyxJQUFJLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1RCxNQUFNLGNBQWMsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsSUFBSSxjQUFjO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFakMsTUFBTSxhQUFhLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUNwRCxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQzdELENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQ2hELFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FDbkUsQ0FBQztJQUVGLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsMERBQTBEO0FBRTFELE1BQU0sNEJBQTRCLEdBQUc7SUFDbkMseUJBQXlCLEVBQUUsaUJBQWlCO0lBQzVDLDJCQUEyQixFQUFFLGlCQUFpQjtJQUM5Qyx5QkFBeUIsRUFBRSxpREFBaUQ7SUFDNUUsNEJBQTRCLEVBQUUsaUJBQWlCO0lBQy9DLHdCQUF3QixFQUFFLCtDQUErQztJQUN6RSwwQkFBMEIsRUFBRSwrQ0FBK0M7Q0FDNUUsQ0FBQztBQUVGLDZGQUE2RjtBQUM3RixnRkFBZ0Y7QUFDaEYsTUFBTSw4QkFBOEIsR0FBRztJQUNyQywrRkFBK0Y7SUFDL0YsMEJBQTBCO0lBQzFCLGdCQUFnQjtDQUNqQixDQUFDO0FBRUYsU0FBUyx5QkFBeUIsQ0FBQyxLQUFhO0lBQzlDLElBQUksNEJBQTRCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRS9ELE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQ3pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FDN0QsQ0FBQztBQUNKLENBQUM7QUFFRCxnRkFBZ0Y7QUFFaEYsU0FBd0Isc0JBQXNCLENBQUMsS0FBYSxFQUFFLFFBQXFCO0lBQ2pGLElBQUksUUFBUSxLQUFLLFdBQVc7UUFBRSxPQUFPLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRFLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyJ9
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdXBwb3J0ZWQtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEtBLHlDQVFDO0FBaExELGdGQUFnRjtBQUNoRiwwREFBMEQ7QUFFMUQsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxnQkFBZ0I7SUFDaEIsT0FBTyxFQUFFLGlEQUFpRDtJQUMxRCxjQUFjO0lBQ2QsU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsS0FBSztJQUNMLGdFQUFnRTtJQUNoRSxJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSiwwQkFBMEI7SUFDMUIsUUFBUTtJQUNSLFNBQVM7SUFDVCxLQUFLO0lBQ0wsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixTQUFTLEVBQUUsMENBQTBDO0lBQ3JELGNBQWMsRUFBRSx1QkFBdUI7SUFDdkMsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQyxjQUFjLEVBQUUsa0NBQWtDO0lBQ2xELFdBQVcsRUFBRSxZQUFZO0lBQ3pCLE1BQU0sRUFBRSxxQkFBcUI7SUFDN0IsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxvRUFBb0U7SUFDcEUsV0FBVztJQUNYLE9BQU87SUFDUCxRQUFRO0lBQ1IsYUFBYTtJQUNiLE1BQU07SUFDTixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxpRUFBaUU7SUFDakUsTUFBTTtJQUNOLGdCQUFnQjtJQUNoQiwwRkFBMEY7SUFDMUYsY0FBYztDQUNmLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLGtCQUFrQixFQUFFLHlDQUF5QztJQUM3RCx5RkFBeUY7SUFDekYsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsYUFBYTtDQUNkLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxTQUFT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
@@ -8,9 +8,20 @@ const errors_1 = require("./errors");
8
8
  const supported_models_1 = __importDefault(require("./supported-models"));
9
9
  function validateAiConfigurations(aiConfigurations) {
10
10
  for (const config of aiConfigurations) {
11
+ // The CLI and the embedded option both refuse this, but a direct `new AiClient(...)` reaches
12
+ // neither, and ChatBedrockConverse drops the key silently and authenticates with the ambient
13
+ // role instead — wrong account, wrong bill, no error.
14
+ if (config.provider === 'bedrock' && config.apiKey) {
15
+ throw new errors_1.AIBadRequestError('apiKey is not used with provider bedrock: credentials come from the AWS credential chain. ' +
16
+ 'Remove it.');
17
+ }
11
18
  if (!(0, supported_models_1.default)(config.model, config.provider)) {
12
- throw new errors_1.AIModelNotSupportedError(config.model);
19
+ // Bedrock refuses on an allowlist, not on tool capability: telling a Claude 3.5 user their
20
+ // model "does not support tools" sends them hunting for a capability they already had.
21
+ throw config.provider === 'bedrock'
22
+ ? new errors_1.AIModelNotAllowlistedError(config.model)
23
+ : new errors_1.AIModelNotSupportedError(config.model);
13
24
  }
14
25
  }
15
26
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtYWktY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdGUtYWktY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSwyQ0FNQztBQVRELHFDQUFvRDtBQUNwRCwwRUFBd0Q7QUFFeEQsU0FBd0Isd0JBQXdCLENBQUMsZ0JBQW1DO0lBQ2xGLEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBQSwwQkFBc0IsRUFBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sSUFBSSxpQ0FBd0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtYWktY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdGUtYWktY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSwyQ0FvQkM7QUF2QkQscUNBQW1HO0FBQ25HLDBFQUF3RDtBQUV4RCxTQUF3Qix3QkFBd0IsQ0FBQyxnQkFBbUM7SUFDbEYsS0FBSyxNQUFNLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLDZGQUE2RjtRQUM3Riw2RkFBNkY7UUFDN0Ysc0RBQXNEO1FBQ3RELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUssTUFBOEIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RSxNQUFNLElBQUksMEJBQWlCLENBQ3pCLDRGQUE0RjtnQkFDMUYsWUFBWSxDQUNmLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUEsMEJBQXNCLEVBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMzRCwyRkFBMkY7WUFDM0YsdUZBQXVGO1lBQ3ZGLE1BQU0sTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxtQ0FBMEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsSUFBSSxpQ0FBd0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/ai-proxy",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -15,6 +15,7 @@
15
15
  "@forestadmin/agent-toolkit": "1.2.0",
16
16
  "@forestadmin/datasource-toolkit": "1.55.1",
17
17
  "@langchain/anthropic": "1.4.0",
18
+ "@langchain/aws": "1.4.3",
18
19
  "@langchain/core": "1.1.48",
19
20
  "@langchain/langgraph": "1.3.7",
20
21
  "@langchain/mcp-adapters": "1.1.3",
@@ -22,6 +23,7 @@
22
23
  "zod": "^4.3.5"
23
24
  },
24
25
  "devDependencies": {
26
+ "@aws-sdk/client-bedrock": "^3.972.0",
25
27
  "@modelcontextprotocol/sdk": "^1.28.0",
26
28
  "@types/express": "5.0.1",
27
29
  "express": "5.1.0",
@@ -36,6 +38,9 @@
36
38
  "build:watch": "tsc --watch",
37
39
  "clean": "rm -rf coverage dist",
38
40
  "lint": "eslint src",
39
- "test": "jest"
41
+ "test": "jest",
42
+ "test:openai": "jest --testPathPattern='llm.integration' -t 'OpenAI'",
43
+ "test:anthropic": "jest --testPathPattern='llm.integration' -t 'Anthropic'",
44
+ "test:bedrock": "jest --testPathPattern='bedrock.integration'"
40
45
  }
41
46
  }