@plumbus/core 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ai/__tests__/ai-service.test.js +704 -1
  3. package/dist/ai/__tests__/ai-service.test.js.map +1 -1
  4. package/dist/ai/__tests__/chunking.test.js +34 -0
  5. package/dist/ai/__tests__/chunking.test.js.map +1 -1
  6. package/dist/ai/__tests__/provider.test.d.ts.map +1 -1
  7. package/dist/ai/__tests__/provider.test.js +482 -4
  8. package/dist/ai/__tests__/provider.test.js.map +1 -1
  9. package/dist/ai/__tests__/validation.test.js +238 -1
  10. package/dist/ai/__tests__/validation.test.js.map +1 -1
  11. package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts +2 -0
  12. package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts.map +1 -0
  13. package/dist/ai/__tests__/zod-to-provider-schema.test.js +60 -0
  14. package/dist/ai/__tests__/zod-to-provider-schema.test.js.map +1 -0
  15. package/dist/ai/ai-service.d.ts +19 -2
  16. package/dist/ai/ai-service.d.ts.map +1 -1
  17. package/dist/ai/ai-service.js +565 -90
  18. package/dist/ai/ai-service.js.map +1 -1
  19. package/dist/ai/cost-tracker.d.ts +26 -1
  20. package/dist/ai/cost-tracker.d.ts.map +1 -1
  21. package/dist/ai/cost-tracker.js +1 -0
  22. package/dist/ai/cost-tracker.js.map +1 -1
  23. package/dist/ai/index.d.ts +5 -3
  24. package/dist/ai/index.d.ts.map +1 -1
  25. package/dist/ai/index.js +5 -1
  26. package/dist/ai/index.js.map +1 -1
  27. package/dist/ai/provider.d.ts +59 -1
  28. package/dist/ai/provider.d.ts.map +1 -1
  29. package/dist/ai/provider.js +388 -90
  30. package/dist/ai/provider.js.map +1 -1
  31. package/dist/ai/rag/chunking.js +53 -3
  32. package/dist/ai/rag/chunking.js.map +1 -1
  33. package/dist/ai/refusal.d.ts +28 -0
  34. package/dist/ai/refusal.d.ts.map +1 -0
  35. package/dist/ai/refusal.js +36 -0
  36. package/dist/ai/refusal.js.map +1 -0
  37. package/dist/ai/validation.d.ts +40 -8
  38. package/dist/ai/validation.d.ts.map +1 -1
  39. package/dist/ai/validation.js +212 -6
  40. package/dist/ai/validation.js.map +1 -1
  41. package/dist/ai/zod-to-provider-schema.d.ts +15 -0
  42. package/dist/ai/zod-to-provider-schema.d.ts.map +1 -0
  43. package/dist/ai/zod-to-provider-schema.js +200 -0
  44. package/dist/ai/zod-to-provider-schema.js.map +1 -0
  45. package/dist/api/__tests__/route-generator.test.js +3 -0
  46. package/dist/api/__tests__/route-generator.test.js.map +1 -1
  47. package/dist/api/route-generator.d.ts +4 -0
  48. package/dist/api/route-generator.d.ts.map +1 -1
  49. package/dist/api/route-generator.js +1 -0
  50. package/dist/api/route-generator.js.map +1 -1
  51. package/dist/cli/__tests__/doctor.test.js +104 -2
  52. package/dist/cli/__tests__/doctor.test.js.map +1 -1
  53. package/dist/cli/__tests__/init.test.js +127 -7
  54. package/dist/cli/__tests__/init.test.js.map +1 -1
  55. package/dist/cli/__tests__/migrate.test.js +159 -2
  56. package/dist/cli/__tests__/migrate.test.js.map +1 -1
  57. package/dist/cli/commands/__tests__/commands.test.js +5 -0
  58. package/dist/cli/commands/__tests__/commands.test.js.map +1 -1
  59. package/dist/cli/commands/dev.d.ts.map +1 -1
  60. package/dist/cli/commands/dev.js +22 -1
  61. package/dist/cli/commands/dev.js.map +1 -1
  62. package/dist/cli/commands/doctor.d.ts +2 -0
  63. package/dist/cli/commands/doctor.d.ts.map +1 -1
  64. package/dist/cli/commands/doctor.js +78 -0
  65. package/dist/cli/commands/doctor.js.map +1 -1
  66. package/dist/cli/commands/generate.d.ts.map +1 -1
  67. package/dist/cli/commands/generate.js +8 -3
  68. package/dist/cli/commands/generate.js.map +1 -1
  69. package/dist/cli/commands/init.d.ts +16 -2
  70. package/dist/cli/commands/init.d.ts.map +1 -1
  71. package/dist/cli/commands/init.js +226 -25
  72. package/dist/cli/commands/init.js.map +1 -1
  73. package/dist/cli/commands/migrate.d.ts.map +1 -1
  74. package/dist/cli/commands/migrate.js +258 -8
  75. package/dist/cli/commands/migrate.js.map +1 -1
  76. package/dist/cli/commands/start.d.ts.map +1 -1
  77. package/dist/cli/commands/start.js +22 -1
  78. package/dist/cli/commands/start.js.map +1 -1
  79. package/dist/config/loader.d.ts.map +1 -1
  80. package/dist/config/loader.js +3 -0
  81. package/dist/config/loader.js.map +1 -1
  82. package/dist/data/__tests__/drift-inspector.test.d.ts +2 -0
  83. package/dist/data/__tests__/drift-inspector.test.d.ts.map +1 -0
  84. package/dist/data/__tests__/drift-inspector.test.js +170 -0
  85. package/dist/data/__tests__/drift-inspector.test.js.map +1 -0
  86. package/dist/data/__tests__/framework-migration-rewriter.test.d.ts +2 -0
  87. package/dist/data/__tests__/framework-migration-rewriter.test.d.ts.map +1 -0
  88. package/dist/data/__tests__/framework-migration-rewriter.test.js +329 -0
  89. package/dist/data/__tests__/framework-migration-rewriter.test.js.map +1 -0
  90. package/dist/data/__tests__/migration.test.d.ts +2 -0
  91. package/dist/data/__tests__/migration.test.d.ts.map +1 -0
  92. package/dist/data/__tests__/migration.test.js +143 -0
  93. package/dist/data/__tests__/migration.test.js.map +1 -0
  94. package/dist/data/__tests__/repository.test.js +126 -0
  95. package/dist/data/__tests__/repository.test.js.map +1 -1
  96. package/dist/data/drift-inspector.d.ts +41 -0
  97. package/dist/data/drift-inspector.d.ts.map +1 -0
  98. package/dist/data/drift-inspector.js +197 -0
  99. package/dist/data/drift-inspector.js.map +1 -0
  100. package/dist/data/framework-migration-rewriter.d.ts +61 -0
  101. package/dist/data/framework-migration-rewriter.d.ts.map +1 -0
  102. package/dist/data/framework-migration-rewriter.js +357 -0
  103. package/dist/data/framework-migration-rewriter.js.map +1 -0
  104. package/dist/data/index.d.ts +2 -1
  105. package/dist/data/index.d.ts.map +1 -1
  106. package/dist/data/index.js +2 -1
  107. package/dist/data/index.js.map +1 -1
  108. package/dist/data/migration.d.ts +31 -1
  109. package/dist/data/migration.d.ts.map +1 -1
  110. package/dist/data/migration.js +127 -3
  111. package/dist/data/migration.js.map +1 -1
  112. package/dist/data/repository.d.ts.map +1 -1
  113. package/dist/data/repository.js +21 -0
  114. package/dist/data/repository.js.map +1 -1
  115. package/dist/define/__tests__/definePrompt.test.js +37 -0
  116. package/dist/define/__tests__/definePrompt.test.js.map +1 -1
  117. package/dist/define/definePrompt.d.ts +13 -0
  118. package/dist/define/definePrompt.d.ts.map +1 -1
  119. package/dist/define/definePrompt.js +3 -0
  120. package/dist/define/definePrompt.js.map +1 -1
  121. package/dist/errors/__tests__/http.test.js +3 -0
  122. package/dist/errors/__tests__/http.test.js.map +1 -1
  123. package/dist/errors/http.d.ts.map +1 -1
  124. package/dist/errors/http.js +14 -0
  125. package/dist/errors/http.js.map +1 -1
  126. package/dist/errors/index.d.ts +12 -0
  127. package/dist/errors/index.d.ts.map +1 -1
  128. package/dist/errors/index.js +21 -0
  129. package/dist/errors/index.js.map +1 -1
  130. package/dist/events/__tests__/event-emitter.test.js +72 -0
  131. package/dist/events/__tests__/event-emitter.test.js.map +1 -1
  132. package/dist/events/emitter.d.ts.map +1 -1
  133. package/dist/events/emitter.js +51 -0
  134. package/dist/events/emitter.js.map +1 -1
  135. package/dist/execution/__tests__/capability-executor.test.js +28 -0
  136. package/dist/execution/__tests__/capability-executor.test.js.map +1 -1
  137. package/dist/execution/__tests__/context-factory.test.js +1 -0
  138. package/dist/execution/__tests__/context-factory.test.js.map +1 -1
  139. package/dist/execution/capability-executor.d.ts.map +1 -1
  140. package/dist/execution/capability-executor.js +21 -0
  141. package/dist/execution/capability-executor.js.map +1 -1
  142. package/dist/execution/context-factory.d.ts.map +1 -1
  143. package/dist/execution/context-factory.js +2 -0
  144. package/dist/execution/context-factory.js.map +1 -1
  145. package/dist/flows/__tests__/flow-engine.test.js +535 -3
  146. package/dist/flows/__tests__/flow-engine.test.js.map +1 -1
  147. package/dist/flows/__tests__/flow-service.test.js +8 -0
  148. package/dist/flows/__tests__/flow-service.test.js.map +1 -1
  149. package/dist/flows/__tests__/step-executor.test.js +14 -4
  150. package/dist/flows/__tests__/step-executor.test.js.map +1 -1
  151. package/dist/flows/engine.d.ts +53 -1
  152. package/dist/flows/engine.d.ts.map +1 -1
  153. package/dist/flows/engine.js +462 -25
  154. package/dist/flows/engine.js.map +1 -1
  155. package/dist/flows/flow-service.d.ts.map +1 -1
  156. package/dist/flows/flow-service.js +4 -0
  157. package/dist/flows/flow-service.js.map +1 -1
  158. package/dist/flows/index.d.ts +1 -1
  159. package/dist/flows/index.d.ts.map +1 -1
  160. package/dist/flows/index.js +1 -1
  161. package/dist/flows/index.js.map +1 -1
  162. package/dist/flows/schema.d.ts +34 -0
  163. package/dist/flows/schema.d.ts.map +1 -1
  164. package/dist/flows/schema.js +3 -0
  165. package/dist/flows/schema.js.map +1 -1
  166. package/dist/flows/step-executor.d.ts +2 -0
  167. package/dist/flows/step-executor.d.ts.map +1 -1
  168. package/dist/flows/step-executor.js +6 -6
  169. package/dist/flows/step-executor.js.map +1 -1
  170. package/dist/index.d.ts +4 -4
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +3 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/server/__tests__/bootstrap.test.js +37 -0
  175. package/dist/server/__tests__/bootstrap.test.js.map +1 -1
  176. package/dist/server/bootstrap.d.ts +19 -0
  177. package/dist/server/bootstrap.d.ts.map +1 -1
  178. package/dist/server/bootstrap.js +48 -4
  179. package/dist/server/bootstrap.js.map +1 -1
  180. package/dist/testing/__tests__/simulate-flow.test.js +24 -2
  181. package/dist/testing/__tests__/simulate-flow.test.js.map +1 -1
  182. package/dist/testing/context.d.ts.map +1 -1
  183. package/dist/testing/context.js +37 -1
  184. package/dist/testing/context.js.map +1 -1
  185. package/dist/testing/simulate-flow.d.ts.map +1 -1
  186. package/dist/testing/simulate-flow.js +25 -1
  187. package/dist/testing/simulate-flow.js.map +1 -1
  188. package/dist/types/context.d.ts +118 -0
  189. package/dist/types/context.d.ts.map +1 -1
  190. package/dist/types/enums.d.ts +2 -0
  191. package/dist/types/enums.d.ts.map +1 -1
  192. package/dist/types/enums.js +2 -0
  193. package/dist/types/enums.js.map +1 -1
  194. package/dist/types/prompt.d.ts +64 -0
  195. package/dist/types/prompt.d.ts.map +1 -1
  196. package/dist/worker/__tests__/bootstrap.test.js +36 -2
  197. package/dist/worker/__tests__/bootstrap.test.js.map +1 -1
  198. package/dist/worker/bootstrap.d.ts +7 -0
  199. package/dist/worker/bootstrap.d.ts.map +1 -1
  200. package/dist/worker/bootstrap.js +164 -14
  201. package/dist/worker/bootstrap.js.map +1 -1
  202. package/instructions/framework.md +7 -0
  203. package/instructions/guardrails.md +39 -0
  204. package/instructions/patterns.md +10 -0
  205. package/package.json +3 -2
