@marinoscar/platform-api 0.1.0-next.4 → 0.1.0-next.6

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 (241) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/ai/core/ai-error.d.ts +15 -158
  3. package/dist/ai/core/ai-error.d.ts.map +1 -1
  4. package/dist/ai/core/ai-error.js +58 -221
  5. package/dist/ai/core/ai-error.js.map +1 -1
  6. package/dist/ai/core/capabilities.d.ts +3 -126
  7. package/dist/ai/core/capabilities.d.ts.map +1 -1
  8. package/dist/ai/core/capabilities.js +13 -109
  9. package/dist/ai/core/capabilities.js.map +1 -1
  10. package/dist/ai/core/conversation.d.ts +2 -15
  11. package/dist/ai/core/conversation.d.ts.map +1 -1
  12. package/dist/ai/core/conversation.js +9 -54
  13. package/dist/ai/core/conversation.js.map +1 -1
  14. package/dist/ai/core/hosted-tools.d.ts +3 -172
  15. package/dist/ai/core/hosted-tools.d.ts.map +1 -1
  16. package/dist/ai/core/hosted-tools.js +20 -286
  17. package/dist/ai/core/hosted-tools.js.map +1 -1
  18. package/dist/ai/core/provider-adapter.interface.d.ts +3 -260
  19. package/dist/ai/core/provider-adapter.interface.d.ts.map +1 -1
  20. package/dist/ai/core/provider-adapter.interface.js +7 -29
  21. package/dist/ai/core/provider-adapter.interface.js.map +1 -1
  22. package/dist/ai/core/structured-output.d.ts +3 -49
  23. package/dist/ai/core/structured-output.d.ts.map +1 -1
  24. package/dist/ai/core/structured-output.js +9 -80
  25. package/dist/ai/core/structured-output.js.map +1 -1
  26. package/dist/ai/core/tools.d.ts +3 -93
  27. package/dist/ai/core/tools.d.ts.map +1 -1
  28. package/dist/ai/core/tools.js +9 -73
  29. package/dist/ai/core/tools.js.map +1 -1
  30. package/dist/ai/core/types/file-inputs.types.d.ts +3 -102
  31. package/dist/ai/core/types/file-inputs.types.d.ts.map +1 -1
  32. package/dist/ai/core/types/file-inputs.types.js +14 -78
  33. package/dist/ai/core/types/file-inputs.types.js.map +1 -1
  34. package/dist/ai/core/types/media.types.d.ts +3 -616
  35. package/dist/ai/core/types/media.types.d.ts.map +1 -1
  36. package/dist/ai/core/types/media.types.js +33 -203
  37. package/dist/ai/core/types/media.types.js.map +1 -1
  38. package/dist/ai/core/types/responses.types.d.ts +3 -619
  39. package/dist/ai/core/types/responses.types.d.ts.map +1 -1
  40. package/dist/ai/core/types/responses.types.js +9 -57
  41. package/dist/ai/core/types/responses.types.js.map +1 -1
  42. package/dist/ai/http/dto/ai-images.dto.d.ts +4 -4
  43. package/dist/ai/index.d.ts +1 -1
  44. package/dist/ai/index.d.ts.map +1 -1
  45. package/dist/ai/index.js +3 -3
  46. package/dist/ai/index.js.map +1 -1
  47. package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts +13 -15
  48. package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts.map +1 -1
  49. package/dist/ai/providers/anthropic/anthropic-client.factory.js +23 -52
  50. package/dist/ai/providers/anthropic/anthropic-client.factory.js.map +1 -1
  51. package/dist/ai/providers/anthropic/anthropic.adapter.d.ts +15 -51
  52. package/dist/ai/providers/anthropic/anthropic.adapter.d.ts.map +1 -1
  53. package/dist/ai/providers/anthropic/anthropic.adapter.js +29 -293
  54. package/dist/ai/providers/anthropic/anthropic.adapter.js.map +1 -1
  55. package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts +10 -14
  56. package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts.map +1 -1
  57. package/dist/ai/providers/azure-openai/azure-openai-client.factory.js +20 -53
  58. package/dist/ai/providers/azure-openai/azure-openai-client.factory.js.map +1 -1
  59. package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts +14 -31
  60. package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts.map +1 -1
  61. package/dist/ai/providers/azure-openai/azure-openai.adapter.js +25 -170
  62. package/dist/ai/providers/azure-openai/azure-openai.adapter.js.map +1 -1
  63. package/dist/ai/providers/gemini/gemini-client.factory.d.ts +13 -18
  64. package/dist/ai/providers/gemini/gemini-client.factory.d.ts.map +1 -1
  65. package/dist/ai/providers/gemini/gemini-client.factory.js +24 -68
  66. package/dist/ai/providers/gemini/gemini-client.factory.js.map +1 -1
  67. package/dist/ai/providers/gemini/gemini.adapter.d.ts +15 -58
  68. package/dist/ai/providers/gemini/gemini.adapter.d.ts.map +1 -1
  69. package/dist/ai/providers/gemini/gemini.adapter.js +29 -348
  70. package/dist/ai/providers/gemini/gemini.adapter.js.map +1 -1
  71. package/dist/ai/providers/openai/openai-client.factory.d.ts +13 -35
  72. package/dist/ai/providers/openai/openai-client.factory.d.ts.map +1 -1
  73. package/dist/ai/providers/openai/openai-client.factory.js +25 -64
  74. package/dist/ai/providers/openai/openai-client.factory.js.map +1 -1
  75. package/dist/ai/providers/openai/openai.adapter.d.ts +15 -48
  76. package/dist/ai/providers/openai/openai.adapter.d.ts.map +1 -1
  77. package/dist/ai/providers/openai/openai.adapter.js +27 -206
  78. package/dist/ai/providers/openai/openai.adapter.js.map +1 -1
  79. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts +11 -11
  80. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts.map +1 -1
  81. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js +18 -41
  82. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js.map +1 -1
  83. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts +14 -32
  84. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts.map +1 -1
  85. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js +25 -149
  86. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js.map +1 -1
  87. package/dist/ai/providers/platform-ai-tracer.d.ts +4 -0
  88. package/dist/ai/providers/platform-ai-tracer.d.ts.map +1 -0
  89. package/dist/ai/providers/platform-ai-tracer.js +20 -0
  90. package/dist/ai/providers/platform-ai-tracer.js.map +1 -0
  91. package/dist/ai/runtime/ai-image-run-request.d.ts +1 -1
  92. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts +28 -5
  93. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts.map +1 -1
  94. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js +54 -9
  95. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js.map +1 -1
  96. package/dist/ai/testing/index.d.ts +1 -1
  97. package/dist/ai/testing/index.d.ts.map +1 -1
  98. package/dist/ai/testing/index.js +2 -1
  99. package/dist/ai/testing/index.js.map +1 -1
  100. package/dist/jobs/rate-limit.error.d.ts +2 -26
  101. package/dist/jobs/rate-limit.error.d.ts.map +1 -1
  102. package/dist/jobs/rate-limit.error.js +4 -52
  103. package/dist/jobs/rate-limit.error.js.map +1 -1
  104. package/dist/storage/config/storage-config.controller.d.ts +1 -1
  105. package/package.json +3 -2
  106. package/dist/ai/providers/anthropic/anthropic-errors.d.ts +0 -16
  107. package/dist/ai/providers/anthropic/anthropic-errors.d.ts.map +0 -1
  108. package/dist/ai/providers/anthropic/anthropic-errors.js +0 -156
  109. package/dist/ai/providers/anthropic/anthropic-errors.js.map +0 -1
  110. package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts +0 -80
  111. package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts.map +0 -1
  112. package/dist/ai/providers/anthropic/anthropic-messages.mapper.js +0 -536
  113. package/dist/ai/providers/anthropic/anthropic-messages.mapper.js.map +0 -1
  114. package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts +0 -49
  115. package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts.map +0 -1
  116. package/dist/ai/providers/anthropic/anthropic-model-catalog.js +0 -198
  117. package/dist/ai/providers/anthropic/anthropic-model-catalog.js.map +0 -1
  118. package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts +0 -35
  119. package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts.map +0 -1
  120. package/dist/ai/providers/anthropic/anthropic-stream.mapper.js +0 -203
  121. package/dist/ai/providers/anthropic/anthropic-stream.mapper.js.map +0 -1
  122. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts +0 -18
  123. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts.map +0 -1
  124. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js +0 -120
  125. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js.map +0 -1
  126. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts +0 -59
  127. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts.map +0 -1
  128. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js +0 -206
  129. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js.map +0 -1
  130. package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts +0 -23
  131. package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts.map +0 -1
  132. package/dist/ai/providers/azure-openai/azure-openai-settings.js +0 -54
  133. package/dist/ai/providers/azure-openai/azure-openai-settings.js.map +0 -1
  134. package/dist/ai/providers/gemini/gemini-content.mapper.d.ts +0 -98
  135. package/dist/ai/providers/gemini/gemini-content.mapper.d.ts.map +0 -1
  136. package/dist/ai/providers/gemini/gemini-content.mapper.js +0 -665
  137. package/dist/ai/providers/gemini/gemini-content.mapper.js.map +0 -1
  138. package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts +0 -13
  139. package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts.map +0 -1
  140. package/dist/ai/providers/gemini/gemini-embeddings.mapper.js +0 -78
  141. package/dist/ai/providers/gemini/gemini-embeddings.mapper.js.map +0 -1
  142. package/dist/ai/providers/gemini/gemini-errors.d.ts +0 -32
  143. package/dist/ai/providers/gemini/gemini-errors.d.ts.map +0 -1
  144. package/dist/ai/providers/gemini/gemini-errors.js +0 -191
  145. package/dist/ai/providers/gemini/gemini-errors.js.map +0 -1
  146. package/dist/ai/providers/gemini/gemini-model-catalog.d.ts +0 -45
  147. package/dist/ai/providers/gemini/gemini-model-catalog.d.ts.map +0 -1
  148. package/dist/ai/providers/gemini/gemini-model-catalog.js +0 -264
  149. package/dist/ai/providers/gemini/gemini-model-catalog.js.map +0 -1
  150. package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts +0 -31
  151. package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts.map +0 -1
  152. package/dist/ai/providers/gemini/gemini-stream.mapper.js +0 -118
  153. package/dist/ai/providers/gemini/gemini-stream.mapper.js.map +0 -1
  154. package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts +0 -80
  155. package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts.map +0 -1
  156. package/dist/ai/providers/gemini/testing/gemini-fixtures.js +0 -118
  157. package/dist/ai/providers/gemini/testing/gemini-fixtures.js.map +0 -1
  158. package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts +0 -82
  159. package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts.map +0 -1
  160. package/dist/ai/providers/gemini/testing/gemini-mock-transport.js +0 -342
  161. package/dist/ai/providers/gemini/testing/gemini-mock-transport.js.map +0 -1
  162. package/dist/ai/providers/openai/openai-audio.mapper.d.ts +0 -42
  163. package/dist/ai/providers/openai/openai-audio.mapper.d.ts.map +0 -1
  164. package/dist/ai/providers/openai/openai-audio.mapper.js +0 -266
  165. package/dist/ai/providers/openai/openai-audio.mapper.js.map +0 -1
  166. package/dist/ai/providers/openai/openai-call-telemetry.d.ts +0 -25
  167. package/dist/ai/providers/openai/openai-call-telemetry.d.ts.map +0 -1
  168. package/dist/ai/providers/openai/openai-call-telemetry.js +0 -93
  169. package/dist/ai/providers/openai/openai-call-telemetry.js.map +0 -1
  170. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts +0 -41
  171. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts.map +0 -1
  172. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js +0 -173
  173. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js.map +0 -1
  174. package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts +0 -33
  175. package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts.map +0 -1
  176. package/dist/ai/providers/openai/openai-chat-completions.engine.js +0 -165
  177. package/dist/ai/providers/openai/openai-chat-completions.engine.js.map +0 -1
  178. package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts +0 -42
  179. package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts.map +0 -1
  180. package/dist/ai/providers/openai/openai-chat-completions.mapper.js +0 -304
  181. package/dist/ai/providers/openai/openai-chat-completions.mapper.js.map +0 -1
  182. package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts +0 -25
  183. package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts.map +0 -1
  184. package/dist/ai/providers/openai/openai-embeddings.mapper.js +0 -81
  185. package/dist/ai/providers/openai/openai-embeddings.mapper.js.map +0 -1
  186. package/dist/ai/providers/openai/openai-errors.d.ts +0 -45
  187. package/dist/ai/providers/openai/openai-errors.d.ts.map +0 -1
  188. package/dist/ai/providers/openai/openai-errors.js +0 -247
  189. package/dist/ai/providers/openai/openai-errors.js.map +0 -1
  190. package/dist/ai/providers/openai/openai-family-guards.d.ts +0 -4
  191. package/dist/ai/providers/openai/openai-family-guards.d.ts.map +0 -1
  192. package/dist/ai/providers/openai/openai-family-guards.js +0 -19
  193. package/dist/ai/providers/openai/openai-family-guards.js.map +0 -1
  194. package/dist/ai/providers/openai/openai-images.mapper.d.ts +0 -23
  195. package/dist/ai/providers/openai/openai-images.mapper.d.ts.map +0 -1
  196. package/dist/ai/providers/openai/openai-images.mapper.js +0 -164
  197. package/dist/ai/providers/openai/openai-images.mapper.js.map +0 -1
  198. package/dist/ai/providers/openai/openai-model-catalog.d.ts +0 -36
  199. package/dist/ai/providers/openai/openai-model-catalog.d.ts.map +0 -1
  200. package/dist/ai/providers/openai/openai-model-catalog.js +0 -209
  201. package/dist/ai/providers/openai/openai-model-catalog.js.map +0 -1
  202. package/dist/ai/providers/openai/openai-realtime.mapper.d.ts +0 -18
  203. package/dist/ai/providers/openai/openai-realtime.mapper.d.ts.map +0 -1
  204. package/dist/ai/providers/openai/openai-realtime.mapper.js +0 -159
  205. package/dist/ai/providers/openai/openai-realtime.mapper.js.map +0 -1
  206. package/dist/ai/providers/openai/openai-redirect-guard.d.ts +0 -9
  207. package/dist/ai/providers/openai/openai-redirect-guard.d.ts.map +0 -1
  208. package/dist/ai/providers/openai/openai-redirect-guard.js +0 -61
  209. package/dist/ai/providers/openai/openai-redirect-guard.js.map +0 -1
  210. package/dist/ai/providers/openai/openai-responses.engine.d.ts +0 -50
  211. package/dist/ai/providers/openai/openai-responses.engine.d.ts.map +0 -1
  212. package/dist/ai/providers/openai/openai-responses.engine.js +0 -206
  213. package/dist/ai/providers/openai/openai-responses.engine.js.map +0 -1
  214. package/dist/ai/providers/openai/openai-responses.mapper.d.ts +0 -64
  215. package/dist/ai/providers/openai/openai-responses.mapper.d.ts.map +0 -1
  216. package/dist/ai/providers/openai/openai-responses.mapper.js +0 -580
  217. package/dist/ai/providers/openai/openai-responses.mapper.js.map +0 -1
  218. package/dist/ai/providers/openai/openai-stream.mapper.d.ts +0 -28
  219. package/dist/ai/providers/openai/openai-stream.mapper.d.ts.map +0 -1
  220. package/dist/ai/providers/openai/openai-stream.mapper.js +0 -139
  221. package/dist/ai/providers/openai/openai-stream.mapper.js.map +0 -1
  222. package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts +0 -24
  223. package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts.map +0 -1
  224. package/dist/ai/providers/openai/testing/chat-completions-fixtures.js +0 -72
  225. package/dist/ai/providers/openai/testing/chat-completions-fixtures.js.map +0 -1
  226. package/dist/ai/providers/openai/testing/conformance-responders.d.ts +0 -7
  227. package/dist/ai/providers/openai/testing/conformance-responders.d.ts.map +0 -1
  228. package/dist/ai/providers/openai/testing/conformance-responders.js +0 -64
  229. package/dist/ai/providers/openai/testing/conformance-responders.js.map +0 -1
  230. package/dist/ai/providers/openai/testing/openai-fixtures.d.ts +0 -52
  231. package/dist/ai/providers/openai/testing/openai-fixtures.d.ts.map +0 -1
  232. package/dist/ai/providers/openai/testing/openai-fixtures.js +0 -208
  233. package/dist/ai/providers/openai/testing/openai-fixtures.js.map +0 -1
  234. package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts +0 -242
  235. package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts.map +0 -1
  236. package/dist/ai/providers/openai/testing/openai-mock-transport.js +0 -523
  237. package/dist/ai/providers/openai/testing/openai-mock-transport.js.map +0 -1
  238. package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts +0 -13
  239. package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts.map +0 -1
  240. package/dist/ai/providers/openai-compatible/openai-compatible-settings.js +0 -29
  241. package/dist/ai/providers/openai-compatible/openai-compatible-settings.js.map +0 -1
