adk-llm-bridge 0.3.4 → 0.5.1

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.
Files changed (88) hide show
  1. package/dist/config.d.ts +1 -1
  2. package/dist/converters/index.d.ts +2 -2
  3. package/dist/converters/response.d.ts +1 -1
  4. package/dist/converters/response.d.ts.map +1 -1
  5. package/dist/core/base-provider-llm.d.ts +1 -1
  6. package/dist/core/base-provider-llm.d.ts.map +1 -1
  7. package/dist/core/config-resolver.d.ts +39 -0
  8. package/dist/core/config-resolver.d.ts.map +1 -0
  9. package/dist/core/create-provider.d.ts +40 -0
  10. package/dist/core/create-provider.d.ts.map +1 -0
  11. package/dist/core/create-register.d.ts +38 -0
  12. package/dist/core/create-register.d.ts.map +1 -0
  13. package/dist/core/index.d.ts +8 -3
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/openai-compatible-llm.d.ts +34 -144
  16. package/dist/core/openai-compatible-llm.d.ts.map +1 -1
  17. package/dist/core/provider-definition.d.ts +66 -0
  18. package/dist/core/provider-definition.d.ts.map +1 -0
  19. package/dist/index.d.ts +14 -14
  20. package/dist/index.js +2 -45
  21. package/dist/index.js.map +3 -75
  22. package/dist/providers/ai-gateway/definition.d.ts +8 -0
  23. package/dist/providers/ai-gateway/definition.d.ts.map +1 -0
  24. package/dist/providers/ai-gateway/index.d.ts +10 -27
  25. package/dist/providers/ai-gateway/index.d.ts.map +1 -1
  26. package/dist/providers/anthropic/anthropic-llm.d.ts +10 -2
  27. package/dist/providers/anthropic/anthropic-llm.d.ts.map +1 -1
  28. package/dist/providers/anthropic/converters/response.d.ts.map +1 -1
  29. package/dist/providers/anthropic/index.d.ts +15 -24
  30. package/dist/providers/anthropic/index.d.ts.map +1 -1
  31. package/dist/providers/custom/custom-llm.d.ts +2 -2
  32. package/dist/providers/custom/custom-llm.d.ts.map +1 -1
  33. package/dist/providers/custom/factory.d.ts +2 -2
  34. package/dist/providers/custom/index.d.ts +2 -2
  35. package/dist/providers/index.d.ts +6 -6
  36. package/dist/providers/openai/definition.d.ts +8 -0
  37. package/dist/providers/openai/definition.d.ts.map +1 -0
  38. package/dist/providers/openai/index.d.ts +10 -28
  39. package/dist/providers/openai/index.d.ts.map +1 -1
  40. package/dist/providers/openrouter/definition.d.ts +8 -0
  41. package/dist/providers/openrouter/definition.d.ts.map +1 -0
  42. package/dist/providers/openrouter/index.d.ts +10 -30
  43. package/dist/providers/openrouter/index.d.ts.map +1 -1
  44. package/dist/providers/xai/definition.d.ts +8 -0
  45. package/dist/providers/xai/definition.d.ts.map +1 -0
  46. package/dist/providers/xai/index.d.ts +10 -28
  47. package/dist/providers/xai/index.d.ts.map +1 -1
  48. package/dist/utils/index.d.ts +8 -0
  49. package/dist/utils/index.d.ts.map +1 -0
  50. package/dist/utils/json.d.ts +26 -0
  51. package/dist/utils/json.d.ts.map +1 -0
  52. package/dist/utils/validate.d.ts +51 -0
  53. package/dist/utils/validate.d.ts.map +1 -0
  54. package/package.json +8 -7
  55. package/dist/providers/ai-gateway/ai-gateway-llm.d.ts +0 -71
  56. package/dist/providers/ai-gateway/ai-gateway-llm.d.ts.map +0 -1
  57. package/dist/providers/ai-gateway/factory.d.ts +0 -56
  58. package/dist/providers/ai-gateway/factory.d.ts.map +0 -1
  59. package/dist/providers/ai-gateway/register.d.ts +0 -63
  60. package/dist/providers/ai-gateway/register.d.ts.map +0 -1
  61. package/dist/providers/anthropic/constants.d.ts +0 -36
  62. package/dist/providers/anthropic/constants.d.ts.map +0 -1
  63. package/dist/providers/anthropic/factory.d.ts +0 -60
  64. package/dist/providers/anthropic/factory.d.ts.map +0 -1
  65. package/dist/providers/anthropic/register.d.ts +0 -65
  66. package/dist/providers/anthropic/register.d.ts.map +0 -1
  67. package/dist/providers/openai/constants.d.ts +0 -34
  68. package/dist/providers/openai/constants.d.ts.map +0 -1
  69. package/dist/providers/openai/factory.d.ts +0 -61
  70. package/dist/providers/openai/factory.d.ts.map +0 -1
  71. package/dist/providers/openai/openai-llm.d.ts +0 -69
  72. package/dist/providers/openai/openai-llm.d.ts.map +0 -1
  73. package/dist/providers/openai/register.d.ts +0 -65
  74. package/dist/providers/openai/register.d.ts.map +0 -1
  75. package/dist/providers/openrouter/factory.d.ts +0 -61
  76. package/dist/providers/openrouter/factory.d.ts.map +0 -1
  77. package/dist/providers/openrouter/openrouter-llm.d.ts +0 -97
  78. package/dist/providers/openrouter/openrouter-llm.d.ts.map +0 -1
  79. package/dist/providers/openrouter/register.d.ts +0 -62
  80. package/dist/providers/openrouter/register.d.ts.map +0 -1
  81. package/dist/providers/xai/constants.d.ts +0 -30
  82. package/dist/providers/xai/constants.d.ts.map +0 -1
  83. package/dist/providers/xai/factory.d.ts +0 -54
  84. package/dist/providers/xai/factory.d.ts.map +0 -1
  85. package/dist/providers/xai/register.d.ts +0 -64
  86. package/dist/providers/xai/register.d.ts.map +0 -1
  87. package/dist/providers/xai/xai-llm.d.ts +0 -66
  88. package/dist/providers/xai/xai-llm.d.ts.map +0 -1
