@downcity/city 0.2.198 → 0.2.205

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 (131) hide show
  1. package/README.md +31 -13
  2. package/bin/index.d.ts +4 -8
  3. package/bin/index.d.ts.map +1 -1
  4. package/bin/index.js +3 -3
  5. package/bin/index.js.map +1 -1
  6. package/bin/pact/invoker/ai/CityModel.d.ts +2 -1
  7. package/bin/pact/invoker/ai/CityModel.d.ts.map +1 -1
  8. package/bin/pact/invoker/ai/CityModel.js +5 -65
  9. package/bin/pact/invoker/ai/CityModel.js.map +1 -1
  10. package/bin/pact/invoker/ai/client-stream.js +2 -2
  11. package/bin/pact/invoker/ai/client-stream.js.map +1 -1
  12. package/bin/pact/invoker/ai/index.d.ts +5 -61
  13. package/bin/pact/invoker/ai/index.d.ts.map +1 -1
  14. package/bin/pact/invoker/ai/index.js +5 -86
  15. package/bin/pact/invoker/ai/index.js.map +1 -1
  16. package/bin/pact/invoker/ai/types.d.ts +1 -1
  17. package/bin/pact/invoker/ai/types.js +1 -1
  18. package/bin/pact/invoker/invoker.d.ts +1 -1
  19. package/bin/pact/invoker/invoker.js +1 -1
  20. package/bin/pact/invoker/payment/index.d.ts +2 -2
  21. package/bin/pact/invoker/payment/index.js +2 -2
  22. package/bin/pact/user/index.d.ts.map +1 -1
  23. package/bin/pact/user/index.js +0 -1
  24. package/bin/pact/user/index.js.map +1 -1
  25. package/bin/pact/user/types.d.ts +11 -4
  26. package/bin/pact/user/types.d.ts.map +1 -1
  27. package/bin/service/ai/AIChannel.d.ts +57 -0
  28. package/bin/service/ai/AIChannel.d.ts.map +1 -0
  29. package/bin/service/ai/AIChannel.js +151 -0
  30. package/bin/service/ai/AIChannel.js.map +1 -0
  31. package/bin/service/ai/OpenAIChatCompletionsAdapter.d.ts +23 -0
  32. package/bin/service/ai/OpenAIChatCompletionsAdapter.d.ts.map +1 -0
  33. package/bin/service/ai/OpenAIChatCompletionsAdapter.js +503 -0
  34. package/bin/service/ai/OpenAIChatCompletionsAdapter.js.map +1 -0
  35. package/bin/service/ai/ai-service-values.d.ts +16 -19
  36. package/bin/service/ai/ai-service-values.d.ts.map +1 -1
  37. package/bin/service/ai/ai-service-values.js +9 -13
  38. package/bin/service/ai/ai-service-values.js.map +1 -1
  39. package/bin/service/ai/ai-service.d.ts +15 -14
  40. package/bin/service/ai/ai-service.d.ts.map +1 -1
  41. package/bin/service/ai/ai-service.js +97 -106
  42. package/bin/service/ai/ai-service.js.map +1 -1
  43. package/bin/service/ai/helpers.d.ts +8 -35
  44. package/bin/service/ai/helpers.d.ts.map +1 -1
  45. package/bin/service/ai/helpers.js +8 -140
  46. package/bin/service/ai/helpers.js.map +1 -1
  47. package/bin/service/ai/image-job-store.d.ts +2 -3
  48. package/bin/service/ai/image-job-store.d.ts.map +1 -1
  49. package/bin/service/ai/image-job-store.js.map +1 -1
  50. package/bin/service/ai/language-model-stream.d.ts +9 -4
  51. package/bin/service/ai/language-model-stream.d.ts.map +1 -1
  52. package/bin/service/ai/language-model-stream.js +8 -4
  53. package/bin/service/ai/language-model-stream.js.map +1 -1
  54. package/bin/service/ai/language-model-text.d.ts +15 -0
  55. package/bin/service/ai/language-model-text.d.ts.map +1 -0
  56. package/bin/service/ai/language-model-text.js +67 -0
  57. package/bin/service/ai/language-model-text.js.map +1 -0
  58. package/bin/service/ai/model-context-window.d.ts +2 -2
  59. package/bin/service/ai/model-context-window.d.ts.map +1 -1
  60. package/bin/service/ai/model-context-window.js.map +1 -1
  61. package/bin/service/ai/model-registry.d.ts +8 -7
  62. package/bin/service/ai/model-registry.d.ts.map +1 -1
  63. package/bin/service/ai/model-registry.js +2 -5
  64. package/bin/service/ai/model-registry.js.map +1 -1
  65. package/bin/service/ai/model-routing.d.ts +1 -1
  66. package/bin/service/ai/model-routing.d.ts.map +1 -1
  67. package/bin/service/ai/model-routing.js +1 -1
  68. package/bin/service/ai/model-routing.js.map +1 -1
  69. package/bin/service/ai/reasoning.d.ts +4 -4
  70. package/bin/service/ai/reasoning.d.ts.map +1 -1
  71. package/bin/service/ai/reasoning.js.map +1 -1
  72. package/bin/service/service.d.ts +8 -1
  73. package/bin/service/service.d.ts.map +1 -1
  74. package/bin/service/service.js.map +1 -1
  75. package/bin/types/AI.d.ts +289 -0
  76. package/bin/types/AI.d.ts.map +1 -0
  77. package/bin/types/AI.js +8 -0
  78. package/bin/types/AI.js.map +1 -0
  79. package/bin/types/AITransport.d.ts +251 -0
  80. package/bin/types/AITransport.d.ts.map +1 -0
  81. package/bin/types/AITransport.js +12 -0
  82. package/bin/types/AITransport.js.map +1 -0
  83. package/bin/types/Metering.d.ts +2 -2
  84. package/bin/types/Metering.d.ts.map +1 -1
  85. package/bin/utils/CityLanguageModelCodec.d.ts +1 -1
  86. package/bin/utils/CityLanguageModelCodec.d.ts.map +1 -1
  87. package/bin/utils/CityLanguageModelResult.d.ts +11 -0
  88. package/bin/utils/CityLanguageModelResult.d.ts.map +1 -0
  89. package/bin/utils/CityLanguageModelResult.js +76 -0
  90. package/bin/utils/CityLanguageModelResult.js.map +1 -0
  91. package/package.json +2 -2
  92. package/bin/service/ai/charge.d.ts +0 -76
  93. package/bin/service/ai/charge.d.ts.map +0 -1
  94. package/bin/service/ai/charge.js +0 -10
  95. package/bin/service/ai/charge.js.map +0 -1
  96. package/bin/service/ai/job-types.d.ts +0 -69
  97. package/bin/service/ai/job-types.d.ts.map +0 -1
  98. package/bin/service/ai/job-types.js +0 -9
  99. package/bin/service/ai/job-types.js.map +0 -1
  100. package/bin/service/ai/provider.d.ts +0 -141
  101. package/bin/service/ai/provider.d.ts.map +0 -1
  102. package/bin/service/ai/provider.js +0 -220
  103. package/bin/service/ai/provider.js.map +0 -1
  104. package/bin/service/ai/types.d.ts +0 -172
  105. package/bin/service/ai/types.d.ts.map +0 -1
  106. package/bin/service/ai/types.js +0 -7
  107. package/bin/service/ai/types.js.map +0 -1
  108. package/bin/types/AIImageJobClaim.d.ts +0 -14
  109. package/bin/types/AIImageJobClaim.d.ts.map +0 -1
  110. package/bin/types/AIImageJobClaim.js +0 -7
  111. package/bin/types/AIImageJobClaim.js.map +0 -1
  112. package/bin/types/AIReasoning.d.ts +0 -25
  113. package/bin/types/AIReasoning.d.ts.map +0 -1
  114. package/bin/types/AIReasoning.js +0 -7
  115. package/bin/types/AIReasoning.js.map +0 -1
  116. package/bin/types/AIRouting.d.ts +0 -37
  117. package/bin/types/AIRouting.d.ts.map +0 -1
  118. package/bin/types/AIRouting.js +0 -7
  119. package/bin/types/AIRouting.js.map +0 -1
  120. package/bin/types/CityLanguageModelRuntime.d.ts +0 -46
  121. package/bin/types/CityLanguageModelRuntime.d.ts.map +0 -1
  122. package/bin/types/CityLanguageModelRuntime.js +0 -8
  123. package/bin/types/CityLanguageModelRuntime.js.map +0 -1
  124. package/bin/types/CityLanguageModelTransport.d.ts +0 -49
  125. package/bin/types/CityLanguageModelTransport.d.ts.map +0 -1
  126. package/bin/types/CityLanguageModelTransport.js +0 -9
  127. package/bin/types/CityLanguageModelTransport.js.map +0 -1
  128. package/bin/types/CityModelRuntime.d.ts +0 -17
  129. package/bin/types/CityModelRuntime.d.ts.map +0 -1
  130. package/bin/types/CityModelRuntime.js +0 -8
  131. package/bin/types/CityModelRuntime.js.map +0 -1
