@holokai/holo-provider-openai 0.1.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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +771 -0
  3. package/dist/index.d.ts +16 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +16 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/manifest.d.ts +3 -0
  8. package/dist/manifest.d.ts.map +1 -0
  9. package/dist/manifest.js +163 -0
  10. package/dist/manifest.js.map +1 -0
  11. package/dist/openai.auditor.d.ts +15 -0
  12. package/dist/openai.auditor.d.ts.map +1 -0
  13. package/dist/openai.auditor.js +164 -0
  14. package/dist/openai.auditor.js.map +1 -0
  15. package/dist/openai.provider.d.ts +24 -0
  16. package/dist/openai.provider.d.ts.map +1 -0
  17. package/dist/openai.provider.js +111 -0
  18. package/dist/openai.provider.js.map +1 -0
  19. package/dist/openai.response.factory.d.ts +8 -0
  20. package/dist/openai.response.factory.d.ts.map +1 -0
  21. package/dist/openai.response.factory.js +15 -0
  22. package/dist/openai.response.factory.js.map +1 -0
  23. package/dist/openai.translator.d.ts +22 -0
  24. package/dist/openai.translator.d.ts.map +1 -0
  25. package/dist/openai.translator.js +74 -0
  26. package/dist/openai.translator.js.map +1 -0
  27. package/dist/openai.wire.adapter.d.ts +12 -0
  28. package/dist/openai.wire.adapter.d.ts.map +1 -0
  29. package/dist/openai.wire.adapter.js +17 -0
  30. package/dist/openai.wire.adapter.js.map +1 -0
  31. package/dist/plugin.d.ts +14 -0
  32. package/dist/plugin.d.ts.map +1 -0
  33. package/dist/plugin.js +59 -0
  34. package/dist/plugin.js.map +1 -0
  35. package/dist/services/index.d.ts +2 -0
  36. package/dist/services/index.d.ts.map +1 -0
  37. package/dist/services/index.js +2 -0
  38. package/dist/services/index.js.map +1 -0
  39. package/dist/services/openai.chatcompletions.service.d.ts +12 -0
  40. package/dist/services/openai.chatcompletions.service.d.ts.map +1 -0
  41. package/dist/services/openai.chatcompletions.service.js +66 -0
  42. package/dist/services/openai.chatcompletions.service.js.map +1 -0
  43. package/dist/translators/index.d.ts +10 -0
  44. package/dist/translators/index.d.ts.map +1 -0
  45. package/dist/translators/index.js +10 -0
  46. package/dist/translators/index.js.map +1 -0
  47. package/dist/translators/openai.chatcompletion.request.translators.d.ts +23 -0
  48. package/dist/translators/openai.chatcompletion.request.translators.d.ts.map +1 -0
  49. package/dist/translators/openai.chatcompletion.request.translators.js +201 -0
  50. package/dist/translators/openai.chatcompletion.request.translators.js.map +1 -0
  51. package/dist/translators/openai.chatcompletion.response.translators.d.ts +18 -0
  52. package/dist/translators/openai.chatcompletion.response.translators.d.ts.map +1 -0
  53. package/dist/translators/openai.chatcompletion.response.translators.js +117 -0
  54. package/dist/translators/openai.chatcompletion.response.translators.js.map +1 -0
  55. package/dist/translators/openai.content.translators.d.ts +28 -0
  56. package/dist/translators/openai.content.translators.d.ts.map +1 -0
  57. package/dist/translators/openai.content.translators.js +100 -0
  58. package/dist/translators/openai.content.translators.js.map +1 -0
  59. package/dist/translators/openai.message.translators.d.ts +15 -0
  60. package/dist/translators/openai.message.translators.d.ts.map +1 -0
  61. package/dist/translators/openai.message.translators.js +144 -0
  62. package/dist/translators/openai.message.translators.js.map +1 -0
  63. package/dist/translators/openai.response.message.translators.d.ts +12 -0
  64. package/dist/translators/openai.response.message.translators.d.ts.map +1 -0
  65. package/dist/translators/openai.response.message.translators.js +100 -0
  66. package/dist/translators/openai.response.message.translators.js.map +1 -0
  67. package/dist/translators/openai.responses.request.translators.d.ts +10 -0
  68. package/dist/translators/openai.responses.request.translators.d.ts.map +1 -0
  69. package/dist/translators/openai.responses.request.translators.js +172 -0
  70. package/dist/translators/openai.responses.request.translators.js.map +1 -0
  71. package/dist/translators/openai.tool.translators.d.ts +19 -0
  72. package/dist/translators/openai.tool.translators.d.ts.map +1 -0
  73. package/dist/translators/openai.tool.translators.js +80 -0
  74. package/dist/translators/openai.tool.translators.js.map +1 -0
  75. package/dist/translators/openai.usage.translators.d.ts +12 -0
  76. package/dist/translators/openai.usage.translators.d.ts.map +1 -0
  77. package/dist/translators/openai.usage.translators.js +42 -0
  78. package/dist/translators/openai.usage.translators.js.map +1 -0
  79. package/dist/translators/streaming/index.d.ts +6 -0
  80. package/dist/translators/streaming/index.d.ts.map +1 -0
  81. package/dist/translators/streaming/index.js +6 -0
  82. package/dist/translators/streaming/index.js.map +1 -0
  83. package/dist/translators/streaming/openai.content.delta.translator.d.ts +12 -0
  84. package/dist/translators/streaming/openai.content.delta.translator.d.ts.map +1 -0
  85. package/dist/translators/streaming/openai.content.delta.translator.js +82 -0
  86. package/dist/translators/streaming/openai.content.delta.translator.js.map +1 -0
  87. package/dist/translators/streaming/openai.message.delta.translator.d.ts +12 -0
  88. package/dist/translators/streaming/openai.message.delta.translator.d.ts.map +1 -0
  89. package/dist/translators/streaming/openai.message.delta.translator.js +152 -0
  90. package/dist/translators/streaming/openai.message.delta.translator.js.map +1 -0
  91. package/dist/translators/streaming/openai.message.start.translator.d.ts +12 -0
  92. package/dist/translators/streaming/openai.message.start.translator.d.ts.map +1 -0
  93. package/dist/translators/streaming/openai.message.start.translator.js +80 -0
  94. package/dist/translators/streaming/openai.message.start.translator.js.map +1 -0
  95. package/dist/translators/streaming/openai.message.stop.translator.d.ts +14 -0
  96. package/dist/translators/streaming/openai.message.stop.translator.d.ts.map +1 -0
  97. package/dist/translators/streaming/openai.message.stop.translator.js +112 -0
  98. package/dist/translators/streaming/openai.message.stop.translator.js.map +1 -0
  99. package/dist/translators/streaming/openai.stream.translator.d.ts +20 -0
  100. package/dist/translators/streaming/openai.stream.translator.d.ts.map +1 -0
  101. package/dist/translators/streaming/openai.stream.translator.js +86 -0
  102. package/dist/translators/streaming/openai.stream.translator.js.map +1 -0
  103. package/package.json +72 -0