package/dist/config.d.ts CHANGED
@@ -34,7 +34,7 @@
34
34
  * });
35
35
  * ```
36
36
  */
37
- import type { AnthropicRegisterOptions, OpenAIRegisterOptions, OpenRouterRegisterOptions, RegisterOptions, XAIRegisterOptions } from "./types";
37
+ import type { AnthropicRegisterOptions, OpenAIRegisterOptions, OpenRouterRegisterOptions, RegisterOptions, XAIRegisterOptions } from "./types.js";
38
38
  /**
39
39
  * Mapping of provider identifiers to their configuration types.
40
40
  *
@@ -27,6 +27,6 @@
27
27
  * const adkResponse = convertResponse(openaiResponse);
28
28
  * ```
29
29
  */
30
- export { convertRequest } from "./request";
31
- export { convertResponse, convertStreamChunk, createStreamAccumulator, } from "./response";
30
+ export { convertRequest } from "./request.js";
31
+ export { convertResponse, convertStreamChunk, createStreamAccumulator, } from "./response.js";
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import type { LlmResponse } from "@google/adk";
15
15
  import type OpenAI from "openai";
16
- import type { StreamAccumulator, StreamChunkResult } from "../types";
16
+ import type { StreamAccumulator, StreamChunkResult } from "../types.js";
17
17
  /**
18
18
  * Converts an OpenAI chat completion response to ADK LlmResponse format.
19
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/converters/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,GAAG,WAAW,CAqC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,mBAAmB,EACjC,GAAG,EAAE,iBAAiB,GACrB,iBAAiB,CA2DnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/converters/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,GAAG,WAAW,CAsC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,mBAAmB,EACjC,GAAG,EAAE,iBAAiB,GACrB,iBAAiB,CA2DnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import type { BaseLlmConnection, LlmRequest, LlmResponse } from "@google/adk";
15
15
  import { BaseLlm } from "@google/adk";
16
- import type { BaseProviderConfig } from "../types";
16
+ import type { BaseProviderConfig } from "../types.js";
17
17
  /**
18
18
  * Abstract base class for all LLM providers in adk-llm-bridge.
19
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider-llm.d.ts","sourceRoot":"","sources":["../../src/core/base-provider-llm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,eAAgB,SAAQ,OAAO;IACnD;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAE9C;;;;OAIG;gBACS,MAAM,EAAE,kBAAkB;IAKtC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;IAEpC;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMxD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;CAe3E"}
1
+ {"version":3,"file":"base-provider-llm.d.ts","sourceRoot":"","sources":["../../src/core/base-provider-llm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,eAAgB,SAAQ,OAAO;IACnD;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAE9C;;;;OAIG;gBACS,MAAM,EAAE,kBAAkB;IAUtC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;IAEpC;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMxD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;CAe3E"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 PAI
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { BaseProviderConfig } from "../types.js";
7
+ import type { ProviderDefinition } from "./provider-definition.js";
8
+ /**
9
+ * Fully resolved configuration ready to create an OpenAI client.
10
+ */
11
+ export interface ResolvedConfig {
12
+ baseURL: string;
13
+ apiKey: string;
14
+ timeout: number;
15
+ maxRetries: number;
16
+ headers: Record<string, string>;
17
+ }
18
+ /**
19
+ * Resolves the first defined environment variable from a list of keys.
20
+ *
21
+ * @param keys - Environment variable names to check, in priority order
22
+ * @returns The first found value, or undefined
23
+ */
24
+ export declare function resolveEnvVar(keys: string[]): string | undefined;
25
+ /**
26
+ * Resolves provider configuration from multiple sources.
27
+ *
28
+ * Priority order (highest to lowest):
29
+ * 1. Instance config (passed to constructor)
30
+ * 2. Global config (via setProviderConfig)
31
+ * 3. Environment variables
32
+ * 4. Default values from the provider definition
33
+ *
34
+ * @param definition - The provider definition with defaults and env var names
35
+ * @param instanceConfig - Instance-level configuration
36
+ * @returns Fully resolved configuration
37
+ */
38
+ export declare function resolveConfig(definition: ProviderDefinition, instanceConfig: BaseProviderConfig): ResolvedConfig;
39
+ //# sourceMappingURL=config-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../src/core/config-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,kBAAkB,GACjC,cAAc,CAiDhB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 PAI
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Factory utilities for creating provider classes and functions
8
+ * from declarative provider definitions.
9
+ *
10
+ * @module core/create-provider
11
+ */
12
+ import type { BaseLlm } from "@google/adk";
13
+ import type { BaseProviderConfig } from "../types.js";
14
+ import { OpenAICompatibleLlm } from "./openai-compatible-llm.js";
15
+ import type { ProviderDefinition } from "./provider-definition.js";
16
+ /** Type compatible with LLMRegistry.register(). */
17
+ type RegisterableLlm = (new (params: {
18
+ model: string;
19
+ }) => BaseLlm) & {
20
+ readonly supportedModels: (string | RegExp)[];
21
+ };
22
+ /**
23
+ * Creates a typed LLM class with static `supportedModels` for LLMRegistry.
24
+ *
25
+ * The returned class can be registered with ADK's LLMRegistry and
26
+ * instantiated by model name matching.
27
+ *
28
+ * @param definition - The provider definition
29
+ * @returns A concrete class extending OpenAICompatibleLlm
30
+ */
31
+ export declare function createProviderClass(definition: ProviderDefinition): RegisterableLlm;
32
+ /**
33
+ * Creates a factory function for convenient provider instantiation.
34
+ *
35
+ * @param definition - The provider definition
36
+ * @returns A factory function: `(model, options?) => OpenAICompatibleLlm`
37
+ */
38
+ export declare function createProviderFactory(definition: ProviderDefinition): (model: string, options?: Partial<Omit<BaseProviderConfig, "model">>) => OpenAICompatibleLlm;
39
+ export {};
40
+ //# sourceMappingURL=create-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-provider.d.ts","sourceRoot":"","sources":["../../src/core/create-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,mDAAmD;AACnD,KAAK,eAAe,GAAG,CAAC,KAAK,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,GAAG;IACpE,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC/C,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,kBAAkB,GAC7B,eAAe,CAQjB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,kBAAkB,IAEhE,OAAO,MAAM,EACb,UAAU,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,KACnD,mBAAmB,CAEvB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 PAI
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Factory for creating provider registration functions.
8
+ *
9
+ * Eliminates the duplicated singleton registration pattern that was
10
+ * previously copy-pasted in every provider's register.ts file.
11
+ *
12
+ * @module core/create-register
13
+ */
14
+ import type { BaseLlm } from "@google/adk";
15
+ import type { ProviderDefinition } from "./provider-definition.js";
16
+ /** Type that LLMRegistry.register() expects. */
17
+ type RegisterableLlm = (new (params: {
18
+ model: string;
19
+ }) => BaseLlm) & {
20
+ readonly supportedModels: (string | RegExp)[];
21
+ };
22
+ /**
23
+ * Creates registration functions for a provider.
24
+ *
25
+ * Returns an object with `register`, `isRegistered`, and `_reset` functions
26
+ * that implement the idempotent singleton registration pattern.
27
+ *
28
+ * @param definition - The provider definition
29
+ * @param ProviderClass - The LLM class to register (must have static supportedModels)
30
+ * @returns Registration function set
31
+ */
32
+ export declare function createRegisterFunction(definition: ProviderDefinition, ProviderClass: RegisterableLlm): {
33
+ register(options?: Record<string, unknown>): void;
34
+ isRegistered(): boolean;
35
+ _reset(): void;
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=create-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-register.d.ts","sourceRoot":"","sources":["../../src/core/create-register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,gDAAgD;AAChD,KAAK,eAAe,GAAG,CAAC,KAAK,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,GAAG;IACpE,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC/C,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,eAAe;uBAKT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;oBAiBjC,OAAO;cAIb,IAAI;EAKjB"}
@@ -35,7 +35,12 @@
35
35
  * }