@@ -0,0 +1,503 @@
1
+ /**
2
+ * OpenAI Chat Completions 与 AI SDK LanguageModelV3 的协议适配模块。
3
+ *
4
+ * 本模块只负责 HTTP 协议转换,不负责模型选择、fallback、reasoning 策略、
5
+ * providerOptions 或计费。所有请求在进入 AIChannel 前都已变为标准 V3 call。
6
+ */
7
+ import { collect_city_language_model_stream } from "../../utils/CityLanguageModelResult.js";
8
+ /** OpenAI SSE 响应头。 */
9
+ const OPENAI_SSE_HEADERS = {
10
+ "content-type": "text/event-stream; charset=utf-8",
11
+ "cache-control": "no-cache, no-transform",
12
+ connection: "keep-alive",
13
+ };
14
+ /** 将 OpenAI Chat Completions 请求转换为标准 LanguageModelV3 调用参数。 */
15
+ export function openai_chat_request_to_language_model_call(request, signal) {
16
+ if (!Array.isArray(request.messages)) {
17
+ throw create_request_error("messages must be an array");
18
+ }
19
+ const max_output_tokens = read_optional_number(request.max_completion_tokens ?? request.max_tokens);
20
+ const stop_sequences = typeof request.stop === "string"
21
+ ? [request.stop]
22
+ : Array.isArray(request.stop)
23
+ ? request.stop.filter((item) => typeof item === "string")
24
+ : undefined;
25
+ const tools = convert_tools(request.tools);
26
+ const tool_choice = convert_tool_choice(request.tool_choice);
27
+ const response_format = convert_response_format(request.response_format);
28
+ return {
29
+ prompt: convert_messages(request.messages),
30
+ ...(max_output_tokens !== undefined ? { maxOutputTokens: max_output_tokens } : {}),
31
+ ...(read_optional_number(request.temperature) !== undefined
32
+ ? { temperature: read_optional_number(request.temperature) }
33
+ : {}),
34
+ ...(read_optional_number(request.top_p) !== undefined
35
+ ? { topP: read_optional_number(request.top_p) }
36
+ : {}),
37
+ ...(stop_sequences?.length ? { stopSequences: stop_sequences } : {}),
38
+ ...(read_optional_number(request.presence_penalty) !== undefined
39
+ ? { presencePenalty: read_optional_number(request.presence_penalty) }
40
+ : {}),
41
+ ...(read_optional_number(request.frequency_penalty) !== undefined
42
+ ? { frequencyPenalty: read_optional_number(request.frequency_penalty) }
43
+ : {}),
44
+ ...(Number.isInteger(request.seed) ? { seed: request.seed } : {}),
45
+ ...(tools?.length ? { tools } : {}),
46
+ ...(tool_choice ? { toolChoice: tool_choice } : {}),
47
+ ...(response_format ? { responseFormat: response_format } : {}),
48
+ ...(signal ? { abortSignal: signal } : {}),
49
+ };
50
+ }
51
+ /** 把标准 V3 流输出转换成 OpenAI JSON 或 SSE Response。 */
52
+ export async function create_openai_chat_completion_response(input) {
53
+ if (input.stream)
54
+ return create_stream_response(input.model_id, input.result);
55
+ const completion = collect_city_language_model_stream(input.result.stream, input.result.request?.body);
56
+ const result = await completion;
57
+ return {
58
+ response: Response.json(create_json_response(input.model_id, result)),
59
+ completion: Promise.resolve(result),
60
+ };
61
+ }
62
+ /** 创建非流式 OpenAI Chat Completion JSON。 */
63
+ function create_json_response(model_id, result) {
64
+ const metadata = result.response;
65
+ const tool_calls = result.content
66
+ .filter((part) => part.type === "tool-call")
67
+ .map((part) => ({
68
+ id: part.toolCallId,
69
+ type: "function",
70
+ function: {
71
+ name: part.toolName,
72
+ arguments: serialize_tool_input(part.input),
73
+ },
74
+ }));
75
+ const content = result.content
76
+ .filter((part) => part.type === "text")
77
+ .map((part) => part.text)
78
+ .join("");
79
+ const reasoning_content = result.content
80
+ .filter((part) => part.type === "reasoning")
81
+ .map((part) => part.text)
82
+ .join("");
83
+ return {
84
+ id: metadata?.id ?? `chatcmpl_${crypto.randomUUID()}`,
85
+ object: "chat.completion",
86
+ created: to_unix_timestamp(metadata?.timestamp),
87
+ model: model_id,
88
+ choices: [{
89
+ index: 0,
90
+ message: {
91
+ role: "assistant",
92
+ content: content || null,
93
+ ...(reasoning_content ? { reasoning_content } : {}),
94
+ ...(tool_calls.length ? { tool_calls } : {}),
95
+ },
96
+ finish_reason: to_openai_finish_reason(result.finishReason),
97
+ }],
98
+ usage: to_openai_usage(result.usage),
99
+ };
100
+ }
101
+ /** 创建 OpenAI Chat Completions SSE,并在消费过程中聚合计费所需结果。 */
102
+ function create_stream_response(model_id, result) {
103
+ const reader = result.stream.getReader();
104
+ const encoder = new TextEncoder();
105
+ const response_id = `chatcmpl_${crypto.randomUUID()}`;
106
+ let resolved_response_id = response_id;
107
+ let created = Math.floor(Date.now() / 1000);
108
+ let resolve_completion = () => undefined;
109
+ const completion = new Promise((resolve) => {
110
+ resolve_completion = resolve;
111
+ });
112
+ const collected_parts = [];
113
+ const tool_indexes = new Map();
114
+ const streamed_tool_ids = new Set();
115
+ let next_tool_index = 0;
116
+ let completed = false;
117
+ let sent_role = false;
118
+ const body = new ReadableStream({
119
+ async pull(controller) {
120
+ try {
121
+ while (true) {
122
+ const chunk = await reader.read();
123
+ if (chunk.done) {
124
+ await complete_stream();
125
+ controller.enqueue(encoder.encode("data: [DONE]\n\n"));
126
+ controller.close();
127
+ return;
128
+ }
129
+ const part = chunk.value;
130
+ collected_parts.push(part);
131
+ if (part.type === "response-metadata") {
132
+ if (part.id)
133
+ resolved_response_id = part.id;
134
+ created = to_unix_timestamp(part.timestamp);
135
+ }
136
+ if (part.type === "finish") {
137
+ if (!sent_role) {
138
+ sent_role = true;
139
+ controller.enqueue(encoder.encode(serialize_sse_chunk({
140
+ delta: { role: "assistant" },
141
+ })));
142
+ }
143
+ controller.enqueue(encoder.encode(serialize_sse_chunk({
144
+ delta: {},
145
+ finish_reason: to_openai_finish_reason(part.finishReason),
146
+ usage: to_openai_usage(part.usage),
147
+ })));
148
+ return;
149
+ }
150
+ const payloads = stream_part_to_openai_chunks(part, {
151
+ get_tool_index: (tool_call_id) => {
152
+ const existing = tool_indexes.get(tool_call_id);
153
+ if (existing !== undefined)
154
+ return existing;
155
+ const index = next_tool_index;
156
+ next_tool_index += 1;
157
+ tool_indexes.set(tool_call_id, index);
158
+ return index;
159
+ },
160
+ streamed_tool_ids,
161
+ });
162
+ if (!sent_role && payloads.length > 0) {
163
+ sent_role = true;
164
+ payloads.unshift({ role: "assistant" });
165
+ }
166
+ if (payloads.length === 0)
167
+ continue;
168
+ for (const delta of payloads) {
169
+ controller.enqueue(encoder.encode(serialize_sse_chunk({ delta })));
170
+ }
171
+ return;
172
+ }
173
+ }
174
+ catch (error) {
175
+ complete(undefined);
176
+ controller.error(error);
177
+ }
178
+ },
179
+ async cancel(reason) {
180
+ await reader.cancel(reason);
181
+ complete(undefined);
182
+ },
183
+ });
184
+ return {
185
+ response: new Response(body, { status: 200, headers: OPENAI_SSE_HEADERS }),
186
+ completion,
187
+ };
188
+ /** 序列化一个 OpenAI chunk。 */
189
+ function serialize_sse_chunk(input) {
190
+ return `data: ${JSON.stringify({
191
+ id: resolved_response_id,
192
+ object: "chat.completion.chunk",
193
+ created,
194
+ model: model_id,
195
+ choices: [{
196
+ index: 0,
197
+ delta: input.delta,
198
+ finish_reason: input.finish_reason ?? null,
199
+ }],
200
+ ...(input.usage ? { usage: input.usage } : {}),
201
+ })}\n\n`;
202
+ }
203
+ /** 在上游结束时输出 finish chunk 并构造标准聚合结果。 */
204
+ async function complete_stream() {
205
+ const replay = new ReadableStream({
206
+ start(replay_controller) {
207
+ for (const part of collected_parts)
208
+ replay_controller.enqueue(part);
209
+ replay_controller.close();
210
+ },
211
+ });
212
+ try {
213
+ complete(await collect_city_language_model_stream(replay, result.request?.body));
214
+ }
215
+ catch {
216
+ complete(undefined);
217
+ }
218
+ }
219
+ /** 只结算一次 completion。 */
220
+ function complete(value) {
221
+ if (completed)
222
+ return;
223
+ completed = true;
224
+ resolve_completion(value);
225
+ }
226
+ }
227
+ /** 将一个 V3 流事件转换成零个或多个 OpenAI delta。 */
228
+ function stream_part_to_openai_chunks(part, state) {
229
+ if (part.type === "text-delta")
230
+ return [{ content: part.delta }];
231
+ if (part.type === "reasoning-delta")
232
+ return [{ reasoning_content: part.delta }];
233
+ if (part.type === "tool-input-start") {
234
+ state.streamed_tool_ids.add(part.id);
235
+ return [{
236
+ tool_calls: [{
237
+ index: state.get_tool_index(part.id),
238
+ id: part.id,
239
+ type: "function",
240
+ function: { name: part.toolName, arguments: "" },
241
+ }],
242
+ }];
243
+ }
244
+ if (part.type === "tool-input-delta") {
245
+ state.streamed_tool_ids.add(part.id);
246
+ return [{
247
+ tool_calls: [{
248
+ index: state.get_tool_index(part.id),
249
+ id: part.id,
250
+ function: { arguments: part.delta },
251
+ }],
252
+ }];
253
+ }
254
+ if (part.type === "tool-call") {
255
+ if (state.streamed_tool_ids.has(part.toolCallId))
256
+ return [];
257
+ return [{
258
+ tool_calls: [{
259
+ index: state.get_tool_index(part.toolCallId),
260
+ id: part.toolCallId,
261
+ type: "function",
262
+ function: {
263
+ name: part.toolName,
264
+ arguments: serialize_tool_input(part.input),
265
+ },
266
+ }],
267
+ }];
268
+ }
269
+ if (part.type === "error")
270
+ throw part.error;
271
+ return [];
272
+ }
273
+ /** 将 OpenAI 消息列表转换成标准 V3 prompt。 */
274
+ function convert_messages(messages) {
275
+ const prompt = [];
276
+ const tool_names = new Map();
277
+ for (const message of messages) {
278
+ if (!message || typeof message !== "object")
279
+ throw create_request_error("message must be an object");
280
+ if (message.role === "system" || message.role === "developer") {
281
+ prompt.push({ role: "system", content: read_text_content(message.content) });
282
+ continue;
283
+ }
284
+ if (message.role === "user") {
285
+ prompt.push({ role: "user", content: convert_user_content(message.content) });
286
+ continue;
287
+ }
288
+ if (message.role === "assistant") {
289
+ const content = [];
290
+ if (Array.isArray(message.content)) {
291
+ content.push(...convert_user_content(message.content));
292
+ }
293
+ else {
294
+ const text = read_optional_text_content(message.content);
295
+ if (text)
296
+ content.push({ type: "text", text });
297
+ }
298
+ for (const tool_call of message.tool_calls ?? []) {
299
+ tool_names.set(tool_call.id, tool_call.function.name);
300
+ content.push({
301
+ type: "tool-call",
302
+ toolCallId: tool_call.id,
303
+ toolName: tool_call.function.name,
304
+ input: parse_json_or_text(tool_call.function.arguments),
305
+ });
306
+ }
307
+ prompt.push({ role: "assistant", content });
308
+ continue;
309
+ }
310
+ if (message.role === "tool") {
311
+ const tool_call_id = read_required_string(message.tool_call_id, "tool_call_id");
312
+ prompt.push({
313
+ role: "tool",
314
+ content: [{
315
+ type: "tool-result",
316
+ toolCallId: tool_call_id,
317
+ toolName: message.name ?? tool_names.get(tool_call_id) ?? "tool",
318
+ output: create_tool_output(message.content),
319
+ }],
320
+ });
321
+ continue;
322
+ }
323
+ throw create_request_error(`unsupported message role: ${String(message.role)}`);
324
+ }
325
+ return prompt;
326
+ }
327
+ /** 转换 user 的文本、图片和文件内容。 */
328
+ function convert_user_content(content) {
329
+ if (typeof content === "string")
330
+ return [{ type: "text", text: content }];
331
+ if (content == null)
332
+ return [];
333
+ if (!Array.isArray(content))
334
+ throw create_request_error("message content must be a string or array");
335
+ return content.map((part) => convert_user_part(part));
336
+ }
337
+ /** 转换单个 OpenAI user content part。 */
338
+ function convert_user_part(part) {
339
+ if (part.type === "text" || part.type === "input_text") {
340
+ return { type: "text", text: read_required_string(part.text, "content.text") };
341
+ }
342
+ if (part.type === "image_url" || part.type === "input_image") {
343
+ const url = part.url ?? part.image_url?.url;
344
+ return {
345
+ type: "file",
346
+ data: to_url_or_data(read_required_string(url, "content.image_url.url")),
347
+ mediaType: infer_media_type(url, "image/*"),
348
+ };
349
+ }
350
+ if (part.type === "file") {
351
+ return {
352
+ type: "file",
353
+ data: to_url_or_data(read_required_string(part.url, "content.url")),
354
+ mediaType: part.media_type ?? part.mediaType ?? infer_media_type(part.url, "application/octet-stream"),
355
+ ...(part.filename ? { filename: part.filename } : {}),
356
+ };
357
+ }
358
+ throw create_request_error(`unsupported content type: ${String(part.type)}`);
359
+ }
360
+ /** 转换 OpenAI function tools。 */
361
+ function convert_tools(tools) {
362
+ if (!tools)
363
+ return undefined;
364
+ return tools.map((tool) => {
365
+ if (tool.type !== "function" || !tool.function?.name) {
366
+ throw create_request_error("only named function tools are supported");
367
+ }
368
+ return {
369
+ type: "function",
370
+ name: tool.function.name,
371
+ ...(tool.function.description ? { description: tool.function.description } : {}),
372
+ inputSchema: tool.function.parameters ?? {},
373
+ ...(tool.function.strict !== undefined ? { strict: tool.function.strict } : {}),
374
+ };
375
+ });
376
+ }
377
+ /** 转换 OpenAI tool_choice。 */
378
+ function convert_tool_choice(choice) {
379
+ if (!choice)
380
+ return undefined;
381
+ if (typeof choice === "string")
382
+ return { type: choice };
383
+ const tool_name = choice.function?.name;
384
+ if (!tool_name)
385
+ throw create_request_error("tool_choice.function.name is required");
386
+ return { type: "tool", toolName: tool_name };
387
+ }
388
+ /** 转换 OpenAI response_format。 */
389
+ function convert_response_format(format) {
390
+ if (!format || format.type === "text")
391
+ return format ? { type: "text" } : undefined;
392
+ if (format.type === "json_object")
393
+ return { type: "json" };
394
+ return {
395
+ type: "json",
396
+ name: format.json_schema.name,
397
+ ...(format.json_schema.description ? { description: format.json_schema.description } : {}),
398
+ schema: format.json_schema.schema,
399
+ };
400
+ }
401
+ /** 将 V3 finish reason 映射为 OpenAI finish_reason。 */
402
+ function to_openai_finish_reason(reason) {
403
+ const unified = reason.unified;
404
+ if (unified === "stop")
405
+ return "stop";
406
+ if (unified === "length")
407
+ return "length";
408
+ if (unified === "tool-calls")
409
+ return "tool_calls";
410
+ if (unified === "content-filter")
411
+ return "content_filter";
412
+ return "stop";
413
+ }
414
+ /** 将 V3 usage 映射为 OpenAI usage。 */
415
+ function to_openai_usage(usage) {
416
+ const prompt_tokens = usage.inputTokens.total ?? 0;
417
+ const completion_tokens = usage.outputTokens.total ?? 0;
418
+ const cached_tokens = usage.inputTokens.cacheRead ?? 0;
419
+ const reasoning_tokens = usage.outputTokens.reasoning ?? 0;
420
+ return {
421
+ prompt_tokens,
422
+ completion_tokens,
423
+ total_tokens: prompt_tokens + completion_tokens,
424
+ ...(cached_tokens > 0 ? { prompt_tokens_details: { cached_tokens } } : {}),
425
+ ...(reasoning_tokens > 0 ? { completion_tokens_details: { reasoning_tokens } } : {}),
426
+ };
427
+ }
428
+ /** 将工具输入稳定序列化为 JSON 字符串。 */
429
+ function serialize_tool_input(input) {
430
+ if (typeof input === "string")
431
+ return input;
432
+ try {
433
+ return JSON.stringify(input ?? {});
434
+ }
435
+ catch {
436
+ return "{}";
437
+ }
438
+ }
439
+ /** 将 JSON 字符串解析为工具输入,非法 JSON 保留为文本。 */
440
+ function parse_json_or_text(input) {
441
+ try {
442
+ return JSON.parse(input);
443
+ }
444
+ catch {
445
+ return input;
446
+ }
447
+ }
448
+ /** 构造标准 V3 tool result output。 */
449
+ function create_tool_output(content) {
450
+ const value = read_text_content(content);
451
+ try {
452
+ return { type: "json", value: JSON.parse(value) };
453
+ }
454
+ catch {
455
+ return { type: "text", value };
456
+ }
457
+ }
458
+ /** 从消息内容读取纯文本。 */
459
+ function read_text_content(content) {
460
+ return read_optional_text_content(content) ?? "";
461
+ }
462
+ /** 从消息内容读取可选纯文本。 */
463
+ function read_optional_text_content(content) {
464
+ if (typeof content === "string")
465
+ return content;
466
+ if (!Array.isArray(content))
467
+ return undefined;
468
+ const text = content
469
+ .filter((part) => part.type === "text" || part.type === "input_text")
470
+ .map((part) => part.text)
471
+ .join("\n");
472
+ return text || undefined;
473
+ }
474
+ /** HTTP URL 转成 URL 对象,Data URL 保持字符串。 */
475
+ function to_url_or_data(value) {
476
+ return /^https?:\/\//iu.test(value) ? new URL(value) : value;
477
+ }
478
+ /** 从 Data URL 推断媒体类型,普通 URL 使用 fallback。 */
479
+ function infer_media_type(value, fallback) {
480
+ const match = value?.match(/^data:([^;,]+)[;,]/iu);
481
+ return match?.[1] ?? fallback;
482
+ }
483
+ /** 把 Date 转换成 OpenAI Unix 秒级时间戳。 */
484
+ function to_unix_timestamp(value) {
485
+ return value ? Math.floor(value.getTime() / 1000) : Math.floor(Date.now() / 1000);
486
+ }
487
+ /** 读取有限数字。 */
488
+ function read_optional_number(value) {
489
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
490
+ }
491
+ /** 读取必填字符串。 */
492
+ function read_required_string(value, field) {
493
+ if (typeof value !== "string" || !value.trim())
494
+ throw create_request_error(`${field} is required`);
495
+ return value;
496
+ }
497
+ /** 创建会映射为 HTTP 422 的请求错误。 */
498
+ function create_request_error(message) {
499
+ const error = new Error(message);
500
+ error.statusCode = 422;
501
+ return error;
502
+ }
503
+ //# sourceMappingURL=OpenAIChatCompletionsAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIChatCompletionsAdapter.js","sourceRoot":"","sources":["../../../src/service/ai/OpenAIChatCompletionsAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,17 @@
1
1
  /**
2
2
  * AIService 值解析与类型守卫模块。
3
3
  *
4
- * 集中管理 Provider 输出、usage 和图片任务数据的纯函数转换,让 AIService 主模块
4
+ * 集中管理 AIChannel 输出、usage 和图片任务数据的纯函数转换,让 AIService 主模块
5
5
  * 只保留路由、生命周期与持久化编排。
6
6
  */
