@downcity/city 0.2.191 → 0.2.194

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 (69) hide show
  1. package/bin/index.d.ts +3 -2
  2. package/bin/index.d.ts.map +1 -1
  3. package/bin/index.js +1 -0
  4. package/bin/index.js.map +1 -1
  5. package/bin/pact/http.d.ts +4 -0
  6. package/bin/pact/http.d.ts.map +1 -1
  7. package/bin/pact/http.js.map +1 -1
  8. package/bin/pact/invoker/ai/CityModel.d.ts +38 -0
  9. package/bin/pact/invoker/ai/CityModel.d.ts.map +1 -0
  10. package/bin/pact/invoker/ai/CityModel.js +215 -0
  11. package/bin/pact/invoker/ai/CityModel.js.map +1 -0
  12. package/bin/pact/invoker/ai/client-stream.d.ts +14 -0
  13. package/bin/pact/invoker/ai/client-stream.d.ts.map +1 -0
  14. package/bin/pact/invoker/ai/client-stream.js +129 -0
  15. package/bin/pact/invoker/ai/client-stream.js.map +1 -0
  16. package/bin/pact/invoker/ai/index.d.ts +13 -13
  17. package/bin/pact/invoker/ai/index.d.ts.map +1 -1
  18. package/bin/pact/invoker/ai/index.js +42 -42
  19. package/bin/pact/invoker/ai/index.js.map +1 -1
  20. package/bin/pact/invoker/ai/types.d.ts +3 -2
  21. package/bin/pact/invoker/ai/types.d.ts.map +1 -1
  22. package/bin/pact/invoker/ai/types.js +1 -1
  23. package/bin/service/ai/ai-service-values.d.ts +73 -0
  24. package/bin/service/ai/ai-service-values.d.ts.map +1 -0
  25. package/bin/service/ai/ai-service-values.js +177 -0
  26. package/bin/service/ai/ai-service-values.js.map +1 -0
  27. package/bin/service/ai/ai-service.d.ts +8 -1
  28. package/bin/service/ai/ai-service.d.ts.map +1 -1
  29. package/bin/service/ai/ai-service.js +67 -232
  30. package/bin/service/ai/ai-service.js.map +1 -1
  31. package/bin/service/ai/helpers.d.ts +1 -0
  32. package/bin/service/ai/helpers.d.ts.map +1 -1
  33. package/bin/service/ai/helpers.js +22 -13
  34. package/bin/service/ai/helpers.js.map +1 -1
  35. package/bin/service/ai/language-model-stream.d.ts +12 -0
  36. package/bin/service/ai/language-model-stream.d.ts.map +1 -0
  37. package/bin/service/ai/language-model-stream.js +129 -0
  38. package/bin/service/ai/language-model-stream.js.map +1 -0
  39. package/bin/service/ai/model-routing.js +34 -0
  40. package/bin/service/ai/model-routing.js.map +1 -1
  41. package/bin/service/ai/provider.d.ts +12 -13
  42. package/bin/service/ai/provider.d.ts.map +1 -1
  43. package/bin/service/ai/provider.js +22 -40
  44. package/bin/service/ai/provider.js.map +1 -1
  45. package/bin/service/ai/types.d.ts +16 -4
  46. package/bin/service/ai/types.d.ts.map +1 -1
  47. package/bin/types/CityLanguageModelRuntime.d.ts +49 -0
  48. package/bin/types/CityLanguageModelRuntime.d.ts.map +1 -0
  49. package/bin/types/CityLanguageModelRuntime.js +8 -0
  50. package/bin/types/CityLanguageModelRuntime.js.map +1 -0
  51. package/bin/types/CityLanguageModelTransport.d.ts +49 -0
  52. package/bin/types/CityLanguageModelTransport.d.ts.map +1 -0
  53. package/bin/types/CityLanguageModelTransport.js +9 -0
  54. package/bin/types/CityLanguageModelTransport.js.map +1 -0
  55. package/bin/types/CityModelRuntime.d.ts +17 -0
  56. package/bin/types/CityModelRuntime.d.ts.map +1 -0
  57. package/bin/types/CityModelRuntime.js +8 -0
  58. package/bin/types/CityModelRuntime.js.map +1 -0
  59. package/bin/types/Metering.d.ts +4 -0
  60. package/bin/types/Metering.d.ts.map +1 -1
  61. package/bin/utils/CityLanguageModelCodec.d.ts +14 -0
  62. package/bin/utils/CityLanguageModelCodec.d.ts.map +1 -0
  63. package/bin/utils/CityLanguageModelCodec.js +108 -0
  64. package/bin/utils/CityLanguageModelCodec.js.map +1 -0
  65. package/package.json +2 -2
  66. package/bin/pact/invoker/ai/stream.d.ts +0 -8
  67. package/bin/pact/invoker/ai/stream.d.ts.map +0 -1
  68. package/bin/pact/invoker/ai/stream.js +0 -17
  69. package/bin/pact/invoker/ai/stream.js.map +0 -1
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * 路由:/v1/ai/{modality} 和 /v1/ai/models。
5
5
  */