@@ -1,5 +1,182 @@
1
1
  // ── AI Provider Adapter Interface ──
2
2
  // Abstract interface for AI provider adapters (OpenAI, Anthropic, etc.)
3
+ import { AIIncompleteOutputError, AIRefusalError } from './refusal.js';
4
+ /** Compose a request's optional user signal with a timeout, returning a single AbortSignal. */
5
+ export function combineRequestSignals(userSignal, timeoutMs) {
6
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
7
+ if (!userSignal)
8
+ return timeoutSignal;
9
+ return AbortSignal.any([userSignal, timeoutSignal]);
10
+ }
11
+ export class ProviderAPIError extends Error {
12
+ providerName;
13
+ statusCode;
14
+ retryable;
15
+ attempts;
16
+ constructor(args) {
17
+ super(args.message);
18
+ this.name = 'ProviderAPIError';
19
+ this.providerName = args.providerName;
20
+ this.statusCode = args.statusCode;
21
+ this.retryable = args.retryable;
22
+ this.attempts = args.attempts;
23
+ }
24
+ }
25
+ export function isProviderAPIError(value) {
26
+ if (value instanceof ProviderAPIError)
27
+ return true;
28
+ if (typeof value !== 'object' || value === null)
29
+ return false;
30
+ const candidate = value;
31
+ return (candidate.name === 'ProviderAPIError' &&
32
+ typeof candidate.message === 'string' &&
33
+ typeof candidate.providerName === 'string' &&
34
+ typeof candidate.retryable === 'boolean' &&
35
+ typeof candidate.attempts === 'number');
36
+ }
37
+ const retryableStatusCodes = new Set([408, 429, 500, 502, 503, 504]);
38
+ const maxProviderAttempts = 3;
39
+ const baseRetryDelayMs = 750;
40
+ const maxRetryDelayMs = 5_000;
41
+ function isRetryableStatusCode(statusCode) {
42
+ return retryableStatusCodes.has(statusCode);
43
+ }
44
+ function parseRetryAfterMs(retryAfterHeader) {
45
+ if (!retryAfterHeader)
46
+ return undefined;
47
+ const retryAfterSeconds = Number(retryAfterHeader);
48
+ if (Number.isFinite(retryAfterSeconds) && retryAfterSeconds >= 0) {
49
+ return retryAfterSeconds * 1000;
50
+ }
51
+ const retryAt = Date.parse(retryAfterHeader);
52
+ if (Number.isNaN(retryAt))
53
+ return undefined;
54
+ return Math.max(retryAt - Date.now(), 0);
55
+ }
56
+ function computeRetryDelayMs(attempt, retryAfterHeader) {
57
+ const retryAfterMs = parseRetryAfterMs(retryAfterHeader);
58
+ if (retryAfterMs != null) {
59
+ return Math.min(Math.max(retryAfterMs, 0), maxRetryDelayMs);
60
+ }
61
+ return Math.min(baseRetryDelayMs * 2 ** (attempt - 1), maxRetryDelayMs);
62
+ }
63
+ function buildOpenAIResponseFormat(request) {
64
+ if (request.responseFormat !== 'json')
65
+ return undefined;
66
+ if (!request.responseSchema)
67
+ return { type: 'json_object' };
68
+ return {
69
+ type: 'json_schema',
70
+ json_schema: {
71
+ name: 'response',
72
+ strict: true,
73
+ schema: request.responseSchema,
74
+ },
75
+ };
76
+ }
77
+ const OPENAI_STRUCTURED_OUTPUT_TOOL_NAME = 'return_structured_response';
78
+ function shouldUseOpenAIStructuredTool(args) {
79
+ return (args.request.structuredOutputTransport === 'tool' &&
80
+ args.request.responseFormat === 'json' &&
81
+ !!args.request.responseSchema);
82
+ }
83
+ function buildOpenAIStructuredOutputTool(schema) {
84
+ return {
85
+ type: 'function',
86
+ function: {
87
+ name: OPENAI_STRUCTURED_OUTPUT_TOOL_NAME,
88
+ description: 'Return the complete structured response for this request.',
89
+ strict: true,
90
+ parameters: schema,
91
+ },
92
+ };
93
+ }
94
+ function extractOpenAIMessageContent(message) {
95
+ const structuredToolCall = message.tool_calls?.find((toolCall) => toolCall.function?.name === OPENAI_STRUCTURED_OUTPUT_TOOL_NAME);
96
+ const toolArguments = structuredToolCall?.function?.arguments;
97
+ if (typeof toolArguments === 'string' && toolArguments.length > 0) {
98
+ return toolArguments;
99
+ }
100
+ return message.content ?? '';
101
+ }
102
+ function buildEmptyOpenAIStructuredContentError(args) {
103
+ const messageKeys = Object.keys(args.choice.message).join(',');
104
+ const toolCallSummary = args.choice.message.tool_calls
105
+ ?.map((toolCall) => {
106
+ const name = toolCall.function?.name ?? 'unknown';
107
+ const argumentLength = toolCall.function?.arguments?.length ?? 0;
108
+ return `${name}:argumentsChars=${argumentLength}`;
109
+ })
110
+ .join('|') ?? 'none';
111
+ return new Error(`OpenAI-compatible provider returned empty JSON response content ` +
112
+ `finish_reason=${args.choice.finish_reason} messageKeys=${messageKeys || 'none'} ` +
113
+ `hasRefusal=${args.choice.message.refusal ? 'true' : 'false'} ` +
114
+ `toolCalls=${toolCallSummary}`);
115
+ }
116
+ function openAIUsageToTokenUsage(usage) {
117
+ return {
118
+ inputTokens: usage.prompt_tokens,
119
+ outputTokens: usage.completion_tokens,
120
+ totalTokens: usage.total_tokens,
121
+ cachedInputTokens: usage.prompt_tokens_details?.cached_tokens ?? 0,
122
+ };
123
+ }
124
+ function shouldUseOpenAIMaxCompletionTokens(model) {
125
+ const normalizedModel = model.trim().toLowerCase();
126
+ return /^(?:o\d|o\d-|o\d\.)/.test(normalizedModel) || normalizedModel.startsWith('gpt-5');
127
+ }
128
+ function applyOpenAITokenLimit(body, model, maxTokens) {
129
+ if (!maxTokens)
130
+ return;
131
+ if (shouldUseOpenAIMaxCompletionTokens(model)) {
132
+ body.max_completion_tokens = maxTokens;
133
+ return;
134
+ }
135
+ body.max_tokens = maxTokens;
136
+ }
137
+ function anthropicUsageToTokenUsage(usage) {
138
+ return {
139
+ inputTokens: usage.input_tokens,
140
+ outputTokens: usage.output_tokens,
141
+ totalTokens: usage.input_tokens + usage.output_tokens,
142
+ cachedInputTokens: usage.cache_read_input_tokens ?? 0,
143
+ cacheWriteTokens: usage.cache_creation_input_tokens ?? 0,
144
+ };
145
+ }
146
+ async function waitForRetry(delayMs) {
147
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
148
+ }
149
+ function buildProviderErrorMessage(label, statusCode, body, attempts) {
150
+ const suffix = attempts > 1 ? ` after ${attempts} attempts` : '';
151
+ const detail = body || 'Request failed';
152
+ return `${label} error (${statusCode})${suffix}: ${detail}`;
153
+ }
154
+ async function executeRequestWithRetry(args) {
155
+ for (let attempt = 1; attempt <= maxProviderAttempts; attempt++) {
156
+ const response = await args.send();
157
+ if (response.ok) {
158
+ return response;
159
+ }
160
+ const body = await response.text();
161
+ const retryable = isRetryableStatusCode(response.status);
162
+ if (!retryable || attempt === maxProviderAttempts) {
163
+ throw new ProviderAPIError({
164
+ providerName: args.providerName,
165
+ statusCode: response.status,
166
+ retryable,
167
+ attempts: attempt,
168
+ message: buildProviderErrorMessage(args.errorLabel, response.status, body, attempt),
169
+ });
170
+ }
171
+ await waitForRetry(computeRetryDelayMs(attempt, response.headers.get('retry-after')));
172
+ }
173
+ throw new ProviderAPIError({
174
+ providerName: args.providerName,
175
+ retryable: false,
176
+ attempts: maxProviderAttempts,
177
+ message: `${args.errorLabel} request failed`,
178
+ });
179
+ }
3
180
  export function createOpenAIAdapter(config) {
4
181
  const defaultModel = config.model ?? 'gpt-4o';
5
182
  const defaultEmbeddingModel = config.embeddingModel ?? 'text-embedding-3-small';
@@ -8,80 +185,150 @@ export function createOpenAIAdapter(config) {
8
185
  return {
9
186
  name: 'openai',
10
187
  async complete(request) {
188
+ const model = request.model ?? defaultModel;
11
189
  const messages = [];
12
190
  if (request.system) {
13
191
  messages.push({ role: 'system', content: request.system });
14
192
  }
15
- messages.push({ role: 'user', content: request.prompt });
193
+ // Multi-turn path: when `messages` is supplied, append them verbatim
194
+ // (preserving role + order). Single-turn path (legacy): build a single
195
+ // user message from `prompt`.
196
+ if (request.messages && request.messages.length > 0) {
197
+ for (const msg of request.messages) {
198
+ messages.push({ role: msg.role, content: msg.content });
199
+ }
200
+ }
201
+ else {
202
+ messages.push({ role: 'user', content: request.prompt });
203
+ }
16
204
  const body = {
17
- model: request.model ?? defaultModel,
205
+ model,
18
206
  messages,
19
207
  temperature: request.temperature ?? 0.7,
20
208
  };
21
- if (request.maxTokens)
22
- body.max_tokens = request.maxTokens;
23
- if (request.responseFormat === 'json') {
24
- body.response_format = { type: 'json_object' };
209
+ applyOpenAITokenLimit(body, model, request.maxTokens);
210
+ const structuredToolSchema = shouldUseOpenAIStructuredTool({ request })
211
+ ? request.responseSchema
212
+ : undefined;
213
+ if (structuredToolSchema) {
214
+ body.tools = [buildOpenAIStructuredOutputTool(structuredToolSchema)];
215
+ body.tool_choice = {
216
+ type: 'function',
217
+ function: { name: OPENAI_STRUCTURED_OUTPUT_TOOL_NAME },
218
+ };
25
219
  }
26
- const resp = await fetch(`${baseUrl}/chat/completions`, {
27
- method: 'POST',
28
- headers: {
29
- 'Content-Type': 'application/json',
30
- Authorization: `Bearer ${config.apiKey}`,
31
- },
32
- body: JSON.stringify(body),
33
- signal: AbortSignal.timeout(request.timeout ?? defaultTimeout),
34
- });
35
- if (!resp.ok) {
36
- const text = await resp.text();
37
- throw new Error(`OpenAI API error (${resp.status}): ${text}`);
220
+ else {
221
+ const responseFormat = buildOpenAIResponseFormat(request);
222
+ if (responseFormat) {
223
+ body.response_format = responseFormat;
224
+ }
225
+ }
226
+ if (typeof request.seed === 'number') {
227
+ body.seed = request.seed;
38
228
  }
229
+ const resp = await executeRequestWithRetry({
230
+ providerName: 'openai',
231
+ errorLabel: 'OpenAI API',
232
+ send: () => fetch(`${baseUrl}/chat/completions`, {
233
+ method: 'POST',
234
+ headers: {
235
+ 'Content-Type': 'application/json',
236
+ Authorization: `Bearer ${config.apiKey}`,
237
+ },
238
+ body: JSON.stringify(body),
239
+ signal: combineRequestSignals(request.signal, request.timeout ?? defaultTimeout),
240
+ }),
241
+ });
39
242
  const data = (await resp.json());
40
243
  const choice = data.choices[0];
41
244
  if (!choice)
42
245
  throw new Error('OpenAI returned no choices');
246
+ const usage = openAIUsageToTokenUsage(data.usage);
247
+ const content = extractOpenAIMessageContent(choice.message);
248
+ if (choice.message.refusal) {
249
+ throw new AIRefusalError({
250
+ provider: 'openai',
251
+ model: data.model,
252
+ refusalText: choice.message.refusal,
253
+ usage,
254
+ });
255
+ }
256
+ // Only treat `finish_reason === 'length'` as a hard failure when the
257
+ // caller asked for structured JSON output. For free-text generation,
258
+ // a `length` finish is a partial-success: return what we have rather
259
+ // than discarding tokens the caller already paid for.
260
+ if (choice.finish_reason === 'length' &&
261
+ (request.responseFormat === 'json' || !!request.responseSchema)) {
262
+ throw new AIIncompleteOutputError({
263
+ provider: 'openai',
264
+ model: data.model,
265
+ partialText: content,
266
+ usage,
267
+ finishReason: choice.finish_reason,
268
+ });
269
+ }
270
+ if (request.responseFormat === 'json' && content.trim().length === 0) {
271
+ throw buildEmptyOpenAIStructuredContentError({ data, choice });
272
+ }
43
273
  return {
44
- content: choice.message.content,
274
+ content,
45
275
  model: data.model,
46
- usage: {
47
- inputTokens: data.usage.prompt_tokens,
48
- outputTokens: data.usage.completion_tokens,
49
- totalTokens: data.usage.total_tokens,
50
- cachedInputTokens: data.usage.prompt_tokens_details?.cached_tokens ?? 0,
51
- },
276
+ usage,
52
277
  finishReason: choice.finish_reason,
53
278
  };
54
279
  },
55
280
  async *stream(request) {
281
+ const model = request.model ?? defaultModel;
56
282
  const messages = [];
57
283
  if (request.system) {
58
284
  messages.push({ role: 'system', content: request.system });
59
285
  }
60
- messages.push({ role: 'user', content: request.prompt });
286
+ // Multi-turn path: when `messages` is supplied, append them verbatim.
287
+ // Single-turn path (legacy): single user message from `prompt`.
288
+ if (request.messages && request.messages.length > 0) {
289
+ for (const msg of request.messages) {
290
+ messages.push({ role: msg.role, content: msg.content });
291
+ }
292
+ }
293
+ else {
294
+ messages.push({ role: 'user', content: request.prompt });
295
+ }
61
296
  const body = {
62
- model: request.model ?? defaultModel,
297
+ model,
63
298
  messages,
64
299
  temperature: request.temperature ?? 0.7,
65
300
  stream: true,
66
301
  stream_options: { include_usage: true },
67
302
  };
68
- if (request.maxTokens)
69
- body.max_tokens = request.maxTokens;
70
- if (request.responseFormat === 'json') {
71
- body.response_format = { type: 'json_object' };
303
+ applyOpenAITokenLimit(body, model, request.maxTokens);
304
+ const responseFormat = buildOpenAIResponseFormat(request);
305
+ if (responseFormat) {
306
+ body.response_format = responseFormat;
72
307
  }
73
- const resp = await fetch(`${baseUrl}/chat/completions`, {
74
- method: 'POST',
75
- headers: {
76
- 'Content-Type': 'application/json',
77
- Authorization: `Bearer ${config.apiKey}`,
78
- },
79
- body: JSON.stringify(body),
80
- signal: AbortSignal.timeout(request.timeout ?? defaultTimeout),
81
- });
82
- if (!resp.ok) {
83
- const text = await resp.text();
84
- yield { type: 'error', error: `OpenAI API error (${resp.status}): ${text}` };
308
+ if (typeof request.seed === 'number') {
309
+ body.seed = request.seed;
310
+ }
311
+ let resp;
312
+ try {
313
+ resp = await executeRequestWithRetry({
314
+ providerName: 'openai',
315
+ errorLabel: 'OpenAI API',
316
+ send: () => fetch(`${baseUrl}/chat/completions`, {
317
+ method: 'POST',
318
+ headers: {
319
+ 'Content-Type': 'application/json',
320
+ Authorization: `Bearer ${config.apiKey}`,
321
+ },
322
+ body: JSON.stringify(body),
323
+ signal: combineRequestSignals(request.signal, request.timeout ?? defaultTimeout),
324
+ }),
325
+ });
326
+ }
327
+ catch (error) {
328
+ yield {
329
+ type: 'error',
330
+ error: error instanceof Error ? error.message : String(error),
331
+ };
85
332
  return;
86
333
  }
87
334
  yield* parseSSEStream(resp, parseOpenAISSEChunk);
@@ -91,19 +338,19 @@ export function createOpenAIAdapter(config) {
91
338
  model: request.model ?? defaultEmbeddingModel,
92
339
  input: request.texts,
93
340
  };
94
- const resp = await fetch(`${baseUrl}/embeddings`, {
95
- method: 'POST',
96
- headers: {
97
- 'Content-Type': 'application/json',
98
- Authorization: `Bearer ${config.apiKey}`,
99
- },
100
- body: JSON.stringify(body),
101
- signal: AbortSignal.timeout(defaultTimeout),
341
+ const resp = await executeRequestWithRetry({
342
+ providerName: 'openai',
343
+ errorLabel: 'OpenAI Embedding API',
344
+ send: () => fetch(`${baseUrl}/embeddings`, {
345
+ method: 'POST',
346
+ headers: {
347
+ 'Content-Type': 'application/json',
348
+ Authorization: `Bearer ${config.apiKey}`,
349
+ },
350
+ body: JSON.stringify(body),
351
+ signal: AbortSignal.timeout(defaultTimeout),
352
+ }),
102
353
  });
103
- if (!resp.ok) {
104
- const text = await resp.text();
105
- throw new Error(`OpenAI Embedding API error (${resp.status}): ${text}`);
106
- }
107
354
  const data = (await resp.json());
108
355
  return {
109
356
  embeddings: data.data.map((d) => d.embedding),
@@ -120,69 +367,120 @@ export function createAnthropicAdapter(config) {
120
367
  return {
121
368
  name: 'anthropic',
122
369
  async complete(request) {
370
+ // Multi-turn path: when `messages` is supplied, send them verbatim.
371
+ // Single-turn path: synthesize a single user message from `prompt`.
372
+ const messages = request.messages && request.messages.length > 0
373
+ ? request.messages.map((m) => ({ role: m.role, content: m.content }))
374
+ : [{ role: 'user', content: request.prompt }];
123
375
  const body = {
124
376
  model: request.model ?? defaultModel,
125
- messages: [{ role: 'user', content: request.prompt }],
377
+ messages,
126
378
  max_tokens: request.maxTokens ?? 4096,
127
379
  temperature: request.temperature ?? 0.7,
128
380
  };
129
381
  if (request.system)
130
382
  body.system = request.system;
131
- const resp = await fetch(`${baseUrl}/messages`, {
132
- method: 'POST',
133
- headers: {
134
- 'Content-Type': 'application/json',
135
- 'x-api-key': config.apiKey,
136
- 'anthropic-version': '2023-06-01',
137
- },
138
- body: JSON.stringify(body),
139
- signal: AbortSignal.timeout(request.timeout ?? defaultTimeout),
140
- });
141
- if (!resp.ok) {
142
- const text = await resp.text();
143
- throw new Error(`Anthropic API error (${resp.status}): ${text}`);
383
+ if (request.responseFormat === 'json' && request.responseSchema) {
384
+ body.output_config = {
385
+ format: {
386
+ type: 'json_schema',
387
+ schema: request.responseSchema,
388
+ },
389
+ };
144
390
  }
391
+ const resp = await executeRequestWithRetry({
392
+ providerName: 'anthropic',
393
+ errorLabel: 'Anthropic API',
394
+ send: () => fetch(`${baseUrl}/messages`, {
395
+ method: 'POST',
396
+ headers: {
397
+ 'Content-Type': 'application/json',
398
+ 'x-api-key': config.apiKey,
399
+ 'anthropic-version': '2023-06-01',
400
+ },
401
+ body: JSON.stringify(body),
402
+ signal: combineRequestSignals(request.signal, request.timeout ?? defaultTimeout),
403
+ }),
404
+ });
145
405
  const data = (await resp.json());
406
+ const usage = anthropicUsageToTokenUsage(data.usage);
146
407
  const text = data.content
147
408
  .filter((c) => c.type === 'text')
148
409
  .map((c) => c.text)
149
410
  .join('');
411
+ if (data.stop_reason === 'refusal') {
412
+ throw new AIRefusalError({
413
+ provider: 'anthropic',
414
+ model: data.model,
415
+ refusalText: text || 'Request refused by Anthropic',
416
+ usage,
417
+ });
418
+ }
419
+ // Mirror the OpenAI adapter: only throw on max_tokens when the caller
420
+ // requested structured JSON output. Free-text completions should return
421
+ // the partial content.
422
+ if (data.stop_reason === 'max_tokens' &&
423
+ (request.responseFormat === 'json' || !!request.responseSchema)) {
424
+ throw new AIIncompleteOutputError({
425
+ provider: 'anthropic',
426
+ model: data.model,
427
+ partialText: text,
428
+ usage,
429
+ finishReason: data.stop_reason,
430
+ });
431
+ }
150
432
  return {
151
433
  content: text,
152
434
  model: data.model,
153
- usage: {
154
- inputTokens: data.usage.input_tokens,
155
- outputTokens: data.usage.output_tokens,
156
- totalTokens: data.usage.input_tokens + data.usage.output_tokens,
157
- cachedInputTokens: data.usage.cache_read_input_tokens ?? 0,
158
- cacheWriteTokens: data.usage.cache_creation_input_tokens ?? 0,
159
- },
435
+ usage,
160
436
  finishReason: data.stop_reason,
161
437
  };
162
438
  },
163
439
  async *stream(request) {
440
+ // Multi-turn path: when `messages` is supplied, send them verbatim.
441
+ // Single-turn path: synthesize a single user message from `prompt`.
442
+ const messages = request.messages && request.messages.length > 0
443
+ ? request.messages.map((m) => ({ role: m.role, content: m.content }))
444
+ : [{ role: 'user', content: request.prompt }];
164
445
  const body = {
165
446
  model: request.model ?? defaultModel,
166
- messages: [{ role: 'user', content: request.prompt }],
447
+ messages,
167
448
  max_tokens: request.maxTokens ?? 4096,
168
449
  temperature: request.temperature ?? 0.7,
169
450
  stream: true,
170
451
  };
171
452
  if (request.system)
172
453
  body.system = request.system;
173
- const resp = await fetch(`${baseUrl}/messages`, {
174
- method: 'POST',
175
- headers: {
176
- 'Content-Type': 'application/json',
177
- 'x-api-key': config.apiKey,
178
- 'anthropic-version': '2023-06-01',
179
- },
180
- body: JSON.stringify(body),
181
- signal: AbortSignal.timeout(request.timeout ?? defaultTimeout),
182
- });
183
- if (!resp.ok) {
184
- const text = await resp.text();
185
- yield { type: 'error', error: `Anthropic API error (${resp.status}): ${text}` };
454
+ if (request.responseFormat === 'json' && request.responseSchema) {
455
+ body.output_config = {
456
+ format: {
457
+ type: 'json_schema',
458
+ schema: request.responseSchema,
459
+ },
460
+ };
461
+ }
462
+ let resp;
463
+ try {
464
+ resp = await executeRequestWithRetry({
465
+ providerName: 'anthropic',
466
+ errorLabel: 'Anthropic API',
467
+ send: () => fetch(`${baseUrl}/messages`, {
468
+ method: 'POST',
469
+ headers: {
470
+ 'Content-Type': 'application/json',
471
+ 'x-api-key': config.apiKey,
472
+ 'anthropic-version': '2023-06-01',
473
+ },
474
+ body: JSON.stringify(body),
475
+ signal: combineRequestSignals(request.signal, request.timeout ?? defaultTimeout),
476
+ }),
477
+ });
478
+ }
479
+ catch (error) {
480
+ yield {
481
+ type: 'error',
482
+ error: error instanceof Error ? error.message : String(error),
483
+ };
186
484
  return;
187
485
  }
188
486
  yield* parseSSEStream(resp, parseAnthropicSSEChunk);
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}