7
7
  import type { AsyncJobRecord } from "../../types/AsyncJob.js";
8
- import type { AIProviderChargedOutput, AIProviderChargedResponse, AIProviderChargeLine } from "./charge.js";
9
- import type { AIImageProviderCreateResult, AIImageProviderResult } from "./job-types.js";
10
- /** Provider action 拆包后的统一输出。 */
11
- export interface ResolvedProviderOutput {
12
- /** Provider 对外输出。 */
8
+ import type { AICharge, AIChargedResult, AIImageCreateResult, AIImageResult } from "../../types/AI.js";
9
+ /** AIChannel action 拆包后的统一输出。 */
10
+ export interface ResolvedChannelOutput {
11
+ /** AIChannel 对外输出。 */
13
12
  output: unknown;
14
- /** Provider 计算的可选扣费行。 */
15
- charge?: AIProviderChargeLine | Promise<AIProviderChargeLine | undefined>;
13
+ /** AIChannel 计算的可选扣费行。 */
14
+ charge?: AICharge | Promise<AICharge | undefined>;
16
15
  }
17
16
  /** 可转存到 Federation storage 的图片文件 part。 */
18
17
  export type StoredImagePart = Record<string, unknown> & {
@@ -25,10 +24,8 @@ export type StoredImagePart = Record<string, unknown> & {
25
24
  export declare function isResponse(value: unknown): value is Response;
26
25
  /** 判断一个值是否为普通对象。 */
27
26
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
28
- /** 判断 Provider 是否返回了带账单 Response。 */
29
- export declare function isProviderChargedResponse(value: unknown): value is AIProviderChargedResponse;
30
- /** 判断 Provider 是否返回了带账单普通输出。 */
31
- export declare function isProviderChargedOutput(value: unknown): value is AIProviderChargedOutput;
27
+ /** 判断 AIChannel 是否返回了带账单 Response。 */
28
+ export declare function isChannelChargedOutput(value: unknown): value is AIChargedResult;
32
29
  /** 判断一个值是否为 Promise-like。 */
33
30
  export declare function isPromiseLike(value: unknown): value is PromiseLike<unknown>;
34
31
  /** 读取可选字符串。 */
@@ -40,14 +37,14 @@ export declare function normalizePositiveNumber(value: unknown, fallback: number
40
37
  /** 安全解析 JSON 对象。 */
41
38
  export declare function parseRecordJson(value: unknown): Record<string, unknown>;
42
39
  /** 安全解析 UIMessage。 */
43
- export declare function parseImageMessage(value: unknown): AIImageProviderResult["result"] | undefined;
40
+ export declare function parseImageMessage(value: unknown): AIImageResult["result"] | undefined;
44
41
  /** 把 TableApi 普通行转成图片任务记录。 */
45
42
  export declare function rowToAsyncJobRecord(row: Record<string, unknown>): AsyncJobRecord;
46
43
  /** 保留已知 HTTP 错误状态,其它异常统一包装成上游错误。 */
47
44
  export declare function imageActionError(error: unknown, fallback_message: string): Error;
48
- /** 从输出对象中读取 Provider usage。 */
45
+ /** 从输出对象中读取上游 usage。 */
49
46
  export declare function extractUsage(output: unknown): unknown;
50
- /** 兼容常见 Provider usage 字段。 */
47
+ /** 兼容常见上游 usage 字段。 */
51
48
  export declare function normalizeUsage(usage: unknown): {
52
49
  /** 输入 token 数。 */
53
50
  input_tokens?: number;
@@ -66,8 +63,8 @@ export declare function isStorableRemoteFilePart(part: unknown): part is StoredI
66
63
  export declare function readFilePartMediaType(part: Record<string, unknown>): string;
67
64
  /** 读取 file part 的建议文件名。 */
68
65
  export declare function readFilePartFilename(part: Record<string, unknown>): string | undefined;
69
- /** 判断 Provider 是否返回了图片任务创建结果。 */
70
- export declare function isImageProviderCreateResult(value: unknown): value is AIImageProviderCreateResult;
71
- /** 判断 Provider 是否返回了图片任务查询结果。 */
72
- export declare function isImageProviderResult(value: unknown): value is AIImageProviderResult;
66
+ /** 判断 AIChannel 是否返回了图片任务创建结果。 */
67
+ export declare function isImageChannelCreateResult(value: unknown): value is AIImageCreateResult;
68
+ /** 判断 AIChannel 是否返回了图片任务查询结果。 */
69
+ export declare function isImageChannelResult(value: unknown): value is AIImageResult;
73
70
  //# sourceMappingURL=ai-service-values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-service-values.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service-values.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,gCAAgC;AAChC,MAAM,WAAW,sBAAsB;IACrC,qBAAqB;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;CAC3E;AAED,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACtD,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,8BAA8B;AAC9B,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,oBAAoB;AACpB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,qCAAqC;AACrC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,yBAAyB,CAE5F;AAED,gCAAgC;AAChC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,uBAAuB,CAExF;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,CAE3E;AAED,eAAe;AACf,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAErE;AAaD,cAAc;AACd,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED,cAAc;AACd,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhF;AASD,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQvE;AAED,sBAAsB;AACtB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,SAAS,CAK7F;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAkBhF;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAGhF;AAED,+BAA+B;AAC/B,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAOrD;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG;IAC9C,kBAAkB;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAEA;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CASrE;AAED,sCAAsC;AACtC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAI/E;AAED,0BAA0B;AAC1B,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE3E;AAED,2BAA2B;AAC3B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAEtF;AAED,iCAAiC;AACjC,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,2BAA2B,CAIhG;AAED,iCAAiC;AACjC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CASpF"}
1
+ {"version":3,"file":"ai-service-values.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service-values.ts"],"names":[],"mappings":"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"}