36
36
  * ```
37
37
  */
38
- export { BaseProviderLlm } from "./base-provider-llm";
39
- export type { OpenAIClientConfig } from "./openai-compatible-llm";
40
- export { OpenAICompatibleLlm } from "./openai-compatible-llm";
38
+ export { BaseProviderLlm } from "./base-provider-llm.js";
39
+ export { resolveConfig, resolveEnvVar } from "./config-resolver.js";
40
+ export type { ResolvedConfig } from "./config-resolver.js";
41
+ export { createProviderClass, createProviderFactory } from "./create-provider.js";
42
+ export { createRegisterFunction } from "./create-register.js";
43
+ export type { OpenAIClientConfig } from "./openai-compatible-llm.js";
44
+ export { OpenAICompatibleLlm } from "./openai-compatible-llm.js";
45
+ export type { ProviderDefinition, ProviderEnvKeys, } from "./provider-definition.js";
41
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
@@ -7,185 +7,75 @@
7
7
  * OpenAI-compatible LLM base class.
8
8
  *
9
9
  * This module provides the base class for LLM providers that use
10
- * OpenAI-compatible APIs (chat completions endpoint).
10
+ * OpenAI-compatible APIs (chat completions endpoint). Providers can
11
+ * be created either by extending this class or by using a declarative
12
+ * {@link ProviderDefinition}.
11
13
  *
12
14
  * @module core/openai-compatible-llm
13
15
  */
14
16
  import type { LlmRequest, LlmResponse } from "@google/adk";
15
17
  import OpenAI from "openai";
16
- import type { BaseProviderConfig } from "../types";
17
- import { BaseProviderLlm } from "./base-provider-llm";
18
+ import type { BaseProviderConfig } from "../types.js";
19
+ import { BaseProviderLlm } from "./base-provider-llm.js";
20
+ import type { ProviderDefinition } from "./provider-definition.js";
18
21
  /**
19
22
  * Configuration for the underlying OpenAI client.
20
23
  *
21
24
  * These options are passed directly to the OpenAI SDK constructor.
22
25
  */
23
26
  export interface OpenAIClientConfig {
24
- /**
25
- * Base URL for the API endpoint.
26
- *
27
- * @example "https://ai-gateway.vercel.sh/v1"
28
- * @example "https://openrouter.ai/api/v1"
29
- */
27
+ /** Base URL for the API endpoint. */
30
28
  baseURL: string;
31
- /**
32
- * API key for authentication.
33
- */
29
+ /** API key for authentication. */
34
30
  apiKey: string;
35
- /**
36
- * Request timeout in milliseconds.
37
- */
31
+ /** Request timeout in milliseconds. */
38
32
  timeout: number;
39
- /**
40
- * Maximum number of retry attempts.
41
- */
33
+ /** Maximum number of retry attempts. */
42
34
  maxRetries: number;
43
- /**
44
- * Additional HTTP headers to include in all requests.
45
- *
46
- * Useful for provider-specific headers like OpenRouter's site attribution.
47
- */
35
+ /** Additional HTTP headers to include in all requests. */
48
36
  defaultHeaders?: Record<string, string>;
49
37
  }
50
38
  /**
51
39
  * Base class for LLM providers that use OpenAI-compatible APIs.
52
40
  *
53
- * Handles the common logic for:
54
- * - Converting ADK requests to OpenAI format
55
- * - Making chat completion API calls
56
- * - Processing both streaming and non-streaming responses
57
- * - Converting responses back to ADK format
41
+ * Supports two construction modes:
58
42
  *
59
- * Extend this class to implement support for any OpenAI-compatible API.
43
+ * 1. **Declarative** (recommended): Pass a {@link ProviderDefinition} that
44
+ * describes the provider's configuration. Config resolution is automatic.
60
45
  *
61
- * @abstract
46
+ * 2. **Manual**: Pass a {@link BaseProviderConfig} + {@link OpenAIClientConfig}
47
+ * with pre-resolved values. Used by CustomLlm which has unique URL logic.
62
48
  *
63
49
  * @example
64
50
  * ```typescript
