@holokai/holo-provider-gemini 1.4.4 → 1.5.0

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/dist/gemini.provider.d.ts +1 -2
  3. package/dist/gemini.provider.d.ts.map +1 -1
  4. package/dist/gemini.provider.js +4 -7
  5. package/dist/gemini.provider.js.map +1 -1
  6. package/dist/gemini.translator.d.ts +2 -1
  7. package/dist/gemini.translator.d.ts.map +1 -1
  8. package/dist/gemini.translator.js +5 -2
  9. package/dist/gemini.translator.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/plugin.d.ts +5 -2
  15. package/dist/plugin.d.ts.map +1 -1
  16. package/dist/plugin.js +42 -5
  17. package/dist/plugin.js.map +1 -1
  18. package/dist/translators/gemini.content.translator.d.ts.map +1 -1
  19. package/dist/translators/gemini.content.translator.js +10 -6
  20. package/dist/translators/gemini.content.translator.js.map +1 -1
  21. package/dist/translators/gemini.message.translator.d.ts.map +1 -1
  22. package/dist/translators/gemini.message.translator.js +41 -14
  23. package/dist/translators/gemini.message.translator.js.map +1 -1
  24. package/dist/translators/gemini.request.translator.d.ts.map +1 -1
  25. package/dist/translators/gemini.request.translator.js +88 -9
  26. package/dist/translators/gemini.request.translator.js.map +1 -1
  27. package/dist/translators/gemini.response.message.translator.d.ts.map +1 -1
  28. package/dist/translators/gemini.response.message.translator.js +19 -9
  29. package/dist/translators/gemini.response.message.translator.js.map +1 -1
  30. package/dist/translators/gemini.response.translator.d.ts.map +1 -1
  31. package/dist/translators/gemini.response.translator.js +41 -16
  32. package/dist/translators/gemini.response.translator.js.map +1 -1
  33. package/dist/translators/gemini.tool.id.d.ts +16 -0
  34. package/dist/translators/gemini.tool.id.d.ts.map +1 -0
  35. package/dist/translators/gemini.tool.id.js +26 -0
  36. package/dist/translators/gemini.tool.id.js.map +1 -0
  37. package/dist/translators/gemini.tool.translator.d.ts.map +1 -1
  38. package/dist/translators/gemini.tool.translator.js +8 -3
  39. package/dist/translators/gemini.tool.translator.js.map +1 -1
  40. package/dist/translators/streaming/gemini.content.delta.translator.d.ts +2 -0
  41. package/dist/translators/streaming/gemini.content.delta.translator.d.ts.map +1 -1
  42. package/dist/translators/streaming/gemini.content.delta.translator.js +155 -10
  43. package/dist/translators/streaming/gemini.content.delta.translator.js.map +1 -1
  44. package/dist/translators/streaming/gemini.message.delta.translator.js +1 -1
  45. package/dist/translators/streaming/gemini.message.delta.translator.js.map +1 -1
  46. package/dist/translators/streaming/gemini.message.start.translator.d.ts.map +1 -1
  47. package/dist/translators/streaming/gemini.message.start.translator.js +13 -15
  48. package/dist/translators/streaming/gemini.message.start.translator.js.map +1 -1
  49. package/dist/translators/streaming/gemini.message.stop.translator.js +2 -2
  50. package/dist/translators/streaming/gemini.message.stop.translator.js.map +1 -1
  51. package/dist/translators/streaming/gemini.stream.translator.d.ts +17 -4
  52. package/dist/translators/streaming/gemini.stream.translator.d.ts.map +1 -1
  53. package/dist/translators/streaming/gemini.stream.translator.js +100 -17
  54. package/dist/translators/streaming/gemini.stream.translator.js.map +1 -1
  55. package/dist/version.d.ts +1 -1
  56. package/dist/version.js +1 -1
  57. package/package.json +4 -1
@@ -10,12 +10,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import 'reflect-metadata';
11
11
  import { injectable } from 'tsyringe';
12
12
  import { StreamTranslator } from "@holokai/holo-sdk/provider";
13
+ import { isSynthesizedToolCallId, makeToolCallId } from '../gemini.tool.id';
13
14
  let GeminiContentDeltaTranslator = class GeminiContentDeltaTranslator extends StreamTranslator {
14
15
  holoDefaults = {};
15
16
  providerDefaults = {};
17
+ toolCallStates = new Map();
16
18
  constructor() {
17
19
  super();
18
20
  }
21
+ resetStreamState() {
22
+ this.toolCallStates.clear();
23
+ }
19
24
  async fromHoloManyImpl(source) {
20
25
  const d = source.delta;
21
26
  if (!d)
@@ -31,6 +36,77 @@ let GeminiContentDeltaTranslator = class GeminiContentDeltaTranslator extends St
31
36
  }]
