@just-every/ensemble 0.2.268 → 0.2.270

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 (118) hide show
  1. package/README.md +11 -10
  2. package/dist/cjs/core/ensemble_live.cjs +4 -2
  3. package/dist/cjs/core/ensemble_live.d.ts.map +1 -1
  4. package/dist/cjs/core/ensemble_live.js.map +1 -1
  5. package/dist/cjs/core/ensemble_video.cjs +37 -0
  6. package/dist/cjs/core/ensemble_video.d.ts +3 -0
  7. package/dist/cjs/core/ensemble_video.d.ts.map +1 -0
  8. package/dist/cjs/core/ensemble_video.js.map +1 -0
  9. package/dist/cjs/data/model_data.cjs +362 -152
  10. package/dist/cjs/data/model_data.d.ts +4 -0
  11. package/dist/cjs/data/model_data.d.ts.map +1 -1
  12. package/dist/cjs/data/model_data.js.map +1 -1
  13. package/dist/cjs/index.cjs +3 -1
  14. package/dist/cjs/index.d.ts +1 -0
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/model_providers/deepseek.cjs +6 -97
  18. package/dist/cjs/model_providers/deepseek.d.ts +1 -1
  19. package/dist/cjs/model_providers/deepseek.d.ts.map +1 -1
  20. package/dist/cjs/model_providers/deepseek.js.map +1 -1
  21. package/dist/cjs/model_providers/deepseek_v4_contract.cjs +19 -0
  22. package/dist/cjs/model_providers/deepseek_v4_contract.d.ts +3 -0
  23. package/dist/cjs/model_providers/deepseek_v4_contract.d.ts.map +1 -0
  24. package/dist/cjs/model_providers/deepseek_v4_contract.js.map +1 -0
  25. package/dist/cjs/model_providers/gemini.cjs +10 -4
  26. package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
  27. package/dist/cjs/model_providers/gemini.js.map +1 -1
  28. package/dist/cjs/model_providers/gemini_model_contract.cjs +12 -0
  29. package/dist/cjs/model_providers/gemini_model_contract.d.ts +2 -0
  30. package/dist/cjs/model_providers/gemini_model_contract.d.ts.map +1 -0
  31. package/dist/cjs/model_providers/gemini_model_contract.js.map +1 -0
  32. package/dist/cjs/model_providers/grok.cjs +81 -11
  33. package/dist/cjs/model_providers/grok.d.ts +2 -1
  34. package/dist/cjs/model_providers/grok.d.ts.map +1 -1
  35. package/dist/cjs/model_providers/grok.js.map +1 -1
  36. package/dist/cjs/model_providers/grok_imagine_pricing.cjs +25 -0
  37. package/dist/cjs/model_providers/grok_imagine_pricing.d.ts +10 -0
  38. package/dist/cjs/model_providers/grok_imagine_pricing.d.ts.map +1 -0
  39. package/dist/cjs/model_providers/grok_imagine_pricing.js.map +1 -0
  40. package/dist/cjs/model_providers/model_provider.cjs +2 -0
  41. package/dist/cjs/model_providers/model_provider.d.ts.map +1 -1
  42. package/dist/cjs/model_providers/model_provider.js.map +1 -1
  43. package/dist/cjs/model_providers/openai.cjs +30 -0
  44. package/dist/cjs/model_providers/openai.d.ts +2 -1
  45. package/dist/cjs/model_providers/openai.d.ts.map +1 -1
  46. package/dist/cjs/model_providers/openai.js.map +1 -1
  47. package/dist/cjs/model_providers/openai_chat.cjs +9 -0
  48. package/dist/cjs/model_providers/openai_chat.d.ts.map +1 -1
  49. package/dist/cjs/model_providers/openai_chat.js.map +1 -1
  50. package/dist/cjs/model_providers/openai_realtime.cjs +261 -0
  51. package/dist/cjs/model_providers/openai_realtime.d.ts +40 -0
  52. package/dist/cjs/model_providers/openai_realtime.d.ts.map +1 -0
  53. package/dist/cjs/model_providers/openai_realtime.js.map +1 -0
  54. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  55. package/dist/cjs/types/types.d.ts +28 -3
  56. package/dist/cjs/types/types.d.ts.map +1 -1
  57. package/dist/cjs/utils/cost_tracker.cjs +12 -0
  58. package/dist/cjs/utils/cost_tracker.d.ts.map +1 -1
  59. package/dist/cjs/utils/cost_tracker.js.map +1 -1
  60. package/dist/core/ensemble_live.d.ts.map +1 -1
  61. package/dist/core/ensemble_live.js +4 -2
  62. package/dist/core/ensemble_live.js.map +1 -1
  63. package/dist/core/ensemble_video.d.ts +3 -0
  64. package/dist/core/ensemble_video.d.ts.map +1 -0
  65. package/dist/core/ensemble_video.js +34 -0
  66. package/dist/core/ensemble_video.js.map +1 -0
  67. package/dist/data/model_data.d.ts +4 -0
  68. package/dist/data/model_data.d.ts.map +1 -1
  69. package/dist/data/model_data.js +362 -152
  70. package/dist/data/model_data.js.map +1 -1
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/model_providers/deepseek.d.ts +1 -1
  76. package/dist/model_providers/deepseek.d.ts.map +1 -1
  77. package/dist/model_providers/deepseek.js +6 -97
  78. package/dist/model_providers/deepseek.js.map +1 -1
  79. package/dist/model_providers/deepseek_v4_contract.d.ts +3 -0
  80. package/dist/model_providers/deepseek_v4_contract.d.ts.map +1 -0
  81. package/dist/model_providers/deepseek_v4_contract.js +16 -0
  82. package/dist/model_providers/deepseek_v4_contract.js.map +1 -0
  83. package/dist/model_providers/gemini.d.ts.map +1 -1
  84. package/dist/model_providers/gemini.js +10 -4
  85. package/dist/model_providers/gemini.js.map +1 -1
  86. package/dist/model_providers/gemini_model_contract.d.ts +2 -0
  87. package/dist/model_providers/gemini_model_contract.d.ts.map +1 -0
  88. package/dist/model_providers/gemini_model_contract.js +9 -0
  89. package/dist/model_providers/gemini_model_contract.js.map +1 -0
  90. package/dist/model_providers/grok.d.ts +2 -1
  91. package/dist/model_providers/grok.d.ts.map +1 -1
  92. package/dist/model_providers/grok.js +81 -11
  93. package/dist/model_providers/grok.js.map +1 -1
  94. package/dist/model_providers/grok_imagine_pricing.d.ts +10 -0
  95. package/dist/model_providers/grok_imagine_pricing.d.ts.map +1 -0
  96. package/dist/model_providers/grok_imagine_pricing.js +21 -0
  97. package/dist/model_providers/grok_imagine_pricing.js.map +1 -0
  98. package/dist/model_providers/model_provider.d.ts.map +1 -1
  99. package/dist/model_providers/model_provider.js +2 -0
  100. package/dist/model_providers/model_provider.js.map +1 -1
  101. package/dist/model_providers/openai.d.ts +2 -1
  102. package/dist/model_providers/openai.d.ts.map +1 -1
  103. package/dist/model_providers/openai.js +30 -0
  104. package/dist/model_providers/openai.js.map +1 -1
  105. package/dist/model_providers/openai_chat.d.ts.map +1 -1
  106. package/dist/model_providers/openai_chat.js +9 -0
  107. package/dist/model_providers/openai_chat.js.map +1 -1
  108. package/dist/model_providers/openai_realtime.d.ts +40 -0
  109. package/dist/model_providers/openai_realtime.d.ts.map +1 -0
  110. package/dist/model_providers/openai_realtime.js +223 -0
  111. package/dist/model_providers/openai_realtime.js.map +1 -0
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/dist/types/types.d.ts +28 -3
  114. package/dist/types/types.d.ts.map +1 -1
  115. package/dist/utils/cost_tracker.d.ts.map +1 -1
  116. package/dist/utils/cost_tracker.js +12 -0
  117. package/dist/utils/cost_tracker.js.map +1 -1
  118. package/package.json +1 -1
