@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.
Files changed (101) hide show
  1. package/dist/gemini.auditor.d.ts +24 -0
  2. package/dist/gemini.auditor.d.ts.map +1 -0
  3. package/dist/gemini.auditor.js +117 -0
  4. package/dist/gemini.auditor.js.map +1 -0
  5. package/dist/gemini.pricing.d.ts +3 -0
  6. package/dist/gemini.pricing.d.ts.map +1 -0
  7. package/dist/gemini.pricing.js +251 -0
  8. package/dist/gemini.pricing.js.map +1 -0
  9. package/dist/gemini.provider.d.ts +18 -0
  10. package/dist/gemini.provider.d.ts.map +1 -0
  11. package/dist/gemini.provider.js +112 -0
  12. package/dist/gemini.provider.js.map +1 -0
  13. package/dist/gemini.response.factory.d.ts +42 -0
  14. package/dist/gemini.response.factory.d.ts.map +1 -0
  15. package/dist/gemini.response.factory.js +94 -0
  16. package/dist/gemini.response.factory.js.map +1 -0
  17. package/dist/gemini.translator.d.ts +28 -0
  18. package/dist/gemini.translator.d.ts.map +1 -0
  19. package/dist/gemini.translator.js +74 -0
  20. package/dist/gemini.translator.js.map +1 -0
  21. package/dist/gemini.wire.adapter.d.ts +5 -0
  22. package/dist/gemini.wire.adapter.d.ts.map +1 -0
  23. package/dist/gemini.wire.adapter.js +7 -0
  24. package/dist/gemini.wire.adapter.js.map +1 -0
  25. package/dist/index.d.ts +5 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/manifest.d.ts +3 -0
  30. package/dist/manifest.d.ts.map +1 -0
  31. package/dist/manifest.js +13 -0
  32. package/dist/manifest.js.map +1 -0
  33. package/dist/plugin.d.ts +46 -0
  34. package/dist/plugin.d.ts.map +1 -0
  35. package/dist/plugin.js +104 -0
  36. package/dist/plugin.js.map +1 -0
  37. package/dist/translators/gemini.content.translator.d.ts +12 -0
  38. package/dist/translators/gemini.content.translator.d.ts.map +1 -0
  39. package/dist/translators/gemini.content.translator.js +67 -0
  40. package/dist/translators/gemini.content.translator.js.map +1 -0
  41. package/dist/translators/gemini.message.translator.d.ts +14 -0
  42. package/dist/translators/gemini.message.translator.d.ts.map +1 -0
  43. package/dist/translators/gemini.message.translator.js +115 -0
  44. package/dist/translators/gemini.message.translator.js.map +1 -0
  45. package/dist/translators/gemini.request.translator.d.ts +24 -0
  46. package/dist/translators/gemini.request.translator.d.ts.map +1 -0
  47. package/dist/translators/gemini.request.translator.js +112 -0
  48. package/dist/translators/gemini.request.translator.js.map +1 -0
  49. package/dist/translators/gemini.response.content.translator.d.ts +12 -0
  50. package/dist/translators/gemini.response.content.translator.d.ts.map +1 -0
  51. package/dist/translators/gemini.response.content.translator.js +40 -0
  52. package/dist/translators/gemini.response.content.translator.js.map +1 -0
  53. package/dist/translators/gemini.response.message.translator.d.ts +14 -0
  54. package/dist/translators/gemini.response.message.translator.d.ts.map +1 -0
  55. package/dist/translators/gemini.response.message.translator.js +90 -0
  56. package/dist/translators/gemini.response.message.translator.js.map +1 -0
  57. package/dist/translators/gemini.response.translator.d.ts +16 -0
  58. package/dist/translators/gemini.response.translator.d.ts.map +1 -0
  59. package/dist/translators/gemini.response.translator.js +70 -0
  60. package/dist/translators/gemini.response.translator.js.map +1 -0
  61. package/dist/translators/gemini.tool.translator.d.ts +19 -0
  62. package/dist/translators/gemini.tool.translator.d.ts.map +1 -0
  63. package/dist/translators/gemini.tool.translator.js +84 -0
  64. package/dist/translators/gemini.tool.translator.js.map +1 -0
  65. package/dist/translators/gemini.usage.translator.d.ts +12 -0
  66. package/dist/translators/gemini.usage.translator.d.ts.map +1 -0
  67. package/dist/translators/gemini.usage.translator.js +45 -0
  68. package/dist/translators/gemini.usage.translator.js.map +1 -0
  69. package/dist/translators/index.d.ts +10 -0
  70. package/dist/translators/index.d.ts.map +1 -0
  71. package/dist/translators/index.js +10 -0
  72. package/dist/translators/index.js.map +1 -0
  73. package/dist/translators/streaming/gemini.content.delta.translator.d.ts +12 -0
  74. package/dist/translators/streaming/gemini.content.delta.translator.d.ts.map +1 -0
  75. package/dist/translators/streaming/gemini.content.delta.translator.js +85 -0
  76. package/dist/translators/streaming/gemini.content.delta.translator.js.map +1 -0
  77. package/dist/translators/streaming/gemini.message.delta.translator.d.ts +14 -0
  78. package/dist/translators/streaming/gemini.message.delta.translator.d.ts.map +1 -0
  79. package/dist/translators/streaming/gemini.message.delta.translator.js +73 -0
  80. package/dist/translators/streaming/gemini.message.delta.translator.js.map +1 -0
  81. package/dist/translators/streaming/gemini.message.start.translator.d.ts +14 -0
  82. package/dist/translators/streaming/gemini.message.start.translator.d.ts.map +1 -0
  83. package/dist/translators/streaming/gemini.message.start.translator.js +62 -0
  84. package/dist/translators/streaming/gemini.message.start.translator.js.map +1 -0
  85. package/dist/translators/streaming/gemini.message.stop.translator.d.ts +12 -0
  86. package/dist/translators/streaming/gemini.message.stop.translator.d.ts.map +1 -0
  87. package/dist/translators/streaming/gemini.message.stop.translator.js +57 -0
  88. package/dist/translators/streaming/gemini.message.stop.translator.js.map +1 -0
  89. package/dist/translators/streaming/gemini.stream.translator.d.ts +22 -0
  90. package/dist/translators/streaming/gemini.stream.translator.d.ts.map +1 -0
  91. package/dist/translators/streaming/gemini.stream.translator.js +90 -0
  92. package/dist/translators/streaming/gemini.stream.translator.js.map +1 -0
  93. package/dist/translators/streaming/index.d.ts +6 -0
  94. package/dist/translators/streaming/index.d.ts.map +1 -0
  95. package/dist/translators/streaming/index.js +6 -0
  96. package/dist/translators/streaming/index.js.map +1 -0
  97. package/dist/utils/finish.reason.mapper.d.ts +4 -0
  98. package/dist/utils/finish.reason.mapper.d.ts.map +1 -0
  99. package/dist/utils/finish.reason.mapper.js +25 -0
  100. package/dist/utils/finish.reason.mapper.js.map +1 -0
  101. 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,5 @@
1
+ import { BaseWireAdapter } from "@holokai/sdk/provider";
2
+ export declare class GeminiWireAdapter extends BaseWireAdapter {
3
+ formatWire(data: any): string;
4
+ }
5
+ //# sourceMappingURL=gemini.wire.adapter.d.ts.map
@@ -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,7 @@
1
+ import { BaseWireAdapter } from "@holokai/sdk/provider";
2
+ export class GeminiWireAdapter extends BaseWireAdapter {
3
+ formatWire(data) {
4
+ return `data: ${JSON.stringify(data)}\n\n`;
5
+ }
6
+ }
7
+ //# sourceMappingURL=gemini.wire.adapter.js.map
@@ -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"}
@@ -0,0 +1,5 @@
1
+ import { GeminiProviderPlugin } from './plugin.js';
2
+ export { GeminiProviderPlugin };
3
+ declare const _default: GeminiProviderPlugin;
4
+ export default _default;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ import { GeminiProviderPlugin } from './plugin.js';
2
+ export { GeminiProviderPlugin };
3
+ export default new GeminiProviderPlugin();
4
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ import { PluginManifest } from "@holokai/types/plugin";
2
+ export declare const manifest: PluginManifest;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -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"}
@@ -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"}
@@ -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"}