32
37
  }];
33
38
  }
39
+ if (d.type === 'message_delta' || d.type === 'tool_arg_delta') {
40
+ const tcs = d.delta?.tool_calls ?? [];
41
+ if (tcs.length === 0)
42
+ return [];
43
+ const out = [];
44
+ const blockIndex = d.index ?? 0;
45
+ for (let i = 0; i < tcs.length; i++) {
46
+ const tc = tcs[i];
47
+ if (tc.type === 'custom')
48
+ continue;
49
+ if (tc.type !== undefined && tc.type !== 'function')
50
+ continue;
51
+ const idx = tcs.length === 1 ? blockIndex : i;
52
+ let state = this.toolCallStates.get(idx);
53
+ const shellName = tc.function?.name;
54
+ if (shellName) {
55
+ if (!state) {
56
+ const initial = { name: shellName, rawArgs: '', emitted: false };
57
+ if (tc.id)
58
+ initial.id = tc.id;
59
+ state = initial;
60
+ this.toolCallStates.set(idx, state);
61
+ }
62
+ else if (!state.emitted) {
63
+ state.name = shellName;
64
+ if (tc.id && !state.id)
65
+ state.id = tc.id;
66
+ }
67
+ }
68
+ if (!state)
69
+ continue;
70
+ const rawArgs = tc.function?.raw_arguments;
71
+ if (rawArgs) {
72
+ state.rawArgs += rawArgs;
73
+ }
74
+ if (!state.emitted) {
75
+ let parsed;
76
+ if (state.rawArgs) {
77
+ try {
78
+ const candidate = JSON.parse(state.rawArgs);
79
+ if (candidate !== null && typeof candidate === 'object') {
80
+ parsed = candidate;
81
+ }
82
+ }
83
+ catch {
84
+ // Keep accumulating; partial JSON.
85
+ }
86
+ }
87
+ if (parsed !== undefined) {
88
+ state.emitted = true;
89
+ const functionCall = { name: state.name, args: parsed };
90
+ // Preserve wire-style ids on the way back to gemini wire;
91
+ // strip our internal `<name>#<index>` synthesis form
92
+ // since real gemini wire doesn't carry that.
93
+ if (state.id && !isSynthesizedToolCallId(state.id)) {
94
+ functionCall.id = state.id;
95
+ }
96
+ out.push({
97
+ candidates: [{
98
+ content: {
99
+ role: 'model',
100
+ parts: [{ functionCall }]
101
+ },
102
+ index: 0
103
+ }]
104
+ });
105
+ }
106
+ }
107
+ }
108
+ return out;
109
+ }
34
110
  return [];
35
111
  }
36
112
  async toHoloManyImpl(source) {
@@ -38,6 +114,7 @@ let GeminiContentDeltaTranslator = class GeminiContentDeltaTranslator extends St
38
114
  const candidate = source.candidates?.[0];
39
115
  if (!candidate?.content?.parts)
40
116
  return out;
117
+ // Emit text content_deltas in order (preserves text-then-tool sequencing).
41
118
  for (const part of candidate.content.parts) {
42
119
  if (part.text !== undefined) {
43
120
  out.push({
@@ -52,24 +129,78 @@ let GeminiContentDeltaTranslator = class GeminiContentDeltaTranslator extends St
52
129
  }
53
130
  });
54
131
  }
55
- if (part.functionCall) {
132
+ }
133
+ // Tool calls: pass 1 emits all shells first (matching canonical lifecycle
134
+ // shape where multiple parallel calls open before any args fragments
135
+ // arrive), pass 2+ interleaves arg fragments across calls. This mirrors
136
+ // claude/openai streaming semantics where shell-then-frag is the
137
+ // canonical contract; gemini's wire delivers whole-shot args within a
138
+ // single chunk's parts[], so we re-shape the emission for parity. Args
139
+ // are split at the first colon to give cross-provider sinks a
140
+ // two-fragment shape that round-trips cleanly through their accumulators.
141
+ const fnCallParts = candidate.content.parts.filter(p => !!p.functionCall);
142
+ if (fnCallParts.length === 0)
143
+ return out;
144
+ const calls = fnCallParts.map((part, i) => {
145
+ const name = part.functionCall.name || '';
146
+ const args = (part.functionCall.args ?? {});
147
+ const blockIndex = (candidate.index ?? 0) + i;
148
+ // Prefer the wire id when present (gemini's FunctionCall type
149
+ // exposes optional `id`); synthesize <name>#<index> only when the
150
+ // wire didn't carry one.
151
+ const id = part.functionCall.id ?? makeToolCallId(name, i);
152
+ return {
153
+ id,
154
+ name,
155
+ blockIndex,
156
+ fragments: splitArgsAtColon(JSON.stringify(args)),
157
+ };
158
+ });
159
+ // Pass 1: shells.
160
+ for (const call of calls) {
161
+ out.push({
162
+ delta: {
163
+ provider: 'gemini',
164
+ type: 'message_delta',
165
+ index: call.blockIndex,
166
+ delta: {
167
+ role: 'assistant',
168
+ tool_calls: [{
169
+ id: call.id,
170
+ type: 'function',
171
+ function: {
172
+ name: call.name,
173
+ arguments: {},
174
+ raw_arguments: '',
175
+ },
176
+ }],
177
+ },
178
+ provider_delta: source,
179
+ }
180
+ });
181
+ }
182
+ // Pass 2+: arg fragments, interleaved across calls per fragment index.
183
+ const maxFragments = calls.reduce((m, c) => Math.max(m, c.fragments.length), 0);
184
+ for (let fi = 0; fi < maxFragments; fi++) {
185
+ for (const call of calls) {
186
+ const fragment = call.fragments[fi];
187
+ if (fragment === undefined)
188
+ continue;
56
189
  out.push({
57
190
  delta: {
58
191
  provider: 'gemini',
59
- type: 'message_delta',
60
- index: candidate.index ?? 0,
192
+ type: 'tool_arg_delta',
193
+ index: call.blockIndex,
61
194
  delta: {
62
- role: 'assistant',
63
195
  tool_calls: [{
64
- id: part.functionCall.name || '',
65
196
  type: 'function',
66
197
  function: {
67
- name: part.functionCall.name || '',
68
- arguments: part.functionCall.args || {}
69
- }
70
- }]
198
+ arguments: {},
199
+ raw_arguments: fragment,
200
+ },
201
+ }],
71
202
  },
72
- provider_delta: source
203
+ provider_delta: source,
73
204
  }
74
205
  });