@@ -1,82 +0,0 @@
1
- import type { GeminiFetch } from '../gemini-client.factory';
2
- import { type GeminiWireResponse } from './gemini-fixtures';
3
- export interface MockGeminiModel {
4
- id: string;
5
- kind?: 'generate' | 'embedding';
6
- inputTokenLimit?: number;
7
- outputTokenLimit?: number;
8
- thinking?: boolean;
9
- /** Embedding models: the native vector length (default 3072). */
10
- dimensions?: number;
11
- }
12
- export type MockGeminiReply = {
13
- kind: 'response';
14
- response: GeminiWireResponse;
15
- chunkSize?: number;
16
- } | {
17
- kind: 'error';
18
- status: number;
19
- grpcStatus: string;
20
- message?: string;
21
- details?: unknown[];
22
- } | {
23
- kind: 'network';
24
- }
25
- /** A hand-written SSE script of `data:` payloads. `hang` keeps the connection open until aborted. */
26
- | {
27
- kind: 'sse';
28
- frames: unknown[];
29
- hang?: boolean;
30
- }
31
- /** Raw body chunks, written as given — for a bare JSON error object mid-stream. */
32
- | {
33
- kind: 'raw';
34
- chunks: string[];
35
- };
36
- export interface RecordedGeminiRequest {
37
- method: string;
38
- path: string;
39
- query: URLSearchParams;
40
- apiKey: string | null;
41
- headers: Headers;
42
- body: Record<string, unknown> | undefined;
43
- signal: AbortSignal | undefined;
44
- }
45
- export interface GeminiMockServerOptions {
46
- validKeys: string[];
47
- models?: Array<string | MockGeminiModel>;
48
- respond?(body: Record<string, unknown>, model: string): MockGeminiReply;
49
- /** An error for embedding a model, instead of vectors. */
50
- embedError?(model: string): MockGeminiReply | null;
51
- }
52
- export declare function googleError(status: number, grpcStatus: string, message: string, details?: unknown[]): {
53
- error: {
54
- details?: unknown[] | undefined;
55
- code: number;
56
- message: string;
57
- status: string;
58
- };
59
- };
60
- /** What the real API would say is wrong with this `generateContent` body, or `null`. */
61
- export declare function requestProblem(body: Record<string, unknown>, model: MockGeminiModel): string | null;
62
- export declare class GeminiMockServer {
63
- readonly requests: RecordedGeminiRequest[];
64
- private readonly validKeys;
65
- private readonly models;
66
- private respondFn;
67
- private readonly embedErrorFn;
68
- private readonly queued;
69
- constructor(opts: GeminiMockServerOptions);
70
- /** Replace the responder. */
71
- onGenerate(fn: (body: Record<string, unknown>, model: string) => MockGeminiReply): void;
72
- /** Answer the next generate call(s) with these replies, in order, before the responder. */
73
- queue(...replies: MockGeminiReply[]): void;
74
- /** `generateContent` / `streamGenerateContent` requests only. */
75
- get generateRequests(): RecordedGeminiRequest[];
76
- private kindOf;
77
- private find;
78
- private errorResponse;
79
- readonly fetch: GeminiFetch;
80
- private embed;
81
- }
82
- //# sourceMappingURL=gemini-mock-transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-mock-transport.d.ts","sourceRoot":"","sources":["../../../../../src/ai/providers/gemini/testing/gemini-mock-transport.ts"],"names":[],"mappings":"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"}
@@ -1,342 +0,0 @@
1
- "use strict";
2
- // A mocked Gemini HTTP API for tests (issue #447). Not imported by production code.
3
- //
4
- // Injected into the real SDK as its `fetch` (via `GeminiClientFactory`'s
5
- // options), so tests exercise the SDK's own request building (the
6
- // `GenerateContentConfig` -> REST body translation), error class and SSE
7
- // parsing — only the network is fake. The same approach, and no new
8
- // dependency, as the OpenAI and Anthropic mock transports.
9
- //
10
- // Behaviour:
11
- // - `x-goog-api-key` not in `validKeys` -> 400 INVALID_ARGUMENT with the
12
- // `API_KEY_INVALID` ErrorInfo — the real API's answer to a bad key (not a
13
- // 401) — whose message echoes the key, so redaction tests have something
14
- // to catch;
15
- // - `GET /v1beta/models` -> the configured models with their metadata,
16
- // paginated by `pageSize` / `pageToken`;
17
- // - `POST /v1beta/models/{m}:generateContent` / `:streamGenerateContent`
18
- // -> whatever `respond(body, model)` returns: a response (streamed as SSE
19
- // chunks when streaming), an HTTP error, a network failure, or a raw SSE
20
- // script;
21
- // - `POST /v1beta/models/{m}:batchEmbedContents` -> one deterministic
22
- // vector per request (`embeddingFor`), truncated to
23
- // `outputDimensionality`, or a configured error.
24
- //
25
- // THE MOCK IS STATELESS ON PURPOSE, like the real API, and validates what the
26
- // real API validates about a request, so a test cannot pass by leaning on
27
- // state Gemini does not keep or on a shape Gemini would refuse:
28
- // - unknown top-level fields are rejected (`previous_response_id` included);
29
- // - a listed model is required, of the right kind for the method;
30
- // - `contents` is non-empty, every turn is `user` or `model` with parts, the
31
- // first is a user turn, and turns alternate;
32
- // - a function-response turn follows a function-call turn IMMEDIATELY, with
33
- // exactly one response per call, by name;
34
- // - on a Gemini 3 model, the first function call of every model step in the
35
- // current turn carries its `thoughtSignature`;
36
- // - `thinkingConfig` is refused on a model that does not think, and
37
- // `thinkingLevel` together with `thinkingBudget` everywhere;
38
- // - `responseJsonSchema` needs `responseMimeType: application/json`, and
39
- // Gemini 2.5 refuses a JSON response together with function calling.
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.GeminiMockServer = void 0;
42
- exports.googleError = googleError;
43
- exports.requestProblem = requestProblem;
44
- const gemini_fixtures_1 = require("./gemini-fixtures");
45
- const GENERATE_BODY_FIELDS = new Set([
46
- 'contents',
47
- 'systemInstruction',
48
- 'generationConfig',
49
- 'tools',
50
- 'toolConfig',
51
- 'safetySettings',
52
- 'cachedContent',
53
- 'serviceTier',
54
- 'labels',
55
- ]);
56
- function json(status, payload) {
57
- return new Response(JSON.stringify(payload), { status, headers: { 'content-type': 'application/json' } });
58
- }
59
- function googleError(status, grpcStatus, message, details) {
60
- return { error: { code: status, message, status: grpcStatus, ...(details ? { details } : {}) } };
61
- }
62
- function abortError() {
63
- const err = new Error('This operation was aborted');
64
- err.name = 'AbortError';
65
- return err;
66
- }
67
- function sseResponse(frames, hang, signal) {
68
- return rawResponse(frames.map((frame) => `data: ${typeof frame === 'string' ? frame : JSON.stringify(frame)}\r\n\r\n`), hang, signal);
69
- }
70
- function rawResponse(chunks, hang, signal) {
71
- const encoder = new TextEncoder();
72
- const body = new ReadableStream({
73
- start(controller) {
74
- for (const chunk of chunks) {
75
- controller.enqueue(encoder.encode(chunk));
76
- }
77
- if (!hang) {
78
- controller.close();
79
- return;
80
- }
81
- const onAbort = () => {
82
- try {
83
- controller.error(abortError());
84
- }
85
- catch {
86
- // already closed
87
- }
88
- };
89
- if (signal?.aborted)
90
- onAbort();
91
- else
92
- signal?.addEventListener('abort', onAbort, { once: true });
93
- },
94
- });
95
- return new Response(body, { status: 200, headers: { 'content-type': 'text/event-stream' } });
96
- }
97
- function isGemini3(model) {
98
- return /^gemini-3/.test(model);
99
- }
100
- function isGemini25(model) {
101
- return /^gemini-2\.5-/.test(model);
102
- }
103
- function hasFunctionCalls(turn) {
104
- return (turn.parts ?? []).some((part) => part.functionCall);
105
- }
106
- function hasFunctionResponses(turn) {
107
- return (turn.parts ?? []).some((part) => part.functionResponse);
108
- }
109
- /** What the real API would say is wrong with this `generateContent` body, or `null`. */
110
- function requestProblem(body, model) {
111
- for (const key of Object.keys(body)) {
112
- if (!GENERATE_BODY_FIELDS.has(key)) {
113
- return `Invalid JSON payload received. Unknown name "${key}": Cannot find field.`;
114
- }
115
- }
116
- const contents = (Array.isArray(body.contents) ? body.contents : []);
117
- if (contents.length === 0)
118
- return '* GenerateContentRequest.contents: contents is not specified';
119
- for (const [i, turn] of contents.entries()) {
120
- if (turn.role !== 'user' && turn.role !== 'model') {
121
- return `* GenerateContentRequest.contents[${i}].role: Please use a valid role: user, model.`;
122
- }
123
- if (!Array.isArray(turn.parts) || turn.parts.length === 0) {
124
- return `* GenerateContentRequest.contents[${i}].parts: contents.parts must not be empty.`;
125
- }
126
- for (const part of turn.parts) {
127
- if (part.functionCall && (typeof part.functionCall.args !== 'object' || Array.isArray(part.functionCall.args))) {
128
- return `* GenerateContentRequest.contents[${i}]: functionCall.args must be a JSON object.`;
129
- }
130
- if (part.functionResponse &&
131
- (!part.functionResponse.name ||
132
- typeof part.functionResponse.response !== 'object' ||
133
- Array.isArray(part.functionResponse.response))) {
134
- return `* GenerateContentRequest.contents[${i}]: functionResponse needs a name and an object response.`;
135
- }
136
- }
137
- }
138
- if (contents[0].role !== 'user')
139
- return 'Please ensure that multiturn requests start with a user turn.';
140
- for (let i = 1; i < contents.length; i += 1) {
141
- if (contents[i].role === contents[i - 1].role) {
142
- return 'Please ensure that multiturn requests alternate between user and model.';
143
- }
144
- }
145
- for (let i = 0; i < contents.length; i += 1) {
146
- const turn = contents[i];
147
- if (hasFunctionResponses(turn)) {
148
- const previous = contents[i - 1];
149
- if (!previous || !hasFunctionCalls(previous)) {
150
- return 'Please ensure that function response turn comes immediately after a function call turn.';
151
- }
152
- const calls = (previous.parts ?? []).filter((p) => p.functionCall).map((p) => p.functionCall?.name).sort();
153
- const responses = (turn.parts ?? []).filter((p) => p.functionResponse).map((p) => p.functionResponse?.name).sort();
154
- if (calls.length !== responses.length) {
155
- return 'Please ensure that the number of function response parts is equal to the number of function call parts of the function call turn.';
156
- }
157
- if (calls.join(',') !== responses.join(',')) {
158
- return 'Please ensure that each function response names a function call of the function call turn.';
159
- }
160
- }
161
- }
162
- if (isGemini3(model.id)) {
163
- // The current turn: everything after the last user turn that is not
164
- // just function responses.
165
- let start = 0;
166
- contents.forEach((turn, i) => {
167
- if (turn.role === 'user' && !hasFunctionResponses(turn))
168
- start = i;
169
- });
170
- for (let i = start; i < contents.length; i += 1) {
171
- const turn = contents[i];
172
- const firstCall = (turn.parts ?? []).find((p) => p.functionCall);
173
- if (turn.role === 'model' && firstCall && !firstCall.thoughtSignature) {
174
- return `Function call is missing a thought_signature in functionCall parts. This is required for tools to work correctly, and missing thought_signature may lead to degraded model performance. Additional data, function call \`default_api:${firstCall.functionCall?.name}\` , position ${i + 1}.`;
175
- }
176
- }
177
- }
178
- const generation = (body.generationConfig ?? {});
179
- const thinking = generation.thinkingConfig;
180
- if (thinking) {
181
- if (model.thinking === false)
182
- return 'Thinking is not enabled for this model.';
183
- if (thinking.thinkingLevel !== undefined && thinking.thinkingBudget !== undefined) {
184
- return 'thinking_level and thinking_budget cannot both be set.';
185
- }
186
- }
187
- if (generation.responseJsonSchema !== undefined && generation.responseMimeType !== 'application/json') {
188
- return 'response_json_schema requires response_mime_type to be application/json.';
189
- }
190
- const tools = (Array.isArray(body.tools) ? body.tools : []);
191
- const declares = tools.some((tool) => Array.isArray(tool.functionDeclarations));
192
- if (isGemini25(model.id) && declares && generation.responseMimeType === 'application/json') {
193
- return "Function calling with a response mime type: 'application/json' is unsupported";
194
- }
195
- return null;
196
- }
197
- class GeminiMockServer {
198
- requests = [];
199
- validKeys;
200
- models;
201
- respondFn;
202
- embedErrorFn;
203
- queued = [];
204
- constructor(opts) {
205
- this.validKeys = new Set(opts.validKeys);
206
- this.models = (opts.models ?? ['gemini-2.5-flash']).map((model) => typeof model === 'string' ? { id: model } : model);
207
- this.respondFn =
208
- opts.respond ??
209
- (() => ({ kind: 'error', status: 500, grpcStatus: 'INTERNAL', message: 'no responder configured' }));
210
- this.embedErrorFn = opts.embedError ?? (() => null);
211
- }
212
- /** Replace the responder. */
213
- onGenerate(fn) {
214
- this.respondFn = fn;
215
- }
216
- /** Answer the next generate call(s) with these replies, in order, before the responder. */
217
- queue(...replies) {
218
- this.queued.push(...replies);
219
- }
220
- /** `generateContent` / `streamGenerateContent` requests only. */
221
- get generateRequests() {
222
- return this.requests.filter((r) => /:(?:stream)?[gG]enerateContent$/.test(r.path));
223
- }
224
- kindOf(model) {
225
- return model.kind ?? (/embedding/.test(model.id) ? 'embedding' : 'generate');
226
- }
227
- find(model) {
228
- return this.models.find((m) => m.id === model);
229
- }
230
- errorResponse(reply) {
231
- return json(reply.status, googleError(reply.status, reply.grpcStatus, reply.message ?? reply.grpcStatus, reply.details));
232
- }
233
- fetch = async (input, init) => {
234
- const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.href : input.url);
235
- const headers = new Headers(init?.headers);
236
- const method = (init?.method ?? 'GET').toUpperCase();
237
- const body = typeof init?.body === 'string' && init.body.length > 0
238
- ? JSON.parse(init.body)
239
- : undefined;
240
- const apiKey = headers.get('x-goog-api-key');
241
- const signal = init?.signal ?? undefined;
242
- this.requests.push({ method, path: url.pathname, query: url.searchParams, apiKey, headers, body, signal });
243
- if (signal?.aborted)
244
- throw abortError();
245
- if (!apiKey || !this.validKeys.has(apiKey)) {
246
- return json(400, googleError(400, 'INVALID_ARGUMENT', `API key not valid. Please pass a valid API key. (${apiKey ?? ''})`, [
247
- {
248
- '@type': 'type.googleapis.com/google.rpc.ErrorInfo',
249
- reason: 'API_KEY_INVALID',
250
- domain: 'googleapis.com',
251
- metadata: { service: 'generativelanguage.googleapis.com' },
252
- },
253
- ]));
254
- }
255
- if (method === 'GET' && url.pathname === '/v1beta/models') {
256
- const pageSize = Number(url.searchParams.get('pageSize') ?? 50);
257
- const start = Number(url.searchParams.get('pageToken') ?? 0);
258
- const page = this.models.slice(start, start + pageSize);
259
- const next = start + pageSize < this.models.length ? String(start + pageSize) : undefined;
260
- return json(200, {
261
- models: page.map((model) => {
262
- const embedding = this.kindOf(model) === 'embedding';
263
- return {
264
- name: `models/${model.id}`,
265
- version: '001',
266
- displayName: model.id,
267
- inputTokenLimit: model.inputTokenLimit ?? (embedding ? 2048 : 1_048_576),
268
- outputTokenLimit: model.outputTokenLimit ?? (embedding ? 1 : 65_536),
269
- supportedGenerationMethods: embedding
270
- ? ['embedContent', 'countTextTokens', 'countTokens']
271
- : ['generateContent', 'countTokens', 'createCachedContent', 'batchGenerateContent'],
272
- ...(embedding ? {} : { thinking: model.thinking ?? !/^gemini-(?:2\.0|1\.5)/.test(model.id) }),
273
- };
274
- }),
275
- ...(next ? { nextPageToken: next } : {}),
276
- });
277
- }
278
- const match = /^\/v1beta\/models\/([^:]+):(generateContent|streamGenerateContent|batchEmbedContents)$/.exec(url.pathname);
279
- if (method === 'POST' && match && body) {
280
- const [, modelId, action] = match;
281
- const model = this.find(modelId);
282
- const wantKind = action === 'batchEmbedContents' ? 'embedding' : 'generate';
283
- if (!model || this.kindOf(model) !== wantKind) {
284
- return json(404, googleError(404, 'NOT_FOUND', `models/${modelId} is not found for API version v1beta, or is not supported for ${action}.`));
285
- }
286
- if (action === 'batchEmbedContents')
287
- return this.embed(body, model);
288
- const problem = requestProblem(body, { ...model, thinking: model.thinking ?? !/^gemini-(?:2\.0|1\.5)/.test(model.id) });
289
- if (problem)
290
- return json(400, googleError(400, 'INVALID_ARGUMENT', problem));
291
- const reply = this.queued.shift() ?? this.respondFn(body, modelId);
292
- const streaming = action === 'streamGenerateContent';
293
- switch (reply.kind) {
294
- case 'network':
295
- throw new TypeError('fetch failed');
296
- case 'error':
297
- return this.errorResponse(reply);
298
- case 'sse':
299
- return sseResponse(reply.frames, reply.hang ?? false, signal);
300
- case 'raw':
301
- return rawResponse(reply.chunks, false, signal);
302
- case 'response':
303
- if (streaming && url.searchParams.get('alt') !== 'sse') {
304
- return json(400, googleError(400, 'INVALID_ARGUMENT', 'streaming requires alt=sse in this mock'));
305
- }
306
- return streaming
307
- ? sseResponse((0, gemini_fixtures_1.streamChunksFor)(reply.response, reply.chunkSize), false, signal)
308
- : json(200, reply.response);
309
- }
310
- }
311
- return json(404, googleError(404, 'NOT_FOUND', `No route for ${method} ${url.pathname}`));
312
- };
313
- embed(body, model) {
314
- const failure = this.embedErrorFn(model.id);
315
- if (failure?.kind === 'error')
316
- return this.errorResponse(failure);
317
- if (failure?.kind === 'network')
318
- throw new TypeError('fetch failed');
319
- const requests = (Array.isArray(body.requests) ? body.requests : []);
320
- if (requests.length === 0)
321
- return json(400, googleError(400, 'INVALID_ARGUMENT', '* BatchEmbedContentsRequest.requests: must not be empty'));
322
- if (requests.length > 100) {
323
- return json(400, googleError(400, 'INVALID_ARGUMENT', '* BatchEmbedContentsRequest.requests: at most 100 requests can be in one batch'));
324
- }
325
- const embeddings = [];
326
- for (const request of requests) {
327
- if (request.model !== `models/${model.id}`) {
328
- return json(400, googleError(400, 'INVALID_ARGUMENT', 'Model names in the batch must match the model in the URL.'));
329
- }
330
- const parts = (request.content?.parts ?? []);
331
- const text = parts.map((part) => part.text ?? '').join('');
332
- const dims = typeof request.outputDimensionality === 'number' ? request.outputDimensionality : undefined;
333
- if (parts.length === 0)
334
- return json(400, googleError(400, 'INVALID_ARGUMENT', '* content.parts must not be empty'));
335
- const full = (0, gemini_fixtures_1.embeddingFor)(text, model.dimensions ?? 3072);
336
- embeddings.push({ values: dims ? full.slice(0, dims) : full });
337
- }
338
- return json(200, { embeddings });
339
- }
340
- }
341
- exports.GeminiMockServer = GeminiMockServer;
342
- //# sourceMappingURL=gemini-mock-transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-mock-transport.js","sourceRoot":"","sources":["../../../../../src/ai/providers/gemini/testing/gemini-mock-transport.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- import type { SpeechCreateParams } from 'openai/resources/audio/speech';
2
- import type { TranscriptionCreateParamsNonStreaming } from 'openai/resources/audio/transcriptions';
3
- import { type AiMediaInput, type AiSpeechRequest, type AiSpeechResult, type AiTranscriptionRequest, type AiTranscriptionResult } from '../../core/types/media.types';
4
- /** OpenAI's upload limit for `/v1/audio/transcriptions` (25 MiB). */
5
- export declare const OPENAI_TRANSCRIPTION_MAX_BYTES: number;
6
- /** Whether OpenAI model `modelId` is a Whisper model (verbose_json, timestamps). */
7
- export declare function isOpenAiWhisper(modelId: string): boolean;
8
- /**
9
- * The name the upload is sent under: the caller's own base name (no path),
10
- * with an extension OpenAI can decode — appended from the MIME type when the
11
- * name has none it recognises.
12
- */
13
- export declare function openAiAudioFileName(input: Pick<AiMediaInput, 'filename' | 'mimeType'>): string;
14
- /**
15
- * The `/v1/audio/transcriptions` multipart body. A streamed input stays a
16
- * stream (`toStreamingFile`); bytes become a `File`.
17
- */
18
- export declare function toOpenAiTranscriptionRequest(req: AiTranscriptionRequest): Promise<TranscriptionCreateParamsNonStreaming>;
19
- export interface FromOpenAiTranscriptionOptions {
20
- request: AiTranscriptionRequest;
21
- providerRequestId?: string | null;
22
- }
23
- /**
24
- * The neutral result, from whichever shape the requested `response_format`
25
- * produced: a bare string (`text`), `{ text, usage? }` (`json`), or the
26
- * verbose object with language, duration, segments and words.
27
- */
28
- export declare function fromOpenAiTranscriptionResponse(data: unknown, opts: FromOpenAiTranscriptionOptions): AiTranscriptionResult;
29
- /** Whether OpenAI model `modelId` is `tts-1`/`tts-1-hd` (no `instructions`). */
30
- export declare function isOpenAiTts1(modelId: string): boolean;
31
- /** The `/v1/audio/speech` JSON body. Refuses what OpenAI would refuse, before calling. */
32
- export declare function toOpenAiSpeechRequest(req: AiSpeechRequest): SpeechCreateParams;
33
- export interface FromOpenAiSpeechOptions {
34
- request: AiSpeechRequest;
35
- providerRequestId?: string | null;
36
- }
37
- /**
38
- * The neutral result: the bytes, typed by the format that was asked for
39
- * (the one OpenAI produces). No bytes is a provider fault.
40
- */
41
- export declare function fromOpenAiSpeechResponse(bytes: Uint8Array, opts: FromOpenAiSpeechOptions): AiSpeechResult;
42
- //# sourceMappingURL=openai-audio.mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-audio.mapper.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/openai/openai-audio.mapper.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAEV,qCAAqC,EAEtC,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAG3B,MAAM,8BAA8B,CAAC;AAItC,qEAAqE;AACrE,eAAO,MAAM,8BAA8B,QAAmB,CAAC;AA4B/D,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG,MAAM,CAU9F;AAQD;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,qCAAqC,CAAC,CAyChD;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,sBAAsB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAoCD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,8BAA8B,GACnC,qBAAqB,CAwCvB;AAWD,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAMD,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAiC9E;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,GAAG,cAAc,CAoBzG"}