@holokai/holo-provider-gemini 1.2.2
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/dist/gemini.auditor.d.ts +24 -0
- package/dist/gemini.auditor.d.ts.map +1 -0
- package/dist/gemini.auditor.js +117 -0
- package/dist/gemini.auditor.js.map +1 -0
- package/dist/gemini.pricing.d.ts +3 -0
- package/dist/gemini.pricing.d.ts.map +1 -0
- package/dist/gemini.pricing.js +251 -0
- package/dist/gemini.pricing.js.map +1 -0
- package/dist/gemini.provider.d.ts +18 -0
- package/dist/gemini.provider.d.ts.map +1 -0
- package/dist/gemini.provider.js +112 -0
- package/dist/gemini.provider.js.map +1 -0
- package/dist/gemini.response.factory.d.ts +42 -0
- package/dist/gemini.response.factory.d.ts.map +1 -0
- package/dist/gemini.response.factory.js +94 -0
- package/dist/gemini.response.factory.js.map +1 -0
- package/dist/gemini.translator.d.ts +28 -0
- package/dist/gemini.translator.d.ts.map +1 -0
- package/dist/gemini.translator.js +74 -0
- package/dist/gemini.translator.js.map +1 -0
- package/dist/gemini.wire.adapter.d.ts +5 -0
- package/dist/gemini.wire.adapter.d.ts.map +1 -0
- package/dist/gemini.wire.adapter.js +7 -0
- package/dist/gemini.wire.adapter.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +13 -0
- package/dist/manifest.js.map +1 -0
- package/dist/plugin.d.ts +46 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +104 -0
- package/dist/plugin.js.map +1 -0
- package/dist/translators/gemini.content.translator.d.ts +12 -0
- package/dist/translators/gemini.content.translator.d.ts.map +1 -0
- package/dist/translators/gemini.content.translator.js +67 -0
- package/dist/translators/gemini.content.translator.js.map +1 -0
- package/dist/translators/gemini.message.translator.d.ts +14 -0
- package/dist/translators/gemini.message.translator.d.ts.map +1 -0
- package/dist/translators/gemini.message.translator.js +115 -0
- package/dist/translators/gemini.message.translator.js.map +1 -0
- package/dist/translators/gemini.request.translator.d.ts +24 -0
- package/dist/translators/gemini.request.translator.d.ts.map +1 -0
- package/dist/translators/gemini.request.translator.js +112 -0
- package/dist/translators/gemini.request.translator.js.map +1 -0
- package/dist/translators/gemini.response.content.translator.d.ts +12 -0
- package/dist/translators/gemini.response.content.translator.d.ts.map +1 -0
- package/dist/translators/gemini.response.content.translator.js +40 -0
- package/dist/translators/gemini.response.content.translator.js.map +1 -0
- package/dist/translators/gemini.response.message.translator.d.ts +14 -0
- package/dist/translators/gemini.response.message.translator.d.ts.map +1 -0
- package/dist/translators/gemini.response.message.translator.js +90 -0
- package/dist/translators/gemini.response.message.translator.js.map +1 -0
- package/dist/translators/gemini.response.translator.d.ts +16 -0
- package/dist/translators/gemini.response.translator.d.ts.map +1 -0
- package/dist/translators/gemini.response.translator.js +70 -0
- package/dist/translators/gemini.response.translator.js.map +1 -0
- package/dist/translators/gemini.tool.translator.d.ts +19 -0
- package/dist/translators/gemini.tool.translator.d.ts.map +1 -0
- package/dist/translators/gemini.tool.translator.js +84 -0
- package/dist/translators/gemini.tool.translator.js.map +1 -0
- package/dist/translators/gemini.usage.translator.d.ts +12 -0
- package/dist/translators/gemini.usage.translator.d.ts.map +1 -0
- package/dist/translators/gemini.usage.translator.js +45 -0
- package/dist/translators/gemini.usage.translator.js.map +1 -0
- package/dist/translators/index.d.ts +10 -0
- package/dist/translators/index.d.ts.map +1 -0
- package/dist/translators/index.js +10 -0
- package/dist/translators/index.js.map +1 -0
- package/dist/translators/streaming/gemini.content.delta.translator.d.ts +12 -0
- package/dist/translators/streaming/gemini.content.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/gemini.content.delta.translator.js +85 -0
- package/dist/translators/streaming/gemini.content.delta.translator.js.map +1 -0
- package/dist/translators/streaming/gemini.message.delta.translator.d.ts +14 -0
- package/dist/translators/streaming/gemini.message.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/gemini.message.delta.translator.js +73 -0
- package/dist/translators/streaming/gemini.message.delta.translator.js.map +1 -0
- package/dist/translators/streaming/gemini.message.start.translator.d.ts +14 -0
- package/dist/translators/streaming/gemini.message.start.translator.d.ts.map +1 -0
- package/dist/translators/streaming/gemini.message.start.translator.js +62 -0
- package/dist/translators/streaming/gemini.message.start.translator.js.map +1 -0
- package/dist/translators/streaming/gemini.message.stop.translator.d.ts +12 -0
- package/dist/translators/streaming/gemini.message.stop.translator.d.ts.map +1 -0
- package/dist/translators/streaming/gemini.message.stop.translator.js +57 -0
- package/dist/translators/streaming/gemini.message.stop.translator.js.map +1 -0
- package/dist/translators/streaming/gemini.stream.translator.d.ts +22 -0
- package/dist/translators/streaming/gemini.stream.translator.d.ts.map +1 -0
- package/dist/translators/streaming/gemini.stream.translator.js +90 -0
- package/dist/translators/streaming/gemini.stream.translator.js.map +1 -0
- package/dist/translators/streaming/index.d.ts +6 -0
- package/dist/translators/streaming/index.d.ts.map +1 -0
- package/dist/translators/streaming/index.js +6 -0
- package/dist/translators/streaming/index.js.map +1 -0
- package/dist/utils/finish.reason.mapper.d.ts +4 -0
- package/dist/utils/finish.reason.mapper.d.ts.map +1 -0
- package/dist/utils/finish.reason.mapper.js +25 -0
- package/dist/utils/finish.reason.mapper.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { pickDefined } from '@holokai/sdk';
|
|
2
|
+
export class GeminiResponseFactory {
|
|
3
|
+
static streamResponseMessage(text = '') {
|
|
4
|
+
const messages = [];
|
|
5
|
+
if (Array.isArray(text)) {
|
|
6
|
+
text.forEach(t => {
|
|
7
|
+
messages.push(this.createStreamChunk(t));
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
messages.push(this.createStreamChunk(text));
|
|
12
|
+
}
|
|
13
|
+
messages.push(this.createFinalChunk());
|
|
14
|
+
return messages;
|
|
15
|
+
}
|
|
16
|
+
static createResponseMessage(text = '') {
|
|
17
|
+
const parts = Array.isArray(text)
|
|
18
|
+
? text.map(t => ({ text: t }))
|
|
19
|
+
: [{ text }];
|
|
20
|
+
return pickDefined({
|
|
21
|
+
candidates: [{
|
|
22
|
+
content: {
|
|
23
|
+
parts,
|
|
24
|
+
role: 'model'
|
|
25
|
+
},
|
|
26
|
+
finishReason: 'STOP',
|
|
27
|
+
index: 0
|
|
28
|
+
}],
|
|
29
|
+
usageMetadata: this.createUsageMetadata()
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static createStreamChunk(text) {
|
|
33
|
+
return pickDefined({
|
|
34
|
+
candidates: [{
|
|
35
|
+
content: {
|
|
36
|
+
parts: [{ text }],
|
|
37
|
+
role: 'model'
|
|
38
|
+
},
|
|
39
|
+
index: 0
|
|
40
|
+
}]
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
static createFinalChunk() {
|
|
44
|
+
return pickDefined({
|
|
45
|
+
candidates: [{
|
|
46
|
+
content: {
|
|
47
|
+
parts: [{ text: '' }],
|
|
48
|
+
role: 'model'
|
|
49
|
+
},
|
|
50
|
+
finishReason: 'STOP',
|
|
51
|
+
index: 0
|
|
52
|
+
}],
|
|
53
|
+
usageMetadata: this.createUsageMetadata()
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
static createUsageMetadata() {
|
|
57
|
+
return {
|
|
58
|
+
promptTokenCount: 0,
|
|
59
|
+
candidatesTokenCount: 0,
|
|
60
|
+
totalTokenCount: 0
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
static instance() {
|
|
64
|
+
return new GeminiResponseFactory();
|
|
65
|
+
}
|
|
66
|
+
mapHoloCode(code) {
|
|
67
|
+
switch (code) {
|
|
68
|
+
case 'guard_failure':
|
|
69
|
+
return 'INVALID_ARGUMENT';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
createError(message, code) {
|
|
73
|
+
const status = this.mapHoloCode(code);
|
|
74
|
+
return {
|
|
75
|
+
error: {
|
|
76
|
+
code: this.statusToHttpCode(status),
|
|
77
|
+
message,
|
|
78
|
+
status
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
statusToHttpCode(status) {
|
|
83
|
+
switch (status) {
|
|
84
|
+
case 'INVALID_ARGUMENT': return 400;
|
|
85
|
+
case 'UNAUTHENTICATED': return 401;
|
|
86
|
+
case 'PERMISSION_DENIED': return 403;
|
|
87
|
+
case 'NOT_FOUND': return 404;
|
|
88
|
+
case 'RESOURCE_EXHAUSTED': return 429;
|
|
89
|
+
case 'INTERNAL': return 500;
|
|
90
|
+
case 'UNAVAILABLE': return 503;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=gemini.response.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.response.factory.js","sourceRoot":"","sources":["../src/gemini.response.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { GeminiMessageTranslator, GeminiRequestTranslator, GeminiResponseTranslator, GeminiStreamTranslator } from "./translators";
|
|
3
|
+
import type { IProviderTranslator } from "@holokai/types/provider";
|
|
4
|
+
import { ClassLogger } from "@holokai/sdk";
|
|
5
|
+
import type { HoloMessage, HoloRequest, HoloResponse, HoloStreamChunk } from "@holokai/types/holo";
|
|
6
|
+
import type { Content, GenerateContentConfig, GenerateContentResponse } from "@google/genai";
|
|
7
|
+
interface GeminiRequest {
|
|
8
|
+
model: string;
|
|
9
|
+
contents: Content[];
|
|
10
|
+
config?: GenerateContentConfig;
|
|
11
|
+
}
|
|
12
|
+
export declare class GeminiTranslator extends ClassLogger implements IProviderTranslator {
|
|
13
|
+
private readonly requestTranslator;
|
|
14
|
+
private readonly messageTranslator;
|
|
15
|
+
private readonly responseTranslator;
|
|
16
|
+
private readonly streamTranslator;
|
|
17
|
+
constructor(requestTranslator: GeminiRequestTranslator, messageTranslator: GeminiMessageTranslator, responseTranslator: GeminiResponseTranslator, streamTranslator: GeminiStreamTranslator);
|
|
18
|
+
static instance(): IProviderTranslator;
|
|
19
|
+
fromHoloRequest(request: HoloRequest): Promise<Partial<GeminiRequest>>;
|
|
20
|
+
toHoloRequest(request: GeminiRequest): Promise<Partial<HoloRequest>>;
|
|
21
|
+
fromHoloMessages(messages: HoloMessage[]): Promise<Partial<Content>[]>;
|
|
22
|
+
toHoloMessages(messages: Content[]): Promise<Partial<HoloMessage>[]>;
|
|
23
|
+
fromHoloResponse(message: HoloResponse): Promise<Partial<GenerateContentResponse>>;
|
|
24
|
+
toHoloResponse(message: GenerateContentResponse): Promise<Partial<HoloResponse>>;
|
|
25
|
+
fromHoloStreamChunks(chunks: HoloStreamChunk[]): Promise<unknown>;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=gemini.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.translator.d.ts","sourceRoot":"","sources":["../src/gemini.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAMH,uBAAuB,EACvB,uBAAuB,EAGvB,wBAAwB,EACxB,sBAAsB,EAIzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAE3F,UAAU,aAAa;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED,qBACa,gBAAiB,SAAQ,WAAY,YAAW,mBAAmB;IAExE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,iBAAiB,EAAE,uBAAuB,EAC1C,iBAAiB,EAAE,uBAAuB,EAC1C,kBAAkB,EAAE,wBAAwB,EAC5C,gBAAgB,EAAE,sBAAsB;IAK7D,MAAM,CAAC,QAAQ,IAAI,mBAAmB;IAgChC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAItE,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAIpE,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAItE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;IAIpE,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAIlF,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAIhF,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAG1E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var GeminiTranslator_1;
|
|
11
|
+
import 'reflect-metadata';
|
|
12
|
+
import { injectable } from "tsyringe";
|
|
13
|
+
import { GeminiContentTranslator, GeminiContentDeltaTranslator, GeminiMessageDeltaTranslator, GeminiMessageStartTranslator, GeminiMessageStopTranslator, GeminiMessageTranslator, GeminiRequestTranslator, GeminiResponseContentTranslator, GeminiResponseMessageTranslator, GeminiResponseTranslator, GeminiStreamTranslator, GeminiToolChoiceTranslator, GeminiToolTranslator, GeminiUsageTranslator } from "./translators";
|
|
14
|
+
import { ClassLogger } from "@holokai/sdk";
|
|
15
|
+
let GeminiTranslator = GeminiTranslator_1 = class GeminiTranslator extends ClassLogger {
|
|
16
|
+
requestTranslator;
|
|
17
|
+
messageTranslator;
|
|
18
|
+
responseTranslator;
|
|
19
|
+
streamTranslator;
|
|
20
|
+
constructor(requestTranslator, messageTranslator, responseTranslator, streamTranslator) {
|
|
21
|
+
super();
|
|
22
|
+
this.requestTranslator = requestTranslator;
|
|
23
|
+
this.messageTranslator = messageTranslator;
|
|
24
|
+
this.responseTranslator = responseTranslator;
|
|
25
|
+
this.streamTranslator = streamTranslator;
|
|
26
|
+
}
|
|
27
|
+
static instance() {
|
|
28
|
+
const contentTranslator = new GeminiContentTranslator();
|
|
29
|
+
const toolTranslator = new GeminiToolTranslator();
|
|
30
|
+
const toolChoiceTranslator = new GeminiToolChoiceTranslator();
|
|
31
|
+
const messageTranslator = new GeminiMessageTranslator(contentTranslator);
|
|
32
|
+
const requestTranslator = new GeminiRequestTranslator(messageTranslator, toolTranslator, toolChoiceTranslator);
|
|
33
|
+
const responseContentTranslator = new GeminiResponseContentTranslator();
|
|
34
|
+
const usageTranslator = new GeminiUsageTranslator();
|
|
35
|
+
const responseMessageTranslator = new GeminiResponseMessageTranslator(responseContentTranslator);
|
|
36
|
+
const responseTranslator = new GeminiResponseTranslator(responseMessageTranslator, usageTranslator);
|
|
37
|
+
const messageStartTranslator = new GeminiMessageStartTranslator(usageTranslator);
|
|
38
|
+
const messageDeltaTranslator = new GeminiMessageDeltaTranslator(usageTranslator);
|
|
39
|
+
const messageStopTranslator = new GeminiMessageStopTranslator();
|
|
40
|
+
const contentDeltaTranslator = new GeminiContentDeltaTranslator();
|
|
41
|
+
const streamTranslator = new GeminiStreamTranslator(messageStartTranslator, messageDeltaTranslator, messageStopTranslator, contentDeltaTranslator);
|
|
42
|
+
return new GeminiTranslator_1(requestTranslator, messageTranslator, responseTranslator, streamTranslator);
|
|
43
|
+
}
|
|
44
|
+
async fromHoloRequest(request) {
|
|
45
|
+
return this.requestTranslator.fromHolo(request);
|
|
46
|
+
}
|
|
47
|
+
async toHoloRequest(request) {
|
|
48
|
+
return this.requestTranslator.toHolo(request);
|
|
49
|
+
}
|
|
50
|
+
async fromHoloMessages(messages) {
|
|
51
|
+
return this.messageTranslator.fromHoloArray(messages);
|
|
52
|
+
}
|
|
53
|
+
async toHoloMessages(messages) {
|
|
54
|
+
return this.messageTranslator.toHoloArray(messages);
|
|
55
|
+
}
|
|
56
|
+
async fromHoloResponse(message) {
|
|
57
|
+
return this.responseTranslator.fromHolo(message);
|
|
58
|
+
}
|
|
59
|
+
async toHoloResponse(message) {
|
|
60
|
+
return this.responseTranslator.toHolo(message);
|
|
61
|
+
}
|
|
62
|
+
async fromHoloStreamChunks(chunks) {
|
|
63
|
+
return this.streamTranslator.fromHoloManyArray(chunks);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
GeminiTranslator = GeminiTranslator_1 = __decorate([
|
|
67
|
+
injectable(),
|
|
68
|
+
__metadata("design:paramtypes", [GeminiRequestTranslator,
|
|
69
|
+
GeminiMessageTranslator,
|
|
70
|
+
GeminiResponseTranslator,
|
|
71
|
+
GeminiStreamTranslator])
|
|
72
|
+
], GeminiTranslator);
|
|
73
|
+
export { GeminiTranslator };
|
|
74
|
+
//# sourceMappingURL=gemini.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.translator.js","sourceRoot":"","sources":["../src/gemini.translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.wire.adapter.d.ts","sourceRoot":"","sources":["../src/gemini.wire.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAEtD,qBAAa,iBAAkB,SAAQ,eAAe;IAClD,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;CAGhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.wire.adapter.js","sourceRoot":"","sources":["../src/gemini.wire.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAEtD,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAClD,UAAU,CAAC,IAAS;QAChB,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/C,CAAC;CACJ"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAC,CAAC;;AAE9B,wBAA0C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAC,CAAC;AAE9B,eAAe,IAAI,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAa,MAAM,uBAAuB,CAAC;AAMjE,eAAO,MAAM,QAAQ,EAAE,cAOtB,CAAC"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PluginType } from "@holokai/types/plugin";
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
const { version } = require('../package.json');
|
|
5
|
+
export const manifest = {
|
|
6
|
+
name: '@holokai/provider-gemini',
|
|
7
|
+
version,
|
|
8
|
+
pluginType: PluginType.PROVIDER,
|
|
9
|
+
family: 'gemini',
|
|
10
|
+
displayName: 'Gemini Provider',
|
|
11
|
+
description: 'Google Gemini provider plugin for Holo.',
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC;AAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAC,OAAO,EAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACpC,IAAI,EAAE,0BAA0B;IAChC,OAAO;IACP,UAAU,EAAE,UAAU,CAAC,QAAQ;IAC/B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,yCAAyC;CACzD,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BasePlugin } from '@holokai/sdk/plugin';
|
|
2
|
+
import type { IProviderPlugin, PluginContext, PluginPricingSheet } from '@holokai/types/plugin';
|
|
3
|
+
import type { PricingSheetModel } from '@holokai/types/entities';
|
|
4
|
+
import type { IProvider, IWireAdapter, ProviderCapabilities, WireAdapterParams } from "@holokai/types/provider";
|
|
5
|
+
import { RouteDefinition } from "@holokai/types/routing";
|
|
6
|
+
export declare const GeminiProtocols: {
|
|
7
|
+
readonly GENERATE_CONTENT: "gemini.generateContent";
|
|
8
|
+
readonly STREAM_GENERATE_CONTENT: "gemini.streamGenerateContent";
|
|
9
|
+
readonly EMBED_CONTENT: "gemini.embedContent";
|
|
10
|
+
readonly MODELS: "gemini.models";
|
|
11
|
+
};
|
|
12
|
+
export type GeminiProtocols = typeof GeminiProtocols[keyof typeof GeminiProtocols];
|
|
13
|
+
export declare class GeminiProviderPlugin extends BasePlugin implements IProviderPlugin {
|
|
14
|
+
manifest: import("@holokai/types/plugin").PluginManifest;
|
|
15
|
+
translator: import("@holokai/types/provider").IProviderTranslator;
|
|
16
|
+
defaultRouteHandler: "passthrough";
|
|
17
|
+
protocols: {
|
|
18
|
+
readonly GENERATE_CONTENT: "gemini.generateContent";
|
|
19
|
+
readonly STREAM_GENERATE_CONTENT: "gemini.streamGenerateContent";
|
|
20
|
+
readonly EMBED_CONTENT: "gemini.embedContent";
|
|
21
|
+
readonly MODELS: "gemini.models";
|
|
22
|
+
};
|
|
23
|
+
defaultProtocol: "gemini.generateContent";
|
|
24
|
+
createProvider(id: string, name: string, config: any): Promise<IProvider>;
|
|
25
|
+
createWireAdapter(params: WireAdapterParams): Promise<IWireAdapter>;
|
|
26
|
+
getCapabilities(): ProviderCapabilities;
|
|
27
|
+
getRoutes(): RouteDefinition[];
|
|
28
|
+
getPricingSheets(): Map<string, PluginPricingSheet>;
|
|
29
|
+
getDefaultPricing(): PluginPricingSheet;
|
|
30
|
+
protected calculateExtraCosts(tokens: Record<string, number>, pricing: PricingSheetModel): {
|
|
31
|
+
total: number;
|
|
32
|
+
detail: {
|
|
33
|
+
thinking: {
|
|
34
|
+
tokens: number;
|
|
35
|
+
cost: number;
|
|
36
|
+
};
|
|
37
|
+
cache_read: {
|
|
38
|
+
tokens: number;
|
|
39
|
+
cost: number;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
protected onInitialize(_context: PluginContext): Promise<void>;
|
|
44
|
+
protected onDestroy(): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA0B,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAC,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAC,eAAe,EAAe,MAAM,wBAAwB,CAAC;AAOrE,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEnF,qBAAa,oBAAqB,SAAQ,UAAW,YAAW,eAAe;IAC3E,QAAQ,iDAAY;IACpB,UAAU,wDAA+B;IACzC,mBAAmB,gBAA4B;IAC/C,SAAS;;;;;MAAmB;IAC5B,eAAe,2BAAoC;IAE7C,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IASzE,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzE,eAAe,IAAI,oBAAoB;IAUvC,SAAS,IAAI,eAAe,EAAE;IAyC9B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAInD,iBAAiB,IAAI,kBAAkB;IAQvC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB;;;;;;;;;;;;;IAcxF,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { BasePlugin, normalizePricingDataset } from '@holokai/sdk/plugin';
|
|
2
|
+
import { manifest } from "./manifest.js";
|
|
3
|
+
import { RouteHandler } from "@holokai/types/routing";
|
|
4
|
+
import { GeminiProvider } from "./gemini.provider.js";
|
|
5
|
+
import { GeminiWireAdapter } from "./gemini.wire.adapter.js";
|
|
6
|
+
import { GeminiTranslator } from "./gemini.translator.js";
|
|
7
|
+
import { ProtocolCapability } from "@holokai/types/entities";
|
|
8
|
+
import { GEMINI_PRICING_DATASET } from "./gemini.pricing.js";
|
|
9
|
+
export const GeminiProtocols = {
|
|
10
|
+
GENERATE_CONTENT: 'gemini.generateContent',
|
|
11
|
+
STREAM_GENERATE_CONTENT: 'gemini.streamGenerateContent',
|
|
12
|
+
EMBED_CONTENT: 'gemini.embedContent',
|
|
13
|
+
MODELS: 'gemini.models'
|
|
14
|
+
};
|
|
15
|
+
export class GeminiProviderPlugin extends BasePlugin {
|
|
16
|
+
manifest = manifest;
|
|
17
|
+
translator = GeminiTranslator.instance();
|
|
18
|
+
defaultRouteHandler = RouteHandler.PASSTHROUGH;
|
|
19
|
+
protocols = GeminiProtocols;
|
|
20
|
+
defaultProtocol = GeminiProtocols.GENERATE_CONTENT;
|
|
21
|
+
async createProvider(id, name, config) {
|
|
22
|
+
return new GeminiProvider(id, name, this, config);
|
|
23
|
+
}
|
|
24
|
+
async createWireAdapter(params) {
|
|
25
|
+
return new GeminiWireAdapter(params.requestId, params.isStreaming);
|
|
26
|
+
}
|
|
27
|
+
getCapabilities() {
|
|
28
|
+
return {
|
|
29
|
+
streaming: true,
|
|
30
|
+
tools: true,
|
|
31
|
+
vision: true,
|
|
32
|
+
functionCalling: true,
|
|
33
|
+
maxTokens: 1_000_000
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
getRoutes() {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
paths: ['/v1beta/models'],
|
|
40
|
+
method: 'GET',
|
|
41
|
+
handler: RouteHandler.MODELS,
|
|
42
|
+
protocol: {
|
|
43
|
+
name: GeminiProtocols.MODELS,
|
|
44
|
+
capability: ProtocolCapability.MODELS
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
paths: ['/v1beta/models/:model\\:generateContent'],
|
|
49
|
+
method: 'POST',
|
|
50
|
+
handler: RouteHandler.REQUEST,
|
|
51
|
+
protocol: {
|
|
52
|
+
name: GeminiProtocols.GENERATE_CONTENT,
|
|
53
|
+
capability: ProtocolCapability.CHAT
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
paths: ['/v1beta/models/:model\\:streamGenerateContent'],
|
|
58
|
+
method: 'POST',
|
|
59
|
+
handler: RouteHandler.REQUEST,
|
|
60
|
+
protocol: {
|
|
61
|
+
name: GeminiProtocols.STREAM_GENERATE_CONTENT,
|
|
62
|
+
capability: ProtocolCapability.CHAT
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
paths: ['/v1beta/models/:model\\:embedContent'],
|
|
67
|
+
method: 'POST',
|
|
68
|
+
handler: RouteHandler.REQUEST,
|
|
69
|
+
protocol: {
|
|
70
|
+
name: GeminiProtocols.EMBED_CONTENT,
|
|
71
|
+
capability: ProtocolCapability.EMBED
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
getPricingSheets() {
|
|
77
|
+
return normalizePricingDataset(GEMINI_PRICING_DATASET);
|
|
78
|
+
}
|
|
79
|
+
getDefaultPricing() {
|
|
80
|
+
const sheets = this.getPricingSheets();
|
|
81
|
+
const sorted = Array.from(sheets.values()).sort((a, b) => b.effective_from.localeCompare(a.effective_from));
|
|
82
|
+
return sorted[0];
|
|
83
|
+
}
|
|
84
|
+
calculateExtraCosts(tokens, pricing) {
|
|
85
|
+
const thinkingRate = pricing.token_costs?.thinking ?? 0;
|
|
86
|
+
const thinkingCost = (tokens.thinking ?? 0) * thinkingRate;
|
|
87
|
+
const cacheReadRate = pricing.token_costs?.cache_read ?? Number(pricing.cache_read_cost ?? 0);
|
|
88
|
+
const cacheReadCost = (tokens.cache_read ?? 0) * cacheReadRate;
|
|
89
|
+
return {
|
|
90
|
+
total: thinkingCost + cacheReadCost,
|
|
91
|
+
detail: {
|
|
92
|
+
thinking: { tokens: tokens.thinking ?? 0, cost: thinkingCost },
|
|
93
|
+
cache_read: { tokens: tokens.cache_read ?? 0, cost: cacheReadCost },
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
onInitialize(_context) {
|
|
98
|
+
return Promise.resolve();
|
|
99
|
+
}
|
|
100
|
+
onDestroy() {
|
|
101
|
+
return Promise.resolve();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { BaseTranslator } from "@holokai/sdk/provider";
|
|
3
|
+
import type { HoloContent } from "@holokai/types/holo";
|
|
4
|
+
import type { Part } from "@google/genai";
|
|
5
|
+
export declare class GeminiContentTranslator extends BaseTranslator<HoloContent, Part> {
|
|
6
|
+
protected holoDefaults: Partial<HoloContent>;
|
|
7
|
+
protected providerDefaults: Partial<Part>;
|
|
8
|
+
constructor();
|
|
9
|
+
protected fromHoloImpl(source: HoloContent): Promise<Partial<Part>>;
|
|
10
|
+
protected toHoloImpl(source: Part): Promise<Partial<HoloContent>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=gemini.content.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.content.translator.d.ts","sourceRoot":"","sources":["../../src/translators/gemini.content.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AAqBxC,qBACa,uBAAwB,SAAQ,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;IAC1E,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAM;;cAM/B,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;cAYzD,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAoB1E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import 'reflect-metadata';
|
|
11
|
+
import { injectable } from 'tsyringe';
|
|
12
|
+
import { BaseTranslator } from "@holokai/sdk/provider";
|
|
13
|
+
function parseDataUrl(u) {
|
|
14
|
+
if (!u.startsWith('data:image/'))
|
|
15
|
+
return null;
|
|
16
|
+
const comma = u.indexOf(',');
|
|
17
|
+
if (comma < 0)
|
|
18
|
+
return null;
|
|
19
|
+
const header = u.slice(0, comma);
|
|
20
|
+
const data = u.slice(comma + 1);
|
|
21
|
+
const subtype = header.slice('data:image/'.length).split(';', 1)[0].toLowerCase();
|
|
22
|
+
const mimeType = subtype === 'jpeg' || subtype === 'jpg' ? 'image/jpeg' :
|
|
23
|
+
subtype === 'png' ? 'image/png' :
|
|
24
|
+
subtype === 'gif' ? 'image/gif' :
|
|
25
|
+
subtype === 'webp' ? 'image/webp' : 'image/png';
|
|
26
|
+
return { mimeType, data };
|
|
27
|
+
}
|
|
28
|
+
let GeminiContentTranslator = class GeminiContentTranslator extends BaseTranslator {
|
|
29
|
+
holoDefaults = {};
|
|
30
|
+
providerDefaults = {};
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
}
|
|
34
|
+
async fromHoloImpl(source) {
|
|
35
|
+
if (source.type === 'text') {
|
|
36
|
+
return { text: source.text };
|
|
37
|
+
}
|
|
38
|
+
const parsed = parseDataUrl(source.url);
|
|
39
|
+
if (parsed) {
|
|
40
|
+
return { inlineData: { mimeType: parsed.mimeType, data: parsed.data } };
|
|
41
|
+
}
|
|
42
|
+
return { fileData: { fileUri: source.url, mimeType: source.mime || 'image/png' } };
|
|
43
|
+
}
|
|
44
|
+
async toHoloImpl(source) {
|
|
45
|
+
if (source.text !== undefined) {
|
|
46
|
+
return { type: 'text', text: source.text };
|
|
47
|
+
}
|
|
48
|
+
if (source.inlineData) {
|
|
49
|
+
const mime = source.inlineData.mimeType || 'image/png';
|
|
50
|
+
return { type: 'image', url: `data:${mime};base64,${source.inlineData.data}`, mime };
|
|
51
|
+
}
|
|
52
|
+
if (source.fileData) {
|
|
53
|
+
const result = { type: 'image', url: source.fileData.fileUri || '' };
|
|
54
|
+
if (source.fileData.mimeType) {
|
|
55
|
+
result.mime = source.fileData.mimeType;
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
GeminiContentTranslator = __decorate([
|
|
63
|
+
injectable(),
|
|
64
|
+
__metadata("design:paramtypes", [])
|
|
65
|
+
], GeminiContentTranslator);
|
|
66
|
+
export { GeminiContentTranslator };
|
|
67
|
+
//# sourceMappingURL=gemini.content.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.content.translator.js","sourceRoot":"","sources":["../../src/translators/gemini.content.translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { GeminiContentTranslator } from "./gemini.content.translator";
|
|
3
|
+
import type { HoloMessage } from "@holokai/types/holo";
|
|
4
|
+
import { BaseTranslator } from "@holokai/sdk/provider";
|
|
5
|
+
import type { Content } from "@google/genai";
|
|
6
|
+
export declare class GeminiMessageTranslator extends BaseTranslator<HoloMessage, Content> {
|
|
7
|
+
private readonly contentTranslator;
|
|
8
|
+
protected holoDefaults: Partial<HoloMessage>;
|
|
9
|
+
protected providerDefaults: Partial<Content>;
|
|
10
|
+
constructor(contentTranslator: GeminiContentTranslator);
|
|
11
|
+
protected fromHoloImpl(source: HoloMessage): Promise<Partial<Content>>;
|
|
12
|
+
protected toHoloImpl(source: Content): Promise<Partial<HoloMessage>>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=gemini.message.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.message.translator.d.ts","sourceRoot":"","sources":["../../src/translators/gemini.message.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AAEpE,OAAO,KAAK,EAAc,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,OAAO,EAAO,MAAM,eAAe,CAAC;AAEjD,qBACa,uBAAwB,SAAQ,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC;IAIjE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAH9C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAM;gBAErB,iBAAiB,EAAE,uBAAuB;cAIvD,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;cAwC5D,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAkD7E"}
|