75
206
  }
@@ -82,4 +213,18 @@ GeminiContentDeltaTranslator = __decorate([
82
213
  __metadata("design:paramtypes", [])
83
214
  ], GeminiContentDeltaTranslator);
84
215
  export { GeminiContentDeltaTranslator };
216
+ // Split JSON.stringify(args) at the first ':' to produce two fragments that
217
+ // round-trip cleanly through every plugin's accumulator. Single-key/single-pair
218
+ // args produce a `{"key":` + `"value"}` split; multi-key args produce a
219
+ // `{"key1":` + `"value1",...,"keyN":"valueN"}` split.
220
+ //
221
+ // When the input has no colon (empty args, scalar args), returns the input as a
222
+ // single fragment.
223
+ function splitArgsAtColon(rawArgs) {
224
+ const colonIdx = rawArgs.indexOf(':');
225
+ if (colonIdx === -1 || colonIdx >= rawArgs.length - 1) {
226
+ return [rawArgs];
227
+ }
228
+ return [rawArgs.slice(0, colonIdx + 1), rawArgs.slice(colonIdx + 1)];
229
+ }
85
230
  //# sourceMappingURL=gemini.content.delta.translator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.content.delta.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.content.delta.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAIrD,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gBAA0D;IAC9F,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrE,OAAO,CAAC;oBACJ,UAAU,EAAE,CAAC;4BACT,OAAO,EAAE;gCACL,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAC,CAAC;6BACnC;4BACD,KAAK,EAAE,CAAC;yBACX,CAAC;iBACL,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK;YAAE,OAAO,GAAG,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC;oBACL,KAAK,EAAE;wBACH,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,eAAwB;wBAC9B,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC;wBAC3B,KAAK,EAAE;4BACH,OAAO,EAAE,IAAI,CAAC,IAAI;yBACrB;wBACD,cAAc,EAAE,MAAM;qBACzB;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC;oBACL,KAAK,EAAE;wBACH,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,eAAwB;wBAC9B,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC;wBAC3B,KAAK,EAAE;4BACH,IAAI,EAAE,WAAoB;4BAC1B,UAAU,EAAE,CAAC;oCACT,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;oCAChC,IAAI,EAAE,UAAmB;oCACzB,QAAQ,EAAE;wCACN,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;wCAClC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAA+B,IAAI,EAAE;qCACrE;iCACJ,CAAC;yBACL;wBACD,cAAc,EAAE,MAAM;qBACzB;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;CACJ,CAAA;AAxEY,4BAA4B;IADxC,UAAU,EAAE;;GACA,4BAA4B,CAwExC"}