6
- import { parseAIStreamBody } from "./stream.js";
7
- import { CITY_MODEL_INVOKER, CITY_MODEL_KIND, } from "@downcity/type";
6
+ import { CityModel } from "./CityModel.js";
7
+ import { create_client_ui_stream } from "./client-stream.js";
8
8
  const PREFIX = "/v1/ai";
9
9
  /**
10
10
  * AI 服务调用器。
@@ -45,31 +45,21 @@ export class AIInvoker {
45
45
  body: JSON.stringify(this.input(this.serializeTools(input))),
46
46
  });
47
47
  }
48
- /** 流式生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
49
- async stream(input) {
50
- const res = await this.reqRaw(`${PREFIX}/stream`, {
51
- method: "POST",
52
- body: JSON.stringify(this.input(this.serializeTools(input))),
53
- });
54
- return parseAIStreamBody(res.body);
55
- }
56
48
  /**
57
- * 返回当前模型的 OpenAI-compatible 连接信息。
49
+ * 使用 CityModel 流式生成 UIMessageChunk。
58
50
  *
59
- * 关键点(中文)
60
- * - City SDK 只负责提供连接上下文,不负责创建 AI SDK LanguageModel。
61
- * - Agent SDK 会读取该信息并在 agent 包内完成模型转换。
51
+ * Federation `/v1/ai/stream` 只传输 LanguageModelV3 事件;UIMessage 转换在客户端完成。
62
52
  */
