@memorilabs/axon 0.1.1-beta → 0.1.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 (100) hide show
  1. package/README.md +82 -67
  2. package/dist/errors/hook-error.d.ts.map +1 -1
  3. package/dist/errors/hook-error.js +1 -1
  4. package/dist/errors/hook-error.js.map +1 -1
  5. package/dist/errors/unsupported-provider-error.d.ts.map +1 -1
  6. package/dist/errors/unsupported-provider-error.js +2 -1
  7. package/dist/errors/unsupported-provider-error.js.map +1 -1
  8. package/dist/hooks/registry.d.ts +16 -7
  9. package/dist/hooks/registry.d.ts.map +1 -1
  10. package/dist/hooks/registry.js +14 -2
  11. package/dist/hooks/registry.js.map +1 -1
  12. package/dist/llm/registry.d.ts +10 -4
  13. package/dist/llm/registry.d.ts.map +1 -1
  14. package/dist/llm/registry.js +9 -2
  15. package/dist/llm/registry.js.map +1 -1
  16. package/dist/providers/anthropic/common.d.ts.map +1 -1
  17. package/dist/providers/anthropic/common.js +4 -1
  18. package/dist/providers/anthropic/common.js.map +1 -1
  19. package/dist/providers/anthropic/detect.d.ts +5 -0
  20. package/dist/providers/anthropic/detect.d.ts.map +1 -1
  21. package/dist/providers/anthropic/detect.js +5 -0
  22. package/dist/providers/anthropic/detect.js.map +1 -1
  23. package/dist/providers/anthropic/proxy.d.ts.map +1 -1
  24. package/dist/providers/anthropic/proxy.js +19 -4
  25. package/dist/providers/anthropic/proxy.js.map +1 -1
  26. package/dist/providers/anthropic/responses.d.ts +22 -0
  27. package/dist/providers/anthropic/responses.d.ts.map +1 -0
  28. package/dist/providers/anthropic/responses.js +2 -0
  29. package/dist/providers/anthropic/responses.js.map +1 -0
  30. package/dist/providers/anthropic/types.d.ts +11 -27
  31. package/dist/providers/anthropic/types.d.ts.map +1 -1
  32. package/dist/providers/gemini/common.d.ts +8 -0
  33. package/dist/providers/gemini/common.d.ts.map +1 -0
  34. package/dist/providers/gemini/common.js +46 -0
  35. package/dist/providers/gemini/common.js.map +1 -0
  36. package/dist/providers/gemini/detect.d.ts +7 -0
  37. package/dist/providers/gemini/detect.d.ts.map +1 -0
  38. package/dist/providers/gemini/detect.js +12 -0
  39. package/dist/providers/gemini/detect.js.map +1 -0
  40. package/dist/providers/gemini/index.d.ts +5 -0
  41. package/dist/providers/gemini/index.d.ts.map +1 -0
  42. package/dist/providers/gemini/index.js +10 -0
  43. package/dist/providers/gemini/index.js.map +1 -0
  44. package/dist/providers/gemini/proxy.d.ts +3 -0
  45. package/dist/providers/gemini/proxy.d.ts.map +1 -0
  46. package/dist/providers/gemini/proxy.js +72 -0
  47. package/dist/providers/gemini/proxy.js.map +1 -0
  48. package/dist/providers/gemini/responses.d.ts +17 -0
  49. package/dist/providers/gemini/responses.d.ts.map +1 -0
  50. package/dist/providers/gemini/responses.js +2 -0
  51. package/dist/providers/gemini/responses.js.map +1 -0
  52. package/dist/providers/gemini/types.d.ts +23 -0
  53. package/dist/providers/gemini/types.d.ts.map +1 -0
  54. package/dist/providers/gemini/types.js +2 -0
  55. package/dist/providers/gemini/types.js.map +1 -0
  56. package/dist/providers/index.d.ts +1 -0
  57. package/dist/providers/index.d.ts.map +1 -1
  58. package/dist/providers/index.js +1 -0
  59. package/dist/providers/index.js.map +1 -1
  60. package/dist/providers/openai/detect.d.ts +5 -0
  61. package/dist/providers/openai/detect.d.ts.map +1 -1
  62. package/dist/providers/openai/detect.js +5 -0
  63. package/dist/providers/openai/detect.js.map +1 -1
  64. package/dist/providers/openai/proxy.d.ts.map +1 -1
  65. package/dist/providers/openai/proxy.js +9 -2
  66. package/dist/providers/openai/proxy.js.map +1 -1
  67. package/dist/providers/openai/responses.d.ts +9 -9
  68. package/dist/providers/openai/responses.d.ts.map +1 -1
  69. package/dist/providers/openai/types.d.ts +5 -0
  70. package/dist/providers/openai/types.d.ts.map +1 -1
  71. package/dist/providers/patcher.d.ts.map +1 -1
  72. package/dist/providers/patcher.js +2 -9
  73. package/dist/providers/patcher.js.map +1 -1
  74. package/dist/providers/telemetry.d.ts +16 -0
  75. package/dist/providers/telemetry.d.ts.map +1 -0
  76. package/dist/providers/telemetry.js +41 -0
  77. package/dist/providers/telemetry.js.map +1 -0
  78. package/dist/types/context.d.ts +9 -5
  79. package/dist/types/context.d.ts.map +1 -1
  80. package/dist/types/context.js +6 -2
  81. package/dist/types/context.js.map +1 -1
  82. package/dist/types/index.d.ts +1 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js +1 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/llm.d.ts +15 -0
  87. package/dist/types/llm.d.ts.map +1 -1
  88. package/dist/types/registry.d.ts +14 -0
  89. package/dist/types/registry.d.ts.map +1 -0
  90. package/dist/types/registry.js +2 -0
  91. package/dist/types/registry.js.map +1 -0
  92. package/dist/utils/constants.d.ts +19 -0
  93. package/dist/utils/constants.d.ts.map +1 -0
  94. package/dist/utils/constants.js +14 -0
  95. package/dist/utils/constants.js.map +1 -0
  96. package/dist/version.d.ts +2 -0
  97. package/dist/version.d.ts.map +1 -0
  98. package/dist/version.js +2 -0
  99. package/dist/version.js.map +1 -0
  100. package/package.json +27 -14