1
+ {"version":3,"file":"gemini.content.delta.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.content.delta.translator.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import 'reflect-metadata';
11
11
  import { injectable } from 'tsyringe';
12
12
  import { pickDefined } from '@holokai/holo-sdk';
13
- import { toGeminiFinishReason, toHoloFinishReason } from '../../utils/finish.reason.mapper.js';
13
+ import { toGeminiFinishReason, toHoloFinishReason } from '../../utils/finish.reason.mapper';
14
14
  import { StreamTranslator } from "@holokai/holo-sdk/provider";
15
15
  import { GeminiUsageTranslator } from '../gemini.usage.translator';
16
16
  let GeminiMessageDeltaTranslator = class GeminiMessageDeltaTranslator extends StreamTranslator {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.message.delta.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.delta.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAG1D,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gBAA0D;IAI3E;IAHnB,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE,YAA6B,eAAsC;QAC/D,KAAK,EAAE,CAAC;QADiB,oBAAe,GAAf,eAAe,CAAuB;IAEnE,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,EAAE,CAAC;QAEhD,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK;YACjB,CAAC,CAAC,WAAW,CAAC;gBACV,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;gBACtC,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa;gBAC3C,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;aACxC,CAAC;YACF,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEvC,OAAO,CAAC;gBACJ,UAAU,EAAE,CAAC;wBACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;wBACnC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,YAA4B,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrE,KAAK,EAAE,CAAC;qBACX,CAAC;gBACF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;YAC9B,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,KAAK,GAA6B,WAAW,CAAC;YAChD,KAAK,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,KAAK,IAAI,SAAS;gBACzB,cAAc,EAAE,MAAM;aACzB;YACD,aAAa,EAAE,kBAAkB,CAAC,SAAS,CAAC,YAAkC,CAAC;SAClF,CAA6B,CAAC;QAE/B,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;CACJ,CAAA;AAxDY,4BAA4B;IADxC,UAAU,EAAE;qCAKqC,qBAAqB;GAJ1D,4BAA4B,CAwDxC"}
1
+ {"version":3,"file":"gemini.message.delta.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.delta.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAG1D,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gBAA0D;IAI3E;IAHnB,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE,YAA6B,eAAsC;QAC/D,KAAK,EAAE,CAAC;QADiB,oBAAe,GAAf,eAAe,CAAuB;IAEnE,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,EAAE,CAAC;QAEhD,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK;YACjB,CAAC,CAAC,WAAW,CAAC;gBACV,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;gBACtC,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa;gBAC3C,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;aACxC,CAAC;YACF,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEvC,OAAO,CAAC;gBACJ,UAAU,EAAE,CAAC;wBACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;wBACnC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,YAA4B,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrE,KAAK,EAAE,CAAC;qBACX,CAAC;gBACF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;YAC9B,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,KAAK,GAA6B,WAAW,CAAC;YAChD,KAAK,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,KAAK,IAAI,SAAS;gBACzB,cAAc,EAAE,MAAM;aACzB;YACD,aAAa,EAAE,kBAAkB,CAAC,SAAS,CAAC,YAAkC,CAAC;SAClF,CAA6B,CAAC;QAE/B,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;CACJ,CAAA;AAxDY,4BAA4B;IADxC,UAAU,EAAE;qCAKqC,qBAAqB;GAJ1D,4BAA4B,CAwDxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.message.start.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.start.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAE3D,qBACa,4BAA6B,SAAQ,gBAAgB,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAI5F,OAAO,CAAC,QAAQ,CAAC,eAAe;IAH5C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;gBAErC,eAAe,EAAE,qBAAqB;cAInD,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;cAetF,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;CAoBvG"}
1
+ {"version":3,"file":"gemini.message.start.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.start.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAqB,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAE3D,qBACa,4BAA6B,SAAQ,gBAAgB,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAI5F,OAAO,CAAC,QAAQ,CAAC,eAAe;IAH5C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;gBAErC,eAAe,EAAE,qBAAqB;cAInD,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;cAetF,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;CAkBvG"}
@@ -9,7 +9,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import 'reflect-metadata';
11
11
  import { injectable } from 'tsyringe';
12
- import { v4 as uuidv4 } from 'uuid';
13
12
  import { GeminiUsageTranslator } from '../gemini.usage.translator';
14
13
  import { StreamTranslator } from "@holokai/holo-sdk/provider";
15
14
  let GeminiMessageStartTranslator = class GeminiMessageStartTranslator extends StreamTranslator {
@@ -38,20 +37,19 @@ let GeminiMessageStartTranslator = class GeminiMessageStartTranslator extends St
38
37
  const usage = source.usageMetadata
39
38
  ? await this.usageTranslator.toHolo(source.usageMetadata)
40
39
  : null;
41
- return [{
42
- id: uuidv4(),
43
- ...(source.modelVersion ? { model: source.modelVersion } : {}),
44
- delta: {
45
- provider: 'gemini',
46
- type: 'message_start',
47
- choice: 0,
48
- delta: {
49
- role: 'assistant'
50
- },
51
- usage,
52
- provider_delta: source
53
- }
54
- }];
40
+ const delta = {
41
+ provider: 'gemini',
42
+ type: 'message_start',
43
+ index: 0,
44
+ delta: { role: 'assistant' },
45
+ provider_delta: source,
46
+ };
47
+ if (usage)
48
+ delta.usage = usage;
49
+ const chunk = { delta };
50
+ if (source.modelVersion)
51
+ chunk.model = source.modelVersion;
52
+ return [chunk];
55
53
  }
56
54
  };
57
55
  GeminiMessageStartTranslator = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.message.start.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.start.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,EAAE,IAAI,MAAM,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAKrD,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gBAA0D;IAI3E;IAHnB,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE,YAA6B,eAAsC;QAC/D,KAAK,EAAE,CAAC;QADiB,oBAAe,GAAf,eAAe,CAAuB;IAEnE,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,EAAE,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAE7B,OAAO,CAAC;gBACJ,UAAU,EAAE,CAAC;wBACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;wBACnC,KAAK,EAAE,CAAC;qBACX,CAAC;gBACF,YAAY,EAAE,MAAM,CAAC,KAAK;aAC7B,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;YAC9B,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,CAAC;gBACJ,EAAE,EAAE,MAAM,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,KAAK,EAAE;oBACH,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,eAAwB;oBAC9B,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE;wBACH,IAAI,EAAE,WAAoB;qBAC7B;oBACD,KAAK;oBACL,cAAc,EAAE,MAAM;iBACzB;aACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA3CY,4BAA4B;IADxC,UAAU,EAAE;qCAKqC,qBAAqB;GAJ1D,4BAA4B,CA2CxC"}
1
+ {"version":3,"file":"gemini.message.start.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.start.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAKrD,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gBAA0D;IAI3E;IAHnB,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE,YAA6B,eAAsC;QAC/D,KAAK,EAAE,CAAC;QADiB,oBAAe,GAAf,eAAe,CAAuB;IAEnE,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO,EAAE,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAE7B,OAAO,CAAC;gBACJ,UAAU,EAAE,CAAC;wBACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;wBACnC,KAAK,EAAE,CAAC;qBACX,CAAC;gBACF,YAAY,EAAE,MAAM,CAAC,KAAK;aAC7B,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;YAC9B,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,KAAK,GAAuB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC;YAC1B,cAAc,EAAE,MAAM;SACzB,CAAC;QACF,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAE/B,MAAM,KAAK,GAA6B,EAAC,KAAK,EAAC,CAAC;QAChD,IAAI,MAAM,CAAC,YAAY;YAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;CACJ,CAAA;AAzCY,4BAA4B;IADxC,UAAU,EAAE;qCAKqC,qBAAqB;GAJ1D,4BAA4B,CAyCxC"}
@@ -42,10 +42,10 @@ let GeminiMessageStopTranslator = class GeminiMessageStopTranslator extends Stre
42
42
  delta: {
43
43
  provider: 'gemini',
44
44
  type: 'message_stop',
45
+ index: 0,
45
46
  delta: {},
46
- provider_delta: source
47
+ provider_delta: source,
47
48
  },
48
- done: true
49
49
  }];