63
- connection(modelId) {
64
- const resolved_model_id = String(modelId || "").trim();
65
- if (!resolved_model_id) {
66
- throw new TypeError("modelId is required");
67
- }
68
- return {
69
- base_url: this.base_url,
70
- api_key: this.token,
71
- model_id: resolved_model_id,
72
- };
53
+ async stream(input) {
54
+ return create_client_ui_stream(input, this.resolve_city_model(input.model));
55
+ }
56
+ /** 使用当前 City user 鉴权上下文调用模型流端点。 */
57
+ request_model_stream(request, signal) {
58
+ return this.reqRaw(`${PREFIX}/stream`, {
59
+ method: "POST",
60
+ body: JSON.stringify(request),
61
+ signal,
62
+ });
73
63
  }
74
64
  /** 创建图片生成任务 */
75
65
  image_create(input) {
@@ -94,7 +84,7 @@ export class AIInvoker {
94
84
  /** 获取模型目录 */
95
85
  async listModels() {
96
86
  const body = await this.req(`${PREFIX}/models`, { method: "GET" });
97
- return new ModelCatalog(body.items, this);
87
+ return new ModelCatalog(body.items, (descriptor) => this.create_city_model(descriptor));
98
88
  }
99
89
  /**
100
90
  * 获取指定模型的操作句柄。
@@ -114,6 +104,31 @@ export class AIInvoker {
114
104
  }
115
105
  return new ModelHandle(this, ref.id, ref.name, this.base_url, this.token, ref.meta);
116
106
  }
107
+ /** 将模型输入解析为绑定当前鉴权请求器的 CityModel。 */
108
+ resolve_city_model(model) {
109
+ if (model && typeof model === "object")
110
+ return model;
111
+ if (typeof model !== "string")
112
+ throw new TypeError("model is required");
113
+ const model_id = model.trim();
114
+ if (!model_id)
115
+ throw new TypeError("model must be a non-empty string");
116
+ return this.create_city_model({
117
+ id: model_id,
118
+ name: model_id,
119
+ description: "",
120
+ modalities: ["text", "stream"],
121
+ tags: [],
122
+ meta: {},
123
+ });
124
+ }
125
+ /** 使用公开目录描述创建可执行 CityModel。 */
126
+ create_city_model(descriptor) {
127
+ return new CityModel({
128
+ descriptor,
129
+ request_stream: (request, signal) => this.request_model_stream(request, signal),
130
+ });
131
+ }
117
132
  post(path, input) {
118
133
  return this.req(`${PREFIX}${path}`, {
119
134
  method: "POST",
@@ -202,12 +217,12 @@ export class AIInvoker {
202
217
  */
203
218
  export class ModelCatalog {
204
219
  byId;
205
- constructor(items, ai) {
220
+ constructor(items, create_model) {
206
221
  if (!items?.length) {
207
222
  this.byId = new Map();
208
223
  return;
209
224
  }
210
- const enriched = items.map((item) => create_city_model(ai, item));
225
+ const enriched = items.map(create_model);
211
226
  this.byId = new Map(enriched.map((item) => [item.id, item]));
212
227
  }
213
228
  get(id) {
@@ -227,21 +242,6 @@ export function serializeModel(model) {
227
242
  return undefined;
228
243
  return typeof model === "string" ? model : model.id;
229
244
  }
230
- function create_city_model(ai, item) {
231
- const model = {
232
- ...item,
233
- kind: CITY_MODEL_KIND,
234
- };
235
- Object.defineProperty(model, CITY_MODEL_INVOKER, {
236
- enumerable: false,
237
- configurable: false,
238
- writable: false,
239
- value: {
240
- connection: () => ai.connection(item.id),
241
- },
242
- });
243
- return Object.freeze(model);
244
- }
245
245
  // ===================================================================
246
246
  // ModelHandle — 绑定模型 ID 的操作句柄
247
247
  // ===================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * AI 模型类型(对应 service/ai/types.ts PublicModel)。
3
3
  *
4
4
  * 关键点(中文)
5
- * - CityModel 是跨 package 共享协议,定义在 @downcity/type
5
+ * - CityModel @downcity/city 提供的原生 LanguageModelV3 class
6
6
  * - UserModelRef 保留为 Federation 内部语义别名,避免一次性扩大改名范围。
7
7
  */
8
- import type { CityModel, CityModelEnvRequirement } from "@downcity/type";
8
+ import type { CityModelEnvRequirement } from "@downcity/type";
9
+ import type { CityModel } from "./CityModel.js";
9
10
  export type UserModelEnvRequirement = CityModelEnvRequirement;
10
11
  /** 客户端可见的 Model 引用。 */
11
12
  export type UserModelRef = CityModel;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAE9D,uBAAuB;AACvB,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC;AAErC,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAE9D,uBAAuB;AACvB,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC;AAErC,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * AI 模型类型(对应 service/ai/types.ts PublicModel)。
3
3
  *
4
4
  * 关键点(中文)
5
- * - CityModel 是跨 package 共享协议,定义在 @downcity/type
5
+ * - CityModel @downcity/city 提供的原生 LanguageModelV3 class
6
6
  * - UserModelRef 保留为 Federation 内部语义别名,避免一次性扩大改名范围。
7
7
  */
8
8
  export {};
@@ -0,0 +1,73 @@
1
+ /**
2
+ * AIService 值解析与类型守卫模块。
3
+ *
4
+ * 集中管理 Provider 输出、usage 和图片任务数据的纯函数转换,让 AIService 主模块
5
+ * 只保留路由、生命周期与持久化编排。
6
+ */
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 对外输出。 */
13
+ output: unknown;
14
+ /** Provider 计算的可选扣费行。 */
15
+ charge?: AIProviderChargeLine | Promise<AIProviderChargeLine | undefined>;
16
+ }
17
+ /** 可转存到 Federation storage 的图片文件 part。 */
18
+ export type StoredImagePart = Record<string, unknown> & {
19
+ /** 固定文件 part 类型。 */
20
+ type: "file";
21
+ /** 可抓取的 HTTP(S) URL。 */
22
+ url: string;
23
+ };
24
+ /** 判断一个值是否为 HTTP Response。 */
25
+ export declare function isResponse(value: unknown): value is Response;
26
+ /** 判断一个值是否为普通对象。 */
27
+ 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;
32
+ /** 判断一个值是否为 Promise-like。 */
33
+ export declare function isPromiseLike(value: unknown): value is PromiseLike<unknown>;
34
+ /** 读取可选字符串。 */
35
+ export declare function readOptionalString(value: unknown): string | undefined;
36
+ /** 读取可选数字。 */
37
+ export declare function readOptionalNumber(value: unknown): number | undefined;
38
+ /** 读取正数配置。 */
39
+ export declare function normalizePositiveNumber(value: unknown, fallback: number): number;
40
+ /** 安全解析 JSON 对象。 */
41
+ export declare function parseRecordJson(value: unknown): Record<string, unknown>;
42
+ /** 安全解析 UIMessage。 */
43
+ export declare function parseImageMessage(value: unknown): AIImageProviderResult["result"] | undefined;
44
+ /** 把 TableApi 普通行转成图片任务记录。 */
45
+ export declare function rowToAsyncJobRecord(row: Record<string, unknown>): AsyncJobRecord;
46
+ /** 保留已知 HTTP 错误状态,其它异常统一包装成上游错误。 */
47
+ export declare function imageActionError(error: unknown, fallback_message: string): Error;
48
+ /** 从输出对象中读取 Provider usage。 */
49
+ export declare function extractUsage(output: unknown): unknown;
50
+ /** 兼容常见 Provider usage 字段。 */
51
+ export declare function normalizeUsage(usage: unknown): {
52
+ /** 输入 token 数。 */
53
+ input_tokens?: number;
54
+ /** 输出 token 数。 */
55
+ output_tokens?: number;
56
+ /** 缓存命中的输入 token 数。 */
57
+ cached_tokens?: number;
58
+ /** 推理 token 数。 */
59
+ reasoning_tokens?: number;
60
+ };
61
+ /** 统计 UIMessage file parts 里的图片数量。 */
62
+ export declare function countImageOutputs(output: unknown): number | undefined;
63
+ /** 判断 file part URL 是否是可转存的远程 URL。 */
64
+ export declare function isStorableRemoteFilePart(part: unknown): part is StoredImagePart;
65
+ /** 读取 file part 的媒体类型。 */
66
+ export declare function readFilePartMediaType(part: Record<string, unknown>): string;
67
+ /** 读取 file part 的建议文件名。 */
68
+ 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;
73
+ //# sourceMappingURL=ai-service-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-service-values.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service-values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * AIService 值解析与类型守卫模块。
3
+ *
4
+ * 集中管理 Provider 输出、usage 和图片任务数据的纯函数转换,让 AIService 主模块
5
+ * 只保留路由、生命周期与持久化编排。
6
+ */
7
+ import { httpError } from "../../utils/helpers.js";
8
+ import { normalizeAIUsage } from "./helpers.js";
9
+ /** 判断一个值是否为 HTTP Response。 */
10
+ export function isResponse(value) {
11
+ return typeof value === "object" && value !== null && "status" in value && "headers" in value;
12
+ }
13
+ /** 判断一个值是否为普通对象。 */
14
+ export function isRecord(value) {
15
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
16
+ }
17
+ /** 判断 Provider 是否返回了带账单 Response。 */
18
+ export function isProviderChargedResponse(value) {
19
+ return isRecord(value) && value.response instanceof Response;
20
+ }
21
+ /** 判断 Provider 是否返回了带账单普通输出。 */
22
+ export function isProviderChargedOutput(value) {
23
+ return isRecord(value) && "output" in value;
24
+ }
25
+ /** 判断一个值是否为 Promise-like。 */
26
+ export function isPromiseLike(value) {
27
+ return Boolean(value && typeof value === "object" && "then" in value && typeof value.then === "function");
28
+ }
29
+ /** 读取可选字符串。 */
30
+ export function readOptionalString(value) {
31
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
32
+ }
33
+ /** 读取可空字符串字段。 */
34
+ function readNullableString(value) {
35
+ return typeof value === "string" ? value : null;
36
+ }
37
+ /** 读取可空数字字符串字段。 */
38
+ function readNullableNumberString(value) {
39
+ if (typeof value === "number" && Number.isFinite(value))
40
+ return String(value);
41
+ return typeof value === "string" && value.trim() ? value : null;
42
+ }
43
+ /** 读取可选数字。 */
44
+ export function readOptionalNumber(value) {
45
+ if (typeof value === "number" && Number.isFinite(value))
46
+ return value;
47
+ if (typeof value !== "string" || !value.trim())
48
+ return undefined;
49
+ const parsed = Number(value);
50
+ return Number.isFinite(parsed) ? parsed : undefined;
51
+ }
52
+ /** 读取正数配置。 */
53
+ export function normalizePositiveNumber(value, fallback) {
54
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : fallback;
55
+ }
56
+ /** 读取任务状态。 */
57
+ function readJobStatus(value) {
58
+ return value === "queued" || value === "running" || value === "fetching" || value === "succeeded" || value === "failed"
59
+ ? value
60
+ : "failed";
61
+ }
62
+ /** 安全解析 JSON 对象。 */
63
+ export function parseRecordJson(value) {
64
+ if (typeof value !== "string" || !value.trim())
65
+ return {};
66
+ try {
67
+ const parsed = JSON.parse(value);
68
+ return isRecord(parsed) ? parsed : {};
69
+ }
70
+ catch {
71
+ return {};
72
+ }
73
+ }
74
+ /** 安全解析 UIMessage。 */
75
+ export function parseImageMessage(value) {
76
+ const record = parseRecordJson(value);
77
+ return record.role === "assistant" && Array.isArray(record.parts)
78
+ ? record
79
+ : undefined;
80
+ }
81
+ /** 把 TableApi 普通行转成图片任务记录。 */
82
+ export function rowToAsyncJobRecord(row) {
83
+ return {
84
+ job_id: String(row.job_id ?? ""),
85
+ job_type: String(row.job_type ?? ""),
86
+ status: readJobStatus(row.status),
87
+ input_json: String(row.input_json ?? "{}"),
88
+ state_json: readNullableString(row.state_json),
89
+ result_json: readNullableString(row.result_json),
90
+ error: readNullableString(row.error),
91
+ message: readNullableString(row.message),
92
+ poll_after_ms: readNullableNumberString(row.poll_after_ms),
93
+ city_id: readNullableString(row.city_id),
94
+ user_id: readNullableString(row.user_id),
95
+ service_id: readNullableString(row.service_id),
96
+ model_id: readNullableString(row.model_id),
97
+ created_at: String(row.created_at ?? ""),
98
+ updated_at: String(row.updated_at ?? ""),
99
+ };
100
+ }
101
+ /** 保留已知 HTTP 错误状态,其它异常统一包装成上游错误。 */
102
+ export function imageActionError(error, fallback_message) {
103
+ if (error instanceof Error && typeof error.statusCode === "number")
104
+ return error;
105
+ return httpError(502, error instanceof Error ? error.message : fallback_message);
106
+ }
107
+ /** 从输出对象中读取 Provider usage。 */
108
+ export function extractUsage(output) {
109
+ if (!isRecord(output))
110
+ return undefined;
111
+ const metadata = isRecord(output.metadata) ? output.metadata : undefined;
112
+ if (metadata && "usage" in metadata)
113
+ return metadata.usage;
114
+ if (metadata && "usageMetadata" in metadata)
115
+ return metadata.usageMetadata;
116
+ if ("usage" in output)
117
+ return output.usage;
118
+ return undefined;
119
+ }
120
+ /** 兼容常见 Provider usage 字段。 */
121
+ export function normalizeUsage(usage) {
122
+ return normalizeAIUsage(usage);
123
+ }
124
+ /** 统计 UIMessage file parts 里的图片数量。 */
125
+ export function countImageOutputs(output) {
126
+ if (!isRecord(output) || !Array.isArray(output.parts))
127
+ return undefined;
128
+ const count = output.parts.filter((part) => {
129
+ if (!isRecord(part))
130
+ return false;
131
+ const type = String(part.type ?? "");
132
+ const media_type = String(part.mediaType ?? part.media_type ?? "");
133
+ return type === "file" && media_type.startsWith("image/");
134
+ }).length;
135
+ return count > 0 ? count : undefined;
136
+ }
137
+ /** 判断 file part URL 是否是可转存的远程 URL。 */
138
+ export function isStorableRemoteFilePart(part) {
139
+ if (!isRecord(part) || part.type !== "file")
140
+ return false;
141
+ const url = readOptionalString(part.url);
142
+ return Boolean(url && /^https?:\/\//iu.test(url));
143
+ }
144
+ /** 读取 file part 的媒体类型。 */
145
+ export function readFilePartMediaType(part) {
146
+ return readOptionalString(part.mediaType) ?? readOptionalString(part.media_type) ?? "application/octet-stream";
147
+ }
148
+ /** 读取 file part 的建议文件名。 */
149
+ export function readFilePartFilename(part) {
150
+ return readOptionalString(part.filename);
151
+ }
152
+ /** 判断 Provider 是否返回了图片任务创建结果。 */
153
+ export function isImageProviderCreateResult(value) {
154
+ if (!value || typeof value !== "object")
155
+ return false;
156
+ const record = value;
157
+ return typeof record.job_id === "string" && Boolean(record.job_id.trim()) && isImageJobStatus(record.status);
158
+ }
159
+ /** 判断 Provider 是否返回了图片任务查询结果。 */
160
+ export function isImageProviderResult(value) {
161
+ if (!value || typeof value !== "object")
162
+ return false;
163
+ const record = value;
164
+ if (typeof record.job_id !== "string" || !record.job_id.trim() || !isImageJobStatus(record.status))
165
+ return false;
166
+ if (record.status === "succeeded") {
167
+ const result = isRecord(record.result) ? record.result : undefined;
168
+ if (!result || result.role !== "assistant" || !Array.isArray(result.parts))
169
+ return false;
170
+ }
171
+ return true;
172
+ }
173
+ /** 判断图片任务状态。 */
174
+ function isImageJobStatus(value) {
175
+ return value === "queued" || value === "running" || value === "succeeded" || value === "failed";
176
+ }
177
+ //# sourceMappingURL=ai-service-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-service-values.js","sourceRoot":"","sources":["../../../src/service/ai/ai-service-values.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * 路由(City 自动生成):
10
10
  * - POST /v1/ai/text — 文本生成
11
- * - POST /v1/ai/stream — 流式生成
11
+ * - POST /v1/ai/stream — CityModel LanguageModelV3 模型流
12
12
  * - POST /v1/ai/video — 视频生成
13
13
  * - POST /v1/ai/image/create — 创建图片生成任务
14
14
  * - POST /v1/ai/image/result — 查询图片生成任务
@@ -47,6 +47,13 @@ export declare class AIService extends Service {
47
47
  /** 按媒体输入解析最终模型,推理强度必须在该步骤之后解析。 */
48
48
  private plan_text_execution;
49
49
  private handleModality;
50
+ /**
51
+ * 执行 CityModel LanguageModelV3 模型流调用。
52
+ *
53
+ * 路由、fallback、reasoning 和计费仍由 AIService 统一拥有;transport 模块只负责
54
+ * 调用最终模型并编码 SSE,避免把 Provider 决策泄漏到客户端。
55
+ */
56
+ private handleLanguageModelStream;
50
57
  private createImageJob;
51
58
  private readImageJob;
52
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ai-service.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAEX,WAAW,EACZ,MAAM,YAAY,CAAC;AAiDpB,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AA2PrD,qBAAa,SAAU,SAAQ,OAAO;IACpC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,0CAA0C;IAC1C,OAAO,CAAC,eAAe,CAA+B;IAEtD,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAC3C,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;gBAE3C,OAAO,GAAE,gBAAqB;IA0C1C,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,GAAG,IAAI;IAKrD,UAAU,IAAI,WAAW,EAAE;IAI3B,SAAS,IAAI,OAAO;IAMpB,OAAO,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG;QAAE,KAAK,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE;IAgB7G,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,2BAA2B;IAmCnC,OAAO,CAAC,kBAAkB;IAS1B,kCAAkC;IAClC,OAAO,CAAC,mBAAmB;YAkBb,cAAc;YAmCd,cAAc;YAgBd,YAAY;IAS1B;;OAEG;YACW,aAAa;IAuD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAc1C;;OAEG;YACW,iBAAiB;IAU/B;;;;;;;OAOG;YACW,2BAA2B;IAwDzC;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,eAAe;IAW7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAcV,qBAAqB;IAoCnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;;;;;;OAOG;YACW,QAAQ;IAMtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;YACW,YAAY;IA0D1B,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;QAC/C,GAAG,EAAE,SAAS,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;KACtC,GAAG,WAAW,EAAE;CAMlB"}
1
+ {"version":3,"file":"ai-service.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAEX,WAAW,EACZ,MAAM,YAAY,CAAC;AA4EpB,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAYrD,qBAAa,SAAU,SAAQ,OAAO;IACpC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,0CAA0C;IAC1C,OAAO,CAAC,eAAe,CAA+B;IAEtD,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAC3C,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;gBAE3C,OAAO,GAAE,gBAAqB;IA+C1C,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,GAAG,IAAI;IAKrD,UAAU,IAAI,WAAW,EAAE;IAI3B,SAAS,IAAI,OAAO;IAMpB,OAAO,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG;QAAE,KAAK,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE;IAgB7G,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,2BAA2B;IAmCnC,OAAO,CAAC,kBAAkB;IAU1B,kCAAkC;IAClC,OAAO,CAAC,mBAAmB;YAkBb,cAAc;IAiC5B;;;;;OAKG;YACW,yBAAyB;YA8CzB,cAAc;YAgBd,YAAY;IAS1B;;OAEG;YACW,aAAa;IAuD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAc1C;;OAEG;YACW,iBAAiB;IAU/B;;;;;;;OAOG;YACW,2BAA2B;IAwDzC;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,eAAe;IAW7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAcV,qBAAqB;IAoCnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;;;;;;OAOG;YACW,QAAQ;IAMtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;YACW,YAAY;IA0D1B,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;QAC/C,GAAG,EAAE,SAAS,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;KACtC,GAAG,WAAW,EAAE;CAMlB"}