65
- * class MyProviderLlm extends OpenAICompatibleLlm {
66
- * static supportedModels = [/^myprovider\/.+$/];
51
+ * // Declarative (most providers)
52
+ * const llm = new OpenAICompatibleLlm(MY_DEFINITION, { model: "gpt-4o" });
67
53
  *
68
- * constructor(config: MyProviderConfig) {
69
- * super(config, {
70
- * baseURL: "https://api.myprovider.com/v1",
71
- * apiKey: config.apiKey,
72
- * timeout: config.timeout ?? 60000,
73
- * maxRetries: config.maxRetries ?? 2
74
- * });
75
- * }
76
- *
77
- * protected getErrorPrefix(): string {
78
- * return "MY_PROVIDER";
54
+ * // Manual (Custom provider)
55
+ * class CustomLlm extends OpenAICompatibleLlm {
56
+ * constructor(config) {
57
+ * super(config, { baseURL, apiKey, timeout, maxRetries });
79
58
  * }
80
59
  * }
81
60
  * ```
82
- *
83
- * @see {@link BaseProviderLlm} for the parent class
84
- * @see {@link AIGatewayLlm} for AI Gateway implementation
85
- * @see {@link OpenRouterLlm} for OpenRouter implementation
86
61
  */
87
- export declare abstract class OpenAICompatibleLlm extends BaseProviderLlm {
88
- /**
89
- * The OpenAI SDK client instance.
90
- *
91
- * @protected
92
- */
62
+ export declare class OpenAICompatibleLlm extends BaseProviderLlm {
63
+ /** Model patterns for LLMRegistry — set by createProviderClass(). */
64
+ static supportedModels: (string | RegExp)[];
65
+ /** @protected */
93
66
  protected readonly client: OpenAI;
94
- /**
95
- * Creates a new OpenAI-compatible LLM instance.
96
- *
97
- * @param config - Provider configuration (model, options)
98
- * @param clientConfig - OpenAI client configuration (URL, auth, timeouts)
99
- */
67
+ private readonly _errorPrefix;
68
+ private readonly _getRequestOptions?;
69
+ /** Declarative constructor: definition + config */
70
+ constructor(definition: ProviderDefinition, config: BaseProviderConfig);
71
+ /** Manual constructor: config + clientConfig (for CustomLlm) */
100
72
  constructor(config: BaseProviderConfig, clientConfig: OpenAIClientConfig);
101
- /**
102
- * Returns the provider-specific error prefix for error responses.
103
- *
104
- * Override in subclasses to return an appropriate prefix like
105
- * "AI_GATEWAY" or "OPENROUTER".
106
- *
107
- * @returns The error prefix string
108
- *
109
- * @abstract
110
- * @protected
111
- *
112
- * @example
113
- * ```typescript
114
- * protected getErrorPrefix(): string {
115
- * return "MY_PROVIDER";
116
- * }
117
- * // Errors will have codes like "MY_PROVIDER_ERROR" or "API_ERROR_429"
118
- * ```
119
- */
120
- protected abstract getErrorPrefix(): string;
121
- /**
122
- * Returns provider-specific options to merge into chat completion requests.
123
- *
124
- * Override in subclasses to add provider-specific parameters.
125
- * The returned object is spread into the chat completion request body.
126
- *
127
- * @returns An object of additional request options
128
- *
129
- * @protected
130
- *
131
- * @example
132
- * ```typescript
133
- * protected getProviderRequestOptions(): Record<string, unknown> {
134
- * return {
135
- * provider: {
136
- * order: ["Anthropic"],
137
- * allow_fallbacks: true
138
- * }
139
- * };
140
- * }
141
- * ```
142
- */
73
+ /** Returns the provider error prefix. */
74
+ protected getErrorPrefix(): string;
75
+ /** Returns provider-specific request options. */
143
76
  protected getProviderRequestOptions(): Record<string, unknown>;
144
- /**
145
- * Generates content from the LLM.
146
- *
147
- * Converts the ADK request to OpenAI format, makes the API call,
148
- * and converts the response back to ADK format.
149
- *
150
- * @param llmRequest - The ADK LLM request
151
- * @param stream - Whether to stream the response (default: false)
152
- * @returns An async generator yielding LLM responses
153
- *
154
- * @example
155
- * ```typescript
156
- * // Non-streaming
157
- * for await (const response of llm.generateContentAsync(request)) {
158
- * console.log(response);
159
- * }
160
- *
161
- * // Streaming
162
- * for await (const response of llm.generateContentAsync(request, true)) {
163
- * if (response.text) {
164
- * process.stdout.write(response.text);
165
- * }
166
- * }
167
- * ```
168
- */
169
77
  generateContentAsync(llmRequest: LlmRequest, stream?: boolean): AsyncGenerator<LlmResponse, void>;
170
- /**
171
- * Makes a single (non-streaming) API request.
172
- *
173
- * @param messages - OpenAI format messages
174
- * @param tools - OpenAI format tools (optional)
175
- * @returns The converted LLM response
176
- *
177
- * @private
178
- */
179
78
  private singleResponse;
180
- /**
181
- * Makes a streaming API request and yields responses as they arrive.
182
- *
183
- * @param messages - OpenAI format messages
184
- * @param tools - OpenAI format tools (optional)
185
- * @returns An async generator yielding LLM responses
186
- *
187
- * @private
188
- */
189
79
  private streamResponse;
190
80
  }
191
81
  //# sourceMappingURL=openai-compatible-llm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible-llm.d.ts","sourceRoot":"","sources":["../../src/core/openai-compatible-llm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,8BAAsB,mBAAoB,SAAQ,eAAe;IAC/D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC;;;;;OAKG;gBACS,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB;IAWxE;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM;IAE3C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI9D;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,oBAAoB,CACzB,UAAU,EAAE,UAAU,EACtB,MAAM,UAAQ,GACb,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;IAcpC;;;;;;;;OAQG;YACW,cAAc;IAa5B;;;;;;;;OAQG;YACY,cAAc;CAoB9B"}
1
+ {"version":3,"file":"openai-compatible-llm.d.ts","sourceRoot":"","sources":["../../src/core/openai-compatible-llm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,qEAAqE;IACrE,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAEjD,iBAAiB;IACjB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAgC;IAEpE,mDAAmD;gBACvC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB;IACtE,gEAAgE;gBACpD,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB;IA+CxE,yCAAyC;IACzC,SAAS,CAAC,cAAc,IAAI,MAAM;IAIlC,iDAAiD;IACjD,SAAS,CAAC,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvD,oBAAoB,CACzB,UAAU,EAAE,UAAU,EACtB,MAAM,UAAQ,GACb,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;YActB,cAAc;YAab,cAAc;CAoB9B"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 PAI
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Declarative provider definition interface.
8
+ *
9
+ * Providers that use OpenAI-compatible APIs differ only in configuration
10
+ * (URLs, env vars, headers), not behavior. This interface captures those
11
+ * differences as data instead of requiring class inheritance.
12
+ *
13
+ * @module core/provider-definition
14
+ */
15
+ /**
16
+ * Environment variable keys for resolving provider configuration.
17
+ */
18
+ export interface ProviderEnvKeys {
19
+ /** Env var names to check for API key, in priority order */
20
+ apiKey: string[];
21
+ /** Env var names to check for base URL, in priority order */
22
+ baseURL?: string[];
23
+ }
24
+ /**
25
+ * Declarative definition for an OpenAI-compatible LLM provider.
26
+ *
27
+ * Instead of creating a subclass for each provider, define the provider
28
+ * as a configuration object. The core infrastructure handles the rest.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const MY_PROVIDER: ProviderDefinition = {
33
+ * id: "my-provider",
34
+ * errorPrefix: "MY_PROVIDER",
35
+ * defaultBaseURL: "https://api.myprovider.com/v1",
36
+ * envKeys: { apiKey: ["MY_PROVIDER_API_KEY"] },
37
+ * modelPatterns: [/.+\/.+/],
38
+ * };
39
+ * ```
40
+ */
41
+ export interface ProviderDefinition {
42
+ /** Provider ID for the config system (e.g. "ai-gateway", "openrouter") */
43
+ id: string;
44
+ /** Error prefix for error codes (e.g. "AI_GATEWAY" → "AI_GATEWAY_ERROR") */
45
+ errorPrefix: string;
46
+ /** Default base URL when not specified in config or env vars */
47
+ defaultBaseURL: string;
48
+ /** Environment variable names to resolve for apiKey and baseURL */
49
+ envKeys: ProviderEnvKeys;
50
+ /** Model patterns for LLMRegistry matching */
51
+ modelPatterns: (string | RegExp)[];
52
+ /** Build custom HTTP headers from the instance config */
53
+ buildHeaders?: (config: Record<string, unknown>) => Record<string, string>;
54
+ /** Build provider-specific options to merge into request body */
55
+ buildRequestOptions?: (config: Record<string, unknown>) => Record<string, unknown>;
56
+ /**
57
+ * Whether this provider requires an API key at construction time.
58
+ *
59
+ * Cloud providers (AI Gateway, OpenRouter, OpenAI, xAI) should set this
60
+ * to true. Local/self-hosted providers that may not need auth can omit it.
61
+ *
62
+ * @default false
63
+ */
64
+ requireApiKey?: boolean;
65
+ }
66
+ //# sourceMappingURL=provider-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-definition.d.ts","sourceRoot":"","sources":["../../src/core/provider-definition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IAEX,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IAEpB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IAEvB,mEAAmE;IACnE,OAAO,EAAE,eAAe,CAAC;IAEzB,8CAA8C;IAC9C,aAAa,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEnC,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3E,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
package/dist/index.d.ts CHANGED
@@ -58,18 +58,18 @@
58
58
  * @see {@link https://google.github.io/adk-docs/|Google ADK Documentation}
59
59
  */
60
60
  export { BaseLlm } from "@google/adk";
61
- export { BaseProviderLlm } from "./core/base-provider-llm";
62
- export type { OpenAIClientConfig } from "./core/openai-compatible-llm";
63
- export { OpenAICompatibleLlm } from "./core/openai-compatible-llm";
64
- export { AIGateway, AIGatewayLlm, isAIGatewayRegistered, registerAIGateway, } from "./providers/ai-gateway";
65
- export { isOpenRouterRegistered, OpenRouter, OpenRouterLlm, registerOpenRouter, } from "./providers/openrouter";
66
- export { isOpenAIRegistered, OpenAI, OpenAILlm, registerOpenAI, } from "./providers/openai";
67
- export { isXAIRegistered, registerXAI, XAI, XAILlm } from "./providers/xai";
68
- export { Anthropic, AnthropicLlm, isAnthropicRegistered, registerAnthropic, } from "./providers/anthropic";
69
- export { Custom, CustomLlm, type CustomLlmProviderConfig, createCustomLlm, } from "./providers/custom";
70
- export type { AIGatewayConfig, AnthropicProviderConfig, AnthropicRegisterOptions, BaseProviderConfig, CustomLlmConfig, OpenAIProviderConfig, OpenAIRegisterOptions, OpenRouterConfig, OpenRouterProviderPreferences, OpenRouterRegisterOptions, RegisterOptions, StreamAccumulator, StreamChunkResult, ToolCallAccumulator, XAIProviderConfig, XAIRegisterOptions, } from "./types";
71
- export { DEFAULT_BASE_URL, MODEL_PATTERNS, OPENROUTER_BASE_URL, OPENROUTER_MODEL_PATTERNS, PROVIDER_IDS, } from "./constants";
72
- export { getConfig, getProviderConfig, resetAllConfigs, resetConfig, resetProviderConfig, setConfig, setProviderConfig, } from "./config";
73
- export { convertRequest } from "./converters/request";
74
- export { convertResponse, convertStreamChunk, createStreamAccumulator, } from "./converters/response";
61
+ export { BaseProviderLlm } from "./core/base-provider-llm.js";
62
+ export type { OpenAIClientConfig } from "./core/openai-compatible-llm.js";
63
+ export { OpenAICompatibleLlm } from "./core/openai-compatible-llm.js";
64
+ export { AIGateway, AIGatewayLlm, isAIGatewayRegistered, registerAIGateway, } from "./providers/ai-gateway/index.js";
65
+ export { isOpenRouterRegistered, OpenRouter, OpenRouterLlm, registerOpenRouter, } from "./providers/openrouter/index.js";
66
+ export { isOpenAIRegistered, OpenAI, OpenAILlm, registerOpenAI, } from "./providers/openai/index.js";
67
+ export { isXAIRegistered, registerXAI, XAI, XAILlm } from "./providers/xai/index.js";
68
+ export { Anthropic, AnthropicLlm, isAnthropicRegistered, registerAnthropic, } from "./providers/anthropic/index.js";
69
+ export { Custom, CustomLlm, type CustomLlmProviderConfig, createCustomLlm, } from "./providers/custom/index.js";
70
+ export type { AIGatewayConfig, AnthropicProviderConfig, AnthropicRegisterOptions, BaseProviderConfig, CustomLlmConfig, OpenAIProviderConfig, OpenAIRegisterOptions, OpenRouterConfig, OpenRouterProviderPreferences, OpenRouterRegisterOptions, RegisterOptions, StreamAccumulator, StreamChunkResult, ToolCallAccumulator, XAIProviderConfig, XAIRegisterOptions, } from "./types.js";
71
+ export { DEFAULT_BASE_URL, MODEL_PATTERNS, OPENROUTER_BASE_URL, OPENROUTER_MODEL_PATTERNS, PROVIDER_IDS, } from "./constants.js";
72
+ export { getConfig, getProviderConfig, resetAllConfigs, resetConfig, resetProviderConfig, setConfig, setProviderConfig, } from "./config.js";
73
+ export { convertRequest } from "./converters/request.js";
74
+ export { convertResponse, convertStreamChunk, createStreamAccumulator, } from "./converters/response.js";
75
75
  //# sourceMappingURL=index.d.ts.map