50
50
  }
51
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.message.stop.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.stop.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAGpC,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,gBAA0D;IAC7F,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC;oBACJ,UAAU,EAAE,CAAC;4BACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;4BACnC,YAAY,EAAE,YAAY,CAAC,IAAI;4BAC/B,KAAK,EAAE,CAAC;yBACX,CAAC;iBACL,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,OAAO,CAAC;gBACJ,KAAK,EAAE;oBACH,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,cAAuB;oBAC7B,KAAK,EAAE,EAAE;oBACT,cAAc,EAAE,MAAM;iBACzB;gBACD,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA1CY,2BAA2B;IADvC,UAAU,EAAE;;GACA,2BAA2B,CA0CvC"}
1
+ {"version":3,"file":"gemini.message.stop.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.message.stop.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAGpC,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,gBAA0D;IAC7F,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAElE;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC;oBACJ,UAAU,EAAE,CAAC;4BACT,OAAO,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;4BACnC,YAAY,EAAE,YAAY,CAAC,IAAI;4BAC/B,KAAK,EAAE,CAAC;yBACX,CAAC;iBACL,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,OAAO,CAAC;gBACJ,KAAK,EAAE;oBACH,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,cAAuB;oBAC7B,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,EAAE;oBACT,cAAc,EAAE,MAAM;iBACzB;aACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AA1CY,2BAA2B;IADvC,UAAU,EAAE;;GACA,2BAA2B,CA0CvC"}
@@ -5,7 +5,7 @@ import { GeminiMessageStopTranslator } from './gemini.message.stop.translator';
5
5
  import { GeminiContentDeltaTranslator } from './gemini.content.delta.translator';
