@didim365/agent-cli-core 0.3.1 → 0.3.4
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/dist/src/availability/policyCatalog.js +2 -2
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/config/costEstimation.d.ts +1 -1
- package/dist/src/config/costEstimation.js +13 -4
- package/dist/src/config/costEstimation.js.map +1 -1
- package/dist/src/config/models.js +4 -3
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/providerModels.js +16 -6
- package/dist/src/config/providerModels.js.map +1 -1
- package/dist/src/core/contentGenerator.js +10 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/providers/didim/adapter.d.ts +68 -0
- package/dist/src/providers/didim/adapter.js +346 -0
- package/dist/src/providers/didim/adapter.js.map +1 -0
- package/dist/src/providers/didim/bootstrap.d.ts +25 -0
- package/dist/src/providers/didim/bootstrap.js +47 -0
- package/dist/src/providers/didim/bootstrap.js.map +1 -0
- package/dist/src/providers/didim/converter.d.ts +133 -0
- package/dist/src/providers/didim/converter.js +309 -0
- package/dist/src/providers/didim/converter.js.map +1 -0
- package/dist/src/providers/didim/index.d.ts +13 -0
- package/dist/src/providers/didim/index.js +16 -0
- package/dist/src/providers/didim/index.js.map +1 -0
- package/dist/src/providers/gemini/converter.js +1 -1
- package/dist/src/providers/gemini/converter.js.map +1 -1
- package/dist/src/providers/index.d.ts +2 -0
- package/dist/src/providers/index.js +5 -0
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/openai/adapter.d.ts +27 -0
- package/dist/src/providers/openai/adapter.js +106 -0
- package/dist/src/providers/openai/adapter.js.map +1 -1
- package/dist/src/providers/openai/bootstrap.js +4 -1
- package/dist/src/providers/openai/bootstrap.js.map +1 -1
- package/dist/src/providers/openai/responsesConverter.d.ts +92 -0
- package/dist/src/providers/openai/responsesConverter.js +408 -0
- package/dist/src/providers/openai/responsesConverter.js.map +1 -0
- package/dist/src/providers/openai-compatible/adapter.js.map +1 -1
- package/dist/src/providers/providerConfig.d.ts +5 -1
- package/dist/src/providers/providerConfig.js.map +1 -1
- package/dist/src/providers/providerConfigIntegration.d.ts +9 -1
- package/dist/src/providers/providerConfigIntegration.js +7 -1
- package/dist/src/providers/providerConfigIntegration.js.map +1 -1
- package/dist/src/providers/providerSelector.d.ts +4 -0
- package/dist/src/providers/providerSelector.js +6 -1
- package/dist/src/providers/providerSelector.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* DidimAIStudio converter — pure functions for request/response transformation.
|
|
8
|
+
*
|
|
9
|
+
* Converts between the LLM-agnostic types used by the adapter layer and the
|
|
10
|
+
* DidimAIStudio REST/SSE API format.
|
|
11
|
+
*
|
|
12
|
+
* API contract (master plan §1.2 + 06-didiaistudio-plan.md):
|
|
13
|
+
* - Invoke: POST {baseUrl}/scenario-gateway/v1/invoke
|
|
14
|
+
* - SSE: POST {baseUrl}/scenario-gateway/v1/invoke/sse
|
|
15
|
+
* - Improved: POST {baseUrl}/scenario-gateway/v1/invoke/sse/improved
|
|
16
|
+
* - Auth: Authorization: Bearer {jwt_token}
|
|
17
|
+
* - Body: { chat: string, thread_id?: string }
|
|
18
|
+
* - Response: { response: string, thread_id: string }
|
|
19
|
+
*
|
|
20
|
+
* Improved mode event types (OpenAPI spec + 06-plan):
|
|
21
|
+
* - message_partial: 토큰 스트리밍 (chunk/content/message 필드)
|
|
22
|
+
* - message_complete: ToolMessage 완료 (message 필드 or process_name)
|
|
23
|
+
* - message_metadata: 실행 컨텍스트 (langgraph_node, step, model) → 비콘텐츠
|
|
24
|
+
* - process: 노드 진행 상황 → 비콘텐츠
|
|
25
|
+
* - message: 최종 완성 응답 → adapter가 delta 이후 중복 억제
|
|
26
|
+
* - complete/done: 실행 완료 (thread_id, qa_id)
|
|
27
|
+
* - error: 에러
|
|
28
|
+
*/
|
|
29
|
+
import { LlmEventType, } from '../events.js';
|
|
30
|
+
/** Default response ID prefix for DidimAIStudio (no server-side ID). */
|
|
31
|
+
const DIDIM_RESPONSE_ID_PREFIX = 'didim-';
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Domain & Endpoint
|
|
34
|
+
// ============================================================================
|
|
35
|
+
const INVOKE_PATH = '/scenario-gateway/v1/invoke';
|
|
36
|
+
/**
|
|
37
|
+
* Normalizes a DidimAIStudio domain by stripping protocol prefixes,
|
|
38
|
+
* trailing slashes, and path segments. Preserves port numbers.
|
|
39
|
+
*/
|
|
40
|
+
export function normalizeDidimDomain(raw) {
|
|
41
|
+
if (!raw || !raw.trim()) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
let domain = raw.trim();
|
|
45
|
+
// Strip protocol(s) — handles double-protocol edge case
|
|
46
|
+
domain = domain.replace(/^(https?:\/\/)+/i, '');
|
|
47
|
+
// Strip query string, hash, and path
|
|
48
|
+
domain = domain.split('?')[0].split('#')[0];
|
|
49
|
+
const slashIdx = domain.indexOf('/');
|
|
50
|
+
if (slashIdx !== -1) {
|
|
51
|
+
domain = domain.substring(0, slashIdx);
|
|
52
|
+
}
|
|
53
|
+
return domain;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Detects the protocol scheme from a raw domain/URL string.
|
|
57
|
+
* Returns 'http' if explicitly specified, otherwise defaults to 'https'.
|
|
58
|
+
*
|
|
59
|
+
* Supports http:// for local development (e.g., http://localhost:8008).
|
|
60
|
+
*/
|
|
61
|
+
export function detectScheme(raw) {
|
|
62
|
+
return /^http:\/\//i.test(raw.trim()) ? 'http' : 'https';
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Builds the full endpoint URL for a given domain and options.
|
|
66
|
+
* Preserves http:// protocol when explicitly provided (local dev support).
|
|
67
|
+
*/
|
|
68
|
+
export function getDidimEndpoint(domain, options) {
|
|
69
|
+
const scheme = detectScheme(domain);
|
|
70
|
+
const normalizedDomain = normalizeDidimDomain(domain);
|
|
71
|
+
if (!normalizedDomain) {
|
|
72
|
+
throw new Error('Invalid domain provided');
|
|
73
|
+
}
|
|
74
|
+
let url = `${scheme}://${normalizedDomain}${INVOKE_PATH}`;
|
|
75
|
+
if (options?.streaming) {
|
|
76
|
+
url += '/sse';
|
|
77
|
+
if (options.streamMode === 'improved') {
|
|
78
|
+
url += '/improved';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return url;
|
|
82
|
+
}
|
|
83
|
+
// ============================================================================
|
|
84
|
+
// Headers & Body
|
|
85
|
+
// ============================================================================
|
|
86
|
+
/**
|
|
87
|
+
* Builds HTTP headers for a DidimAIStudio request.
|
|
88
|
+
* Trims threadId before use — whitespace-only values are excluded.
|
|
89
|
+
*/
|
|
90
|
+
export function buildDidimHeaders(jwtToken, threadId) {
|
|
91
|
+
const headers = {
|
|
92
|
+
Authorization: `Bearer ${jwtToken}`,
|
|
93
|
+
'Content-Type': 'application/json',
|
|
94
|
+
};
|
|
95
|
+
const trimmed = threadId?.trim();
|
|
96
|
+
if (trimmed) {
|
|
97
|
+
headers['x-thread-id'] = trimmed;
|
|
98
|
+
}
|
|
99
|
+
return headers;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Builds the JSON request body for a DidimAIStudio request.
|
|
103
|
+
* Trims threadId before use — whitespace-only values are excluded.
|
|
104
|
+
*/
|
|
105
|
+
export function buildDidimRequestBody(chat, threadId) {
|
|
106
|
+
const body = { chat };
|
|
107
|
+
const trimmed = threadId?.trim();
|
|
108
|
+
if (trimmed) {
|
|
109
|
+
body['thread_id'] = trimmed;
|
|
110
|
+
}
|
|
111
|
+
return body;
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Response Parsing
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Parses a raw DidimAIStudio invoke response into typed application data.
|
|
118
|
+
*/
|
|
119
|
+
export function parseDidimResponse(raw) {
|
|
120
|
+
const content = typeof raw.response === 'string' ? raw.response : '';
|
|
121
|
+
const threadId = typeof raw.thread_id === 'string' ? raw.thread_id : null;
|
|
122
|
+
return { content, threadId };
|
|
123
|
+
}
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// SSE Event Parsing
|
|
126
|
+
// ============================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Extracts a text field from parsed SSE data using a fallback chain.
|
|
129
|
+
*
|
|
130
|
+
* Design docs use inconsistent field names across documents:
|
|
131
|
+
* - 06-didiaistudio-plan.md: "chunk"
|
|
132
|
+
* - master plan: "content"
|
|
133
|
+
* - OpenAPI description: "message"
|
|
134
|
+
*
|
|
135
|
+
* This function tries all known field names to handle any server version.
|
|
136
|
+
*/
|
|
137
|
+
function extractTextField(parsed) {
|
|
138
|
+
for (const key of ['chunk', 'content', 'message']) {
|
|
139
|
+
if (typeof parsed[key] === 'string') {
|
|
140
|
+
return parsed[key];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return '';
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parses a single SSE event (event name + data string) into a DidimSseEvent.
|
|
147
|
+
*
|
|
148
|
+
* Handles both `sse` and `improved` stream modes with graceful fallback
|
|
149
|
+
* for malformed input (invalid JSON, unknown events, empty/whitespace keep-alive).
|
|
150
|
+
*
|
|
151
|
+
* @returns Parsed event, or `null` for ignored/keep-alive/metadata events.
|
|
152
|
+
*/
|
|
153
|
+
export function parseDidimSseEvent(eventName, data, mode) {
|
|
154
|
+
// Empty or whitespace-only data → keep-alive, ignore
|
|
155
|
+
if (!data || !data.trim()) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
// Parse JSON safely
|
|
159
|
+
let parsed;
|
|
160
|
+
try {
|
|
161
|
+
parsed = JSON.parse(data);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Invalid JSON → return error event with raw data for debugging
|
|
165
|
+
return { type: 'error', message: `Invalid JSON: ${data}` };
|
|
166
|
+
}
|
|
167
|
+
if (mode === 'sse') {
|
|
168
|
+
return parseSseMode(eventName, parsed);
|
|
169
|
+
}
|
|
170
|
+
return parseImprovedMode(eventName, parsed);
|
|
171
|
+
}
|
|
172
|
+
function parseSseMode(eventName, parsed) {
|
|
173
|
+
switch (eventName) {
|
|
174
|
+
case 'message':
|
|
175
|
+
return {
|
|
176
|
+
type: 'delta',
|
|
177
|
+
text: extractTextField(parsed),
|
|
178
|
+
};
|
|
179
|
+
case 'done':
|
|
180
|
+
return {
|
|
181
|
+
type: 'done',
|
|
182
|
+
threadId: typeof parsed['thread_id'] === 'string' ? parsed['thread_id'] : null,
|
|
183
|
+
};
|
|
184
|
+
case 'error':
|
|
185
|
+
return {
|
|
186
|
+
type: 'error',
|
|
187
|
+
message: typeof parsed['message'] === 'string'
|
|
188
|
+
? parsed['message']
|
|
189
|
+
: 'Unknown error',
|
|
190
|
+
};
|
|
191
|
+
default:
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function parseImprovedMode(eventName, parsed) {
|
|
196
|
+
switch (eventName) {
|
|
197
|
+
// Token streaming
|
|
198
|
+
case 'message_partial':
|
|
199
|
+
return {
|
|
200
|
+
type: 'delta',
|
|
201
|
+
text: extractTextField(parsed),
|
|
202
|
+
};
|
|
203
|
+
// ToolMessage completion — may carry text content
|
|
204
|
+
case 'message_complete':
|
|
205
|
+
return {
|
|
206
|
+
type: 'delta',
|
|
207
|
+
text: extractTextField(parsed),
|
|
208
|
+
};
|
|
209
|
+
// Final completed response — adapter suppresses when deltas already emitted
|
|
210
|
+
case 'message':
|
|
211
|
+
return {
|
|
212
|
+
type: 'final_message',
|
|
213
|
+
text: extractTextField(parsed),
|
|
214
|
+
};
|
|
215
|
+
// Completion event — supports both 'complete' (OpenAPI) and 'done' (06-plan)
|
|
216
|
+
case 'complete':
|
|
217
|
+
case 'done':
|
|
218
|
+
return {
|
|
219
|
+
type: 'done',
|
|
220
|
+
threadId: typeof parsed['thread_id'] === 'string' ? parsed['thread_id'] : null,
|
|
221
|
+
};
|
|
222
|
+
case 'error':
|
|
223
|
+
return {
|
|
224
|
+
type: 'error',
|
|
225
|
+
message: typeof parsed['message'] === 'string'
|
|
226
|
+
? parsed['message']
|
|
227
|
+
: typeof parsed['error'] === 'string'
|
|
228
|
+
? parsed['error']
|
|
229
|
+
: 'Unknown error',
|
|
230
|
+
};
|
|
231
|
+
// Non-content metadata events — recognized but not converted to text
|
|
232
|
+
case 'message_metadata':
|
|
233
|
+
case 'process':
|
|
234
|
+
return {
|
|
235
|
+
type: 'metadata',
|
|
236
|
+
eventName,
|
|
237
|
+
data: parsed,
|
|
238
|
+
};
|
|
239
|
+
default:
|
|
240
|
+
// Unknown event — return null. Phase 2 adapter can log if needed.
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// ============================================================================
|
|
245
|
+
// LlmEvent Conversion
|
|
246
|
+
// ============================================================================
|
|
247
|
+
/**
|
|
248
|
+
* Generates a unique response ID for DidimAIStudio responses.
|
|
249
|
+
* DidimAIStudio does not provide server-side response IDs.
|
|
250
|
+
*/
|
|
251
|
+
export function generateDidimResponseId() {
|
|
252
|
+
return `${DIDIM_RESPONSE_ID_PREFIX}${crypto.randomUUID()}`;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Converts a parsed DidimAIStudio invoke response to an LlmGenerateResponse.
|
|
256
|
+
*/
|
|
257
|
+
export function convertDidimResponseToLlm(parsed, model) {
|
|
258
|
+
return {
|
|
259
|
+
id: generateDidimResponseId(),
|
|
260
|
+
content: [{ type: 'text', text: parsed.content }],
|
|
261
|
+
model,
|
|
262
|
+
stopReason: 'end_turn',
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Converts a DidimSseEvent to one or more LlmEvents.
|
|
267
|
+
*
|
|
268
|
+
* Event mapping:
|
|
269
|
+
* - delta → TextDelta
|
|
270
|
+
* - final_message → TextDelta (adapter suppresses when deltas already emitted)
|
|
271
|
+
* - done → Finished + MessageEnd (in order)
|
|
272
|
+
* - error → Error
|
|
273
|
+
* - metadata → [] (non-content, silently skipped)
|
|
274
|
+
*/
|
|
275
|
+
export function convertDidimSseToLlmEvents(event) {
|
|
276
|
+
switch (event.type) {
|
|
277
|
+
case 'delta':
|
|
278
|
+
case 'final_message': {
|
|
279
|
+
const textEvent = {
|
|
280
|
+
type: LlmEventType.TextDelta,
|
|
281
|
+
text: event.text,
|
|
282
|
+
};
|
|
283
|
+
return [textEvent];
|
|
284
|
+
}
|
|
285
|
+
case 'done': {
|
|
286
|
+
const finishedEvent = {
|
|
287
|
+
type: LlmEventType.Finished,
|
|
288
|
+
finishReason: 'end_turn',
|
|
289
|
+
};
|
|
290
|
+
const messageEndEvent = {
|
|
291
|
+
type: LlmEventType.MessageEnd,
|
|
292
|
+
};
|
|
293
|
+
return [finishedEvent, messageEndEvent];
|
|
294
|
+
}
|
|
295
|
+
case 'error': {
|
|
296
|
+
const errorEvent = {
|
|
297
|
+
type: LlmEventType.Error,
|
|
298
|
+
error: event.message || 'Unknown DidimAIStudio error',
|
|
299
|
+
};
|
|
300
|
+
return [errorEvent];
|
|
301
|
+
}
|
|
302
|
+
case 'metadata':
|
|
303
|
+
// Non-content events — no LlmEvents produced
|
|
304
|
+
return [];
|
|
305
|
+
default:
|
|
306
|
+
return [];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../../src/providers/didim/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Didim provider module — DidimAIStudio adapter, bootstrap, and converter.
|
|
8
|
+
*
|
|
9
|
+
* @see docs/00_project/Integration_DidimAIStudio/00_master_plan.md
|
|
10
|
+
*/
|
|
11
|
+
export { DidimAdapter } from './adapter.js';
|
|
12
|
+
export { bootstrapDidimProvider } from './bootstrap.js';
|
|
13
|
+
export { type DidimStreamMode, type DidimResponse, type DidimParsedResponse, type DidimSseEvent, type DidimEndpointOptions, normalizeDidimDomain, detectScheme, getDidimEndpoint, buildDidimHeaders, buildDidimRequestBody, parseDidimResponse, parseDidimSseEvent, generateDidimResponseId, convertDidimResponseToLlm, convertDidimSseToLlmEvents, } from './converter.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Didim provider module — DidimAIStudio adapter, bootstrap, and converter.
|
|
8
|
+
*
|
|
9
|
+
* @see docs/00_project/Integration_DidimAIStudio/00_master_plan.md
|
|
10
|
+
*/
|
|
11
|
+
export { DidimAdapter } from './adapter.js';
|
|
12
|
+
export { bootstrapDidimProvider } from './bootstrap.js';
|
|
13
|
+
export {
|
|
14
|
+
// Functions
|
|
15
|
+
normalizeDidimDomain, detectScheme, getDidimEndpoint, buildDidimHeaders, buildDidimRequestBody, parseDidimResponse, parseDidimSseEvent, generateDidimResponseId, convertDidimResponseToLlm, convertDidimSseToLlmEvents, } from './converter.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/didim/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO;AAOL,YAAY;AACZ,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC"}
|
|
@@ -222,7 +222,7 @@ export class GeminiConverter {
|
|
|
222
222
|
type: 'tool_call',
|
|
223
223
|
id: crypto.randomUUID(),
|
|
224
224
|
name: part.functionCall.name,
|
|
225
|
-
arguments:
|
|
225
|
+
arguments: part.functionCall.args ?? {},
|
|
226
226
|
});
|
|
227
227
|
}
|
|
228
228
|
else if ('inlineData' in part && part.inlineData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../../src/providers/gemini/converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,+EAA+E;IAC/E,mCAAmC;IACnC,+EAA+E;IAE/E;;;;;;;OAOG;IACH,eAAe,CAAC,OAA2B;QACzC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,GACzD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1C,oDAAoD;QACpD,IAAI,sBAA0C,CAAC;QAC/C,IAAI,OAAO,CAAC,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;YACtD,sBAAsB,GAAG,GAAG,OAAO,CAAC,iBAAiB,KAAK,oBAAoB,EAAE,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,sBAAsB;gBACpB,OAAO,CAAC,iBAAiB,IAAI,oBAAoB,IAAI,SAAS,CAAC;QACnE,CAAC;QAED,8BAA8B;QAC9B,MAAM,MAAM,GAA0B,EAAE,CAAC;QAEzC,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;QACpD,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,QAAQ;QACR,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QAED,cAAc;QACd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ;YACR,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAsB;QAIrC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAC9D,CAAC;gBACF,iBAAiB,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,gDAAgD;YAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAEzD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAsB;QAClC,MAAM,KAAK,GAAW,EAAE,CAAC;QAEzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,MAAM;oBACT,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnC,MAAM;gBAER,KAAK,OAAO;oBACV,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACrC,KAAK,CAAC,IAAI,CAAC;4BACT,UAAU,EAAE;gCACV,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;gCAClC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;6BAC1B;yBACF,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACzC,KAAK,CAAC,IAAI,CAAC;4BACT,QAAQ,EAAE;gCACR,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;gCAClC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;6BAC5B;yBACF,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM;gBAER,KAAK,WAAW;oBACd,KAAK,CAAC,IAAI,CAAC;wBACT,YAAY,EAAE;4BACZ,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,IAAI,EAAE,OAAO,CAAC,SAAS;yBACxB;qBACF,CAAC,CAAC;oBACH,MAAM;gBAER,KAAK,aAAa;oBAChB,KAAK,CAAC,IAAI,CAAC;wBACT,gBAAgB,EAAE;4BAChB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU;4BACxC,QAAQ,EAAE;gCACR,MAAM,EACJ,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;oCACjC,CAAC,CAAC,OAAO,CAAC,OAAO;oCACjB,CAAC,CAAC,OAAO,CAAC,OAAO;6BACtB;yBACF;qBACF,CAAC,CAAC;oBACH,MAAM;gBAER,KAAK,SAAS;oBACZ,oDAAoD;oBACpD,MAAM;gBAER;oBACE,uCAAuC;oBACvC,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,KAA0B;QACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL;gBACE,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,sEAAsE;oBACtE,UAAU,EAAE,IAAI,CAAC,UAAgD;iBAClE,CAAC,CAAC;aACJ;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAqB;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAA8C;gBACzD,IAAI,EAAE,MAAmC;gBACzC,IAAI,EAAE,MAAmC;gBACzC,QAAQ,EAAE,KAAkC;aAC7C,CAAC;YAEF,OAAO;gBACL,qBAAqB,EAAE;oBACrB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAK,MAAoC;iBAC/D;aACF,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,OAAO;YACL,qBAAqB,EAAE;gBACrB,IAAI,EAAE,KAAkC;gBACxC,oBAAoB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,oCAAoC;IACpC,+EAA+E;IAE/E;;OAEG;IACH,kBAAkB,CAChB,QAAiC,EACjC,KAAa;QAEb,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAE9C,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;YAC9C,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACpC,KAAK,EAAE,QAAQ,CAAC,YAAY,IAAI,KAAK;YACrC,UAAU,EAAE,IAAI,CAAC,aAAa,CAC5B,SAAS,EAAE,YAAkC,CAC9C;YACD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAClC,WAAW,EAAE,QAAQ;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAa;QAC3B,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,WAAW;oBACjB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAK;oBAC7B,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../../src/providers/gemini/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,4 +65,9 @@ export { OpenAi };
|
|
|
65
65
|
// Then: OpenAiCompatible.OpenAiCompatibleAdapter, etc.
|
|
66
66
|
import * as OpenAiCompatible from './openai-compatible/index.js';
|
|
67
67
|
export { OpenAiCompatible };
|
|
68
|
+
// Didim provider types (DidimAIStudio integration)
|
|
69
|
+
// Use: import { Didim } from '@didim365/agent-cli-core/providers'
|
|
70
|
+
// Then: Didim.DidimAdapter, Didim.bootstrapDidimProvider, etc.
|
|
71
|
+
import * as Didim from './didim/index.js';
|
|
72
|
+
export { Didim };
|
|
68
73
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,uBAAuB;AACvB,cAAc,kBAAkB,CAAC;AAEjC,oBAAoB;AACpB,cAAc,eAAe,CAAC;AAE9B,mBAAmB;AACnB,cAAc,cAAc,CAAC;AAE7B,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,8BAA8B;AAC9B,cAAc,gCAAgC,CAAC;AAE/C,aAAa;AACb,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,cAAc,aAAa,CAAC;AAE5B,cAAc;AACd,cAAc,aAAa,CAAC;AAE5B,wDAAwD;AACxD,cAAc,sBAAsB,CAAC;AAErC,+DAA+D;AAC/D,sEAAsE;AACtE,cAAc,oBAAoB,CAAC;AAEnC,yCAAyC;AACzC,6DAA6D;AAC7D,mEAAmE;AACnE,qEAAqE;AACrE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,yCAAyC;AACzC,mEAAmE;AACnE,mEAAmE;AACnE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,yCAAyC;AACzC,mEAAmE;AACnE,mEAAmE;AACnE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,oDAAoD;AACpD,6EAA6E;AAC7E,uDAAuD;AACvD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,uBAAuB;AACvB,cAAc,kBAAkB,CAAC;AAEjC,oBAAoB;AACpB,cAAc,eAAe,CAAC;AAE9B,mBAAmB;AACnB,cAAc,cAAc,CAAC;AAE7B,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,8BAA8B;AAC9B,cAAc,gCAAgC,CAAC;AAE/C,aAAa;AACb,cAAc,YAAY,CAAC;AAE3B,cAAc;AACd,cAAc,aAAa,CAAC;AAE5B,cAAc;AACd,cAAc,aAAa,CAAC;AAE5B,wDAAwD;AACxD,cAAc,sBAAsB,CAAC;AAErC,+DAA+D;AAC/D,sEAAsE;AACtE,cAAc,oBAAoB,CAAC;AAEnC,yCAAyC;AACzC,6DAA6D;AAC7D,mEAAmE;AACnE,qEAAqE;AACrE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,yCAAyC;AACzC,mEAAmE;AACnE,mEAAmE;AACnE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,yCAAyC;AACzC,mEAAmE;AACnE,mEAAmE;AACnE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB,oDAAoD;AACpD,6EAA6E;AAC7E,uDAAuD;AACvD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,mDAAmD;AACnD,kEAAkE;AAClE,+DAA+D;AAC/D,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
* Accepts provider-independent LlmGenerateRequest, converts to OpenAI SDK
|
|
10
10
|
* format, and converts responses back to LlmGenerateResponse / LlmEventStream.
|
|
11
11
|
*
|
|
12
|
+
* Supports two API paths:
|
|
13
|
+
* - Chat Completions API (`/v1/chat/completions`) — default for most models
|
|
14
|
+
* - Responses API (`/v1/responses`) — for codex models (gpt-5.3-codex, etc.)
|
|
15
|
+
*
|
|
12
16
|
* @see docs/ai_adapter/03-technical-design.md §3.3.7
|
|
13
17
|
* @see packages/core/src/providers/claude/adapter.ts (Claude counterpart)
|
|
14
18
|
*/
|
|
@@ -17,6 +21,7 @@ import type { LlmGenerateRequest, LlmGenerateResponse, LlmGenerateConfig, LlmPro
|
|
|
17
21
|
import type { LlmEventStream } from '../events.js';
|
|
18
22
|
import { LlmError } from '../errors.js';
|
|
19
23
|
import { OpenAiConverter } from './converter.js';
|
|
24
|
+
import { OpenAiResponsesConverter } from './responsesConverter.js';
|
|
20
25
|
/**
|
|
21
26
|
* Interface for the OpenAI SDK client.
|
|
22
27
|
* This allows dependency injection for testing.
|
|
@@ -27,24 +32,46 @@ export interface OpenAiClient {
|
|
|
27
32
|
create(params: Record<string, unknown>, options?: Record<string, unknown>): Promise<unknown>;
|
|
28
33
|
};
|
|
29
34
|
};
|
|
35
|
+
responses: {
|
|
36
|
+
create(params: Record<string, unknown>, options?: Record<string, unknown>): Promise<unknown>;
|
|
37
|
+
};
|
|
30
38
|
}
|
|
31
39
|
/**
|
|
32
40
|
* OpenAiAdapter wraps the OpenAI SDK behind the BaseAdapter interface.
|
|
41
|
+
*
|
|
42
|
+
* Routes requests to either Chat Completions or Responses API based on model.
|
|
33
43
|
*/
|
|
34
44
|
export declare class OpenAiAdapter extends BaseAdapter {
|
|
35
45
|
protected readonly client: OpenAiClient;
|
|
36
46
|
readonly providerName: string;
|
|
37
47
|
readonly capabilities: LlmProviderCapabilities;
|
|
38
48
|
protected readonly converter: OpenAiConverter;
|
|
49
|
+
protected readonly responsesConverter: OpenAiResponsesConverter;
|
|
39
50
|
constructor(config: AdapterConfig, client: OpenAiClient);
|
|
40
51
|
/**
|
|
41
52
|
* Generate content (non-streaming).
|
|
53
|
+
*
|
|
54
|
+
* Routes to Responses API for codex/pro models, Chat Completions otherwise.
|
|
42
55
|
*/
|
|
43
56
|
generateContent(request: LlmGenerateRequest, _userPromptId: string, options?: GenerateOptions): Promise<LlmGenerateResponse>;
|
|
44
57
|
/**
|
|
45
58
|
* Generate content as a stream of LlmEvents.
|
|
59
|
+
*
|
|
60
|
+
* Routes to Responses API streaming for codex/pro models.
|
|
46
61
|
*/
|
|
47
62
|
generateContentStream(request: LlmGenerateRequest, _userPromptId: string, options?: GenerateOptions): LlmEventStream;
|
|
63
|
+
/**
|
|
64
|
+
* Non-streaming via Responses API.
|
|
65
|
+
*/
|
|
66
|
+
private generateContentViaResponses;
|
|
67
|
+
/**
|
|
68
|
+
* Streaming via Responses API.
|
|
69
|
+
*/
|
|
70
|
+
private generateContentStreamViaResponses;
|
|
71
|
+
/**
|
|
72
|
+
* Check if a model requires the Responses API.
|
|
73
|
+
*/
|
|
74
|
+
private isResponsesApiModel;
|
|
48
75
|
/**
|
|
49
76
|
* Classify an OpenAI SDK error into a typed LlmError.
|
|
50
77
|
* Uses HTTP status code when available, falls back to message heuristics.
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
* Accepts provider-independent LlmGenerateRequest, converts to OpenAI SDK
|
|
10
10
|
* format, and converts responses back to LlmGenerateResponse / LlmEventStream.
|
|
11
11
|
*
|
|
12
|
+
* Supports two API paths:
|
|
13
|
+
* - Chat Completions API (`/v1/chat/completions`) — default for most models
|
|
14
|
+
* - Responses API (`/v1/responses`) — for codex models (gpt-5.3-codex, etc.)
|
|
15
|
+
*
|
|
12
16
|
* @see docs/ai_adapter/03-technical-design.md §3.3.7
|
|
13
17
|
* @see packages/core/src/providers/claude/adapter.ts (Claude counterpart)
|
|
14
18
|
*/
|
|
@@ -17,6 +21,7 @@ import { LlmError, LlmErrorType, AuthenticationError, RateLimitError, ModelNotFo
|
|
|
17
21
|
import { createErrorEvent, LlmEventType } from '../events.js';
|
|
18
22
|
import { extractWithRateLimits, OPENAI_RATE_LIMIT_HEADERS, } from '../rateLimitUtils.js';
|
|
19
23
|
import { OpenAiConverter } from './converter.js';
|
|
24
|
+
import { OpenAiResponsesConverter } from './responsesConverter.js';
|
|
20
25
|
import { debugLogger } from '../../utils/debugLogger.js';
|
|
21
26
|
/**
|
|
22
27
|
* OpenAI adapter capabilities.
|
|
@@ -45,24 +50,38 @@ const OPENAI_CAPABILITIES = {
|
|
|
45
50
|
maxContextLength: 400_000,
|
|
46
51
|
maxOutputTokens: 128_000,
|
|
47
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Models that require the Responses API (`/v1/responses`).
|
|
55
|
+
* These models do NOT support Chat Completions (`/v1/chat/completions`).
|
|
56
|
+
*/
|
|
57
|
+
const RESPONSES_API_MODELS = new Set(['gpt-5.3-codex', 'gpt-5.4-pro']);
|
|
48
58
|
/**
|
|
49
59
|
* OpenAiAdapter wraps the OpenAI SDK behind the BaseAdapter interface.
|
|
60
|
+
*
|
|
61
|
+
* Routes requests to either Chat Completions or Responses API based on model.
|
|
50
62
|
*/
|
|
51
63
|
export class OpenAiAdapter extends BaseAdapter {
|
|
52
64
|
client;
|
|
53
65
|
providerName = 'openai';
|
|
54
66
|
capabilities = OPENAI_CAPABILITIES;
|
|
55
67
|
converter;
|
|
68
|
+
responsesConverter;
|
|
56
69
|
constructor(config, client) {
|
|
57
70
|
super(config);
|
|
58
71
|
this.client = client;
|
|
59
72
|
this.converter = new OpenAiConverter();
|
|
73
|
+
this.responsesConverter = new OpenAiResponsesConverter();
|
|
60
74
|
}
|
|
61
75
|
/**
|
|
62
76
|
* Generate content (non-streaming).
|
|
77
|
+
*
|
|
78
|
+
* Routes to Responses API for codex/pro models, Chat Completions otherwise.
|
|
63
79
|
*/
|
|
64
80
|
async generateContent(request, _userPromptId, options) {
|
|
65
81
|
this.validateRequest(request);
|
|
82
|
+
if (this.isResponsesApiModel(request.model)) {
|
|
83
|
+
return this.generateContentViaResponses(request, options);
|
|
84
|
+
}
|
|
66
85
|
try {
|
|
67
86
|
const params = this.converter.toOpenAiRequest(request);
|
|
68
87
|
const createResult = this.client.chat.completions.create(params, {
|
|
@@ -81,9 +100,14 @@ export class OpenAiAdapter extends BaseAdapter {
|
|
|
81
100
|
}
|
|
82
101
|
/**
|
|
83
102
|
* Generate content as a stream of LlmEvents.
|
|
103
|
+
*
|
|
104
|
+
* Routes to Responses API streaming for codex/pro models.
|
|
84
105
|
*/
|
|
85
106
|
generateContentStream(request, _userPromptId, options) {
|
|
86
107
|
this.validateRequest(request);
|
|
108
|
+
if (this.isResponsesApiModel(request.model)) {
|
|
109
|
+
return this.generateContentStreamViaResponses(request, options);
|
|
110
|
+
}
|
|
87
111
|
const client = this.client;
|
|
88
112
|
const converter = this.converter;
|
|
89
113
|
const classify = this.classifyError.bind(this);
|
|
@@ -133,6 +157,88 @@ export class OpenAiAdapter extends BaseAdapter {
|
|
|
133
157
|
}
|
|
134
158
|
return streamGenerator();
|
|
135
159
|
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Responses API methods
|
|
162
|
+
// ============================================================================
|
|
163
|
+
/**
|
|
164
|
+
* Non-streaming via Responses API.
|
|
165
|
+
*/
|
|
166
|
+
async generateContentViaResponses(request, options) {
|
|
167
|
+
try {
|
|
168
|
+
const params = this.responsesConverter.toResponsesRequest(request);
|
|
169
|
+
const createResult = this.client.responses.create(params, {
|
|
170
|
+
signal: options?.signal,
|
|
171
|
+
});
|
|
172
|
+
const { data, rateLimits } = await extractWithRateLimits(createResult, OPENAI_RATE_LIMIT_HEADERS);
|
|
173
|
+
const result = this.responsesConverter.fromResponsesResponse(data, request.model);
|
|
174
|
+
if (rateLimits) {
|
|
175
|
+
result.rateLimits = rateLimits;
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
throw this.classifyError(error);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Streaming via Responses API.
|
|
185
|
+
*/
|
|
186
|
+
generateContentStreamViaResponses(request, options) {
|
|
187
|
+
const client = this.client;
|
|
188
|
+
const responsesConverter = this.responsesConverter;
|
|
189
|
+
const classify = this.classifyError.bind(this);
|
|
190
|
+
const params = responsesConverter.toResponsesRequest(request);
|
|
191
|
+
const signal = options?.signal;
|
|
192
|
+
async function* streamGenerator() {
|
|
193
|
+
try {
|
|
194
|
+
const createResult = client.responses.create({
|
|
195
|
+
...params,
|
|
196
|
+
stream: true,
|
|
197
|
+
}, { signal });
|
|
198
|
+
const { data, rateLimits } = await extractWithRateLimits(createResult, OPENAI_RATE_LIMIT_HEADERS);
|
|
199
|
+
const stream = data;
|
|
200
|
+
const state = responsesConverter.createStreamState();
|
|
201
|
+
let chunkIndex = 0;
|
|
202
|
+
let messageEndEmitted = false;
|
|
203
|
+
for await (const event of stream) {
|
|
204
|
+
const events = responsesConverter.convertStreamEvent(event, state);
|
|
205
|
+
for (const llmEvent of events) {
|
|
206
|
+
if (llmEvent.type === LlmEventType.TextDelta) {
|
|
207
|
+
debugLogger.log(`[OpenAI Responses stream] chunk#${chunkIndex} TextDelta: "${llmEvent.text.substring(0, 80)}"`);
|
|
208
|
+
}
|
|
209
|
+
if (llmEvent.type === LlmEventType.MessageEnd) {
|
|
210
|
+
messageEndEmitted = true;
|
|
211
|
+
yield rateLimits ? { ...llmEvent, rateLimits } : llmEvent;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
yield llmEvent;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
chunkIndex++;
|
|
218
|
+
}
|
|
219
|
+
if (!messageEndEmitted) {
|
|
220
|
+
yield {
|
|
221
|
+
type: LlmEventType.MessageEnd,
|
|
222
|
+
...(rateLimits && { rateLimits }),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
const classified = classify(error);
|
|
228
|
+
yield createErrorEvent(classified, classified.code, classified.isRetryable);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return streamGenerator();
|
|
232
|
+
}
|
|
233
|
+
// ============================================================================
|
|
234
|
+
// Helpers
|
|
235
|
+
// ============================================================================
|
|
236
|
+
/**
|
|
237
|
+
* Check if a model requires the Responses API.
|
|
238
|
+
*/
|
|
239
|
+
isResponsesApiModel(model) {
|
|
240
|
+
return RESPONSES_API_MODELS.has(model);
|
|
241
|
+
}
|
|
136
242
|
/**
|
|
137
243
|
* Classify an OpenAI SDK error into a typed LlmError.
|
|
138
244
|
* Uses HTTP status code when available, falls back to message heuristics.
|