@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.
- package/README.md +151 -0
- package/dist/gemini.auditor.d.ts +13 -20
- package/dist/gemini.auditor.d.ts.map +1 -1
- package/dist/gemini.auditor.js +64 -81
- package/dist/gemini.auditor.js.map +1 -1
- package/dist/gemini.pricing.d.ts +1 -1
- package/dist/gemini.pricing.d.ts.map +1 -1
- package/dist/gemini.provider.d.ts +8 -6
- package/dist/gemini.provider.d.ts.map +1 -1
- package/dist/gemini.provider.js +64 -24
- package/dist/gemini.provider.js.map +1 -1
- package/dist/gemini.response.factory.d.ts +2 -2
- package/dist/gemini.response.factory.d.ts.map +1 -1
- package/dist/gemini.response.factory.js +3 -1
- package/dist/gemini.response.factory.js.map +1 -1
- package/dist/gemini.translator.d.ts +9 -3
- package/dist/gemini.translator.d.ts.map +1 -1
- package/dist/gemini.translator.js +18 -1
- package/dist/gemini.translator.js.map +1 -1
- package/dist/gemini.wire.adapter.d.ts +1 -1
- package/dist/gemini.wire.adapter.d.ts.map +1 -1
- package/dist/gemini.wire.adapter.js +1 -1
- package/dist/gemini.wire.adapter.js.map +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/plugin.d.ts +10 -7
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +20 -5
- package/dist/plugin.js.map +1 -1
- package/dist/translators/gemini.content.translator.d.ts +2 -2
- package/dist/translators/gemini.content.translator.d.ts.map +1 -1
- package/dist/translators/gemini.content.translator.js +1 -1
- package/dist/translators/gemini.content.translator.js.map +1 -1
- package/dist/translators/gemini.message.translator.d.ts +2 -2
- package/dist/translators/gemini.message.translator.d.ts.map +1 -1
- package/dist/translators/gemini.message.translator.js +1 -1
- package/dist/translators/gemini.message.translator.js.map +1 -1
- package/dist/translators/gemini.request.translator.d.ts +2 -2
- package/dist/translators/gemini.request.translator.d.ts.map +1 -1
- package/dist/translators/gemini.request.translator.js +2 -2
- package/dist/translators/gemini.request.translator.js.map +1 -1
- package/dist/translators/gemini.response.content.translator.d.ts +2 -2
- package/dist/translators/gemini.response.content.translator.d.ts.map +1 -1
- package/dist/translators/gemini.response.content.translator.js +1 -1
- package/dist/translators/gemini.response.content.translator.js.map +1 -1
- package/dist/translators/gemini.response.message.translator.d.ts +2 -2
- package/dist/translators/gemini.response.message.translator.d.ts.map +1 -1
- package/dist/translators/gemini.response.message.translator.js +2 -2
- package/dist/translators/gemini.response.message.translator.js.map +1 -1
- package/dist/translators/gemini.response.translator.d.ts +2 -2
- package/dist/translators/gemini.response.translator.d.ts.map +1 -1
- package/dist/translators/gemini.response.translator.js +2 -2
- package/dist/translators/gemini.response.translator.js.map +1 -1
- package/dist/translators/gemini.tool.translator.d.ts +2 -2
- package/dist/translators/gemini.tool.translator.d.ts.map +1 -1
- package/dist/translators/gemini.tool.translator.js +2 -2
- package/dist/translators/gemini.tool.translator.js.map +1 -1
- package/dist/translators/gemini.usage.translator.d.ts +2 -2
- package/dist/translators/gemini.usage.translator.d.ts.map +1 -1
- package/dist/translators/gemini.usage.translator.js +2 -2
- package/dist/translators/gemini.usage.translator.js.map +1 -1
- package/dist/translators/streaming/gemini.content.delta.translator.d.ts +2 -2
- package/dist/translators/streaming/gemini.content.delta.translator.d.ts.map +1 -1
- package/dist/translators/streaming/gemini.content.delta.translator.js +1 -1
- package/dist/translators/streaming/gemini.content.delta.translator.js.map +1 -1
- package/dist/translators/streaming/gemini.message.delta.translator.d.ts +2 -2
- package/dist/translators/streaming/gemini.message.delta.translator.d.ts.map +1 -1
- package/dist/translators/streaming/gemini.message.delta.translator.js +2 -2
- package/dist/translators/streaming/gemini.message.delta.translator.js.map +1 -1
- package/dist/translators/streaming/gemini.message.start.translator.d.ts +2 -2
- package/dist/translators/streaming/gemini.message.start.translator.d.ts.map +1 -1
- package/dist/translators/streaming/gemini.message.start.translator.js +1 -1
- package/dist/translators/streaming/gemini.message.start.translator.js.map +1 -1
- package/dist/translators/streaming/gemini.message.stop.translator.d.ts +2 -2
- package/dist/translators/streaming/gemini.message.stop.translator.d.ts.map +1 -1
- package/dist/translators/streaming/gemini.message.stop.translator.js +1 -1
- package/dist/translators/streaming/gemini.message.stop.translator.js.map +1 -1
- package/dist/translators/streaming/gemini.stream.translator.d.ts +2 -2
- package/dist/translators/streaming/gemini.stream.translator.d.ts.map +1 -1
- package/dist/translators/streaming/gemini.stream.translator.js +1 -1
- package/dist/translators/streaming/gemini.stream.translator.js.map +1 -1
- package/dist/utils/finish.reason.mapper.d.ts +1 -1
- package/dist/utils/finish.reason.mapper.d.ts.map +1 -1
- 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
|
package/dist/gemini.auditor.d.ts
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
import { BaseAuditor } from "@holokai/sdk/provider";
|
|
2
|
-
import type {
|
|
3
|
-
import type { HoloWorkerRequest, WorkerResponseEnvelope } from "@holokai/types/worker";
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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,
|
|
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"}
|
package/dist/gemini.auditor.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
53
|
-
|
|
54
|
-
return metrics;
|
|
58
|
+
const message = providerEvent.message;
|
|
59
|
+
const usage = message.usageMetadata;
|
|
55
60
|
return pickDefined({
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
73
|
+
return ProviderResponseStatus.PARTIAL;
|
|
69
74
|
}
|
|
70
75
|
}
|
|
71
76
|
return super.mapResponseStatus(providerEvent, envelope);
|
|
72
77
|
}
|
|
73
|
-
async
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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":";;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"gemini.auditor.js","sourceRoot":"","sources":["../src/gemini.auditor.ts"],"names":[],"mappings":"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"}
|
package/dist/gemini.pricing.d.ts
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
13
|
-
|
|
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,
|
|
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"}
|
package/dist/gemini.provider.js
CHANGED
|
@@ -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
|
|
56
|
+
async createRequestRunner(payload, ctx) {
|
|
34
57
|
switch (ctx.protocol.name) {
|
|
35
58
|
case GeminiProtocols.EMBED_CONTENT: {
|
|
36
59
|
return {
|
|
37
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../src/gemini.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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"}
|