@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.
- package/LICENSE +21 -0
- package/README.md +771 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +163 -0
- package/dist/manifest.js.map +1 -0
- package/dist/openai.auditor.d.ts +15 -0
- package/dist/openai.auditor.d.ts.map +1 -0
- package/dist/openai.auditor.js +164 -0
- package/dist/openai.auditor.js.map +1 -0
- package/dist/openai.provider.d.ts +24 -0
- package/dist/openai.provider.d.ts.map +1 -0
- package/dist/openai.provider.js +111 -0
- package/dist/openai.provider.js.map +1 -0
- package/dist/openai.response.factory.d.ts +8 -0
- package/dist/openai.response.factory.d.ts.map +1 -0
- package/dist/openai.response.factory.js +15 -0
- package/dist/openai.response.factory.js.map +1 -0
- package/dist/openai.translator.d.ts +22 -0
- package/dist/openai.translator.d.ts.map +1 -0
- package/dist/openai.translator.js +74 -0
- package/dist/openai.translator.js.map +1 -0
- package/dist/openai.wire.adapter.d.ts +12 -0
- package/dist/openai.wire.adapter.d.ts.map +1 -0
- package/dist/openai.wire.adapter.js +17 -0
- package/dist/openai.wire.adapter.js.map +1 -0
- package/dist/plugin.d.ts +14 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +59 -0
- package/dist/plugin.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/openai.chatcompletions.service.d.ts +12 -0
- package/dist/services/openai.chatcompletions.service.d.ts.map +1 -0
- package/dist/services/openai.chatcompletions.service.js +66 -0
- package/dist/services/openai.chatcompletions.service.js.map +1 -0
- package/dist/translators/index.d.ts +10 -0
- package/dist/translators/index.d.ts.map +1 -0
- package/dist/translators/index.js +10 -0
- package/dist/translators/index.js.map +1 -0
- package/dist/translators/openai.chatcompletion.request.translators.d.ts +23 -0
- package/dist/translators/openai.chatcompletion.request.translators.d.ts.map +1 -0
- package/dist/translators/openai.chatcompletion.request.translators.js +201 -0
- package/dist/translators/openai.chatcompletion.request.translators.js.map +1 -0
- package/dist/translators/openai.chatcompletion.response.translators.d.ts +18 -0
- package/dist/translators/openai.chatcompletion.response.translators.d.ts.map +1 -0
- package/dist/translators/openai.chatcompletion.response.translators.js +117 -0
- package/dist/translators/openai.chatcompletion.response.translators.js.map +1 -0
- package/dist/translators/openai.content.translators.d.ts +28 -0
- package/dist/translators/openai.content.translators.d.ts.map +1 -0
- package/dist/translators/openai.content.translators.js +100 -0
- package/dist/translators/openai.content.translators.js.map +1 -0
- package/dist/translators/openai.message.translators.d.ts +15 -0
- package/dist/translators/openai.message.translators.d.ts.map +1 -0
- package/dist/translators/openai.message.translators.js +144 -0
- package/dist/translators/openai.message.translators.js.map +1 -0
- package/dist/translators/openai.response.message.translators.d.ts +12 -0
- package/dist/translators/openai.response.message.translators.d.ts.map +1 -0
- package/dist/translators/openai.response.message.translators.js +100 -0
- package/dist/translators/openai.response.message.translators.js.map +1 -0
- package/dist/translators/openai.responses.request.translators.d.ts +10 -0
- package/dist/translators/openai.responses.request.translators.d.ts.map +1 -0
- package/dist/translators/openai.responses.request.translators.js +172 -0
- package/dist/translators/openai.responses.request.translators.js.map +1 -0
- package/dist/translators/openai.tool.translators.d.ts +19 -0
- package/dist/translators/openai.tool.translators.d.ts.map +1 -0
- package/dist/translators/openai.tool.translators.js +80 -0
- package/dist/translators/openai.tool.translators.js.map +1 -0
- package/dist/translators/openai.usage.translators.d.ts +12 -0
- package/dist/translators/openai.usage.translators.d.ts.map +1 -0
- package/dist/translators/openai.usage.translators.js +42 -0
- package/dist/translators/openai.usage.translators.js.map +1 -0
- package/dist/translators/streaming/index.d.ts +6 -0
- package/dist/translators/streaming/index.d.ts.map +1 -0
- package/dist/translators/streaming/index.js +6 -0
- package/dist/translators/streaming/index.js.map +1 -0
- package/dist/translators/streaming/openai.content.delta.translator.d.ts +12 -0
- package/dist/translators/streaming/openai.content.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/openai.content.delta.translator.js +82 -0
- package/dist/translators/streaming/openai.content.delta.translator.js.map +1 -0
- package/dist/translators/streaming/openai.message.delta.translator.d.ts +12 -0
- package/dist/translators/streaming/openai.message.delta.translator.d.ts.map +1 -0
- package/dist/translators/streaming/openai.message.delta.translator.js +152 -0
- package/dist/translators/streaming/openai.message.delta.translator.js.map +1 -0
- package/dist/translators/streaming/openai.message.start.translator.d.ts +12 -0
- package/dist/translators/streaming/openai.message.start.translator.d.ts.map +1 -0
- package/dist/translators/streaming/openai.message.start.translator.js +80 -0
- package/dist/translators/streaming/openai.message.start.translator.js.map +1 -0
- package/dist/translators/streaming/openai.message.stop.translator.d.ts +14 -0
- package/dist/translators/streaming/openai.message.stop.translator.d.ts.map +1 -0
- package/dist/translators/streaming/openai.message.stop.translator.js +112 -0
- package/dist/translators/streaming/openai.message.stop.translator.js.map +1 -0
- package/dist/translators/streaming/openai.stream.translator.d.ts +20 -0
- package/dist/translators/streaming/openai.stream.translator.d.ts.map +1 -0
- package/dist/translators/streaming/openai.stream.translator.js +86 -0
- package/dist/translators/streaming/openai.stream.translator.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,152 @@
|
|
|
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 { v4 as uuidv4 } from 'uuid';
|
|
13
|
+
import { pickDefined, safeParse } from '@holokai/sdk';
|
|
14
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
15
|
+
let OpenAIMessageDeltaTranslator = class OpenAIMessageDeltaTranslator extends StreamTranslator {
|
|
16
|
+
holoDefaults = {};
|
|
17
|
+
providerDefaults = {};
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
}
|
|
21
|
+
async toHoloManyImpl(source) {
|
|
22
|
+
const results = [];
|
|
23
|
+
// Process tool calls - emit one Holo chunk per tool_call delta for clean indexing
|
|
24
|
+
for (const choice of source.choices) {
|
|
25
|
+
const toolCalls = choice.delta?.tool_calls ?? [];
|
|
26
|
+
if (Array.isArray(toolCalls) && toolCalls.length > 0) {
|
|
27
|
+
for (const tc of toolCalls) {
|
|
28
|
+
const rawArgs = tc.function?.arguments;
|
|
29
|
+
const parsedArgs = safeParse(rawArgs);
|
|
30
|
+
const toolCallIndex = tc.index ?? 0;
|
|
31
|
+
// Emit shell when partial JSON; full tool_calls when complete
|
|
32
|
+
const isPartialJson = rawArgs && Object.keys(parsedArgs).length === 0;
|
|
33
|
+
results.push(pickDefined({
|
|
34
|
+
id: source.id,
|
|
35
|
+
model: source.model,
|
|
36
|
+
created: source.created * 1000, // sec -> ms
|
|
37
|
+
delta: {
|
|
38
|
+
provider: 'openai',
|
|
39
|
+
type: 'message_delta',
|
|
40
|
+
choice: choice.index,
|
|
41
|
+
index: toolCallIndex,
|
|
42
|
+
delta: isPartialJson
|
|
43
|
+
? {} // Partial fragment → no Holo tool_calls yet
|
|
44
|
+
: {
|
|
45
|
+
tool_calls: [pickDefined({
|
|
46
|
+
id: tc.id,
|
|
47
|
+
type: tc.type || 'function',
|
|
48
|
+
function: pickDefined({
|
|
49
|
+
name: tc.function?.name,
|
|
50
|
+
arguments: parsedArgs
|
|
51
|
+
})
|
|
52
|
+
})]
|
|
53
|
+
},
|
|
54
|
+
// Store full source chunk for lossless round-trips
|
|
55
|
+
provider_delta: source
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Handle usage data (usually in final chunk)
|
|
62
|
+
if (source.usage) {
|
|
63
|
+
const usage = pickDefined({
|
|
64
|
+
input_tokens: source.usage.prompt_tokens,
|
|
65
|
+
output_tokens: source.usage.completion_tokens,
|
|
66
|
+
total_tokens: source.usage.total_tokens
|
|
67
|
+
});
|
|
68
|
+
if (Object.keys(usage).length > 0) {
|
|
69
|
+
results.push(pickDefined({
|
|
70
|
+
id: source.id,
|
|
71
|
+
model: source.model,
|
|
72
|
+
created: source.created * 1000,
|
|
73
|
+
delta: {
|
|
74
|
+
provider: 'openai',
|
|
75
|
+
type: 'message_delta',
|
|
76
|
+
// Omit choice - usage applies to entire completion
|
|
77
|
+
delta: {},
|
|
78
|
+
usage: usage,
|
|
79
|
+
provider_delta: source
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
}
|
|
86
|
+
async fromHoloManyImpl(source) {
|
|
87
|
+
const d = source.delta;
|
|
88
|
+
if (!d || d.type !== 'message_delta')
|
|
89
|
+
return [];
|
|
90
|
+
// Fast pass-through for OpenAI→OpenAI streaming
|
|
91
|
+
if (d.provider === 'OPENAI' && d.provider_delta) {
|
|
92
|
+
return [d.provider_delta];
|
|
93
|
+
}
|
|
94
|
+
const results = [];
|
|
95
|
+
const createdSec = source.created
|
|
96
|
+
? Math.floor(source.created / 1000) // ms -> sec
|
|
97
|
+
: Math.floor(Date.now() / 1000);
|
|
98
|
+
// Handle tool calls
|
|
99
|
+
const toolCalls = d.delta?.tool_calls;
|
|
100
|
+
if (Array.isArray(toolCalls) && toolCalls.length > 0) {
|
|
101
|
+
results.push(pickDefined({
|
|
102
|
+
id: source.id || this.providerDefaults.id || uuidv4(),
|
|
103
|
+
object: 'chat.completion.chunk',
|
|
104
|
+
created: createdSec,
|
|
105
|
+
model: source.model || this.providerDefaults.model,
|
|
106
|
+
choices: [{
|
|
107
|
+
index: d.choice ?? 0,
|
|
108
|
+
delta: {
|
|
109
|
+
tool_calls: toolCalls.map((tc, i) => pickDefined({
|
|
110
|
+
index: d.index ?? i, // Use provided index or fallback to array index
|
|
111
|
+
id: tc.id,
|
|
112
|
+
type: tc.type || 'function',
|
|
113
|
+
function: tc.function ? pickDefined({
|
|
114
|
+
name: tc.function.name,
|
|
115
|
+
arguments: typeof tc.function.arguments === 'object'
|
|
116
|
+
? JSON.stringify(tc.function.arguments)
|
|
117
|
+
: tc.function.arguments
|
|
118
|
+
}) : undefined
|
|
119
|
+
}))
|
|
120
|
+
},
|
|
121
|
+
finish_reason: null
|
|
122
|
+
}]
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
// Handle usage
|
|
126
|
+
if (d.usage) {
|
|
127
|
+
const totalTokens = d.usage.total_tokens
|
|
128
|
+
|| (d.usage.input_tokens && d.usage.output_tokens
|
|
129
|
+
? d.usage.input_tokens + d.usage.output_tokens
|
|
130
|
+
: undefined);
|
|
131
|
+
results.push(pickDefined({
|
|
132
|
+
id: source.id || this.providerDefaults.id || uuidv4(),
|
|
133
|
+
object: 'chat.completion.chunk',
|
|
134
|
+
created: createdSec,
|
|
135
|
+
model: source.model || this.providerDefaults.model,
|
|
136
|
+
choices: [], // Empty choices for usage-only chunk (valid per OpenAI)
|
|
137
|
+
usage: pickDefined({
|
|
138
|
+
prompt_tokens: d.usage.input_tokens,
|
|
139
|
+
completion_tokens: d.usage.output_tokens,
|
|
140
|
+
total_tokens: totalTokens
|
|
141
|
+
})
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
OpenAIMessageDeltaTranslator = __decorate([
|
|
148
|
+
injectable(),
|
|
149
|
+
__metadata("design:paramtypes", [])
|
|
150
|
+
], OpenAIMessageDeltaTranslator);
|
|
151
|
+
export { OpenAIMessageDeltaTranslator };
|
|
152
|
+
//# sourceMappingURL=openai.message.delta.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.message.delta.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/openai.message.delta.translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { HoloStreamChunk } from '@holokai/sdk';
|
|
3
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
4
|
+
import { ChatCompletionChunk } from "openai/resources/chat/completions/completions";
|
|
5
|
+
export declare class OpenAIMessageStartTranslator extends StreamTranslator<HoloStreamChunk, ChatCompletionChunk> {
|
|
6
|
+
protected holoDefaults: Partial<HoloStreamChunk>;
|
|
7
|
+
protected providerDefaults: Partial<ChatCompletionChunk>;
|
|
8
|
+
constructor();
|
|
9
|
+
protected toHoloManyImpl(source: ChatCompletionChunk): Promise<Partial<HoloStreamChunk>[]>;
|
|
10
|
+
protected fromHoloManyImpl(source: HoloStreamChunk): Promise<Partial<ChatCompletionChunk>[]>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=openai.message.start.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.message.start.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/openai.message.start.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAC,eAAe,EAAc,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,+CAA+C,CAAC;AAElF,qBACa,4BAA6B,SAAQ,gBAAgB,CAAC,eAAe,EAAE,mBAAmB,CAAC;IACpG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;;cAM9C,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;cA2BhF,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;CA+BrG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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 { v4 as uuidv4 } from 'uuid';
|
|
13
|
+
import { pickDefined } from '@holokai/sdk';
|
|
14
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
15
|
+
let OpenAIMessageStartTranslator = class OpenAIMessageStartTranslator extends StreamTranslator {
|
|
16
|
+
holoDefaults = {};
|
|
17
|
+
providerDefaults = {};
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
}
|
|
21
|
+
async toHoloManyImpl(source) {
|
|
22
|
+
// OpenAI signals start when a choice delta has role
|
|
23
|
+
const roleChoices = source.choices.filter(c => c.delta?.role);
|
|
24
|
+
if (roleChoices.length === 0)
|
|
25
|
+
return [];
|
|
26
|
+
// Emit one message_start per choice with role (rare but correct for n>1)
|
|
27
|
+
return roleChoices.map(roleChoice => {
|
|
28
|
+
const choiceIndex = Number.isInteger(roleChoice.index) && roleChoice.index >= 0 ? roleChoice.index : 0;
|
|
29
|
+
return pickDefined({
|
|
30
|
+
id: source.id,
|
|
31
|
+
model: source.model,
|
|
32
|
+
created: source.created * 1000, // sec → ms
|
|
33
|
+
delta: {
|
|
34
|
+
provider: 'openai',
|
|
35
|
+
type: 'message_start',
|
|
36
|
+
choice: choiceIndex,
|
|
37
|
+
delta: {
|
|
38
|
+
role: roleChoice.delta.role // 'assistant' etc.
|
|
39
|
+
},
|
|
40
|
+
// Store full source chunk for lossless round-trips
|
|
41
|
+
provider_delta: source
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async fromHoloManyImpl(source) {
|
|
47
|
+
const d = source.delta;
|
|
48
|
+
if (!d || d.type !== 'message_start')
|
|
49
|
+
return [];
|
|
50
|
+
// Fast pass-through if we already carry an OpenAI chunk
|
|
51
|
+
if (d.provider === 'OPENAI' && d.provider_delta) {
|
|
52
|
+
return [d.provider_delta];
|
|
53
|
+
}
|
|
54
|
+
const id = source.id || this.providerDefaults.id || uuidv4();
|
|
55
|
+
const createdSec = source.created
|
|
56
|
+
? Math.floor(source.created / 1000) // ms → sec
|
|
57
|
+
: Math.floor(Date.now() / 1000);
|
|
58
|
+
const model = source.model || this.providerDefaults.model;
|
|
59
|
+
const choiceIndex = d.choice !== undefined && Number.isInteger(d.choice) && d.choice >= 0 ? d.choice : 0;
|
|
60
|
+
return [pickDefined({
|
|
61
|
+
id,
|
|
62
|
+
object: 'chat.completion.chunk',
|
|
63
|
+
created: createdSec,
|
|
64
|
+
model,
|
|
65
|
+
choices: [{
|
|
66
|
+
index: choiceIndex,
|
|
67
|
+
delta: {
|
|
68
|
+
role: d.delta?.role || 'assistant'
|
|
69
|
+
},
|
|
70
|
+
finish_reason: null
|
|
71
|
+
}]
|
|
72
|
+
})];
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
OpenAIMessageStartTranslator = __decorate([
|
|
76
|
+
injectable(),
|
|
77
|
+
__metadata("design:paramtypes", [])
|
|
78
|
+
], OpenAIMessageStartTranslator);
|
|
79
|
+
export { OpenAIMessageStartTranslator };
|
|
80
|
+
//# sourceMappingURL=openai.message.start.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.message.start.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/openai.message.start.translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { HoloStreamChunk } from '@holokai/sdk';
|
|
3
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
4
|
+
import { ChatCompletionChunk } from "openai/resources/chat/completions/completions";
|
|
5
|
+
export declare class OpenAIMessageStopTranslator extends StreamTranslator<HoloStreamChunk, ChatCompletionChunk> {
|
|
6
|
+
protected holoDefaults: Partial<HoloStreamChunk>;
|
|
7
|
+
protected providerDefaults: Partial<ChatCompletionChunk>;
|
|
8
|
+
constructor();
|
|
9
|
+
protected toHoloManyImpl(source: ChatCompletionChunk): Promise<Partial<HoloStreamChunk>[]>;
|
|
10
|
+
protected fromHoloManyImpl(source: HoloStreamChunk): Promise<Partial<ChatCompletionChunk>[]>;
|
|
11
|
+
private mapOpenAIFinishReason;
|
|
12
|
+
private mapHoloFinishReasonToOpenAI;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=openai.message.stop.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.message.stop.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/openai.message.stop.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAmB,eAAe,EAAc,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,+CAA+C,CAAC;AAElF,qBACa,2BAA4B,SAAQ,gBAAgB,CAAC,eAAe,EAAE,mBAAmB,CAAC;IACnG,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;;cAM9C,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;cA4BhF,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAgClG,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,2BAA2B;CAoBtC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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 { v4 as uuidv4 } from 'uuid';
|
|
13
|
+
import { pickDefined } from '@holokai/sdk';
|
|
14
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
15
|
+
let OpenAIMessageStopTranslator = class OpenAIMessageStopTranslator extends StreamTranslator {
|
|
16
|
+
holoDefaults = {};
|
|
17
|
+
providerDefaults = {};
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
}
|
|
21
|
+
async toHoloManyImpl(source) {
|
|
22
|
+
const results = [];
|
|
23
|
+
// Emit a message_stop per choice that has a finish_reason
|
|
24
|
+
for (const ch of source.choices) {
|
|
25
|
+
if (!ch.finish_reason)
|
|
26
|
+
continue;
|
|
27
|
+
const choiceIndex = Number.isInteger(ch.index) && ch.index >= 0 ? ch.index : 0;
|
|
28
|
+
results.push(pickDefined({
|
|
29
|
+
id: source.id,
|
|
30
|
+
model: source.model,
|
|
31
|
+
created: source.created * 1000, // sec → ms
|
|
32
|
+
delta: {
|
|
33
|
+
provider: 'openai',
|
|
34
|
+
type: 'message_stop',
|
|
35
|
+
choice: choiceIndex,
|
|
36
|
+
delta: {},
|
|
37
|
+
provider_delta: source // Full raw chunk for lossless replay & validation
|
|
38
|
+
},
|
|
39
|
+
finish_reason: this.mapOpenAIFinishReason(ch.finish_reason)
|
|
40
|
+
// Note: do not set done here; leave it to orchestrator
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
return results;
|
|
44
|
+
}
|
|
45
|
+
async fromHoloManyImpl(source) {
|
|
46
|
+
const d = source.delta;
|
|
47
|
+
if (!d || d.type !== 'message_stop')
|
|
48
|
+
return [];
|
|
49
|
+
// Fast pass-through if we already have an OpenAI chunk
|
|
50
|
+
if (d.provider === 'OPENAI' && d.provider_delta) {
|
|
51
|
+
return [d.provider_delta];
|
|
52
|
+
}
|
|
53
|
+
const createdSec = source.created
|
|
54
|
+
? Math.floor(source.created / 1000) // ms → sec
|
|
55
|
+
: Math.floor(Date.now() / 1000);
|
|
56
|
+
const id = source.id || this.providerDefaults.id || uuidv4();
|
|
57
|
+
const model = source.model || this.providerDefaults.model;
|
|
58
|
+
const choiceIndex = d.choice !== undefined && Number.isInteger(d.choice) && d.choice >= 0 ? d.choice : 0;
|
|
59
|
+
return [pickDefined({
|
|
60
|
+
id,
|
|
61
|
+
object: 'chat.completion.chunk',
|
|
62
|
+
created: createdSec,
|
|
63
|
+
model,
|
|
64
|
+
choices: [{
|
|
65
|
+
index: choiceIndex,
|
|
66
|
+
delta: {},
|
|
67
|
+
finish_reason: this.mapHoloFinishReasonToOpenAI(source.finish_reason)
|
|
68
|
+
}],
|
|
69
|
+
system_fingerprint: this.providerDefaults.system_fingerprint,
|
|
70
|
+
service_tier: this.providerDefaults.service_tier
|
|
71
|
+
})];
|
|
72
|
+
}
|
|
73
|
+
mapOpenAIFinishReason(reason) {
|
|
74
|
+
// 1:1 mapping; do not invent defaults
|
|
75
|
+
switch (reason) {
|
|
76
|
+
case 'stop':
|
|
77
|
+
return 'stop';
|
|
78
|
+
case 'length':
|
|
79
|
+
return 'length';
|
|
80
|
+
case 'tool_calls':
|
|
81
|
+
return 'tool_calls';
|
|
82
|
+
case 'content_filter':
|
|
83
|
+
return 'content_filter';
|
|
84
|
+
case 'function_call':
|
|
85
|
+
return 'function_call';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
mapHoloFinishReasonToOpenAI(reason) {
|
|
89
|
+
if (!reason)
|
|
90
|
+
return null; // Better than forcing 'stop'
|
|
91
|
+
switch (reason) {
|
|
92
|
+
case 'stop':
|
|
93
|
+
return 'stop';
|
|
94
|
+
case 'length':
|
|
95
|
+
return 'length';
|
|
96
|
+
case 'tool_calls':
|
|
97
|
+
return 'tool_calls';
|
|
98
|
+
case 'content_filter':
|
|
99
|
+
return 'content_filter';
|
|
100
|
+
case 'function_call':
|
|
101
|
+
return 'function_call';
|
|
102
|
+
default:
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
OpenAIMessageStopTranslator = __decorate([
|
|
108
|
+
injectable(),
|
|
109
|
+
__metadata("design:paramtypes", [])
|
|
110
|
+
], OpenAIMessageStopTranslator);
|
|
111
|
+
export { OpenAIMessageStopTranslator };
|
|
112
|
+
//# sourceMappingURL=openai.message.stop.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.message.stop.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/openai.message.stop.translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { OpenAIMessageStartTranslator } from './openai.message.start.translator';
|
|
3
|
+
import { OpenAIContentDeltaTranslator } from './openai.content.delta.translator';
|
|
4
|
+
import { OpenAIMessageDeltaTranslator } from './openai.message.delta.translator';
|
|
5
|
+
import { OpenAIMessageStopTranslator } from './openai.message.stop.translator';
|
|
6
|
+
import { HoloStreamChunk } from "@holokai/sdk";
|
|
7
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
8
|
+
import { ChatCompletionChunk } from "openai/resources/chat/completions/completions";
|
|
9
|
+
export declare class OpenAIStreamTranslator extends StreamTranslator<HoloStreamChunk, ChatCompletionChunk> {
|
|
10
|
+
private readonly messageStartTranslator;
|
|
11
|
+
private readonly contentDeltaTranslator;
|
|
12
|
+
private readonly messageDeltaTranslator;
|
|
13
|
+
private readonly messageStopTranslator;
|
|
14
|
+
protected holoDefaults: Partial<HoloStreamChunk>;
|
|
15
|
+
protected providerDefaults: Partial<ChatCompletionChunk>;
|
|
16
|
+
constructor(messageStartTranslator: OpenAIMessageStartTranslator, contentDeltaTranslator: OpenAIContentDeltaTranslator, messageDeltaTranslator: OpenAIMessageDeltaTranslator, messageStopTranslator: OpenAIMessageStopTranslator);
|
|
17
|
+
protected toHoloManyImpl(source: ChatCompletionChunk): Promise<Partial<HoloStreamChunk>[]>;
|
|
18
|
+
protected fromHoloManyImpl(source: HoloStreamChunk): Promise<Partial<ChatCompletionChunk>[]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=openai.stream.translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.stream.translator.d.ts","sourceRoot":"","sources":["../../../src/translators/streaming/openai.stream.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAC;AAC/E,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,eAAe,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,+CAA+C,CAAC;AAElF,qBACa,sBAAuB,SAAQ,gBAAgB,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAK1F,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAP1C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAM;IACtD,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;gBAGzC,sBAAsB,EAAE,4BAA4B,EACpD,sBAAsB,EAAE,4BAA4B,EACpD,sBAAsB,EAAE,4BAA4B,EACpD,qBAAqB,EAAE,2BAA2B;cAKvD,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;cA8BhF,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;CA2BrG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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 { OpenAIMessageStartTranslator } from './openai.message.start.translator';
|
|
13
|
+
import { OpenAIContentDeltaTranslator } from './openai.content.delta.translator';
|
|
14
|
+
import { OpenAIMessageDeltaTranslator } from './openai.message.delta.translator';
|
|
15
|
+
import { OpenAIMessageStopTranslator } from './openai.message.stop.translator';
|
|
16
|
+
import { StreamTranslator } from "@holokai/sdk/provider";
|
|
17
|
+
let OpenAIStreamTranslator = class OpenAIStreamTranslator extends StreamTranslator {
|
|
18
|
+
messageStartTranslator;
|
|
19
|
+
contentDeltaTranslator;
|
|
20
|
+
messageDeltaTranslator;
|
|
21
|
+
messageStopTranslator;
|
|
22
|
+
holoDefaults = {};
|
|
23
|
+
providerDefaults = {};
|
|
24
|
+
constructor(messageStartTranslator, contentDeltaTranslator, messageDeltaTranslator, messageStopTranslator) {
|
|
25
|
+
super();
|
|
26
|
+
this.messageStartTranslator = messageStartTranslator;
|
|
27
|
+
this.contentDeltaTranslator = contentDeltaTranslator;
|
|
28
|
+
this.messageDeltaTranslator = messageDeltaTranslator;
|
|
29
|
+
this.messageStopTranslator = messageStopTranslator;
|
|
30
|
+
}
|
|
31
|
+
async toHoloManyImpl(source) {
|
|
32
|
+
const results = [];
|
|
33
|
+
// 1. Check for message_start (first chunk with role)
|
|
34
|
+
const hasRole = source.choices.some(c => c.delta?.role);
|
|
35
|
+
if (hasRole) {
|
|
36
|
+
results.push(...await this.messageStartTranslator.toHoloMany(source));
|
|
37
|
+
}
|
|
38
|
+
// 2. Check for content deltas
|
|
39
|
+
const hasContent = source.choices.some(c => c.delta?.content);
|
|
40
|
+
if (hasContent) {
|
|
41
|
+
results.push(...await this.contentDeltaTranslator.toHoloMany(source));
|
|
42
|
+
}
|
|
43
|
+
// 3. Check for tool calls or usage (both go through message_delta)
|
|
44
|
+
const hasToolCalls = source.choices.some(c => c.delta?.tool_calls);
|
|
45
|
+
if (hasToolCalls || source.usage) {
|
|
46
|
+
results.push(...await this.messageDeltaTranslator.toHoloMany(source));
|
|
47
|
+
}
|
|
48
|
+
// 4. Check for finish_reason
|
|
49
|
+
const hasFinishReason = source.choices.some(c => c.finish_reason);
|
|
50
|
+
if (hasFinishReason) {
|
|
51
|
+
results.push(...await this.messageStopTranslator.toHoloMany(source));
|
|
52
|
+
}
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
async fromHoloManyImpl(source) {
|
|
56
|
+
const d = source.delta;
|
|
57
|
+
if (!d)
|
|
58
|
+
return [];
|
|
59
|
+
// Fast pass-through for OpenAI→OpenAI streaming
|
|
60
|
+
if (d.provider === 'openai' && d.provider_delta) {
|
|
61
|
+
return [d.provider_delta];
|
|
62
|
+
}
|
|
63
|
+
// Route based on delta type
|
|
64
|
+
switch (d.type) {
|
|
65
|
+
case 'message_start':
|
|
66
|
+
return this.messageStartTranslator.fromHoloMany(source);
|
|
67
|
+
case 'content_delta':
|
|
68
|
+
return this.contentDeltaTranslator.fromHoloMany(source);
|
|
69
|
+
case 'message_delta':
|
|
70
|
+
return this.messageDeltaTranslator.fromHoloMany(source);
|
|
71
|
+
case 'message_stop':
|
|
72
|
+
return this.messageStopTranslator.fromHoloMany(source);
|
|
73
|
+
default:
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
OpenAIStreamTranslator = __decorate([
|
|
79
|
+
injectable(),
|
|
80
|
+
__metadata("design:paramtypes", [OpenAIMessageStartTranslator,
|
|
81
|
+
OpenAIContentDeltaTranslator,
|
|
82
|
+
OpenAIMessageDeltaTranslator,
|
|
83
|
+
OpenAIMessageStopTranslator])
|
|
84
|
+
], OpenAIStreamTranslator);
|
|
85
|
+
export { OpenAIStreamTranslator };
|
|
86
|
+
//# sourceMappingURL=openai.stream.translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.stream.translator.js","sourceRoot":"","sources":["../../../src/translators/streaming/openai.stream.translator.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@holokai/holo-provider-openai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "OpenAI provider plugin for Holo LLM Gateway",
|
|
6
|
+
"author": "Holokai",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=18.0.0"
|
|
12
|
+
},
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/holokai/holo-provider-openai.git"
|
|
19
|
+
},
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/holokai/holo-provider-openai/issues"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/holokai/holo-provider-openai#readme",
|
|
24
|
+
"keywords": [
|
|
25
|
+
"holokai",
|
|
26
|
+
"holo",
|
|
27
|
+
"plugin",
|
|
28
|
+
"provider",
|
|
29
|
+
"openai",
|
|
30
|
+
"ai",
|
|
31
|
+
"llm"
|
|
32
|
+
],
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js",
|
|
37
|
+
"require": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./package.json": "./package.json"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"!dist/**/*.test.*",
|
|
44
|
+
"!dist/**/*.spec.*",
|
|
45
|
+
"README.md",
|
|
46
|
+
"LICENSE"
|
|
47
|
+
],
|
|
48
|
+
"sideEffects": false,
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsc --build",
|
|
51
|
+
"build:watch": "tsc --build --watch",
|
|
52
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
53
|
+
"type-check": "tsc --noEmit",
|
|
54
|
+
"lint": "eslint src",
|
|
55
|
+
"test": "jest",
|
|
56
|
+
"test:watch": "jest --watch",
|
|
57
|
+
"test:integration": "jest tests/integration",
|
|
58
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
59
|
+
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@holokai/sdk": "^0.1.0"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"openai": "^6.17.0"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/jest": "^30.0.0",
|
|
68
|
+
"@types/node": "^24.0.11",
|
|
69
|
+
"jest": "^29.7.0",
|
|
70
|
+
"typescript": "^5.8.3"
|
|
71
|
+
}
|
|
72
|
+
}
|