@@ -0,0 +1,8 @@
1
+ import { Message, LLMRequest, Usage, LLMResponse } from '../../types/index.js';
2
+ import { GeminiGenerateContentArgs } from './types.js';
3
+ export declare function geminiInputToMessages(contents: GeminiGenerateContentArgs['contents']): Message[];
4
+ export declare function messagesToGeminiInput(request: LLMRequest): GeminiGenerateContentArgs['contents'];
5
+ export declare function contentFromGemini(response: unknown): string;
6
+ export declare function usageFromGemini(response: unknown): Usage | undefined;
7
+ export declare function applyContentToGeminiResponse(raw: unknown, canonical: LLMResponse): void;
8
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,OAAO,EAAE,CAShG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAKhG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAO3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CASpE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAOvF"}
@@ -0,0 +1,46 @@
1
+ export function geminiInputToMessages(contents) {
2
+ if (typeof contents === 'string')
3
+ return [{ role: 'user', content: contents }];
4
+ if (Array.isArray(contents)) {
5
+ return contents.map((c) => ({
6
+ role: (c.role === 'model' ? 'assistant' : 'user'),
7
+ content: c.parts.map((p) => p.text).join(''),
8
+ }));
9
+ }
10
+ return [];
11
+ }
12
+ export function messagesToGeminiInput(request) {
13
+ return request.messages.map((m) => ({
14
+ role: m.role === 'assistant' ? 'model' : m.role,
15
+ parts: [{ text: m.content }],
16
+ }));
17
+ }
18
+ export function contentFromGemini(response) {
19
+ const r = response;
20
+ if (r.text)
21
+ return r.text;
22
+ if (r.candidates?.[0]?.content?.parts?.[0]?.text) {
23
+ return r.candidates[0].content.parts[0].text;
24
+ }
25
+ return '';
26
+ }
27
+ export function usageFromGemini(response) {
28
+ const r = response;
29
+ if (!r.usageMetadata)
30
+ return undefined;
31
+ return {
32
+ promptTokens: r.usageMetadata.promptTokenCount,
33
+ completionTokens: r.usageMetadata.candidatesTokenCount,
34
+ totalTokens: r.usageMetadata.totalTokenCount,
35
+ };
36
+ }
37
+ export function applyContentToGeminiResponse(raw, canonical) {
38
+ const r = raw;
39
+ if (r.candidates?.[0]?.content?.parts?.[0]) {
40
+ r.candidates[0].content.parts[0].text = canonical.content;
41
+ }
42
+ else if (r.text !== undefined) {
43
+ r.text = canonical.content;
44
+ }
45
+ }
46
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/providers/gemini/common.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,qBAAqB,CAAC,QAA+C;IACnF,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAoB;YACpE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7C,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAmB;IACvD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IACjD,MAAM,CAAC,GAAG,QAA0B,CAAC;IACrC,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,CAAC,GAAG,QAA0B,CAAC;IACrC,IAAI,CAAC,CAAC,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IAEvC,OAAO;QACL,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,gBAAgB;QAC9C,gBAAgB,EAAE,CAAC,CAAC,aAAa,CAAC,oBAAoB;QACtD,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC,eAAe;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAY,EAAE,SAAsB;IAC/E,MAAM,CAAC,GAAG,GAAqB,CAAC;IAChC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;IAC5D,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Detects if the provided object is an initialized Google Gemini client instance.
3
+ * @param client - The object to inspect.
4
+ * @returns True if it matches the Gemini client shape.
5
+ */
6
+ export declare function isGeminiClient(client: unknown): boolean;
7
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/detect.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKvD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Detects if the provided object is an initialized Google Gemini client instance.
3
+ * @param client - The object to inspect.
4
+ * @returns True if it matches the Gemini client shape.
5
+ */
6
+ export function isGeminiClient(client) {
7
+ if (!client || typeof client !== 'object')
8
+ return false;
9
+ const obj = client;
10
+ return !!(obj.models && typeof obj.models.generateContent === 'function');
11
+ }
12
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/providers/gemini/detect.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,MAAsB,CAAC;IAEnC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,eAAe,KAAK,UAAU,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { isGeminiClient } from './detect.js';
2
+ export declare function register(): void;
3
+ export { isGeminiClient };
4
+ export * from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAID,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { LLMRegistry } from '../../llm/registry.js';
2
+ import { isGeminiClient } from './detect.js';
3
+ import { patchGeminiClient } from './proxy.js';
4
+ export function register() {
5
+ LLMRegistry.registerProvider(isGeminiClient, patchGeminiClient);
6
+ }
7
+ register();
8
+ export { isGeminiClient };
9
+ export * from './types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/gemini/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,QAAQ;IACtB,WAAW,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED,QAAQ,EAAE,CAAC;AAEX,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Axon } from '../../core/axon.js';
2
+ export declare function patchGeminiClient(client: unknown, axon: Axon): void;
3
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AA6C/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CA2CnE"}
@@ -0,0 +1,72 @@
1
+ import { patchMethod } from '../patcher.js';
2
+ import { geminiInputToMessages, messagesToGeminiInput, contentFromGemini, usageFromGemini, applyContentToGeminiResponse, } from './common.js';
3
+ import { extractSDKVersion } from '../telemetry.js';
4
+ import { PROVIDERS } from '../../utils/constants.js';
5
+ function argsToRequest(args) {
6
+ const { model: _model, contents: _contents, ...params } = args;
7
+ return {
8
+ messages: geminiInputToMessages(args.contents),
9
+ model: args.model,
10
+ params,
11
+ };
12
+ }
13
+ function requestToArgs(request) {
14
+ if (!request.model)
15
+ throw new Error('No model provided.');
16
+ return {
17
+ model: request.model,
18
+ contents: messagesToGeminiInput(request),
19
+ ...(request.params ?? {}),
20
+ };
21
+ }
22
+ function rawToCanonical(raw) {
23
+ return { content: contentFromGemini(raw), usage: usageFromGemini(raw), raw };
24
+ }
25
+ function chunkToText(chunk) {
26
+ const r = chunk;
27
+ if (typeof r.text === 'string')
28
+ return r.text;
29
+ return r.candidates?.[0]?.content?.parts?.[0]?.text;
30
+ }
31
+ export function patchGeminiClient(client, axon) {
32
+ const geminiClient = client;
33
+ const sdkVersion = extractSDKVersion(geminiClient);
34
+ if (!geminiClient.models) {
35
+ throw new Error('Gemini client has no models API.');
36
+ }
37
+ // Patch the standard (unary) method
38
+ patchMethod({
39
+ axon,
40
+ parent: geminiClient.models,
41
+ methodName: 'generateContent',
42
+ ctxMetadata: { provider: PROVIDERS.GEMINI.id, method: 'models.generateContent', sdkVersion },
43
+ argsToRequest,
44
+ requestToArgs,
45
+ rawToResponse: rawToCanonical,
46
+ applyCanonicalToRaw: applyContentToGeminiResponse,
47
+ chunkToText,
48
+ });
49
+ // Patch the explicit streaming method
50
+ patchMethod({
51
+ axon,
52
+ parent: geminiClient.models,
53
+ methodName: 'generateContentStream',
54
+ ctxMetadata: {
55
+ provider: PROVIDERS.GEMINI.id,
56
+ method: 'models.generateContentStream',
57
+ sdkVersion,
58
+ },
59
+ argsToRequest: (args) => {
60
+ const baseRequest = argsToRequest(args);
61
+ return {
62
+ ...baseRequest,
63
+ params: { ...baseRequest.params, stream: true },
64
+ };
65
+ },
66
+ requestToArgs,
67
+ rawToResponse: rawToCanonical,
68
+ applyCanonicalToRaw: applyContentToGeminiResponse,
69
+ chunkToText,
70
+ });
71
+ }
72
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/providers/gemini/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface GeminiResponse {
2
+ text?: string;
3
+ candidates?: Array<{
4
+ content?: {
5
+ parts?: Array<{
6
+ text?: string;
7
+ }>;
8
+ };
9
+ }>;
10
+ usageMetadata?: GeminiUsage;
11
+ }
12
+ export interface GeminiUsage {
13
+ promptTokenCount?: number;
14
+ candidatesTokenCount?: number;
15
+ totalTokenCount?: number;
16
+ }
17
+ //# sourceMappingURL=responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/responses.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,KAAK,CAAC;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../../src/providers/gemini/responses.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ export interface GeminiGenerateContentArgs {
2
+ model: string;
3
+ contents: string | Array<{
4
+ role?: string;
5
+ parts: Array<{
6
+ text?: string;
7
+ }>;
8
+ }>;
9
+ [key: string]: unknown;
10
+ }
11
+ /**
12
+ * The minimal expected shape of an initialized Google Gemini client instance.
13
+ * Axon uses this interface to detect and safely patch the `models.generateContent`
14
+ * and `models.generateContentStream` methods.
15
+ */
16
+ export interface GeminiClient {
17
+ models?: {
18
+ generateContent: (args: GeminiGenerateContentArgs) => Promise<unknown>;
19
+ generateContentStream?: (args: GeminiGenerateContentArgs) => Promise<unknown>;
20
+ __axon_patched__?: boolean;
21
+ };
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE;QACP,eAAe,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvE,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import './openai/index.js';
2
2
  import './anthropic/index.js';
3
+ import './gemini/index.js';
3
4
  export {};
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import './openai/index.js';
2
2
  import './anthropic/index.js';
3
+ import './gemini/index.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,mBAAmB,CAAC"}
@@ -1,2 +1,7 @@
1
+ /**
2
+ * Detects if the provided object is an initialized OpenAI client instance.
3
+ * @param client - The object to inspect.
4
+ * @returns True if it matches the OpenAI client shape.
5
+ */
1
6
  export declare function isOpenAIClient(client: unknown): boolean;
2
7
  //# sourceMappingURL=detect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/detect.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAQvD"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/detect.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAQvD"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Detects if the provided object is an initialized OpenAI client instance.
3
+ * @param client - The object to inspect.
4
+ * @returns True if it matches the OpenAI client shape.
5
+ */
1
6
  export function isOpenAIClient(client) {
2
7
  if (!client || typeof client !== 'object')
3
8
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/providers/openai/detect.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,MAAsB,CAAC;IAEnC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAE/F,OAAO,YAAY,IAAI,OAAO,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/providers/openai/detect.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,MAAsB,CAAC;IAEnC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAE/F,OAAO,YAAY,IAAI,OAAO,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AA4E/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CA4CnE"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AA8E/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAiDnE"}
@@ -1,6 +1,8 @@
1
1
  import { openaiInputToMessages, messagesToOpenAIInput, contentFromOpenAI, usageFromOpenAI, applyContentToTextResponse, applyContentToChatResponse, } from './common.js';
2
2
  import { isOpenAIClient } from './detect.js';
3
3
  import { patchMethod } from '../patcher.js';
4
+ import { extractSDKVersion } from '../telemetry.js';
5
+ import { PROVIDERS } from '../../utils/constants.js';
4
6
  function extractParams(args, inputKey) {
5
7
  const { model: _model, [inputKey]: _input, ...params } = args;
6
8
  return params;
@@ -52,6 +54,7 @@ function chunkToText(chunk) {
52
54
  }
53
55
  export function patchOpenAIClient(client, axon) {
54
56
  const openaiClient = client;
57
+ const sdkVersion = extractSDKVersion(openaiClient);
55
58
  let patchedAny = false;
56
59
  // Patch Legacy Responses API
57
60
  if (openaiClient.responses) {
@@ -59,7 +62,7 @@ export function patchOpenAIClient(client, axon) {
59
62
  axon,
60
63
  parent: openaiClient.responses,
61
64
  methodName: 'create',
62
- ctxMetadata: { provider: 'openai', method: 'responses.create' },
65
+ ctxMetadata: { provider: PROVIDERS.OPENAI.id, method: 'responses.create', sdkVersion },
63
66
  argsToRequest: responsesArgsToRequest,
64
67
  requestToArgs: requestToResponsesArgs,
65
68
  rawToResponse: rawToCanonical,
@@ -74,7 +77,11 @@ export function patchOpenAIClient(client, axon) {
74
77
  axon,
75
78
  parent: openaiClient.chat.completions,
76
79
  methodName: 'create',
77
- ctxMetadata: { provider: 'openai', method: 'chat.completions.create' },
80
+ ctxMetadata: {
81
+ provider: PROVIDERS.OPENAI.id,
82
+ method: 'chat.completions.create',
83
+ sdkVersion,
84
+ },
78
85
  argsToRequest: chatArgsToRequest,
79
86
  requestToArgs: requestToChatArgs,
80
87
  rawToResponse: rawToCanonical,
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/providers/openai/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/providers/openai/proxy.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- export interface OpenAIUsage {
2
- prompt_tokens?: number;
3
- completion_tokens?: number;
4
- total_tokens?: number;
5
- input_tokens?: number;
6
- output_tokens?: number;
1
+ export interface OpenAITextResponse {
2
+ output_text: string;
3
+ usage?: OpenAIUsage;
7
4
  }
8
5
  export interface OpenAIChatCompletionResponse {
9
6
  choices: Array<{
@@ -16,9 +13,12 @@ export interface OpenAIChatCompletionResponse {
16
13
  }>;
17
14
  usage?: OpenAIUsage;
18
15
  }
19
- export interface OpenAITextResponse {
20
- output_text: string;
21
- usage?: OpenAIUsage;
16
+ export interface OpenAIUsage {
17
+ prompt_tokens?: number;
18
+ completion_tokens?: number;
19
+ total_tokens?: number;
20
+ input_tokens?: number;
21
+ output_tokens?: number;
22
22
  }
23
23
  export declare function hasUsage(response: unknown): response is {
24
24
  usage: OpenAIUsage;
@@ -1 +1 @@
1
- {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/responses.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9B,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAE9E"}
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/responses.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9B,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAE9E"}
@@ -15,6 +15,11 @@ export interface OpenAIChatCompletionsCreateArgs {
15
15
  stream?: boolean;
16
16
  [key: string]: unknown;
17
17
  }
18
+ /**
19
+ * The minimal expected shape of an initialized OpenAI client instance.
20
+ * Axon uses this interface to detect and safely patch the `chat.completions.create`
21
+ * and legacy `responses.create` methods.
22
+ */
18
23
  export interface OpenAIClient {
19
24
  responses?: {
20
25
  create: (args: OpenAIResponsesCreateArgs) => Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE;YACZ,MAAM,EAAE,CAAC,IAAI,EAAE,+BAA+B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;YACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;SAC5B,CAAC;KACH,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE;YACZ,MAAM,EAAE,CAAC,IAAI,EAAE,+BAA+B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;YACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;SAC5B,CAAC;KACH,CAAC;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/providers/patcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAGL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,eAAe,CAAC,KAAK,EAAE,OAAO;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACtD;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,OAAO,CA0C1F"}
1
+ {"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/providers/patcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAGL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,eAAe,CAAC,KAAK,EAAE,OAAO;IAC7C,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACtD;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,OAAO,CAmC1F"}
@@ -9,12 +9,8 @@ export function patchMethod(opts) {
9
9
  if (typeof originalMethod !== 'function')
10
10
  return false;
11
11
  const typedMethod = originalMethod;
12
- // 1. Idempotency Check:
13
- // If we have already wrapped this function instance, return true (success).
14
- if (patchedObjects.has(typedMethod))
15
- return true;
16
- // Check if it was marked by legacy means (or strictly on the function itself)
17
- if (typedMethod.__axon_patched__)
12
+ // Prevent double wrapping the same function instance
13
+ if (patchedObjects.has(typedMethod) || typedMethod.__axon_patched__)
18
14
  return true;
19
15
  const proxy = new HookedCreateProxy({
20
16
  create: typedMethod.bind(parentObj),
@@ -27,14 +23,11 @@ export function patchMethod(opts) {
27
23
  chunkToText: opts.chunkToText,
28
24
  });
29
25
  const wrapped = CreateFacade.wrap(typedMethod, proxy);
30
- // 2. Set Metadata:
31
- // Store the original method so tests (and users) can access it if needed.
32
26
  const wrappedWithMeta = wrapped;
33
27
  wrappedWithMeta.__axon_original__ = originalMethod;
34
28
  wrappedWithMeta.__axon_patched__ = true;
35
29
  parentObj[opts.methodName] = wrappedWithMeta;
36
30
  patchedObjects.add(wrappedWithMeta);
37
- // Also mark the parent object if convenient, though method-marking is more precise.
38
31
  parentObj.__axon_patched__ = true;
39
32
  return true;
40
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/providers/patcher.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,YAAY,GAKb,MAAM,oBAAoB,CAAC;AAE5B,gEAAgE;AAChE,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAuBrC,MAAM,UAAU,WAAW,CAAiB,IAAqC;IAC/E,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAElE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAuB,CAAC;IAC/C,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,OAAO,cAAc,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,WAAW,GAAG,cAAmC,CAAC;IAExD,wBAAwB;IACxB,4EAA4E;IAC5E,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,8EAA8E;IAC9E,IAAI,WAAW,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAiB;QAClD,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAuC;QACzE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,WAAiD,EAAE,KAAK,CAAC,CAAC;IAE5F,mBAAmB;IACnB,0EAA0E;IAC1E,MAAM,eAAe,GAAG,OAA4B,CAAC;IACrD,eAAe,CAAC,iBAAiB,GAAG,cAAc,CAAC;IACnD,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAExC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC;IAC7C,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEpC,oFAAoF;IACpF,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAElC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/providers/patcher.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,YAAY,GAKb,MAAM,oBAAoB,CAAC;AAE5B,gEAAgE;AAChE,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAuBrC,MAAM,UAAU,WAAW,CAAiB,IAAqC;IAC/E,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAElE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAuB,CAAC;IAC/C,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,OAAO,cAAc,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,WAAW,GAAG,cAAmC,CAAC;IAExD,qDAAqD;IACrD,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEjF,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAiB;QAClD,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAuC;QACzE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,WAAiD,EAAE,KAAK,CAAC,CAAC;IAC5F,MAAM,eAAe,GAAG,OAA4B,CAAC;IAErD,eAAe,CAAC,iBAAiB,GAAG,cAAc,CAAC;IACnD,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAExC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC;IAC7C,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEpC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAElC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Represents the common internal structure of auto-generated LLM clients (like Stainless).
3
+ * @internal
4
+ */
5
+ export type VersionedClient = {
6
+ VERSION?: string;
7
+ version?: string;
8
+ getUserAgent?: () => string;
9
+ defaultHeaders?: (opts?: unknown) => Record<string, string>;
10
+ };
11
+ /**
12
+ * Attempts to safely extract the SDK version from an LLM client instance.
13
+ * @internal
14
+ */
15
+ export declare function extractSDKVersion(client: unknown): string | null;
16
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/providers/telemetry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmChE"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Attempts to safely extract the SDK version from an LLM client instance.
3
+ * @internal
4
+ */
5
+ export function extractSDKVersion(client) {
6
+ if (!client || typeof client !== 'object') {
7
+ return null;
8
+ }
9
+ const vClient = client;
10
+ // 1. Check for standard attached properties
11
+ if (typeof vClient.VERSION === 'string')
12
+ return vClient.VERSION;
13
+ if (typeof vClient.version === 'string')
14
+ return vClient.version;
15
+ // 2. Sniff the version from the internal User-Agent generator
16
+ if (typeof vClient.getUserAgent === 'function') {
17
+ try {
18
+ const ua = vClient.getUserAgent(); // e.g., "OpenAI/JS 4.28.0"
19
+ const match = ua.match(/([0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?)/);
20
+ if (match)
21
+ return match[1];
22
+ }
23
+ catch {
24
+ // ignore, commenting for lint
25
+ }
26
+ }
27
+ // 3. Sniff the version from the default headers payload
28
+ if (typeof vClient.defaultHeaders === 'function') {
29
+ try {
30
+ const headers = vClient.defaultHeaders({});
31
+ if (headers['x-stainless-package-version']) {
32
+ return headers['x-stainless-package-version'];
33
+ }
34
+ }
35
+ catch {
36
+ // ignore, commenting for lint
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/providers/telemetry.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAyB,CAAC;IAE1C,4CAA4C;IAC5C,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAChE,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAEhE,8DAA8D;IAC9D,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,2BAA2B;YAC9D,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACtE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,6BAA6B,CAAC,EAAE,CAAC;gBAC3C,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -2,15 +2,19 @@
2
2
  * Context data that persists throughout the lifecycle of a single LLM call.
3
3
  */
4
4
  export interface CallContext {
5
- /** A unique identifier for this specific call execution. */
6
5
  traceId: string;
7
- /** The timestamp when the call started. */
8
6
  startedAt: Date;
9
- /** Custom metadata that can be read/written by hooks. */
10
- metadata: Record<string, unknown>;
7
+ metadata: {
8
+ platform?: string | null;
9
+ framework?: string | null;
10
+ provider?: string | null;
11
+ method?: string | null;
12
+ sdkVersion?: string | null;
13
+ [key: string]: unknown;
14
+ };
11
15
  }
12
16
  /**
13
- * Creates a default call context.
17
+ * Creates a default call context
14
18
  * @internal
15
19
  */
16
20
  export declare function createCallContext(init?: Partial<CallContext>): CallContext;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,IAAI,CAAC;IAChB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAM1E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAU1E"}
@@ -1,13 +1,17 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  /**
3
- * Creates a default call context.
3
+ * Creates a default call context
4
4
  * @internal
5
5
  */
6
6
  export function createCallContext(init) {
7
7
  return {
8
8
  traceId: init?.traceId ?? randomUUID(),
9
9
  startedAt: init?.startedAt ?? new Date(),
10
- metadata: init?.metadata ?? {},
10
+ metadata: {
11
+ platform: null,
12
+ framework: null,
13
+ ...init?.metadata,
14
+ },
11
15
  };
12
16
  }
13
17
  //# sourceMappingURL=context.js.map