6
6
  import { StreamTranslator } from "@holokai/holo-sdk/provider";
7
7
  import type { HoloStreamChunk } from "@holokai/holo-types/holo";
8
- import type { GenerateContentResponse } from "@google/genai";
8
+ import { type GenerateContentResponse } from "@google/genai";
9
9
  export declare class GeminiStreamTranslator extends StreamTranslator<HoloStreamChunk, GenerateContentResponse> {
10
10
  private readonly messageStartTranslator;
11
11
  private readonly messageDeltaTranslator;
@@ -13,10 +13,23 @@ export declare class GeminiStreamTranslator extends StreamTranslator<HoloStreamC
13
13
  private readonly contentDeltaTranslator;
14
14
  protected holoDefaults: Partial<HoloStreamChunk>;
15
15
  protected providerDefaults: Partial<GenerateContentResponse>;
16
- private isFirstChunk;
17
- private hasEmittedStop;
18
16
  constructor(messageStartTranslator: GeminiMessageStartTranslator, messageDeltaTranslator: GeminiMessageDeltaTranslator, messageStopTranslator: GeminiMessageStopTranslator, contentDeltaTranslator: GeminiContentDeltaTranslator);
19
- protected toHoloManyImpl(source: GenerateContentResponse): Promise<Partial<HoloStreamChunk>[]>;
17
+ /**
18
+ * Streams Holo chunks → gemini chunks with cross-chunk state in the
19
+ * generator's closure. Merges consecutive functionCall-only chunks
20
+ * (gemini wire packs parallel calls into one chunk's parts[]) and
21
+ * synthesises a trailing finishReason if the source stream ended
22
+ * without one.
23
+ */
24
+ fromHoloStream(source: AsyncIterable<HoloStreamChunk>, validateTarget?: boolean): AsyncIterable<Partial<GenerateContentResponse>>;
25
+ /**
26
+ * Streams gemini chunks → Holo with first-chunk synthesis state in the
27
+ * generator's closure. The first chunk emits an additional `message_start`
28
+ * Holo chunk, and the chunk carrying `finishReason` emits one trailing
29
+ * `message_stop` (and `message_delta` if usage is present).
30
+ */
31
+ toHoloStream(source: AsyncIterable<GenerateContentResponse>, _validateTarget?: boolean): AsyncIterable<Partial<HoloStreamChunk>>;
32
+ protected toHoloManyImpl(_source: GenerateContentResponse): Promise<Partial<HoloStreamChunk>[]>;
20
33
  protected fromHoloManyImpl(source: HoloStreamChunk): Promise<Partial<GenerateContentResponse>[]>;
21
34
  }
22
35
  //# sourceMappingURL=gemini.stream.translator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.stream.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.stream.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAE3D,qBACa,sBAAuB,SAAQ,gBAAgB,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAQ9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAV3C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;IAElE,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAGV,sBAAsB,EAAE,4BAA4B,EACpD,sBAAsB,EAAE,4BAA4B,EACpD,qBAAqB,EAAE,2BAA2B,EAClD,sBAAsB,EAAE,4BAA4B;cAKzD,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;cAyBpF,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;CAmCzG"}
1
+ {"version":3,"file":"gemini.stream.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.stream.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAe,KAAK,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAEzE,qBACa,sBAAuB,SAAQ,gBAAgB,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAK9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAP3C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;gBAG7C,sBAAsB,EAAE,4BAA4B,EACpD,sBAAsB,EAAE,4BAA4B,EACpD,qBAAqB,EAAE,2BAA2B,EAClD,sBAAsB,EAAE,4BAA4B;IAKzE;;;;;;OAMG;IACa,cAAc,CAC1B,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EACtC,cAAc,UAAQ,GACvB,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAmDlD;;;;;OAKG;IACa,YAAY,CACxB,MAAM,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAC9C,eAAe,UAAQ,GACxB,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;cAoC1B,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;cAOrF,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;CAuCzG"}
@@ -13,8 +13,9 @@ import { GeminiMessageStartTranslator } from './gemini.message.start.translator'
13
13
  import { GeminiMessageDeltaTranslator } from './gemini.message.delta.translator';
14
14
  import { GeminiMessageStopTranslator } from './gemini.message.stop.translator';
15
15
  import { GeminiContentDeltaTranslator } from './gemini.content.delta.translator';
