@holokai/holo-provider-gemini 1.3.0 → 1.4.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 (86) hide show
  1. package/README.md +151 -0
  2. package/dist/gemini.auditor.d.ts +13 -20
  3. package/dist/gemini.auditor.d.ts.map +1 -1
  4. package/dist/gemini.auditor.js +64 -81
  5. package/dist/gemini.auditor.js.map +1 -1
  6. package/dist/gemini.pricing.d.ts +1 -1
  7. package/dist/gemini.pricing.d.ts.map +1 -1
  8. package/dist/gemini.provider.d.ts +8 -6
  9. package/dist/gemini.provider.d.ts.map +1 -1
  10. package/dist/gemini.provider.js +64 -24
  11. package/dist/gemini.provider.js.map +1 -1
  12. package/dist/gemini.response.factory.d.ts +2 -2
  13. package/dist/gemini.response.factory.d.ts.map +1 -1
  14. package/dist/gemini.response.factory.js +3 -1
  15. package/dist/gemini.response.factory.js.map +1 -1
  16. package/dist/gemini.translator.d.ts +9 -3
  17. package/dist/gemini.translator.d.ts.map +1 -1
  18. package/dist/gemini.translator.js +18 -1
  19. package/dist/gemini.translator.js.map +1 -1
  20. package/dist/gemini.wire.adapter.d.ts +1 -1
  21. package/dist/gemini.wire.adapter.d.ts.map +1 -1
  22. package/dist/gemini.wire.adapter.js +1 -1
  23. package/dist/gemini.wire.adapter.js.map +1 -1
  24. package/dist/manifest.d.ts +1 -1
  25. package/dist/manifest.d.ts.map +1 -1
  26. package/dist/manifest.js +1 -1
  27. package/dist/manifest.js.map +1 -1
  28. package/dist/plugin.d.ts +10 -7
  29. package/dist/plugin.d.ts.map +1 -1
  30. package/dist/plugin.js +20 -5
  31. package/dist/plugin.js.map +1 -1
  32. package/dist/translators/gemini.content.translator.d.ts +2 -2
  33. package/dist/translators/gemini.content.translator.d.ts.map +1 -1
  34. package/dist/translators/gemini.content.translator.js +1 -1
  35. package/dist/translators/gemini.content.translator.js.map +1 -1
  36. package/dist/translators/gemini.message.translator.d.ts +2 -2
  37. package/dist/translators/gemini.message.translator.d.ts.map +1 -1
  38. package/dist/translators/gemini.message.translator.js +1 -1
  39. package/dist/translators/gemini.message.translator.js.map +1 -1
  40. package/dist/translators/gemini.request.translator.d.ts +2 -2
  41. package/dist/translators/gemini.request.translator.d.ts.map +1 -1
  42. package/dist/translators/gemini.request.translator.js +2 -2
  43. package/dist/translators/gemini.request.translator.js.map +1 -1
  44. package/dist/translators/gemini.response.content.translator.d.ts +2 -2
  45. package/dist/translators/gemini.response.content.translator.d.ts.map +1 -1
  46. package/dist/translators/gemini.response.content.translator.js +1 -1
  47. package/dist/translators/gemini.response.content.translator.js.map +1 -1
  48. package/dist/translators/gemini.response.message.translator.d.ts +2 -2
  49. package/dist/translators/gemini.response.message.translator.d.ts.map +1 -1
  50. package/dist/translators/gemini.response.message.translator.js +2 -2
  51. package/dist/translators/gemini.response.message.translator.js.map +1 -1
  52. package/dist/translators/gemini.response.translator.d.ts +2 -2
  53. package/dist/translators/gemini.response.translator.d.ts.map +1 -1
  54. package/dist/translators/gemini.response.translator.js +2 -2
  55. package/dist/translators/gemini.response.translator.js.map +1 -1
  56. package/dist/translators/gemini.tool.translator.d.ts +2 -2
  57. package/dist/translators/gemini.tool.translator.d.ts.map +1 -1
  58. package/dist/translators/gemini.tool.translator.js +2 -2
  59. package/dist/translators/gemini.tool.translator.js.map +1 -1
  60. package/dist/translators/gemini.usage.translator.d.ts +2 -2
  61. package/dist/translators/gemini.usage.translator.d.ts.map +1 -1
  62. package/dist/translators/gemini.usage.translator.js +2 -2
  63. package/dist/translators/gemini.usage.translator.js.map +1 -1
  64. package/dist/translators/streaming/gemini.content.delta.translator.d.ts +2 -2
  65. package/dist/translators/streaming/gemini.content.delta.translator.d.ts.map +1 -1
  66. package/dist/translators/streaming/gemini.content.delta.translator.js +1 -1
  67. package/dist/translators/streaming/gemini.content.delta.translator.js.map +1 -1
  68. package/dist/translators/streaming/gemini.message.delta.translator.d.ts +2 -2
  69. package/dist/translators/streaming/gemini.message.delta.translator.d.ts.map +1 -1
  70. package/dist/translators/streaming/gemini.message.delta.translator.js +2 -2
  71. package/dist/translators/streaming/gemini.message.delta.translator.js.map +1 -1
  72. package/dist/translators/streaming/gemini.message.start.translator.d.ts +2 -2
  73. package/dist/translators/streaming/gemini.message.start.translator.d.ts.map +1 -1
  74. package/dist/translators/streaming/gemini.message.start.translator.js +1 -1
  75. package/dist/translators/streaming/gemini.message.start.translator.js.map +1 -1
  76. package/dist/translators/streaming/gemini.message.stop.translator.d.ts +2 -2
  77. package/dist/translators/streaming/gemini.message.stop.translator.d.ts.map +1 -1
  78. package/dist/translators/streaming/gemini.message.stop.translator.js +1 -1
  79. package/dist/translators/streaming/gemini.message.stop.translator.js.map +1 -1
  80. package/dist/translators/streaming/gemini.stream.translator.d.ts +2 -2
  81. package/dist/translators/streaming/gemini.stream.translator.d.ts.map +1 -1
  82. package/dist/translators/streaming/gemini.stream.translator.js +1 -1
  83. package/dist/translators/streaming/gemini.stream.translator.js.map +1 -1
  84. package/dist/utils/finish.reason.mapper.d.ts +1 -1
  85. package/dist/utils/finish.reason.mapper.d.ts.map +1 -1
  86. package/package.json +6 -6