@@ -0,0 +1,223 @@
1
+ import { costTracker } from '../utils/cost_tracker.js';
2
+ export class OpenAIRealtimeSession {
3
+ model;
4
+ config;
5
+ agent;
6
+ options;
7
+ sessionId = '';
8
+ socket;
9
+ active = true;
10
+ queue = [];
11
+ waiters = [];
12
+ text = '';
13
+ readyResolve;
14
+ readyReject;
15
+ ready = new Promise((resolve, reject) => {
16
+ this.readyResolve = resolve;
17
+ this.readyReject = reject;
18
+ });
19
+ constructor(model, config, agent, options, apiKey, socketFactory) {
20
+ this.model = model;
21
+ this.config = config;
22
+ this.agent = agent;
23
+ this.options = options;
24
+ this.socket = socketFactory(`wss://api.openai.com/v1/realtime?model=${encodeURIComponent(model)}`, {
25
+ Authorization: `Bearer ${apiKey}`,
26
+ });
27
+ this.socket.on('message', data => this.handleMessage(JSON.parse(data.toString())));
28
+ this.socket.on('close', () => {
29
+ this.active = false;
30
+ this.notify();
31
+ });
32
+ this.socket.on('error', error => {
33
+ this.readyReject(error);
34
+ this.push({ type: 'error', timestamp: new Date().toISOString(), error: error.message, recoverable: false });
35
+ });
36
+ options.abortSignal?.addEventListener('abort', () => void this.close(), { once: true });
37
+ }
38
+ async initialize() {
39
+ if (this.socket.readyState !== 1) {
40
+ await new Promise((resolve, reject) => {
41
+ this.socket.once('open', resolve);
42
+ this.socket.once('error', reject);
43
+ });
44
+ }
45
+ const voice = this.config.speechConfig?.voiceConfig?.prebuiltVoiceConfig?.voiceName || 'marin';
46
+ const tools = (this.agent.tools || []).map(tool => ({
47
+ type: 'function',
48
+ name: tool.definition.function.name,
49
+ description: tool.definition.function.description,
50
+ parameters: tool.definition.function.parameters,
51
+ }));
52
+ const session = {
53
+ type: 'realtime',
54
+ model: this.model,
55
+ instructions: this.agent.instructions,
56
+ output_modalities: [this.config.responseModalities[0] === 'AUDIO' ? 'audio' : 'text'],
57
+ tools,
58
+ };
59
+ if (this.config.responseModalities[0] === 'AUDIO') {
60
+ session.audio = {
61
+ input: {
62
+ format: { type: 'audio/pcm', rate: this.options.inputAudioSampleRate ?? 24000 },
63
+ turn_detection: { type: 'semantic_vad' },
64
+ },
65
+ output: { format: { type: 'audio/pcm' }, voice },
66
+ };
67
+ }
68
+ this.send({ type: 'session.update', session });
69
+ await this.ready;
70
+ }
71
+ async sendAudio(audio) {
72
+ this.send({ type: 'input_audio_buffer.append', audio: audio.data });
73
+ }
74
+ async commitAudio() {
75
+ this.send({ type: 'input_audio_buffer.commit' });
76
+ this.send({ type: 'response.create' });
77
+ }
78
+ async sendText(text, role = 'user') {
79
+ this.send({
80
+ type: 'conversation.item.create',
81
+ item: { type: 'message', role, content: [{ type: 'input_text', text }] },
82
+ });
83
+ if (role === 'user')
84
+ this.send({ type: 'response.create' });
85
+ }
86
+ async sendToolResponse(toolResults) {
87
+ for (const result of toolResults) {
88
+ this.send({
89
+ type: 'conversation.item.create',
90
+ item: {
91
+ type: 'function_call_output',
92
+ call_id: result.call_id || result.toolCall.call_id || result.toolCall.id,
93
+ output: result.error ?? result.output ?? '',
94
+ },
95
+ });
96
+ }
97
+ this.send({ type: 'response.create' });
98
+ }
99
+ async *getEventStream() {
100
+ while (this.active || this.queue.length) {
101
+ if (!this.queue.length)
102
+ await new Promise(resolve => this.waiters.push(resolve));
103
+ while (this.queue.length)
104
+ yield this.queue.shift();
105
+ }
106
+ }
107
+ async close() {
108
+ this.active = false;
109
+ if (this.socket.readyState === 1 || this.socket.readyState === 0) {
110
+ this.socket.close();
111
+ }
112
+ this.notify();
113
+ }
114
+ isActive() {
115
+ return this.active;
116
+ }
117
+ handleMessage(event) {
118
+ const timestamp = new Date().toISOString();
119
+ if (event.type === 'session.created')
120
+ this.sessionId = event.session?.id || event.event_id || '';
121
+ if (event.type === 'session.updated') {
122
+ this.readyResolve();
123
+ this.push({ type: 'live_ready', timestamp });
124
+ }
125
+ if (event.type === 'response.output_text.delta') {
126
+ this.text += event.delta || '';
127
+ this.push({ type: 'text_delta', timestamp, delta: event.delta || '' });
128
+ this.push({ type: 'message_delta', timestamp, delta: event.delta || '' });
129
+ }
130
+ if (event.type === 'response.output_audio.delta') {
131
+ this.push({
132
+ type: 'audio_output',
133
+ timestamp,
134
+ data: event.delta,
135
+ format: { sampleRate: 24000, channels: 1, encoding: 'pcm16' },
136
+ });
137
+ }
138
+ if (event.type === 'response.output_audio_transcript.delta') {
139
+ this.text += event.delta || '';
140
+ this.push({ type: 'transcription_output', timestamp, text: event.delta || '' });
141
+ }
142
+ if (event.type === 'conversation.item.input_audio_transcription.completed') {
143
+ this.push({ type: 'transcription_input', timestamp, text: event.transcript || '' });
144
+ }
145
+ if (event.type === 'input_audio_buffer.speech_started') {
146
+ this.push({ type: 'turn_start', timestamp, role: 'user' });
147
+ }
148
+ if (event.type === 'response.function_call_arguments.done') {
149
+ this.push({
150
+ type: 'tool_call',
151
+ timestamp,
152
+ toolCalls: [
153
+ {
154
+ id: event.item_id || event.call_id,
155
+ call_id: event.call_id,
156
+ type: 'function',
157
+ function: { name: event.name, arguments: event.arguments || '{}' },
158
+ },
159
+ ],
160
+ });
161
+ }
162
+ if (event.type === 'response.done') {
163
+ const usage = event.response?.usage || {};
164
+ const recorded = costTracker.addUsage({
165
+ model: this.model,
166
+ input_tokens: usage.input_tokens || 0,
167
+ output_tokens: usage.output_tokens || 0,
168
+ cached_tokens: usage.input_token_details?.cached_tokens || 0,
169
+ });
170
+ this.push({
171
+ type: 'cost_update',
172
+ timestamp,
173
+ usage: {
174
+ inputTokens: recorded.input_tokens || 0,
175
+ outputTokens: recorded.output_tokens || 0,
176
+ totalTokens: recorded.total_tokens || 0,
177
+ totalCost: recorded.cost,
178
+ },
179
+ });
180
+ this.push({
181
+ type: 'turn_complete',
182
+ timestamp,
183
+ role: 'model',
184
+ message: { type: 'message', role: 'assistant', status: 'completed', content: this.text },
185
+ });
186
+ this.text = '';
187
+ }
188
+ if (event.type === 'error') {
189
+ this.push({
190
+ type: 'error',
191
+ timestamp,
192
+ error: event.error?.message || 'OpenAI Realtime error',
193
+ recoverable: false,
194
+ });
195
+ }
196
+ }
197
+ send(payload) {
198
+ if (this.socket.readyState !== 1)
199
+ throw new Error('OpenAI Realtime socket is not open.');
200
+ this.socket.send(JSON.stringify(payload));
201
+ }
202
+ push(event) {
203
+ this.queue.push(event);
204
+ this.notify();
205
+ }
206
+ notify() {
207
+ for (const waiter of this.waiters.splice(0))
208
+ waiter();
209
+ }
210
+ }
211
+ export async function createOpenAIRealtimeSession(config, agent, model, options = {}, apiKey = process.env.OPENAI_API_KEY, socketFactory) {
212
+ if (!apiKey)
213
+ throw new Error('OPENAI_API_KEY is required for OpenAI Realtime.');
214
+ let resolvedSocketFactory = socketFactory;
215
+ if (!resolvedSocketFactory) {
216
+ const { default: WebSocket } = await import('ws');
217
+ resolvedSocketFactory = (url, headers) => new WebSocket(url, { headers });
218
+ }
219
+ const session = new OpenAIRealtimeSession(model, config, agent, options, apiKey, resolvedSocketFactory);
220
+ await session.initialize();
221
+ return session;
222
+ }
223
+ //# sourceMappingURL=openai_realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_realtime.js","sourceRoot":"","sources":["../../model_providers/openai_realtime.ts"],"names":[],"mappings":"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"}