16
- import { toGeminiFinishReason } from '../../utils/finish.reason.mapper.js';
16
+ import { toGeminiFinishReason } from '../../utils/finish.reason.mapper';
17
17
  import { StreamTranslator } from "@holokai/holo-sdk/provider";
18
+ import { FinishReason } from "@google/genai";
18
19
  let GeminiStreamTranslator = class GeminiStreamTranslator extends StreamTranslator {
19
20
  messageStartTranslator;
20
21
  messageDeltaTranslator;
@@ -22,8 +23,6 @@ let GeminiStreamTranslator = class GeminiStreamTranslator extends StreamTranslat
22
23
  contentDeltaTranslator;
23
24
  holoDefaults = {};
24
25
  providerDefaults = {};
25
- isFirstChunk = true;
26
- hasEmittedStop = false;
27
26
  constructor(messageStartTranslator, messageDeltaTranslator, messageStopTranslator, contentDeltaTranslator) {
28
27
  super();
29
28
  this.messageStartTranslator = messageStartTranslator;
@@ -31,24 +30,104 @@ let GeminiStreamTranslator = class GeminiStreamTranslator extends StreamTranslat
31
30
  this.messageStopTranslator = messageStopTranslator;
32
31
  this.contentDeltaTranslator = contentDeltaTranslator;
33
32
  }
34
- async toHoloManyImpl(source) {
35
- const results = [];
36
- const candidate = source.candidates?.[0];
37
- if (this.isFirstChunk) {
38
- this.isFirstChunk = false;
39
- results.push(...await this.messageStartTranslator.toHoloMany(source));
33
+ /**
34
+ * Streams Holo chunks → gemini chunks with cross-chunk state in the
35
+ * generator's closure. Merges consecutive functionCall-only chunks
36
+ * (gemini wire packs parallel calls into one chunk's parts[]) and
37
+ * synthesises a trailing finishReason if the source stream ended
38
+ * without one.
39
+ */
40
+ async *fromHoloStream(source, validateTarget = false) {
41
+ this.contentDeltaTranslator.resetStreamState();
42
+ let pending = null;
43
+ let lastEmitted = null;
44
+ for await (const item of source) {
45
+ const raw = await this.fromHoloMany(item, validateTarget);
46
+ for (const chunk of raw) {
47
+ const candidate = chunk.candidates?.[0];
48
+ const parts = candidate?.content?.parts ?? [];
49
+ const isFnCallOnly = parts.length > 0
50
+ && parts.every(p => !!p.functionCall)
51
+ && !candidate?.finishReason;
52
+ if (isFnCallOnly) {
53
+ if (pending) {
54
+ pending.candidates[0].content.parts.push(...parts);
55
+ }
56
+ else {
57
+ pending = chunk;
58
+ }
59
+ continue;
60
+ }
61
+ if (pending) {
62
+ yield pending;
63
+ lastEmitted = pending;
64
+ pending = null;
65
+ }
66
+ yield chunk;
67
+ lastEmitted = chunk;
68
+ }
69
+ }
70
+ if (pending) {
71
+ yield pending;
72
+ lastEmitted = pending;
40
73
  }
41
- if (candidate?.content?.parts?.length) {
42
- results.push(...await this.contentDeltaTranslator.toHoloMany(source));
74
+ const lastHasFinishReason = !!lastEmitted?.candidates?.[0]?.finishReason;
75
+ if (!lastHasFinishReason) {
76
+ yield {
77
+ candidates: [{
78
+ content: { role: 'model', parts: [] },
79
+ finishReason: FinishReason.STOP,
80
+ index: 0,
81
+ }],
82
+ };
43
83
  }
44
- if (candidate?.finishReason) {
45
- results.push(...await this.messageDeltaTranslator.toHoloMany(source));
46
- if (!this.hasEmittedStop) {
47
- this.hasEmittedStop = true;
48
- results.push(...await this.messageStopTranslator.toHoloMany(source));
84
+ }
85
+ /**
86
+ * Streams gemini chunks → Holo with first-chunk synthesis state in the
87
+ * generator's closure. The first chunk emits an additional `message_start`
88
+ * Holo chunk, and the chunk carrying `finishReason` emits one trailing
89
+ * `message_stop` (and `message_delta` if usage is present).
90
+ */
91
+ async *toHoloStream(source, _validateTarget = false) {
92
+ let isFirstChunk = true;
93
+ let hasEmittedStop = false;
94
+ for await (const item of source) {
95
+ const candidate = item.candidates?.[0];
96
+ if (isFirstChunk) {
97
+ isFirstChunk = false;
98
+ for (const c of await this.messageStartTranslator.toHoloMany(item)) {
99
+ if (c && Object.keys(c).length > 0)
100
+ yield c;
101
+ }
102
+ }
103
+ if (candidate?.content?.parts?.length) {
104
+ for (const c of await this.contentDeltaTranslator.toHoloMany(item)) {
105
+ if (c && Object.keys(c).length > 0)
106
+ yield c;
107
+ }
108
+ }
109
+ if (candidate?.finishReason) {
110
+ if (item.usageMetadata) {
111
+ for (const c of await this.messageDeltaTranslator.toHoloMany(item)) {
112
+ if (c && Object.keys(c).length > 0)
113
+ yield c;
114
+ }
115
+ }
116
+ if (!hasEmittedStop) {
117
+ hasEmittedStop = true;
118
+ for (const c of await this.messageStopTranslator.toHoloMany(item)) {
119
+ if (c && Object.keys(c).length > 0)
120
+ yield c;
121
+ }
122
+ }
49
123
  }
50
124
  }
51
- return results;
125
+ }
126
+ async toHoloManyImpl(_source) {
127
+ // Stateless per-chunk implementation is not meaningful for gemini
128
+ // (first-chunk synthesis requires cross-chunk state). Streaming
129
+ // callers should use `toHoloStream`.
130
+ return [];
52
131
  }
53
132
  async fromHoloManyImpl(source) {
54
133
  const d = source.delta;
@@ -63,6 +142,9 @@ let GeminiStreamTranslator = class GeminiStreamTranslator extends StreamTranslat
63
142
  return this.messageStartTranslator.fromHoloMany(source);
64
143
  case 'message_delta': {
65
144
  const results = [];
145
+ if (d.delta?.tool_calls?.length) {
146
+ results.push(...await this.contentDeltaTranslator.fromHoloMany(source));
147
+ }
66
148
  results.push(...await this.messageDeltaTranslator.fromHoloMany(source));
67
149
  const geminiFinishReason = toGeminiFinishReason(source.finish_reason ?? undefined);
68
150
  if (geminiFinishReason) {
@@ -71,6 +153,7 @@ let GeminiStreamTranslator = class GeminiStreamTranslator extends StreamTranslat
71
153
  return results;
72
154
  }
73
155
  case 'content_delta':
156
+ case 'tool_arg_delta':
74
157
  return this.contentDeltaTranslator.fromHoloMany(source);
75
158
  case 'message_stop':
76
159
  return this.messageStopTranslator.fromHoloMany(source);
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.stream.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.stream.translator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAKrD,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,gBAA0D;IAQ7E;IACA;IACA;IACA;IAVX,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAAqC,EAAE,CAAC;IAE1D,YAAY,GAAG,IAAI,CAAC;IACpB,cAAc,GAAG,KAAK,CAAC;IAE/B,YACqB,sBAAoD,EACpD,sBAAoD,EACpD,qBAAkD,EAClD,sBAAoD;QAErE,KAAK,EAAE,CAAC;QALS,2BAAsB,GAAtB,sBAAsB,CAA8B;QACpD,2BAAsB,GAAtB,sBAAsB,CAA8B;QACpD,0BAAqB,GAArB,qBAAqB,CAA6B;QAClD,2BAAsB,GAAtB,sBAAsB,CAA8B;IAGzE,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,MAA+B;QAC1D,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,SAAS,EAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAEtE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC;QAC3E,IAAI,sBAAsB,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QAED,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACb,KAAK,eAAe;gBAChB,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE5D,KAAK,eAAe,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAuC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAExE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;gBACnF,IAAI,kBAAkB,EAAE,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBAED,OAAO,OAAO,CAAC;YACnB,CAAC;YAED,KAAK,eAAe;gBAChB,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE5D,KAAK,cAAc;gBACf,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE3D;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;CACJ,CAAA;AA5EY,sBAAsB;IADlC,UAAU,EAAE;qCASoC,4BAA4B;QAC5B,4BAA4B;QAC7B,2BAA2B;QAC1B,4BAA4B;GAXhE,sBAAsB,CA4ElC"}
1
+ {"version":3,"file":"gemini.stream.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/gemini.stream.translator.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.4.4";
1
+ export declare const VERSION = "1.5.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Auto-generated — do not edit
2
- export const VERSION = "1.4.4";
2
+ export const VERSION = "1.5.0";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holokai/holo-provider-gemini",
3
- "version": "1.4.4",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "description": "Google Gemini provider plugin for Holo LLM Gateway",
6
6
  "author": "Holokai",
@@ -66,5 +66,8 @@
66
66
  "@holokai/holo-test": "*",
67
67
  "@types/node": "^24.0.11",
68
68
  "typescript": "^5.8.3"
69
+ },
70
+ "holoPlugin": {
71
+ "type": "PROVIDER"
69
72
  }
70
73
  }