package/README.md ADDED
@@ -0,0 +1,151 @@
1
+ # @holokai/holo-provider-gemini
2
+
3
+ > **Google Gemini provider plugin for Holo LLM Gateway**
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ The Gemini provider plugin enables Holo to communicate with Google's Gemini API. It provides bidirectional translation between Gemini's native API and the portable Holo format using the `@google/genai` SDK.
10
+
11
+ ### Key Features
12
+
13
+ - Full Holo SDK integration with strict type safety
14
+ - Bidirectional translation: Gemini native format <-> Holo universal format
15
+ - Streaming support via `streamGenerateContent`
16
+ - Tool calling / function calling
17
+ - Vision and multimodal input
18
+ - Embedding support via `embedContent`
19
+ - Built-in pricing dataset with cost calculation
20
+ - Thinking token and cache read cost tracking
21
+
22
+ ---
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ npm install @holokai/holo-provider-gemini
28
+ ```
29
+
30
+ ### Peer Dependencies
31
+
32
+ - `@holokai/holo-sdk` ^1.2.2
33
+
34
+ ---
35
+
36
+ ## Quick Start
37
+
38
+ ### Automatic Discovery
39
+
40
+ When installed in a Holo worker environment, this plugin is automatically discovered and loaded. No manual registration required.
41
+
42
+ ### Configuration
43
+
44
+ Add a provider configuration to your Holo deployment:
45
+
46
+ ```json
47
+ {
48
+ "provider_type": "gemini",
49
+ "plugin_id": "@holokai/holo-provider-gemini",
50
+ "api_key": "${GEMINI_API_KEY}",
51
+ "model": "gemini-2.0-flash",
52
+ "config": {
53
+ "defaultModel": "gemini-2.0-flash"
54
+ }
55
+ }
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Protocols
61
+
62
+ | Protocol | Capability | Route | Method |
63
+ |----------|------------|-------|--------|
64
+ | `gemini.generateContent` | Chat | `/v1beta/models/:model:generateContent` | POST |
65
+ | `gemini.streamGenerateContent` | Chat (streaming) | `/v1beta/models/:model:streamGenerateContent` | POST |
66
+ | `gemini.embedContent` | Embed | `/v1beta/models/:model:embedContent` | POST |
67
+ | `gemini.models` | Models | `/v1beta/models` | GET |
68
+
69
+ The default protocol is `gemini.generateContent`.
70
+
71
+ ---
72
+
73
+ ## Capabilities
74
+
75
+ ```typescript
76
+ {
77
+ streaming: true,
78
+ tools: true,
79
+ vision: true,
80
+ functionCalling: true,
81
+ maxTokens: 1_000_000
82
+ }
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Architecture
88
+
89
+ ```
90
+ plugins/holo-provider-gemini/
91
+ ├── src/
92
+ │ ├── index.ts Default export of plugin instance
93
+ │ ├── manifest.ts Plugin manifest (family: 'gemini')
94
+ │ ├── plugin.ts GeminiProviderPlugin — routes, capabilities, pricing
95
+ │ ├── gemini.provider.ts GeminiProvider — request execution via @google/genai
96
+ │ ├── gemini.auditor.ts Audit record construction
97
+ │ ├── gemini.translator.ts Holo <-> Gemini format translation
98
+ │ ├── gemini.wire.adapter.ts Event-to-wire serialization (SSE/JSON)
99
+ │ ├── gemini.response.factory.ts Response envelope construction
100
+ │ └── gemini.pricing.ts Built-in pricing dataset
101
+ ├── tests/
102
+ │ └── fixtures/ Conformance test fixtures
103
+ ├── package.json
104
+ └── tsconfig.json
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Holo Format Mapping
110
+
111
+ ### Request Translation (Holo -> Gemini)
112
+
113
+ | Holo Field | Gemini Field |
114
+ |------------|-------------|
115
+ | `messages[].role: 'user'` | `contents[].role: 'user'` |
116
+ | `messages[].role: 'assistant'` | `contents[].role: 'model'` |
117
+ | `messages[].content` (text) | `contents[].parts[].text` |
118
+ | `messages[].content` (image) | `contents[].parts[].inlineData` |
119
+ | `system` | `systemInstruction` |
120
+ | `max_tokens` | `generationConfig.maxOutputTokens` |
121
+ | `temperature` | `generationConfig.temperature` |
122
+ | `top_p` | `generationConfig.topP` |
123
+ | `top_k` | `generationConfig.topK` |
124
+ | `stop_sequences` | `generationConfig.stopSequences` |
125
+ | `tools` | `tools[].functionDeclarations` |
126
+
127
+ ### Response Translation (Gemini -> Holo)
128
+
129
+ | Gemini Field | Holo Field |
130
+ |-------------|------------|
131
+ | `candidates[0].content.parts[].text` | `choices[0].message.content` |
132
+ | `candidates[0].finishReason` | `choices[0].finish_reason` |
133
+ | `usageMetadata.promptTokenCount` | `usage.prompt_tokens` |
134
+ | `usageMetadata.candidatesTokenCount` | `usage.completion_tokens` |
135
+ | `usageMetadata.totalTokenCount` | `usage.total_tokens` |
136
+
137
+ ---
138
+
139
+ ## Testing
140
+
141
+ Tests use the `@holokai/holo-test` conformance framework with fixture-driven testing:
142
+
143
+ ```bash
144
+ npm test
145
+ ```
146
+
147
+ ---
148
+
149
+ ## License
150
+
151
+ MIT
@@ -1,24 +1,17 @@
1
- import { BaseAuditor } from "@holokai/sdk/provider";
2
- import type { ProviderEnvelope, ProviderEvent } from "@holokai/types/provider";
3
- import type { HoloWorkerRequest, WorkerResponseEnvelope } from "@holokai/types/worker";
4
- import type { ProviderRequest } from "@holokai/types/entities";
5
- import { LlmStatus } from "@holokai/types/entities";
1
+ import { BaseAuditor } from "@holokai/holo-sdk/provider";
2
+ import type { ProviderDoneEvent, ProviderEvent } from "@holokai/holo-types/provider";
3
+ import type { HoloWorkerRequest, WorkerResponseEnvelope } from "@holokai/holo-types/worker";
4
+ import type { ProviderEnvelope, ProviderResponseMetrics } from "@holokai/holo-types/entities";
5
+ import { FinishReason, ProviderResponseStatus } from "@holokai/holo-types/entities";
6
+ import type { HoloFinishReason, HoloUsage } from "@holokai/holo-types/holo";
6
7
  export declare class GeminiAuditor extends BaseAuditor {
7
8
  readonly provider = "gemini";
8
- protected toHoloRequest(workerRequest: HoloWorkerRequest, llmRequest: Omit<ProviderRequest, 'id'>): void;
9
- protected mapProviderPayload(workerRequest: HoloWorkerRequest, llmRequest: Omit<ProviderRequest, 'id'>): void;
10
- protected mapResponseMetrics(providerEvent: Extract<ProviderEvent, {
11
- type: 'done' | 'error';
12
- }>, envelope: WorkerResponseEnvelope): Promise<Partial<{
13
- usage_raw: any;
14
- input_tokens: any;
15
- output_tokens: any;
16
- time_to_first_token: any;
17
- total_processing_time: any;
18
- }>>;
19
- protected mapResponseStatus(providerEvent: ProviderEvent, envelope: WorkerResponseEnvelope): Promise<LlmStatus>;
20
- protected createProviderEnvelope(payload: any): Promise<ProviderEnvelope>;
21
- protected extractExtraTokens(metrics: Record<string, any>, base: Record<string, number>): Record<string, number>;
22
- private extractUserPromptFromContents;
9
+ protected extractRequestOptions(workerRequest: HoloWorkerRequest): Promise<Record<string, any>>;
10
+ mapFinishReason(nativeResponse: any, _protocolName?: string): HoloFinishReason;
11
+ mapUsage(nativeResponse: any, protocolName?: string): HoloUsage;
12
+ protected mapProviderResponseMetrics(providerEvent: ProviderDoneEvent, protocolName: string): Promise<Partial<ProviderResponseMetrics>>;
13
+ protected mapResponseStatus(providerEvent: ProviderEvent, envelope: WorkerResponseEnvelope): Promise<ProviderResponseStatus>;
14
+ protected extractFinishReason(providerEvent: ProviderEvent, _envelope: WorkerResponseEnvelope): Promise<FinishReason | undefined>;
15
+ protected createProviderEnvelope(workerRequest: HoloWorkerRequest): Promise<ProviderEnvelope>;
23
16
  }
