@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,117 @@
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 { OpenAIResponseMessageTranslator } from "./openai.response.message.translators";
12
+ import { OpenAIUsageTranslator } from "./openai.usage.translators";
13
+ import { injectable } from 'tsyringe';
14
+ import { pickDefined } from "@holokai/sdk";
15
+ import { BaseTranslator } from "@holokai/sdk/provider";
16
+ let OpenAIResponseTranslator = class OpenAIResponseTranslator extends BaseTranslator {
17
+ responseMessageTranslator;
18
+ usageTranslator;
19
+ holoDefaults = {};
20
+ providerDefaults = {};
21
+ constructor(responseMessageTranslator, usageTranslator) {
22
+ super();
23
+ this.responseMessageTranslator = responseMessageTranslator;
24
+ this.usageTranslator = usageTranslator;
25
+ }
26
+ async fromHoloImpl(source) {
27
+ // Build message (let the message translator decide content null vs empty)
28
+ const message = source.messages?.length
29
+ ? await this.responseMessageTranslator.fromHolo(source.messages[0])
30
+ : undefined;
31
+ const usage = source.usage
32
+ ? await this.usageTranslator.fromHolo(source.usage)
33
+ : undefined;
34
+ // Choice
35
+ const choice = pickDefined({
36
+ index: 0,
37
+ message, // omit if undefined
38
+ finish_reason: this.mapFinishReasonFromHolo(source.finish_reason),
39
+ // logprobs: undefined // omit unless you actually have it
40
+ });
41
+ // Only include choices if we have a message
42
+ const choices = message ? [choice] : undefined;
43
+ const createdSec = typeof source.created === 'number'
44
+ ? Math.floor(source.created / 1000)
45
+ : Math.floor(Date.now() / 1000);
46
+ // If we ended up without a message/choices and no id/model, return {}
47
+ return pickDefined({
48
+ id: source.id, // omit if undefined
49
+ object: 'chat.completion',
50
+ created: createdSec,
51
+ model: source.model,
52
+ choices,
53
+ usage // omit if undefined
54
+ });
55
+ }
56
+ async toHoloImpl(source) {
57
+ if ('choices' in source && source.choices?.length) {
58
+ const completion = source;
59
+ const choice = completion.choices[0];
60
+ if (!choice?.message)
61
+ return {};
62
+ const holoMessage = await this.responseMessageTranslator.toHolo(choice.message);
63
+ const messages = Object.keys(holoMessage).length ? [holoMessage] : undefined;
64
+ const usage = completion.usage
65
+ ? await this.usageTranslator.toHolo(completion.usage)
66
+ : undefined;
67
+ return pickDefined({
68
+ id: completion.id,
69
+ model: completion.model,
70
+ messages, // omit if undefined
71
+ finish_reason: this.mapFinishReasonToHolo(choice.finish_reason),
72
+ created: completion.created ? completion.created * 1000 : Date.now(),
73
+ usage, // omit if undefined
74
+ });
75
+ }
76
+ // Streaming handled elsewhere
77
+ return {};
78
+ }
79
+ mapFinishReasonFromHolo(reason) {
80
+ switch (reason) {
81
+ case 'stop':
82
+ return 'stop';
83
+ case 'length':
84
+ return 'length';
85
+ case 'tool_calls':
86
+ case 'function_call':
87
+ return 'tool_calls';
88
+ case 'content_filter':
89
+ return 'content_filter';
90
+ default:
91
+ return 'stop'; // Default to 'stop' instead of null
92
+ }
93
+ }
94
+ mapFinishReasonToHolo(reason) {
95
+ switch (reason) {
96
+ case 'stop':
97
+ return 'stop';
98
+ case 'length':
99
+ return 'length';
100
+ case 'tool_calls':
101
+ return 'tool_calls';
102
+ case 'function_call':
103
+ return 'function_call';
104
+ case 'content_filter':
105
+ return 'content_filter';
106
+ default:
107
+ return null;
108
+ }
109
+ }
110
+ };
111
+ OpenAIResponseTranslator = __decorate([
112
+ injectable(),
113
+ __metadata("design:paramtypes", [OpenAIResponseMessageTranslator,
114
+ OpenAIUsageTranslator])
115
+ ], OpenAIResponseTranslator);
116
+ export { OpenAIResponseTranslator };
117
+ //# sourceMappingURL=openai.chatcompletion.response.translators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.chatcompletion.response.translators.js","sourceRoot":"","sources":["../../src/translators/openai.chatcompletion.response.translators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import 'reflect-metadata';
2
+ import { BaseTranslator } from "@holokai/sdk/provider";
3
+ import { HoloContent, HoloContentImage, HoloContentText } from "@holokai/sdk";
4
+ import { ChatCompletionContentPart, ChatCompletionContentPartImage, ChatCompletionContentPartText } from "openai/resources/chat/completions/completions";
5
+ export declare class OpenAITextContentTranslator extends BaseTranslator<HoloContentText, ChatCompletionContentPartText> {
6
+ protected holoDefaults: Partial<HoloContentText>;
7
+ protected providerDefaults: Partial<ChatCompletionContentPartText>;
8
+ constructor();
9
+ protected fromHoloImpl(source: HoloContentText): Promise<Partial<ChatCompletionContentPartText>>;
10
+ protected toHoloImpl(source: ChatCompletionContentPartText): Promise<Partial<HoloContentText>>;
11
+ }
12
+ export declare class OpenAIImageContentTranslator extends BaseTranslator<HoloContentImage, ChatCompletionContentPartImage> {
13
+ protected holoDefaults: Partial<HoloContentImage>;
14
+ protected providerDefaults: Partial<ChatCompletionContentPartImage>;
15
+ constructor();
16
+ protected fromHoloImpl(source: HoloContentImage): Promise<Partial<ChatCompletionContentPartImage>>;
17
+ protected toHoloImpl(source: ChatCompletionContentPartImage): Promise<Partial<HoloContentImage>>;
18
+ }
19
+ export declare class OpenAIContentTranslator extends BaseTranslator<HoloContent, ChatCompletionContentPart> {
20
+ private readonly textContentTranslator;
21
+ private readonly imageContentTranslator;
22
+ protected holoDefaults: Partial<HoloContent>;
23
+ protected providerDefaults: Partial<ChatCompletionContentPart>;
24
+ constructor(textContentTranslator: OpenAITextContentTranslator, imageContentTranslator: OpenAIImageContentTranslator);
25
+ protected fromHoloImpl(source: HoloContent): Promise<Partial<ChatCompletionContentPart>>;
26
+ protected toHoloImpl(source: ChatCompletionContentPart): Promise<Partial<HoloContent>>;
27
+ }
28
+ //# sourceMappingURL=openai.content.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.content.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.content.translators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AAC5E,OAAO,EACH,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAChC,MAAM,+CAA+C,CAAC;AAEvD,qBACa,2BAA4B,SAAQ,cAAc,CAAC,eAAe,EAAE,6BAA6B,CAAC;IAC3G,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAM;;cAMxD,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;cAOtF,UAAU,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;CAMvG;AAED,qBACa,4BAA6B,SAAQ,cAAc,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;IAC9G,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAM;IACvD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAM;;cAMzD,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;cASxF,UAAU,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAMzG;AAED,qBACa,uBAAwB,SAAQ,cAAc,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAK3F,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAL3C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAM;gBAG/C,qBAAqB,EAAE,2BAA2B,EAClD,sBAAsB,EAAE,4BAA4B;cAKzD,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;cAW9E,UAAU,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAU/F"}
@@ -0,0 +1,100 @@
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
+ let OpenAITextContentTranslator = class OpenAITextContentTranslator extends BaseTranslator {
14
+ holoDefaults = {};
15
+ providerDefaults = {};
16
+ constructor() {
17
+ super();
18
+ }
19
+ async fromHoloImpl(source) {
20
+ return {
21
+ type: 'text',
22
+ text: source.text
23
+ };
24
+ }
25
+ async toHoloImpl(source) {
26
+ return {
27
+ type: 'text',
28
+ text: source.text
29
+ };
30
+ }
31
+ };
32
+ OpenAITextContentTranslator = __decorate([
33
+ injectable(),
34
+ __metadata("design:paramtypes", [])
35
+ ], OpenAITextContentTranslator);
36
+ export { OpenAITextContentTranslator };
37
+ let OpenAIImageContentTranslator = class OpenAIImageContentTranslator extends BaseTranslator {
38
+ holoDefaults = {};
39
+ providerDefaults = {};
40
+ constructor() {
41
+ super();
42
+ }
43
+ async fromHoloImpl(source) {
44
+ return {
45
+ type: 'image_url',
46
+ image_url: {
47
+ url: source.url
48
+ }
49
+ };
50
+ }
51
+ async toHoloImpl(source) {
52
+ return {
53
+ type: 'image',
54
+ url: source.image_url.url
55
+ };
56
+ }
57
+ };
58
+ OpenAIImageContentTranslator = __decorate([
59
+ injectable(),
60
+ __metadata("design:paramtypes", [])
61
+ ], OpenAIImageContentTranslator);
62
+ export { OpenAIImageContentTranslator };
63
+ let OpenAIContentTranslator = class OpenAIContentTranslator extends BaseTranslator {
64
+ textContentTranslator;
65
+ imageContentTranslator;
66
+ holoDefaults = {};
67
+ providerDefaults = {};
68
+ constructor(textContentTranslator, imageContentTranslator) {
69
+ super();
70
+ this.textContentTranslator = textContentTranslator;
71
+ this.imageContentTranslator = imageContentTranslator;
72
+ }
73
+ async fromHoloImpl(source) {
74
+ switch (source.type) {
75
+ case 'text':
76
+ return await this.textContentTranslator.fromHolo(source);
77
+ case 'image':
78
+ return await this.imageContentTranslator.fromHolo(source);
79
+ default:
80
+ return {};
81
+ }
82
+ }
83
+ async toHoloImpl(source) {
84
+ switch (source.type) {
85
+ case 'text':
86
+ return await this.textContentTranslator.toHolo(source);
87
+ case 'image_url':
88
+ return await this.imageContentTranslator.toHolo(source);
89
+ default:
90
+ return {};
91
+ }
92
+ }
93
+ };
94
+ OpenAIContentTranslator = __decorate([
95
+ injectable(),
96
+ __metadata("design:paramtypes", [OpenAITextContentTranslator,
97
+ OpenAIImageContentTranslator])
98
+ ], OpenAIContentTranslator);
99
+ export { OpenAIContentTranslator };
100
+ //# sourceMappingURL=openai.content.translators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.content.translators.js","sourceRoot":"","sources":["../../src/translators/openai.content.translators.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAS9C,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,cAA8D;IACjG,YAAY,GAA6B,EAAE,CAAC;IAC5C,gBAAgB,GAA2C,EAAE,CAAC;IAExE;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,MAAuB;QAChD,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;SACpB,CAAC;IACN,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,MAAqC;QAC5D,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;SACpB,CAAC;IACN,CAAC;CACJ,CAAA;AArBY,2BAA2B;IADvC,UAAU,EAAE;;GACA,2BAA2B,CAqBvC;;AAGM,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,cAAgE;IACpG,YAAY,GAA8B,EAAE,CAAC;IAC7C,gBAAgB,GAA4C,EAAE,CAAC;IAEzE;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,MAAwB;QACjD,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACP,GAAG,EAAE,MAAM,CAAC,GAAG;aAClB;SACJ,CAAC;IACN,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,MAAsC;QAC7D,OAAO;YACH,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;SAC5B,CAAC;IACN,CAAC;CACJ,CAAA;AAvBY,4BAA4B;IADxC,UAAU,EAAE;;GACA,4BAA4B,CAuBxC;;AAGM,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,cAAsD;IAK1E;IACA;IALX,YAAY,GAAyB,EAAE,CAAC;IACxC,gBAAgB,GAAuC,EAAE,CAAC;IAEpE,YACqB,qBAAkD,EAClD,sBAAoD;QAErE,KAAK,EAAE,CAAC;QAHS,0BAAqB,GAArB,qBAAqB,CAA6B;QAClD,2BAAsB,GAAtB,sBAAsB,CAA8B;IAGzE,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,MAAmB;QAC5C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACP,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7D,KAAK,OAAO;gBACR,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,MAAiC;QACxD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACP,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAuC,CAAC,CAAC;YAC5F,KAAK,WAAW;gBACZ,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAwC,CAAC,CAAC;YAC9F;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;CACJ,CAAA;AAhCY,uBAAuB;IADnC,UAAU,EAAE;qCAMmC,2BAA2B;QAC1B,4BAA4B;GANhE,uBAAuB,CAgCnC"}
@@ -0,0 +1,15 @@
1
+ import 'reflect-metadata';
2
+ import { OpenAIContentTranslator } from "./openai.content.translators";
3
+ import { HoloMessage } from "@holokai/sdk";
4
+ import { BaseTranslator } from "@holokai/sdk/provider";
5
+ import { ChatCompletionMessageParam } from "openai/resources/chat/completions/completions";
6
+ export declare class OpenAIMessageTranslator extends BaseTranslator<HoloMessage, ChatCompletionMessageParam> {
7
+ private readonly contentTranslator;
8
+ protected holoDefaults: Partial<HoloMessage>;
9
+ protected providerDefaults: Partial<ChatCompletionMessageParam>;
10
+ constructor(contentTranslator: OpenAIContentTranslator);
11
+ flattenText(parts: ChatCompletionMessageParam["content"]): Promise<string>;
12
+ protected fromHoloImpl(holoMessage: HoloMessage): Promise<Partial<ChatCompletionMessageParam>>;
13
+ protected toHoloImpl(openaiMessage: ChatCompletionMessageParam): Promise<Partial<HoloMessage>>;
14
+ }
15
+ //# sourceMappingURL=openai.message.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.message.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.message.translators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAiB,WAAW,EAAyB,MAAM,cAAc,CAAC;AACjF,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,0BAA0B,EAAC,MAAM,+CAA+C,CAAC;AAEzF,qBACa,uBAAwB,SAAQ,cAAc,CAAC,WAAW,EAAE,0BAA0B,CAAC;IAIpF,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAH9C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAM;gBAExC,iBAAiB,EAAE,uBAAuB;IAI1D,WAAW,CAAC,KAAK,EAAE,0BAA0B,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAMvE,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;cA+CpF,UAAU,CAAC,aAAa,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAwEvG"}
@@ -0,0 +1,144 @@
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 { OpenAIContentTranslator } from "./openai.content.translators";
12
+ import { injectable } from 'tsyringe';
13
+ import { createStableId, pickDefined, safeParse } from "@holokai/sdk";
14
+ import { BaseTranslator } from "@holokai/sdk/provider";
15
+ let OpenAIMessageTranslator = class OpenAIMessageTranslator extends BaseTranslator {
16
+ contentTranslator;
17
+ holoDefaults = {};
18
+ providerDefaults = {};
19
+ constructor(contentTranslator) {
20
+ super();
21
+ this.contentTranslator = contentTranslator;
22
+ }
23
+ async flattenText(parts) {
24
+ if (!Array.isArray(parts))
25
+ return typeof parts === 'string' ? parts : '';
26
+ const holoBlocks = await this.contentTranslator.toHoloArray(parts);
27
+ return holoBlocks.filter(b => b.type === 'text').map(b => b.text).join('\n');
28
+ }
29
+ async fromHoloImpl(holoMessage) {
30
+ let content;
31
+ if (typeof holoMessage.content === 'string') {
32
+ content = holoMessage.content;
33
+ }
34
+ else if (Array.isArray(holoMessage.content)) {
35
+ const parts = await this.contentTranslator.fromHoloArray(holoMessage.content);
36
+ content = parts.length > 0 ? parts : undefined; // keep undefined if empty
37
+ }
38
+ switch (holoMessage.role) {
39
+ case 'assistant': {
40
+ const tool_calls = holoMessage.tool_calls?.map((tc, i) => ({
41
+ id: tc.id ?? createStableId(`fn:${tc.function.name}#${i}`, tc.function.arguments),
42
+ type: 'function',
43
+ function: {
44
+ name: tc.function.name,
45
+ arguments: JSON.stringify(tc.function.arguments ?? {})
46
+ }
47
+ }));
48
+ return pickDefined({
49
+ role: 'assistant',
50
+ content,
51
+ ...(tool_calls && tool_calls.length ? { tool_calls } : {})
52
+ });
53
+ }
54
+ case 'tool': {
55
+ return pickDefined({
56
+ role: 'tool',
57
+ content: typeof content === 'string' ? content : JSON.stringify(content ?? ''),
58
+ tool_call_id: holoMessage.tool_call_id
59
+ });
60
+ }
61
+ default: { // 'user'
62
+ return pickDefined({
63
+ role: 'user',
64
+ content,
65
+ name: holoMessage.name
66
+ });
67
+ }
68
+ }
69
+ }
70
+ async toHoloImpl(openaiMessage) {
71
+ if (openaiMessage.role === 'system')
72
+ return {};
73
+ let content;
74
+ if (typeof openaiMessage.content === 'string') {
75
+ content = openaiMessage.content;
76
+ }
77
+ else if (Array.isArray(openaiMessage.content)) {
78
+ // Map parts, including 'refusal' → text
79
+ const mapped = await Promise.all(openaiMessage.content.map(async (part) => {
80
+ if (part.type === 'refusal') {
81
+ // Normalize refusal into text
82
+ return { type: 'text', text: part.refusal };
83
+ }
84
+ // Delegate standard parts (text, image, etc.)
85
+ return this.contentTranslator.toHolo(part);
86
+ }));
87
+ // Drop empties and collapse to string if single text
88
+ const nonEmpty = mapped.filter(obj => Object.keys(obj ?? {}).length > 0);
89
+ if (nonEmpty.length === 1 && nonEmpty[0].type === 'text') {
90
+ content = nonEmpty[0].text;
91
+ }
92
+ else if (nonEmpty.length > 0) {
93
+ content = nonEmpty;
94
+ }
95
+ else {
96
+ content = undefined;
97
+ }
98
+ }
99
+ switch (openaiMessage.role) {
100
+ case 'assistant': {
101
+ const tool_calls = openaiMessage.tool_calls?.map(tc => {
102
+ // Handle union type: only process function tool calls
103
+ if (tc.type === 'function') {
104
+ return {
105
+ id: tc.id,
106
+ type: 'function',
107
+ function: {
108
+ name: tc.function.name,
109
+ arguments: safeParse(tc.function.arguments)
110
+ }
111
+ };
112
+ }
113
+ // Skip custom tool calls for now (not supported in Holo)
114
+ return null;
115
+ }).filter((tc) => tc !== null);
116
+ return pickDefined({
117
+ role: 'assistant',
118
+ content,
119
+ ...(tool_calls && tool_calls.length ? { tool_calls } : {})
120
+ });
121
+ }
122
+ case 'tool': {
123
+ return pickDefined({
124
+ role: 'tool',
125
+ content,
126
+ tool_call_id: openaiMessage.tool_call_id
127
+ });
128
+ }
129
+ default: { // 'user'
130
+ return pickDefined({
131
+ role: 'user',
132
+ content,
133
+ name: openaiMessage.name
134
+ });
135
+ }
136
+ }
137
+ }
138
+ };
139
+ OpenAIMessageTranslator = __decorate([
140
+ injectable(),
141
+ __metadata("design:paramtypes", [OpenAIContentTranslator])
142
+ ], OpenAIMessageTranslator);
143
+ export { OpenAIMessageTranslator };
144
+ //# sourceMappingURL=openai.message.translators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.message.translators.js","sourceRoot":"","sources":["../../src/translators/openai.message.translators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import 'reflect-metadata';
2
+ import { HoloMessage } from "@holokai/sdk";
3
+ import { BaseTranslator } from "@holokai/sdk/provider";
4
+ import { ChatCompletionMessage } from "openai/resources/chat/completions/completions";
5
+ export declare class OpenAIResponseMessageTranslator extends BaseTranslator<HoloMessage, ChatCompletionMessage> {
6
+ protected holoDefaults: Partial<HoloMessage>;
7
+ protected providerDefaults: Partial<ChatCompletionMessage>;
8
+ constructor();
9
+ protected fromHoloImpl(source: HoloMessage): Promise<Partial<ChatCompletionMessage>>;
10
+ protected toHoloImpl(source: ChatCompletionMessage): Promise<Partial<HoloMessage>>;
11
+ }
12
+ //# sourceMappingURL=openai.response.message.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.response.message.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.response.message.translators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAA8B,WAAW,EAAyB,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAC,qBAAqB,EAAC,MAAM,+CAA+C,CAAC;AAEpF,qBACa,+BAAgC,SAAQ,cAAc,CAAC,WAAW,EAAE,qBAAqB,CAAC;IACnG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAM;;cAMhD,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;cAuC1E,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAwC3F"}
@@ -0,0 +1,100 @@
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 { createStableId, pickDefined, safeParse } from "@holokai/sdk";
13
+ import { BaseTranslator } from "@holokai/sdk/provider";
14
+ let OpenAIResponseMessageTranslator = class OpenAIResponseMessageTranslator extends BaseTranslator {
15
+ holoDefaults = {};
16
+ providerDefaults = {};
17
+ constructor() {
18
+ super();
19
+ }
20
+ async fromHoloImpl(source) {
21
+ if (source.role !== 'assistant')
22
+ return {};
23
+ // Gather text content (if any)
24
+ let text;
25
+ if (typeof source.content === 'string') {
26
+ const t = source.content.trim();
27
+ text = t.length ? t : undefined;
28
+ }
29
+ else if (Array.isArray(source.content)) {
30
+ const joined = source.content
31
+ .filter(c => c.type === 'text')
32
+ .map(c => c.text)
33
+ .join('\n')
34
+ .trim();
35
+ text = joined.length ? joined : undefined;
36
+ }
37
+ // Tool calls
38
+ const tool_calls = source.tool_calls?.length
39
+ ? source.tool_calls.map((tc, i) => ({
40
+ id: tc.id ?? createStableId(`fn:${tc.function.name}#${i}`, tc.function.arguments),
41
+ type: 'function',
42
+ function: {
43
+ name: tc.function.name,
44
+ arguments: JSON.stringify(tc.function.arguments ?? {})
45
+ }
46
+ }))
47
+ : undefined;
48
+ // If there are tool calls but no text, set content=null (common OpenAI shape)
49
+ const content = text ?? (tool_calls ? null : '');
50
+ return pickDefined({
51
+ role: 'assistant',
52
+ content,
53
+ tool_calls
54
+ });
55
+ }
56
+ async toHoloImpl(source) {
57
+ // Collect tool calls from either modern tool_calls[] or legacy function_call
58
+ const tool_calls = [];
59
+ if (Array.isArray(source.tool_calls) && source.tool_calls.length) {
60
+ for (const tc of source.tool_calls) {
61
+ // Handle union type: only process function tool calls
62
+ if (tc.type === 'function') {
63
+ tool_calls.push({
64
+ id: tc.id,
65
+ type: 'function',
66
+ function: {
67
+ name: tc.function.name,
68
+ arguments: safeParse(tc.function.arguments)
69
+ }
70
+ });
71
+ }
72
+ // Skip custom tool calls (not supported in Holo)
73
+ }
74
+ }
75
+ else if (source.function_call) {
76
+ // Legacy pathway — keep stable id consistent with other path
77
+ tool_calls.push({
78
+ id: createStableId(`fn:${source.function_call.name}`, safeParse(source.function_call.arguments)),
79
+ type: 'function',
80
+ function: {
81
+ name: source.function_call.name,
82
+ arguments: safeParse(source.function_call.arguments)
83
+ }
84
+ });
85
+ }
86
+ // Content: OpenAI sends string|null; map null -> ''
87
+ const content = source.content ?? '';
88
+ return pickDefined({
89
+ role: 'assistant',
90
+ content,
91
+ tool_calls: tool_calls.length ? tool_calls : undefined
92
+ });
93
+ }
94
+ };
95
+ OpenAIResponseMessageTranslator = __decorate([
96
+ injectable(),
97
+ __metadata("design:paramtypes", [])
98
+ ], OpenAIResponseMessageTranslator);
99
+ export { OpenAIResponseMessageTranslator };
100
+ //# sourceMappingURL=openai.response.message.translators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.response.message.translators.js","sourceRoot":"","sources":["../../src/translators/openai.response.message.translators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { HoloRequest } from "@holokai/sdk";
2
+ import { BaseTranslator } from "@holokai/sdk/provider";
3
+ import { ResponseCreateParams } from "openai/resources/responses/responses";
4
+ export declare class OpenAIResponseRequestTranslator extends BaseTranslator<HoloRequest, ResponseCreateParams> {
5
+ protected holoDefaults: Partial<HoloRequest>;
6
+ protected providerDefaults: Partial<ResponseCreateParams>;
7
+ protected fromHoloImpl(source: HoloRequest): Promise<Partial<ResponseCreateParams>>;
8
+ protected toHoloImpl(source: ResponseCreateParams): Promise<Partial<HoloRequest>>;
9
+ }
10
+ //# sourceMappingURL=openai.responses.request.translators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.responses.request.translators.d.ts","sourceRoot":"","sources":["../../src/translators/openai.responses.request.translators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,WAAW,EAAwB,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAEH,oBAAoB,EAIvB,MAAM,sCAAsC,CAAC;AAE9C,qBAAa,+BAAgC,SAAQ,cAAc,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAClG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAClD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAM;cAE/C,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;cAiFzE,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;CAsF1F"}