@@ -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 OpenAITranslator_1;
11
+ import 'reflect-metadata';
12
+ import { injectable } from "tsyringe";
13
+ import { OpenAIContentTranslator, OpenAIImageContentTranslator, OpenAIMessageTranslator, OpenAIRequestTranslator, OpenAIResponseMessageTranslator, OpenAIResponseTranslator, OpenAIStreamTranslator, OpenAITextContentTranslator, OpenAIToolChoiceTranslator, OpenAIToolTranslator, OpenAIUsageTranslator } from "./translators";
14
+ import { OpenAIContentDeltaTranslator, OpenAIMessageDeltaTranslator, OpenAIMessageStartTranslator, OpenAIMessageStopTranslator } from "./translators/streaming";
15
+ let OpenAITranslator = OpenAITranslator_1 = class OpenAITranslator {
16
+ responseTranslator;
17
+ requestTranslator;
18
+ messageTranslator;
19
+ streamTranslator;
20
+ constructor(responseTranslator, requestTranslator, messageTranslator, streamTranslator) {
21
+ this.responseTranslator = responseTranslator;
22
+ this.requestTranslator = requestTranslator;
23
+ this.messageTranslator = messageTranslator;
24
+ this.streamTranslator = streamTranslator;
25
+ }
26
+ static instance() {
27
+ const textContentTranslator = new OpenAITextContentTranslator();
28
+ const imageContentTranslator = new OpenAIImageContentTranslator();
29
+ const contentTranslator = new OpenAIContentTranslator(textContentTranslator, imageContentTranslator);
30
+ const messageTranslator = new OpenAIMessageTranslator(contentTranslator);
31
+ const toolTranslator = new OpenAIToolTranslator();
32
+ const toolChoiceTranslator = new OpenAIToolChoiceTranslator();
33
+ const requestTranslator = new OpenAIRequestTranslator(messageTranslator, toolTranslator, toolChoiceTranslator);
34
+ const usageTranslator = new OpenAIUsageTranslator();
35
+ const responseMessageTranslator = new OpenAIResponseMessageTranslator();
36
+ const responseTranslator = new OpenAIResponseTranslator(responseMessageTranslator, usageTranslator);
37
+ const messageStartTranslator = new OpenAIMessageStartTranslator();
38
+ const contentDeltaTranslator = new OpenAIContentDeltaTranslator();
39
+ const messageDeltaTranslator = new OpenAIMessageDeltaTranslator();
40
+ const messageStopTranslator = new OpenAIMessageStopTranslator();
41
+ const streamTranslator = new OpenAIStreamTranslator(messageStartTranslator, contentDeltaTranslator, messageDeltaTranslator, messageStopTranslator);
42
+ return new OpenAITranslator_1(responseTranslator, requestTranslator, messageTranslator, streamTranslator);
43
+ }
44
+ async fromHoloResponse(response) {
45
+ return this.responseTranslator.fromHolo(response);
46
+ }
47
+ async toHoloResponse(response) {
48
+ return this.responseTranslator.toHolo(response);
49
+ }
50
+ async fromHoloRequest(request) {
51
+ return this.requestTranslator.fromHolo(request);
52
+ }
53
+ async toHoloRequest(request) {
54
+ return this.requestTranslator.toHolo(request);
55
+ }
56
+ async fromHoloMessages(messages) {
57
+ return this.messageTranslator.fromHoloArray(messages);
58
+ }
59
+ async toHoloMessages(messages) {
60
+ return this.messageTranslator.toHoloArray(messages);
61
+ }
62
+ async fromHoloStreamChunks(chunks) {
63
+ return this.streamTranslator.fromHoloManyArray(chunks);
64
+ }
65
+ };
66
+ OpenAITranslator = OpenAITranslator_1 = __decorate([
67
+ injectable(),
68
+ __metadata("design:paramtypes", [OpenAIResponseTranslator,
69
+ OpenAIRequestTranslator,
70
+ OpenAIMessageTranslator,
71
+ OpenAIStreamTranslator])
72
+ ], OpenAITranslator);
73
+ export { OpenAITranslator };
74
+ //# sourceMappingURL=openai.translator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.translator.js","sourceRoot":"","sources":["../src/openai.translator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { BaseWireAdapter, ProviderEvent, WireChunk } from "@holokai/sdk";
2
+ import { ResponseStreamEvent } from "openai/resources/responses/responses";
3
+ export declare class OpenAICompletionsWireAdapter extends BaseWireAdapter {
4
+ formatWire(data: string | any): string;
5
+ protected onDoneStreaming(ev: Extract<ProviderEvent, {
6
+ type: "done";
7
+ }>): WireChunk[];
8
+ }
9
+ export declare class OpenAIResponsesWireAdapter extends BaseWireAdapter {
10
+ formatWire(data: ResponseStreamEvent): string;
11
+ }
12
+ //# sourceMappingURL=openai.wire.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.wire.adapter.d.ts","sourceRoot":"","sources":["../src/openai.wire.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AACvE,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AAEzE,qBAAa,4BAA6B,SAAQ,eAAe;IAEtD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM;IAI7C,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,EAAE;CAGvF;AAGD,qBAAa,0BAA2B,SAAQ,eAAe;IAC3D,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;CAKhD"}
@@ -0,0 +1,17 @@
1
+ import { BaseWireAdapter } from "@holokai/sdk";
2
+ export class OpenAICompletionsWireAdapter extends BaseWireAdapter {
3
+ formatWire(data) {
4
+ return `data: ${typeof data === 'string' ? data : JSON.stringify(data)}\n\n`;
5
+ }
6
+ onDoneStreaming(ev) {
7
+ return [this.chunkify('[DONE]', ev, true)];
8
+ }
9
+ }
10
+ export class OpenAIResponsesWireAdapter extends BaseWireAdapter {
11
+ formatWire(data) {
12
+ const eventLine = `event: ${data.type}\n`;
13
+ const dataLine = `data: ${JSON.stringify(data)}\n\n`;
14
+ return eventLine + dataLine;
15
+ }
16
+ }
17
+ //# sourceMappingURL=openai.wire.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.wire.adapter.js","sourceRoot":"","sources":["../src/openai.wire.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAA2B,MAAM,cAAc,CAAC;AAGvE,MAAM,OAAO,4BAA6B,SAAQ,eAAe;IAEtD,UAAU,CAAC,IAAkB;QAChC,OAAO,SAAS,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACjF,CAAC;IAES,eAAe,CAAC,EAA4C;QAClE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;CACJ;AAGD,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IAC3D,UAAU,CAAC,IAAyB;QAChC,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,CAAA;QACzC,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QACrD,OAAO,SAAS,GAAG,QAAQ,CAAC;IAChC,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { BasePlugin, IProviderPlugin, PluginContext } from '@holokai/sdk/plugin';
2
+ import { IProvider, IWireAdapter, ProviderCapabilities, WireAdapterParams } from "@holokai/sdk/provider";
3
+ import { RouteTree } from "@holokai/sdk";
4
+ export declare class OpenAIProviderPlugin extends BasePlugin implements IProviderPlugin {
5
+ manifest: import("@holokai/sdk").PluginManifest;
6
+ translator: import("@holokai/sdk").IProviderTranslator;
7
+ createProvider(config: any): Promise<IProvider>;
8
+ createWireAdapter(params: WireAdapterParams): IWireAdapter;
9
+ getCapabilities(): ProviderCapabilities;
10
+ getRoutes(): RouteTree;
11
+ protected onInitialize(_context: PluginContext): Promise<void>;
12
+ protected onDestroy(): Promise<void>;
13
+ }
14
+ //# 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,EAAE,eAAe,EAAE,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAA4B,SAAS,EAAgB,MAAM,cAAc,CAAC;AAIjF,qBAAa,oBAAqB,SAAQ,UAAW,YAAW,eAAe;IAC3E,QAAQ,wCAAY;IACpB,UAAU,6CAA+B;IAEnC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IASrD,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,YAAY;IAO1D,eAAe,IAAI,oBAAoB;IAUvC,SAAS,IAAI,SAAS;IAyBtB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,59 @@
1
+ import { BasePlugin } from '@holokai/sdk/plugin';
2
+ import { manifest } from "./manifest.js";
3
+ import { OpenAIProvider } from "./openai.provider";
4
+ import { RequestType, RouteHandler } from "@holokai/sdk";
5
+ import { OpenAITranslator } from "./openai.translator";
6
+ import { OpenAICompletionsWireAdapter, OpenAIResponsesWireAdapter } from "./openai.wire.adapter";
7
+ export class OpenAIProviderPlugin extends BasePlugin {
8
+ manifest = manifest;
9
+ translator = OpenAITranslator.instance();
10
+ async createProvider(config) {
11
+ return new OpenAIProvider(this.name, this.family, this.version, config);
12
+ }
13
+ createWireAdapter(params) {
14
+ const { requestId, isStreaming, requestType } = params;
15
+ return requestType === RequestType.RESPONSES
16
+ ? new OpenAIResponsesWireAdapter(requestId, isStreaming)
17
+ : new OpenAICompletionsWireAdapter(requestId, isStreaming);
18
+ }
19
+ getCapabilities() {
20
+ return {
21
+ streaming: true,
22
+ tools: true,
23
+ vision: true,
24
+ functionCalling: true,
25
+ maxTokens: 128000
26
+ };
27
+ }
28
+ getRoutes() {
29
+ const routes = {
30
+ models: {
31
+ method: 'GET',
32
+ handler: RouteHandler.MODELS
33
+ },
34
+ chat: {
35
+ completions: {
36
+ method: 'POST',
37
+ requestType: RequestType.CHAT,
38
+ handler: RouteHandler.REQUEST
39
+ }
40
+ },
41
+ responses: {
42
+ method: 'POST',
43
+ requestType: RequestType.RESPONSES,
44
+ handler: RouteHandler.REQUEST
45
+ }
46
+ };
47
+ return {
48
+ ...routes,
49
+ v1: routes
50
+ };
51
+ }
52
+ onInitialize(_context) {
53
+ return Promise.resolve();
54
+ }
55
+ onDestroy() {
56
+ return Promise.resolve();
57
+ }
58
+ }
59
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAiC,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAE,YAAY,EAA2B,MAAM,cAAc,CAAC;AACjF,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,4BAA4B,EAAE,0BAA0B,EAAC,MAAM,uBAAuB,CAAC;AAE/F,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAChD,QAAQ,GAAG,QAAQ,CAAC;IACpB,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IAEzC,KAAK,CAAC,cAAc,CAAC,MAAW;QAC5B,OAAO,IAAI,cAAc,CACrB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,MAAM,CACT,CAAC;IACN,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACvC,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,MAAM,CAAC;QACrD,OAAO,WAAW,KAAK,WAAW,CAAC,SAAS;YACxC,CAAC,CAAC,IAAI,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC;YACxD,CAAC,CAAC,IAAI,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,eAAe;QACX,OAAO;YACH,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,MAAM;SACpB,CAAC;IACN,CAAC;IAED,SAAS;QACL,MAAM,MAAM,GAAkB;YAC1B,MAAM,EAAE;gBACJ,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,YAAY,CAAC,MAAM;aAC/B;YACD,IAAI,EAAE;gBACF,WAAW,EAAE;oBACT,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,WAAW,CAAC,IAAI;oBAC7B,OAAO,EAAE,YAAY,CAAC,OAAO;iBAChC;aACJ;YACD,SAAS,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,WAAW,CAAC,SAAS;gBAClC,OAAO,EAAE,YAAY,CAAC,OAAO;aAChC;SACJ,CAAC;QACF,OAAO;YACH,GAAG,MAAM;YACT,EAAE,EAAE,MAAM;SACb,CAAA;IACL,CAAC;IAES,YAAY,CAAC,QAAuB;QAC1C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAES,SAAS;QACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CAEJ"}
@@ -0,0 +1,2 @@
1
+ export * from './openai.chatcompletions.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './openai.chatcompletions.service';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import OpenAI from 'openai';
2
+ import { HoloWorkerResponse } from "@holokai/sdk";
3
+ import type { ChatCompletionCreateParamsBase } from "openai/resources/chat/completions";
4
+ export declare class OpenAIChatCompletionsService {
5
+ private readonly client;
6
+ private readonly createWorkerResponse;
7
+ private readonly onResponseChunk;
8
+ private readonly validateModel;
9
+ constructor(client: OpenAI, createWorkerResponse: (sourceId: string, requestId: string, providerType: any, payload: any, fullResponse?: string) => HoloWorkerResponse, onResponseChunk: (responseChunk: HoloWorkerResponse, auditEnabled?: boolean) => Promise<void>, validateModel: (model: string) => void);
10
+ execute(sourceId: string, requestId: string, chatRequest: ChatCompletionCreateParamsBase): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=openai.chatcompletions.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletions.service.d.ts","sourceRoot":"","sources":["../../src/services/openai.chatcompletions.service.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAEtF,qBAAa,4BAA4B;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAOrC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBATb,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,EACZ,YAAY,CAAC,EAAE,MAAM,KACpB,kBAAkB,EACN,eAAe,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7F,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAIrD,OAAO,CACT,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,IAAI,CAAC;CAyDnB"}
@@ -0,0 +1,66 @@
1
+ export class OpenAIChatCompletionsService {
2
+ client;
3
+ createWorkerResponse;
4
+ onResponseChunk;
5
+ validateModel;
6
+ constructor(client, createWorkerResponse, onResponseChunk, validateModel) {
7
+ this.client = client;
8
+ this.createWorkerResponse = createWorkerResponse;
9
+ this.onResponseChunk = onResponseChunk;
10
+ this.validateModel = validateModel;
11
+ }
12
+ async execute(sourceId, requestId, chatRequest) {
13
+ this.validateModel(chatRequest.model);
14
+ let fullResponse = '';
15
+ if (chatRequest.stream) {
16
+ chatRequest.stream_options = { include_usage: true };
17
+ }
18
+ const response = await this.client.chat.completions.create(chatRequest);
19
+ const startTime = Date.now();
20
+ let timeToFirst = 0;
21
+ if (chatRequest.stream) {
22
+ try {
23
+ // @ts-ignore
24
+ for await (const chunk of response) {
25
+ if (chunk?.usage) {
26
+ chunk.usage.timeToFirstToken = timeToFirst;
27
+ chunk.usage.totalProcessingTime = Date.now() - startTime;
28
+ const responseChunk = this.createWorkerResponse(sourceId, requestId, 'openai', chunk, fullResponse);
29
+ await this.onResponseChunk(responseChunk, true);
30
+ break;
31
+ }
32
+ const choice = chunk.choices?.[0];
33
+ if (choice?.delta) {
34
+ if (choice.delta.content) {
35
+ if (timeToFirst == 0)
36
+ timeToFirst = Date.now() - startTime;
37
+ const token = choice.delta.content;
38
+ fullResponse += token;
39
+ }
40
+ const responseChunk = this.createWorkerResponse(sourceId, requestId, 'openai', chunk);
41
+ await this.onResponseChunk(responseChunk);
42
+ }
43
+ }
44
+ }
45
+ catch (error) {
46
+ const errorResponse = this.createWorkerResponse(sourceId, requestId, 'openai', error);
47
+ await this.onResponseChunk(errorResponse, false);
48
+ }
49
+ }
50
+ else {
51
+ try {
52
+ const message = response;
53
+ if (message.choices && message.choices.length > 0) {
54
+ fullResponse = message.choices[0].message?.content || '';
55
+ }
56
+ const responseChunk = this.createWorkerResponse(sourceId, requestId, 'openai', response, fullResponse);
57
+ await this.onResponseChunk(responseChunk, true);
58
+ }
59
+ catch (error) {
60
+ const errorResponse = this.createWorkerResponse(sourceId, requestId, 'openai', error);
61
+ await this.onResponseChunk(errorResponse, false);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=openai.chatcompletions.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletions.service.js","sourceRoot":"","sources":["../../src/services/openai.chatcompletions.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './openai.chatcompletion.request.translators';
2
+ export * from './openai.chatcompletion.response.translators';
3
+ export * from './openai.content.translators';
4
+ export * from './openai.message.translators';
5
+ export * from './openai.response.message.translators';
6
+ export * from './openai.responses.request.translators';
7
+ export * from './openai.tool.translators';
8
+ export * from './openai.usage.translators';
9
+ export * from './streaming/openai.stream.translator';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './openai.chatcompletion.request.translators';
2
+ export * from './openai.chatcompletion.response.translators';
3
+ export * from './openai.content.translators';
4
+ export * from './openai.message.translators';
5
+ export * from './openai.response.message.translators';
6
+ export * from './openai.responses.request.translators';
7
+ export * from './openai.tool.translators';
8
+ export * from './openai.usage.translators';
9
+ export * from './streaming/openai.stream.translator';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { OpenAIMessageTranslator } from "./openai.message.translators";
2
+ import { OpenAIToolChoiceTranslator, OpenAIToolTranslator } from "./openai.tool.translators";
3
+ import { BaseTranslator, HoloRequest } from "@holokai/sdk";
4
+ import { ChatCompletionCreateParamsBase } from "openai/resources/chat/completions";
5
+ /**
6
+ * OpenAI Request Translator
7
+ *
8
+ * Validator alignment requirements:
9
+ * - ChatCompletionCreateParamsBaseValidator should include max_completion_tokens? and safety_identifier?
10
+ * - Legacy max_tokens? and user? can be accepted for backward compatibility
11
+ * - HoloRequestValidator remains unchanged
12
+ */
13
+ export declare class OpenAIRequestTranslator extends BaseTranslator<HoloRequest, ChatCompletionCreateParamsBase> {
14
+ private readonly messageTranslator;
15
+ private readonly toolTranslator;
16
+ private readonly toolChoiceTranslator;
17
+ protected holoDefaults: Partial<HoloRequest>;
18
+ protected providerDefaults: Partial<ChatCompletionCreateParamsBase>;
19
+ constructor(messageTranslator: OpenAIMessageTranslator, toolTranslator: OpenAIToolTranslator, toolChoiceTranslator: OpenAIToolChoiceTranslator);
20
+ protected fromHoloImpl(source: HoloRequest): Promise<Partial<ChatCompletionCreateParamsBase>>;
21
+ protected toHoloImpl(source: ChatCompletionCreateParamsBase): Promise<Partial<HoloRequest>>;
22
+ }
23
+ //# sourceMappingURL=openai.chatcompletion.request.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletion.request.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.chatcompletion.request.translators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAC,0BAA0B,EAAE,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAE3F,OAAO,EACH,cAAc,EAEd,WAAW,EAKd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAQjF;;;;;;;GAOG;AACH,qBACa,uBAAwB,SAAQ,cAAc,CAAC,WAAW,EAAE,8BAA8B,CAAC;IAKhG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IANzC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAM;gBAGpD,iBAAiB,EAAE,uBAAuB,EAC1C,cAAc,EAAE,oBAAoB,EACpC,oBAAoB,EAAE,0BAA0B;cAKrD,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;cA0FnF,UAAU,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CA2FpG"}
@@ -0,0 +1,201 @@
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 { OpenAIMessageTranslator } from "./openai.message.translators";
11
+ import { OpenAIToolChoiceTranslator, OpenAIToolTranslator } from "./openai.tool.translators";
12
+ import { injectable } from 'tsyringe';
13
+ import { BaseTranslator, pickDefined } from "@holokai/sdk";
14
+ /**
15
+ * OpenAI Request Translator
16
+ *
17
+ * Validator alignment requirements:
18
+ * - ChatCompletionCreateParamsBaseValidator should include max_completion_tokens? and safety_identifier?
19
+ * - Legacy max_tokens? and user? can be accepted for backward compatibility
20
+ * - HoloRequestValidator remains unchanged
21
+ */
22
+ let OpenAIRequestTranslator = class OpenAIRequestTranslator extends BaseTranslator {
23
+ messageTranslator;
24
+ toolTranslator;
25
+ toolChoiceTranslator;
26
+ holoDefaults = {};
27
+ providerDefaults = {};
28
+ constructor(messageTranslator, toolTranslator, toolChoiceTranslator) {
29
+ super();
30
+ this.messageTranslator = messageTranslator;
31
+ this.toolTranslator = toolTranslator;
32
+ this.toolChoiceTranslator = toolChoiceTranslator;
33
+ }
34
+ async fromHoloImpl(source) {
35
+ // Map service tier (only 'auto' | 'default' forwarded to OpenAI, 'standard_only' dropped)
36
+ const serviceTierMap = {
37
+ 'auto': 'auto',
38
+ 'default': 'default'
39
+ };
40
+ const mappedServiceTier = source.service_tier ? serviceTierMap[source.service_tier] : undefined;
41
+ // Handle response format
42
+ let response_format;
43
+ if (source.response_format) {
44
+ const format = source.response_format;
45
+ if (format.type === 'json_object') {
46
+ response_format = { type: 'json_object' };
47
+ }
48
+ else if (format.type === 'json_schema') {
49
+ response_format = {
50
+ type: 'json_schema',
51
+ json_schema: {
52
+ name: 'holo',
53
+ schema: format.schema,
54
+ ...(format.strict !== undefined && { strict: format.strict })
55
+ }
56
+ };
57
+ }
58
+ }
59
+ //deprecated max_tokens and user
60
+ const result = pickDefined({
61
+ model: source.model,
62
+ max_completion_tokens: source.max_tokens,
63
+ //max_tokens: source.max_tokens,
64
+ temperature: source.temperature,
65
+ top_p: source.top_p,
66
+ frequency_penalty: source.frequency_penalty,
67
+ presence_penalty: source.presence_penalty,
68
+ seed: source.seed,
69
+ stream: source.stream,
70
+ service_tier: mappedServiceTier,
71
+ safety_identifier: source.metadata?.user_id,
72
+ //user: source.metadata?.user_id,
73
+ stop: source.stop_sequences,
74
+ response_format
75
+ });
76
+ // Handle messages and system (build locally, then assign)
77
+ const messages = [];
78
+ if (source.system) {
79
+ messages.push({
80
+ role: 'system',
81
+ content: source.system
82
+ });
83
+ }
84
+ if (source.messages?.length) {
85
+ const openaiMessages = await Promise.all(source.messages.map(async (message) => await this.messageTranslator.fromHolo(message)));
86
+ const validMessages = openaiMessages.filter((msg) => Object.keys(msg).length > 0);
87
+ if (validMessages.length > 0) {
88
+ messages.push(...validMessages);
89
+ }
90
+ }
91
+ if (messages.length) {
92
+ result.messages = messages;
93
+ }
94
+ // Handle tools
95
+ if (source.tools?.length) {
96
+ const mapped = await Promise.all(source.tools.map(tool => this.toolTranslator.fromHolo(tool)));
97
+ const validTools = mapped.filter((tool) => Object.keys(tool).length > 0);
98
+ if (validTools.length > 0) {
99
+ result.tools = validTools;
100
+ }
101
+ }
102
+ // Handle tool choice
103
+ if (source.tool_choice) {
104
+ const toolChoice = await this.toolChoiceTranslator.fromHolo(source.tool_choice);
105
+ if (Object.keys(toolChoice).length > 0) {
106
+ result.tool_choice = toolChoice;
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ async toHoloImpl(source) {
112
+ // Handle stop sequences
113
+ const stopSequences = source.stop ?
114
+ (Array.isArray(source.stop) ? source.stop : [source.stop]) :
115
+ undefined;
116
+ // Handle metadata: prefer safety_identifier, fallback to user
117
+ const metadata = source.safety_identifier
118
+ ? { user_id: source.safety_identifier }
119
+ : (source.user ? { user_id: source.user } : undefined);
120
+ // Handle response format
121
+ let response_format;
122
+ if (source.response_format) {
123
+ const format = source.response_format;
124
+ if (format.type === 'json_object') {
125
+ response_format = { type: 'json_object' };
126
+ }
127
+ else if (format.type === 'json_schema' && format.json_schema.schema) {
128
+ response_format = {
129
+ type: 'json_schema',
130
+ schema: format.json_schema.schema,
131
+ ...(typeof format.json_schema.strict === 'boolean' && { strict: format.json_schema.strict })
132
+ };
133
+ }
134
+ }
135
+ const result = pickDefined({
136
+ model: source.model,
137
+ max_tokens: source.max_completion_tokens ?? source.max_tokens,
138
+ temperature: source.temperature,
139
+ top_p: source.top_p,
140
+ frequency_penalty: source.frequency_penalty,
141
+ presence_penalty: source.presence_penalty,
142
+ seed: source.seed,
143
+ stream: source.stream,
144
+ stop_sequences: stopSequences,
145
+ metadata,
146
+ response_format,
147
+ });
148
+ // Handle messages and system
149
+ if (source.messages?.length) {
150
+ let system;
151
+ const regular = [];
152
+ for (const message of source.messages) {
153
+ if (message.role === 'system' && system == null) {
154
+ if (typeof message.content === 'string') {
155
+ system = message.content;
156
+ }
157
+ else if (Array.isArray(message.content)) {
158
+ system = await this.messageTranslator.flattenText(message.content);
159
+ }
160
+ }
161
+ else {
162
+ regular.push(message);
163
+ }
164
+ }
165
+ if (regular.length) {
166
+ const holoMessages = await Promise.all(regular.map(m => this.messageTranslator.toHolo(m)));
167
+ const validMessages = holoMessages.filter(m => Object.keys(m).length > 0);
168
+ if (validMessages.length) {
169
+ result.messages = validMessages;
170
+ }
171
+ }
172
+ if (system) {
173
+ result.system = system;
174
+ }
175
+ }
176
+ // Handle tools
177
+ if (source.tools?.length) {
178
+ const mapped = await Promise.all(source.tools.map(tool => this.toolTranslator.toHolo(tool)));
179
+ const validTools = mapped.filter(tool => Object.keys(tool).length > 0);
180
+ if (validTools.length) {
181
+ result.tools = validTools;
182
+ }
183
+ }
184
+ // Handle tool choice
185
+ if (source.tool_choice) {
186
+ const toolChoice = await this.toolChoiceTranslator.toHolo(source.tool_choice);
187
+ if (Object.keys(toolChoice).length > 0) {
188
+ result.tool_choice = toolChoice;
189
+ }
190
+ }
191
+ return result;
192
+ }
193
+ };
194
+ OpenAIRequestTranslator = __decorate([
195
+ injectable(),
196
+ __metadata("design:paramtypes", [OpenAIMessageTranslator,
197
+ OpenAIToolTranslator,
198
+ OpenAIToolChoiceTranslator])
199
+ ], OpenAIRequestTranslator);
200
+ export { OpenAIRequestTranslator };
201
+ //# sourceMappingURL=openai.chatcompletion.request.translators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletion.request.translators.js","sourceRoot":"","sources":["../../src/translators/openai.chatcompletion.request.translators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import 'reflect-metadata';
2
+ import { OpenAIResponseMessageTranslator } from "./openai.response.message.translators";
3
+ import { OpenAIUsageTranslator } from "./openai.usage.translators";
4
+ import { HoloResponse } from "@holokai/sdk";
5
+ import { BaseTranslator } from "@holokai/sdk/provider";
6
+ import { ChatCompletion, ChatCompletionChunk } from "openai/resources/chat/completions/completions";
7
+ export declare class OpenAIResponseTranslator extends BaseTranslator<HoloResponse, ChatCompletion | ChatCompletionChunk> {
8
+ private readonly responseMessageTranslator;
9
+ private readonly usageTranslator;
10
+ protected holoDefaults: Partial<HoloResponse>;
11
+ protected providerDefaults: Partial<ChatCompletion | ChatCompletionChunk>;
12
+ constructor(responseMessageTranslator: OpenAIResponseMessageTranslator, usageTranslator: OpenAIUsageTranslator);
13
+ protected fromHoloImpl(source: HoloResponse): Promise<Partial<ChatCompletion | ChatCompletionChunk>>;
14
+ protected toHoloImpl(source: ChatCompletion | ChatCompletionChunk): Promise<Partial<HoloResponse>>;
15
+ private mapFinishReasonFromHolo;
16
+ private mapFinishReasonToHolo;
17
+ }
18
+ //# sourceMappingURL=openai.chatcompletion.response.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletion.response.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.chatcompletion.response.translators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,+BAA+B,EAAC,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAgC,YAAY,EAAc,MAAM,cAAc,CAAC;AACtF,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,+CAA+C,CAAC;AAElG,qBACa,wBAAyB,SAAQ,cAAc,CAAC,YAAY,EAAE,cAAc,GAAG,mBAAmB,CAAC;IAKxG,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe;IALpC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAM;IACnD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAM;gBAG1D,yBAAyB,EAAE,+BAA+B,EAC1D,eAAe,EAAE,qBAAqB;cAK3C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC;cAsC1F,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IA4BxG,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,qBAAqB;CAgBhC"}