24
17
  //# sourceMappingURL=gemini.auditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.auditor.d.ts","sourceRoot":"","sources":["../src/gemini.auditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAC,iBAAiB,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAElD,qBACa,aAAc,SAAQ,WAAW;IAC1C,QAAQ,CAAC,QAAQ,YAAY;IAE7B,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,IAAI;IAkBxG,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,IAAI;cAiB7F,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE;QACrE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KACzB,CAAC,EAAE,QAAQ,EAAE,sBAAsB;;;;;;;cAkBpB,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;cAWrG,sBAAsB,CAClC,OAAO,EAAE,GAAG,GACb,OAAO,CAAC,gBAAgB,CAAC;IAgB5B,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUhH,OAAO,CAAC,6BAA6B;CAgBxC"}
1
+ {"version":3,"file":"gemini.auditor.d.ts","sourceRoot":"","sources":["../src/gemini.auditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAEvD,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAC,iBAAiB,EAAE,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,KAAK,EAAC,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAC,YAAY,EAAE,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAC,gBAAgB,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAS1E,qBACa,aAAc,SAAQ,WAAW;IAC1C,QAAQ,CAAC,QAAQ,YAAY;cAEb,qBAAqB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAM5F,eAAe,CAAC,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAkB9E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS;cAYxD,0BAA0B,CAAC,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM;cAgBjF,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;cAWlH,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;cAMvH,sBAAsB,CAClC,aAAa,EAAE,iBAAiB,GACjC,OAAO,CAAC,gBAAgB,CAAC;CAiB/B"}
@@ -5,58 +5,63 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { injectable } from 'tsyringe';
8
- import { BaseAuditor } from "@holokai/sdk/provider";
9
- import { pickDefined } from "@holokai/sdk";
10
- import { LlmStatus } from "@holokai/types/entities";
8
+ import { BaseAuditor } from "@holokai/holo-sdk/provider";
9
+ import { extractPromptByRole, extractTextContent, extractTopLevelPrompt, pickDefined } from "@holokai/holo-sdk";
10
+ import { FinishReason, ProviderResponseStatus } from "@holokai/holo-types/entities";
11
+ import { GeminiProtocols } from "./plugin";
11
12
  let GeminiAuditor = class GeminiAuditor extends BaseAuditor {
12
13
  provider = 'gemini';
13
- toHoloRequest(workerRequest, llmRequest) {
14
- const payload = workerRequest.payload;
15
- llmRequest.access_model = payload.model;
16
- const userPrompt = this.extractUserPromptFromContents(payload.contents);
17
- if (userPrompt !== undefined) {
18
- llmRequest.metadata.user_prompt = userPrompt;
19
- }
20
- if (payload.config?.systemInstruction) {
21
- const si = payload.config.systemInstruction;
22
- llmRequest.metadata.system_prompt = typeof si === 'string'
23
- ? si
24
- : JSON.stringify(si);
25
- }
14
+ async extractRequestOptions(workerRequest) {
15
+ return {
16
+ ...workerRequest.payload.config
17
+ };
26
18
  }
27
- mapProviderPayload(workerRequest, llmRequest) {
28
- const payload = workerRequest.payload;
29
- const config = payload.config;
30
- const options = {};
31
- if (config?.temperature !== undefined)
32
- options.temperature = config.temperature;
33
- if (config?.topP !== undefined)
34
- options.topP = config.topP;
35
- if (config?.topK !== undefined)
36
- options.topK = config.topK;
37
- if (config?.maxOutputTokens !== undefined)
38
- options.maxOutputTokens = config.maxOutputTokens;
39
- if (config?.stopSequences !== undefined)
40
- options.stopSequences = config.stopSequences;
41
- if (config?.responseMimeType !== undefined)
42
- options.responseMimeType = config.responseMimeType;
43
- if (Object.keys(options).length > 0) {
44
- llmRequest.metadata.options = options;
19
+ mapFinishReason(nativeResponse, _protocolName) {
20
+ if (!nativeResponse)
21
+ return 'stop';
22
+ const candidates = nativeResponse.candidates;
23
+ if (!candidates || candidates.length === 0)
24
+ return 'stop';
25
+ const finishReason = candidates[0].finishReason;
26
+ switch (finishReason) {
27
+ case 'STOP':
28
+ return 'stop';
29
+ case 'MAX_TOKENS':
30
+ return 'length';
31
+ case 'SAFETY':
32
+ case 'RECITATION':
33
+ return 'content_filter';
34
+ default:
35
+ return 'stop';
45
36
  }
46
37
  }
47
- async mapResponseMetrics(providerEvent, envelope) {
48
- const metrics = await super.mapResponseMetrics(providerEvent, envelope);
49
- if (providerEvent.type === 'error') {
50
- return metrics;
38
+ mapUsage(nativeResponse, protocolName) {
39
+ if (!nativeResponse)
40
+ return {};
41
+ if (protocolName === GeminiProtocols.EMBED_CONTENT)
42
+ return {};
43
+ const usage = nativeResponse.usageMetadata;
44
+ if (!usage)
45
+ return {};
46
+ return pickDefined({
47
+ input_tokens: usage.promptTokenCount,
48
+ output_tokens: usage.candidatesTokenCount,
49
+ total_tokens: usage.totalTokenCount,
50
+ });
51
+ }
52
+ async mapProviderResponseMetrics(providerEvent, protocolName) {
53
+ if (protocolName === GeminiProtocols.EMBED_CONTENT) {
54
+ return {
55
+ usage_raw: providerEvent.message.metadata
56
+ };
51
57
  }
52
- const { usageMetadata } = providerEvent.message;
53
- if (!usageMetadata)
54
- return metrics;
58
+ const message = providerEvent.message;
59
+ const usage = message.usageMetadata;
55
60
  return pickDefined({
56
- ...metrics,
57
- usage_raw: usageMetadata,
58
- input_tokens: usageMetadata.promptTokenCount,
59
- output_tokens: usageMetadata.candidatesTokenCount
61
+ input_tokens: usage?.promptTokenCount,
62
+ output_tokens: usage?.candidatesTokenCount,
63
+ total_tokens: usage?.totalTokenCount,
64
+ usage_raw: usage
60
65
  });
61
66
  }
62
67
  async mapResponseStatus(providerEvent, envelope) {
@@ -65,50 +70,28 @@ let GeminiAuditor = class GeminiAuditor extends BaseAuditor {
65
70
  if (candidates && candidates.length > 0) {
66
71
  const finishReason = candidates[0].finishReason;
67
72
  if (finishReason === 'MAX_TOKENS')
68
- return LlmStatus.PARTIAL;
73
+ return ProviderResponseStatus.PARTIAL;
69
74
  }
70
75
  }
71
76
  return super.mapResponseStatus(providerEvent, envelope);
72
77
  }
73
- async createProviderEnvelope(payload) {
74
- const logger = this.mlog(this.createProviderEnvelope);
75
- if (!payload.model) {
76
- logger.error(`Missing model: ${JSON.stringify(payload)}`);
77
- }
78
- const systemInstruction = payload.config?.systemInstruction;
79
- return pickDefined({
80
- access_model: payload.model,
81
- system_prompt: systemInstruction
82
- ? (typeof systemInstruction === 'string' ? systemInstruction : JSON.stringify(systemInstruction))
83
- : undefined
84
- });
78
+ async extractFinishReason(providerEvent, _envelope) {
79
+ if (providerEvent.type === 'error')
80
+ return FinishReason.ERROR;
81
+ if (providerEvent.type !== 'done')
82
+ return undefined;
83
+ return this.mapFinishReason(providerEvent.message);
85
84
  }
86
- extractExtraTokens(metrics, base) {
87
- const usage = metrics.usage_raw;
88
- if (!usage)
89
- return base;
85
+ async createProviderEnvelope(workerRequest) {
86
+ const payload = workerRequest.payload;
87
+ const last_user_prompt = extractPromptByRole(payload.contents, "user", "last", (msg) => extractTextContent(msg.parts));
88
+ const system_prompt = workerRequest.systemPrompt?.system_prompt ?? extractTopLevelPrompt(payload.config?.systemInstruction);
90
89
  return pickDefined({
91
- ...base,
92
- thinking: usage.thoughtsTokenCount,
93
- cache_read: usage.cachedContentTokenCount,
90
+ access_model: payload.model,
91
+ last_user_prompt,
92
+ system_prompt,
94
93
  });
95
94
  }
96
- extractUserPromptFromContents(contents) {
97
- if (!contents || !Array.isArray(contents))
98
- return undefined;
99
- const userMessages = contents.filter(msg => msg.role === 'user');
100
- if (userMessages.length === 0)
101
- return undefined;
102
- const lastUserMessage = userMessages[userMessages.length - 1];
103
- if (typeof lastUserMessage.parts === 'string') {
104
- return lastUserMessage.parts;
105
- }
106
- else if (Array.isArray(lastUserMessage.parts)) {
107
- const textParts = lastUserMessage.parts.filter((part) => part.text !== undefined);
108
- return textParts.length > 0 ? textParts[0].text : undefined;
109
- }
110
- return undefined;
111
- }
112
95
  };
113
96
  GeminiAuditor = __decorate([
114
97
  injectable()
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.auditor.js","sourceRoot":"","sources":["../src/gemini.auditor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.auditor.js","sourceRoot":"","sources":["../src/gemini.auditor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { PricingDataset } from '@holokai/types/plugin';
1
+ import type { PricingDataset } from '@holokai/holo-types/plugin';
2
2
  export declare const GEMINI_PRICING_DATASET: PricingDataset;
3
3
  //# sourceMappingURL=gemini.pricing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.pricing.d.ts","sourceRoot":"","sources":["../src/gemini.pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAI1D,eAAO,MAAM,sBAAsB,EAAE,cAqQpC,CAAC"}
1
+ {"version":3,"file":"gemini.pricing.d.ts","sourceRoot":"","sources":["../src/gemini.pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAI/D,eAAO,MAAM,sBAAsB,EAAE,cAqQpC,CAAC"}
@@ -1,18 +1,20 @@
1
- import { BaseProvider } from '@holokai/sdk/provider';
2
- import type { IAuditor, IProviderTranslator, IResponseFactory, ProviderContext } from '@holokai/types/provider';
3
- import { GoogleGenAI } from '@google/genai';
1
+ import { BaseProvider } from '@holokai/holo-sdk/provider';
2
+ import type { DiscoveredModel, IAuditor, IProviderTranslator, IResponseFactory, ProviderContext } from '@holokai/holo-types/provider';
3
+ import { EmbedContentParameters, GenerateContentParameters, GoogleGenAI } from '@google/genai';
4
4
  import { GeminiErrorResponse } from './gemini.response.factory.js';
5
5
  export declare class GeminiProvider extends BaseProvider<GoogleGenAI, any> {
6
6
  getModels(allowedModels: string[] | true): Promise<any>;
7
- getModelNameFromRequest(payload: any): Promise<string>;
7
+ discoverModels(): Promise<DiscoveredModel[]>;
8
+ getModelNameFromRequest(payload: EmbedContentParameters | GenerateContentParameters): Promise<string>;
8
9
  protected createAuditor(): IAuditor;
9
10
  protected createClient(): GoogleGenAI;
10
11
  protected createTranslator(): IProviderTranslator;
11
12
  protected createResponseFactory(): IResponseFactory;
12
- protected handleRequest(payload: any, ctx: ProviderContext): Promise<{
13
- final: () => Promise<any>;
13
+ protected createRequestRunner(payload: EmbedContentParameters | GenerateContentParameters, ctx: ProviderContext): Promise<{
14
+ start: () => Promise<any>;
14
15
  }>;
15
16
  protected handleError(error: any): Promise<GeminiErrorResponse>;
17
+ private parseGeminiError;
16
18
  private mapHttpStatusToGeminiStatus;
17
19
  }
18
20
  //# sourceMappingURL=gemini.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.provider.d.ts","sourceRoot":"","sources":["../src/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAC,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,mBAAmB,EAA2C,MAAM,8BAA8B,CAAC;AAG3G,qBAAa,cAAe,SAAQ,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAExD,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAevD,uBAAuB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,SAAS,CAAC,aAAa,IAAI,QAAQ;IAInC,SAAS,CAAC,YAAY,IAAI,WAAW;IAIrC,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD,SAAS,CAAC,qBAAqB,IAAI,gBAAgB;cAInC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe;;;cAsDhD,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAarE,OAAO,CAAC,2BAA2B;CAkBtC"}
1
+ {"version":3,"file":"gemini.provider.d.ts","sourceRoot":"","sources":["../src/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAC,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACpI,OAAO,EAAC,sBAAsB,EAAE,yBAAyB,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAG7F,OAAO,EAAC,mBAAmB,EAA2C,MAAM,8BAA8B,CAAC;AAG3G,qBAAa,cAAe,SAAQ,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAExD,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAevD,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAyB5C,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3G,SAAS,CAAC,aAAa,IAAI,QAAQ;IAInC,SAAS,CAAC,YAAY,IAAI,WAAW;IAIrC,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD,SAAS,CAAC,qBAAqB,IAAI,gBAAgB;cAInC,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,yBAAyB,EAAE,GAAG,EAAE,eAAe;;;cAoDrG,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKrE,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,2BAA2B;CAkBtC"}
@@ -1,4 +1,4 @@
1
- import { BaseProvider } from '@holokai/sdk/provider';
1
+ import { BaseProvider } from '@holokai/holo-sdk/provider';
2
2
  import { GoogleGenAI } from '@google/genai';
3
3
  import { GeminiAuditor } from './gemini.auditor.js';
4
4
  import { GeminiTranslator } from './gemini.translator.js';
@@ -15,6 +15,29 @@ export class GeminiProvider extends BaseProvider {
15
15
  }
16
16
  return response.filter(model => allowedModels.includes(model.name?.replace('models/', '') ?? ''));
17
17
  }
18
+ async discoverModels() {
19
+ const url = `https://generativelanguage.googleapis.com/v1beta/models?key=${this._config.apiKey}`;
20
+ const res = await fetch(url);
21
+ const data = await res.json();
22
+ const models = data.models ?? [];
23
+ return models.map(m => {
24
+ const modelId = m.name ?? '';
25
+ const shortName = modelId.replace(/^models\//, '');
26
+ const displayName = m.displayName ?? shortName;
27
+ return {
28
+ name: displayName,
29
+ accessModel: modelId,
30
+ description: displayName !== modelId
31
+ ? `${displayName} (Model ID: ${modelId})`
32
+ : `AI Model: ${modelId}`,
33
+ version: shortName.match(/-(\d+\.\d+(?:\.\d+)?)/)?.[1]
34
+ ?? shortName.match(/-(\d{4})/)?.[1]
35
+ ?? '1.0',
36
+ contextLength: m.inputTokenLimit ?? undefined,
37
+ metadata: m,
38
+ };
39
+ });
40
+ }
18
41
  async getModelNameFromRequest(payload) {
19
42
  return payload.model;
20
43
  }
@@ -30,55 +53,55 @@ export class GeminiProvider extends BaseProvider {
30
53
  createResponseFactory() {
31
54
  return GeminiResponseFactory.instance();
32
55
  }
33
- async handleRequest(payload, ctx) {
56
+ async createRequestRunner(payload, ctx) {
34
57
  switch (ctx.protocol.name) {
35
58
  case GeminiProtocols.EMBED_CONTENT: {
36
59
  return {
37
- final: () => this.client.models.embedContent({
38
- model: payload.model,
39
- contents: payload.contents
40
- })
60
+ start: () => this.client.models.embedContent(payload),
41
61
  };
42
62
  }
43
63
  case GeminiProtocols.STREAM_GENERATE_CONTENT:
44
64
  default: {
45
- const { model, contents, config } = payload;
46
- const isStreaming = ctx.query?.alt === 'sse' || payload.stream === true;
65
+ const isStreaming = ctx.query?.alt === 'sse';
47
66
  if (isStreaming) {
48
67
  return {
49
- final: async () => {
50
- const stream = await this.client.models.generateContentStream({
51
- model,
52
- contents,
53
- config
54
- });
68
+ start: async () => {
69
+ const stream = await this.client.models.generateContentStream(payload);
55
70
  let finalResponse;
56
71
  for await (const chunk of stream) {
57
- if (chunk.candidates?.[0]?.finishReason) {
58
- finalResponse = chunk;
59
- break;
60
- }
61
72
  ctx.emitStreamEvent(chunk);
62
73
  const text = chunk.candidates?.[0]?.content?.parts?.[0]?.text;
63
74
  if (text) {
64
75
  ctx.emitTextDelta(text);
65
76
  }
77
+ if (chunk.candidates?.[0]?.finishReason) {
78
+ finalResponse = chunk;
79
+ break;
80
+ }
66
81
  }
67
82
  return finalResponse;
68
83
  }
69
84
  };
70
85
  }
71
86
  return {
72
- final: () => this.client.models.generateContent({
73
- model,
74
- contents,
75
- config
76
- })
87
+ start: async () => {
88
+ const result = await this.client.models.generateContent(payload);
89
+ const text = result.candidates?.[0]?.content?.parts
90
+ ?.map((part) => part?.text)
91
+ .filter((text) => !!text)
92
+ .join("\n");
93
+ ctx.emitTextDelta(text);
94
+ return result;
95
+ },
77
96
  };
78
97
  }
79
98
  }
80
99
  }
81
100
  async handleError(error) {
101
+ return this.parseGeminiError(error)
102
+ ?? this.responseFactory.createError(error.message, 'api_error');
103
+ }
104
+ parseGeminiError(error) {
82
105
  if (error.status && error.statusText) {
83
106
  return {
84
107
  error: {
@@ -88,7 +111,24 @@ export class GeminiProvider extends BaseProvider {
88
111
  }
89
112
  };
90
113
  }
91
- return this.responseFactory.createError(error.message, 'api_error');
114
+ const match = error.message?.match(/^got status: (\d+)\s+[^.]*\.\s*(.*)/s);
115
+ if (match) {
116
+ const httpStatus = parseInt(match[1], 10);
117
+ let body;
118
+ try {
119
+ body = JSON.parse(match[2]);
120
+ }
121
+ catch { /* unparseable body */ }
122
+ const geminiError = body?.error;
123
+ return {
124
+ error: {
125
+ code: httpStatus,
126
+ message: geminiError?.message || error.message,
127
+ status: geminiError?.status || this.mapHttpStatusToGeminiStatus(httpStatus)
128
+ }
129
+ };
130
+ }
131
+ return undefined;
92
132
  }
93
133
  mapHttpStatusToGeminiStatus(status) {
94
134
  switch (status) {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../src/gemini.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../src/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAoD,WAAW,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAyC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,cAAe,SAAQ,YAA8B;IAE9D,KAAK,CAAC,SAAS,CAAC,aAA8B;QAC1C,MAAM,GAAG,GAAG,+DAA+D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACjG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAwB,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAEnC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3B,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CACnE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,MAAM,GAAG,GAAG,+DAA+D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACjG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAwB,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAClB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC;YAC/C,OAAO;gBACH,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,OAAO;gBACpB,WAAW,EAAE,WAAW,KAAK,OAAO;oBAChC,CAAC,CAAC,GAAG,WAAW,eAAe,OAAO,GAAG;oBACzC,CAAC,CAAC,aAAa,OAAO,EAAE;gBAC5B,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;uBAC/C,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;uBAChC,KAAK;gBACZ,aAAa,EAAE,CAAC,CAAC,eAAe,IAAI,SAAS;gBAC7C,QAAQ,EAAE,CAAC;aACd,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAA2D;QACrF,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IAES,aAAa;QACnB,OAAO,IAAI,aAAa,EAAE,CAAC;IAC/B,CAAC;IAES,YAAY;QAClB,OAAO,IAAI,WAAW,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC;IAC1D,CAAC;IAES,gBAAgB;QACtB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAES,qBAAqB;QAC3B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAES,KAAK,CAAC,mBAAmB,CAAC,OAA2D,EAAE,GAAoB;QACjH,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,OAAO;oBACH,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAiC,CAAC;iBAClF,CAAC;YACN,CAAC;YACD,KAAK,eAAe,CAAC,uBAAuB,CAAC;YAC7C,OAAO,CAAC,CAAC,CAAC;gBACN,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,CAAC;gBAE7C,IAAI,WAAW,EAAE,CAAC;oBACd,OAAO;wBACH,KAAK,EAAE,KAAK,IAAI,EAAE;4BACd,MAAM,MAAM,GACR,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAoC,CAAC,CAAC;4BAEzF,IAAI,aAAkB,CAAC;4BACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gCAC/B,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gCAE3B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gCAC9D,IAAI,IAAI,EAAE,CAAC;oCACP,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gCAC5B,CAAC;gCAED,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;oCACtC,aAAa,GAAG,KAAK,CAAC;oCACtB,MAAM;gCACV,CAAC;4BACL,CAAC;4BACD,OAAO,aAAa,CAAC;wBACzB,CAAC;qBACJ,CAAC;gBACN,CAAC;gBAED,OAAO;oBACH,KAAK,EAAE,KAAK,IAAI,EAAE;wBACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,OAAoC,CAAC,CAAA;wBAC7F,MAAM,IAAI,GACN,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK;4BAClC,EAAE,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;6BAC/B,MAAM,CAAC,CAAC,IAAwB,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;6BAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;wBACpB,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;wBACxB,OAAO,MAAM,CAAC;oBAClB,CAAC;iBACJ,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,KAAU;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;eAC5B,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAEO,gBAAgB,CAAC,KAAU;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,OAAO;gBACH,KAAK,EAAE;oBACH,IAAI,EAAE,KAAK,CAAC,MAAM;oBAClB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU;oBAC1C,MAAM,EAAE,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC;iBACzD;aACJ,CAAC;QACN,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3E,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,IAAS,CAAC;YACd,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,EAAE,KAAK,CAAC;YAChC,OAAO;gBACH,KAAK,EAAE;oBACH,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;oBAC9C,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;iBAC9E;aACJ,CAAC;QACN,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,2BAA2B,CAAC,MAAc;QAC9C,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,GAAG;gBACJ,OAAO,kBAAkB,CAAC;YAC9B,KAAK,GAAG;gBACJ,OAAO,iBAAiB,CAAC;YAC7B,KAAK,GAAG;gBACJ,OAAO,mBAAmB,CAAC;YAC/B,KAAK,GAAG;gBACJ,OAAO,WAAW,CAAC;YACvB,KAAK,GAAG;gBACJ,OAAO,oBAAoB,CAAC;YAChC,KAAK,GAAG;gBACJ,OAAO,aAAa,CAAC;YACzB;gBACI,OAAO,UAAU,CAAC;QAC1B,CAAC;IACL,CAAC;CACJ"}
@@ -1,5 +1,5 @@
1
- import type { IResponseFactory } from '@holokai/types/provider';
2
- import type { HoloErrorCode } from '@holokai/types/holo';
1
+ import type { IResponseFactory } from '@holokai/holo-types/provider';
2
+ import type { HoloErrorCode } from '@holokai/holo-types/holo';
3
3
  export type GeminiErrorStatus = 'INVALID_ARGUMENT' | 'NOT_FOUND' | 'PERMISSION_DENIED' | 'RESOURCE_EXHAUSTED' | 'UNAUTHENTICATED' | 'INTERNAL' | 'UNAVAILABLE';
4
4
  export interface GeminiErrorResponse {
5
5
  error: {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.response.factory.d.ts","sourceRoot":"","sources":["../src/gemini.response.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAChB,WAAW,GACX,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,UAAU,GACV,aAAa,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,iBAAiB,CAAC;KAC7B,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE;QACL,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO;IAgBzD,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkB5F,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAYxE,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAc3D,MAAM,CAAC,mBAAmB,IAAI,mBAAmB;IAQjD,MAAM,CAAC,QAAQ,IAAI,qBAAqB;IAIxC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB;IAOnD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,mBAAmB;IAWtE,OAAO,CAAC,gBAAgB;CAkB3B"}
1
+ {"version":3,"file":"gemini.response.factory.d.ts","sourceRoot":"","sources":["../src/gemini.response.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAChB,WAAW,GACX,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,UAAU,GACV,aAAa,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,iBAAiB,CAAC;KAC7B,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE;QACL,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO;IAgBzD,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkB5F,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAYxE,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAc3D,MAAM,CAAC,mBAAmB,IAAI,mBAAmB;IAQjD,MAAM,CAAC,QAAQ,IAAI,qBAAqB;IAIxC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB;IASnD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,mBAAmB;IAWtE,OAAO,CAAC,gBAAgB;CAkB3B"}