@just-every/ensemble 0.1.15 → 0.1.16

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.
@@ -0,0 +1,581 @@
1
+ import { request } from './index.js';
2
+ function convertMessages(messages) {
3
+ return messages.map(msg => {
4
+ let role;
5
+ if (msg.role === 'system' || msg.role === 'developer') {
6
+ role = 'developer';
7
+ }
8
+ else if (msg.role === 'user' || msg.role === 'assistant') {
9
+ role = msg.role;
10
+ }
11
+ else if (msg.role === 'function' || msg.role === 'tool') {
12
+ if ('tool_call_id' in msg) {
13
+ return {
14
+ type: 'function_call_output',
15
+ id: msg.tool_call_id,
16
+ call_id: msg.tool_call_id,
17
+ name: msg.tool_call_id,
18
+ output: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content)
19
+ };
20
+ }
21
+ else if ('name' in msg && msg.role === 'function') {
22
+ return {
23
+ type: 'function_call_output',
24
+ id: msg.name || 'unknown',
25
+ call_id: msg.name || 'unknown',
26
+ name: msg.name || 'unknown',
27
+ output: typeof msg.content === 'string' ? msg.content : ''
28
+ };
29
+ }
30
+ return {
31
+ type: 'function_call_output',
32
+ id: 'unknown',
33
+ call_id: 'unknown',
34
+ name: 'unknown',
35
+ output: ''
36
+ };
37
+ }
38
+ else {
39
+ role = 'user';
40
+ }
41
+ if (msg.role === 'assistant' && 'tool_calls' in msg && msg.tool_calls && msg.tool_calls.length > 0) {
42
+ const messages = [];
43
+ if (msg.content) {
44
+ let content = '';
45
+ if (typeof msg.content === 'string') {
46
+ content = msg.content;
47
+ }
48
+ else if (msg.content === null || msg.content === undefined) {
49
+ content = '';
50
+ }
51
+ else if (Array.isArray(msg.content)) {
52
+ content = msg.content.map(part => {
53
+ if ('text' in part)
54
+ return part.text;
55
+ if ('refusal' in part)
56
+ return `[Refusal: ${part.refusal}]`;
57
+ return JSON.stringify(part);
58
+ }).join('');
59
+ }
60
+ else {
61
+ content = JSON.stringify(msg.content);
62
+ }
63
+ messages.push({
64
+ type: 'message',
65
+ role: 'assistant',
66
+ content,
67
+ status: 'completed'
68
+ });
69
+ }
70
+ for (const toolCall of msg.tool_calls) {
71
+ messages.push({
72
+ type: 'function_call',
73
+ id: toolCall.id,
74
+ call_id: toolCall.id,
75
+ name: toolCall.function.name,
76
+ arguments: toolCall.function.arguments
77
+ });
78
+ }
79
+ return messages;
80
+ }
81
+ if (msg.role === 'assistant' && 'function_call' in msg && msg.function_call) {
82
+ return {
83
+ type: 'function_call',
84
+ id: msg.function_call.name,
85
+ call_id: msg.function_call.name,
86
+ name: msg.function_call.name,
87
+ arguments: msg.function_call.arguments
88
+ };
89
+ }
90
+ let content = '';
91
+ if (typeof msg.content === 'string') {
92
+ content = msg.content;
93
+ }
94
+ else if (msg.content === null || msg.content === undefined) {
95
+ content = '';
96
+ }
97
+ else if (Array.isArray(msg.content)) {
98
+ content = msg.content.map(part => {
99
+ if ('text' in part)
100
+ return part.text;
101
+ if ('refusal' in part)
102
+ return `[Refusal: ${part.refusal}]`;
103
+ return JSON.stringify(part);
104
+ }).join('');
105
+ }
106
+ else {
107
+ content = JSON.stringify(msg.content);
108
+ }
109
+ return {
110
+ type: 'message',
111
+ role,
112
+ content,
113
+ status: 'completed'
114
+ };
115
+ }).flat();
116
+ }
117
+ function convertTools(tools) {
118
+ if (!tools)
119
+ return undefined;
120
+ return tools.map(tool => ({
121
+ function: async (args) => {
122
+ throw new Error(`Tool ${tool.function.name} not implemented. Use processToolCall option to handle tool execution.`);
123
+ },
124
+ definition: {
125
+ type: 'function',
126
+ function: {
127
+ name: tool.function.name,
128
+ description: tool.function.description || `Function ${tool.function.name}`,
129
+ parameters: tool.function.parameters || {
130
+ type: 'object',
131
+ properties: {},
132
+ required: []
133
+ }
134
+ }
135
+ }
136
+ }));
137
+ }
138
+ function convertModelSettings(params) {
139
+ const settings = {};
140
+ if ('temperature' in params && params.temperature !== undefined) {
141
+ settings.temperature = params.temperature;
142
+ }
143
+ if ('max_tokens' in params && params.max_tokens !== undefined) {
144
+ settings.max_tokens = params.max_tokens;
145
+ }
146
+ if ('top_p' in params && params.top_p !== undefined) {
147
+ settings.top_p = params.top_p;
148
+ }
149
+ if ('seed' in params && params.seed !== undefined) {
150
+ settings.seed = params.seed;
151
+ }
152
+ if ('response_format' in params && params.response_format) {
153
+ if (params.response_format.type === 'json_object') {
154
+ settings.force_json = true;
155
+ }
156
+ }
157
+ return settings;
158
+ }
159
+ function generateId() {
160
+ return `chatcmpl-${Date.now()}${Math.random().toString(36).substr(2, 9)}`;
161
+ }
162
+ export const chat = {
163
+ completions: {
164
+ async create(params) {
165
+ const { messages, model, stream = false, tools, tool_choice, ...restParams } = params;
166
+ const ensembleMessages = convertMessages(messages);
167
+ const ensembleTools = convertTools(tools);
168
+ const modelSettings = convertModelSettings(params);
169
+ if (stream) {
170
+ return createStreamingResponse(model, ensembleMessages, {
171
+ tools: ensembleTools,
172
+ toolChoice: tool_choice,
173
+ modelSettings
174
+ });
175
+ }
176
+ else {
177
+ return createNonStreamingResponse(model, ensembleMessages, {
178
+ tools: ensembleTools,
179
+ toolChoice: tool_choice,
180
+ modelSettings
181
+ });
182
+ }
183
+ }
184
+ }
185
+ };
186
+ export const responses = {
187
+ async create(params) {
188
+ const { model, input, instructions, previous_response_id, tools, stream = false, metadata, ...restParams } = params;
189
+ let messages;
190
+ if (typeof input === 'string') {
191
+ messages = [
192
+ {
193
+ type: 'message',
194
+ role: 'user',
195
+ content: input,
196
+ status: 'completed'
197
+ }
198
+ ];
199
+ }
200
+ else {
201
+ messages = convertMessages(input);
202
+ }
203
+ if (instructions) {
204
+ messages.unshift({
205
+ type: 'message',
206
+ role: 'developer',
207
+ content: instructions,
208
+ status: 'completed'
209
+ });
210
+ }
211
+ let ensembleTools;
212
+ if (tools && tools.length > 0) {
213
+ ensembleTools = tools.map(tool => {
214
+ let toolFunction;
215
+ let description;
216
+ switch (tool.name) {
217
+ case 'web_search':
218
+ description = 'Search the web for information';
219
+ toolFunction = async (query) => {
220
+ return `Web search results for "${query}": [simulated results]`;
221
+ };
222
+ break;
223
+ case 'file_search':
224
+ description = 'Search for files in the workspace';
225
+ toolFunction = async (query) => {
226
+ return `File search results for "${query}": [simulated results]`;
227
+ };
228
+ break;
229
+ case 'computer_use':
230
+ description = 'Control computer applications';
231
+ toolFunction = async (command) => {
232
+ return `Computer command "${command}" executed: [simulated result]`;
233
+ };
234
+ break;
235
+ default:
236
+ description = `Custom tool: ${tool.name}`;
237
+ toolFunction = async (args) => {
238
+ throw new Error(`Tool ${tool.name} not implemented`);
239
+ };
240
+ }
241
+ return {
242
+ function: toolFunction,
243
+ definition: {
244
+ type: 'function',
245
+ function: {
246
+ name: tool.name,
247
+ description,
248
+ parameters: (tool.config && typeof tool.config === 'object' && 'type' in tool.config)
249
+ ? tool.config
250
+ : {
251
+ type: 'object',
252
+ properties: {
253
+ input: { type: 'string', description: 'Input for the tool' }
254
+ },
255
+ required: ['input']
256
+ }
257
+ }
258
+ }
259
+ };
260
+ });
261
+ }
262
+ const modelSettings = convertModelSettings(restParams);
263
+ if (stream) {
264
+ return createResponsesStreamingResponse(model, messages, {
265
+ tools: ensembleTools,
266
+ modelSettings,
267
+ metadata,
268
+ previousResponseId: previous_response_id
269
+ });
270
+ }
271
+ else {
272
+ return createResponsesNonStreamingResponse(model, messages, {
273
+ tools: ensembleTools,
274
+ modelSettings,
275
+ metadata,
276
+ previousResponseId: previous_response_id
277
+ });
278
+ }
279
+ }
280
+ };
281
+ export const completions = {
282
+ async create(params) {
283
+ const { model, prompt, stream = false, suffix, ...restParams } = params;
284
+ const promptText = Array.isArray(prompt) ? prompt.join('\n') : prompt;
285
+ const fullPrompt = suffix ? `${promptText}${suffix}` : promptText;
286
+ const messages = [
287
+ {
288
+ type: 'message',
289
+ role: 'user',
290
+ content: fullPrompt,
291
+ status: 'completed'
292
+ }
293
+ ];
294
+ const modelSettings = convertModelSettings(params);
295
+ if (stream) {
296
+ return createLegacyStreamingResponse(model, messages, modelSettings);
297
+ }
298
+ else {
299
+ return createLegacyNonStreamingResponse(model, messages, modelSettings, promptText);
300
+ }
301
+ }
302
+ };
303
+ function isMessageEvent(event) {
304
+ return event.type === 'message_delta' && 'content' in event;
305
+ }
306
+ function isToolEvent(event) {
307
+ return event.type === 'tool_start' && 'tool_calls' in event;
308
+ }
309
+ function isCostUpdateEvent(event) {
310
+ return event.type === 'cost_update' && 'usage' in event;
311
+ }
312
+ async function createNonStreamingResponse(model, messages, options) {
313
+ const id = generateId();
314
+ const created = Math.floor(Date.now() / 1000);
315
+ let content = '';
316
+ let toolCalls = [];
317
+ let finishReason = 'stop';
318
+ let usage = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
319
+ for await (const event of request(model, messages, options)) {
320
+ if (isMessageEvent(event)) {
321
+ content += event.content;
322
+ }
323
+ else if (isToolEvent(event)) {
324
+ toolCalls = event.tool_calls.map(tc => ({
325
+ id: tc.id,
326
+ type: 'function',
327
+ function: {
328
+ name: tc.function.name,
329
+ arguments: tc.function.arguments
330
+ }
331
+ }));
332
+ finishReason = 'tool_calls';
333
+ }
334
+ else if (isCostUpdateEvent(event)) {
335
+ usage = {
336
+ prompt_tokens: event.usage.input_tokens,
337
+ completion_tokens: event.usage.output_tokens,
338
+ total_tokens: event.usage.total_tokens
339
+ };
340
+ }
341
+ }
342
+ return {
343
+ id,
344
+ object: 'chat.completion',
345
+ created,
346
+ model,
347
+ choices: [{
348
+ index: 0,
349
+ message: {
350
+ role: 'assistant',
351
+ content: content || null,
352
+ refusal: null,
353
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined
354
+ },
355
+ finish_reason: finishReason,
356
+ logprobs: null
357
+ }],
358
+ usage
359
+ };
360
+ }
361
+ async function* createStreamingResponse(model, messages, options) {
362
+ const id = generateId();
363
+ const created = Math.floor(Date.now() / 1000);
364
+ let isFirst = true;
365
+ for await (const event of request(model, messages, options)) {
366
+ if (isMessageEvent(event)) {
367
+ if (isFirst) {
368
+ yield {
369
+ id,
370
+ object: 'chat.completion.chunk',
371
+ created,
372
+ model,
373
+ choices: [{
374
+ index: 0,
375
+ delta: {
376
+ role: 'assistant'
377
+ },
378
+ finish_reason: null
379
+ }]
380
+ };
381
+ isFirst = false;
382
+ }
383
+ yield {
384
+ id,
385
+ object: 'chat.completion.chunk',
386
+ created,
387
+ model,
388
+ choices: [{
389
+ index: 0,
390
+ delta: {
391
+ content: event.content
392
+ },
393
+ finish_reason: null
394
+ }]
395
+ };
396
+ }
397
+ else if (isToolEvent(event)) {
398
+ for (let i = 0; i < event.tool_calls.length; i++) {
399
+ const tc = event.tool_calls[i];
400
+ yield {
401
+ id,
402
+ object: 'chat.completion.chunk',
403
+ created,
404
+ model,
405
+ choices: [{
406
+ index: 0,
407
+ delta: {
408
+ tool_calls: [{
409
+ index: i,
410
+ id: tc.id,
411
+ type: 'function',
412
+ function: {
413
+ name: tc.function.name,
414
+ arguments: tc.function.arguments
415
+ }
416
+ }]
417
+ },
418
+ finish_reason: null
419
+ }]
420
+ };
421
+ }
422
+ }
423
+ else if (event.type === 'stream_end') {
424
+ yield {
425
+ id,
426
+ object: 'chat.completion.chunk',
427
+ created,
428
+ model,
429
+ choices: [{
430
+ index: 0,
431
+ delta: {},
432
+ finish_reason: 'stop'
433
+ }]
434
+ };
435
+ }
436
+ }
437
+ }
438
+ async function createLegacyNonStreamingResponse(model, messages, modelSettings, originalPrompt) {
439
+ const id = generateId();
440
+ const created = Math.floor(Date.now() / 1000);
441
+ let text = '';
442
+ let usage = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
443
+ for await (const event of request(model, messages, { modelSettings })) {
444
+ if (isMessageEvent(event)) {
445
+ text += event.content;
446
+ }
447
+ else if (isCostUpdateEvent(event)) {
448
+ usage = {
449
+ prompt_tokens: event.usage.input_tokens,
450
+ completion_tokens: event.usage.output_tokens,
451
+ total_tokens: event.usage.total_tokens
452
+ };
453
+ }
454
+ }
455
+ return {
456
+ id,
457
+ object: 'text_completion',
458
+ created,
459
+ model,
460
+ choices: [{
461
+ text,
462
+ index: 0,
463
+ logprobs: null,
464
+ finish_reason: 'stop'
465
+ }],
466
+ usage
467
+ };
468
+ }
469
+ async function* createLegacyStreamingResponse(model, messages, modelSettings) {
470
+ const id = generateId();
471
+ const created = Math.floor(Date.now() / 1000);
472
+ for await (const event of request(model, messages, { modelSettings })) {
473
+ if (isMessageEvent(event)) {
474
+ yield {
475
+ id,
476
+ object: 'text_completion',
477
+ created,
478
+ model,
479
+ choices: [{
480
+ text: event.content,
481
+ index: 0,
482
+ logprobs: null,
483
+ finish_reason: null
484
+ }]
485
+ };
486
+ }
487
+ else if (event.type === 'stream_end') {
488
+ yield {
489
+ id,
490
+ object: 'text_completion',
491
+ created,
492
+ model,
493
+ choices: [{
494
+ text: '',
495
+ index: 0,
496
+ logprobs: null,
497
+ finish_reason: 'stop'
498
+ }]
499
+ };
500
+ }
501
+ }
502
+ }
503
+ async function createResponsesNonStreamingResponse(model, messages, options) {
504
+ const id = `resp_${Date.now()}${Math.random().toString(36).substr(2, 9)}`;
505
+ const created = Math.floor(Date.now() / 1000);
506
+ let content = '';
507
+ let toolUses = [];
508
+ let usage = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
509
+ for await (const event of request(model, messages, options)) {
510
+ if (isMessageEvent(event)) {
511
+ content += event.content;
512
+ }
513
+ else if (isToolEvent(event)) {
514
+ for (const toolCall of event.tool_calls) {
515
+ toolUses.push({
516
+ name: toolCall.function.name,
517
+ input: JSON.parse(toolCall.function.arguments),
518
+ output: event.results?.find(r => r.call_id === toolCall.id)?.output || null
519
+ });
520
+ }
521
+ }
522
+ else if (isCostUpdateEvent(event)) {
523
+ usage = {
524
+ prompt_tokens: event.usage.input_tokens,
525
+ completion_tokens: event.usage.output_tokens,
526
+ total_tokens: event.usage.total_tokens
527
+ };
528
+ }
529
+ }
530
+ return {
531
+ id,
532
+ object: 'response',
533
+ created,
534
+ model,
535
+ content,
536
+ tool_uses: toolUses.length > 0 ? toolUses : undefined,
537
+ usage,
538
+ metadata: options.metadata
539
+ };
540
+ }
541
+ async function* createResponsesStreamingResponse(model, messages, options) {
542
+ const id = `resp_${Date.now()}${Math.random().toString(36).substr(2, 9)}`;
543
+ const created = Math.floor(Date.now() / 1000);
544
+ let toolIndex = 0;
545
+ for await (const event of request(model, messages, options)) {
546
+ if (isMessageEvent(event)) {
547
+ yield {
548
+ id,
549
+ object: 'response.chunk',
550
+ created,
551
+ delta: {
552
+ content: event.content
553
+ }
554
+ };
555
+ }
556
+ else if (isToolEvent(event)) {
557
+ for (const toolCall of event.tool_calls) {
558
+ yield {
559
+ id,
560
+ object: 'response.chunk',
561
+ created,
562
+ delta: {
563
+ tool_uses: [{
564
+ index: toolIndex++,
565
+ name: toolCall.function.name,
566
+ input: toolCall.function.arguments,
567
+ output: event.results?.find(r => r.call_id === toolCall.id)?.output || undefined
568
+ }]
569
+ }
570
+ };
571
+ }
572
+ }
573
+ }
574
+ }
575
+ const OpenAIEnsemble = {
576
+ chat,
577
+ completions,
578
+ responses
579
+ };
580
+ export default OpenAIEnsemble;
581
+ //# sourceMappingURL=openai-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["../openai-compat.ts"],"names":[],"mappings":"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"}