@downcity/city 0.2.192 → 0.2.196
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/bin/index.d.ts +1 -0
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js.map +1 -1
- package/bin/pact/invoker/ai/client-stream.d.ts +14 -0
- package/bin/pact/invoker/ai/client-stream.d.ts.map +1 -0
- package/bin/pact/invoker/ai/client-stream.js +129 -0
- package/bin/pact/invoker/ai/client-stream.js.map +1 -0
- package/bin/pact/invoker/ai/index.d.ts +12 -5
- package/bin/pact/invoker/ai/index.d.ts.map +1 -1
- package/bin/pact/invoker/ai/index.js +38 -16
- package/bin/pact/invoker/ai/index.js.map +1 -1
- package/bin/service/ai/ai-service.d.ts +4 -5
- package/bin/service/ai/ai-service.d.ts.map +1 -1
- package/bin/service/ai/ai-service.js +26 -28
- package/bin/service/ai/ai-service.js.map +1 -1
- package/bin/service/ai/language-model-stream.d.ts +9 -5
- package/bin/service/ai/language-model-stream.d.ts.map +1 -1
- package/bin/service/ai/language-model-stream.js +13 -10
- package/bin/service/ai/language-model-stream.js.map +1 -1
- package/bin/service/ai/provider.d.ts +12 -13
- package/bin/service/ai/provider.d.ts.map +1 -1
- package/bin/service/ai/provider.js +26 -47
- package/bin/service/ai/provider.js.map +1 -1
- package/bin/service/ai/types.d.ts +7 -9
- package/bin/service/ai/types.d.ts.map +1 -1
- package/bin/types/CityLanguageModelRuntime.d.ts +6 -9
- package/bin/types/CityLanguageModelRuntime.d.ts.map +1 -1
- package/package.json +2 -2
- package/bin/pact/invoker/ai/stream.d.ts +0 -8
- package/bin/pact/invoker/ai/stream.d.ts.map +0 -1
- package/bin/pact/invoker/ai/stream.js +0 -17
- package/bin/pact/invoker/ai/stream.js.map +0 -1
package/bin/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export { Provider } from "./service/ai/provider.js";
|
|
|
27
27
|
export { read_resolved_reasoning } from "./service/ai/reasoning.js";
|
|
28
28
|
export type { AIServiceOptions, ModelConfig, ModelFallbackMedia, ModelFallbackRule, ModelActions, ModelLanguageRuntime, CityLanguageModelV3, OpenAICompatibleClient, OpenAICompatibleClientConfig, ProviderOptions, PublicModel, } from "./service/ai/types.js";
|
|
29
29
|
export type { AIProviderOptionObject, AIProviderOptions, AIProviderOptionValue, AIResolvedReasoning, } from "./types/AIReasoning.js";
|
|
30
|
+
export type { CityProviderStreamCall, CityProviderStreamResult, } from "./types/CityLanguageModelRuntime.js";
|
|
30
31
|
export { buildAssistantMessage, buildImageMessage, buildToolSet, isRecord, normalizeAIUsage, normalizeOpenAICompatibleBody, normalizeTextOnlyOpenAICompatibleBody, readErrorMessage, readJsonResponse, readOpenAICompatibleSseUsage, readRequiredEnv, readString, resolveUpstreamModel, stripUndefined, toRecord, trimTrailingSlash, } from "./service/ai/helpers.js";
|
|
31
32
|
export type { BuildAssistantMessageResult, ExtractedImage, ToolCallShape, } from "./service/ai/helpers.js";
|
|
32
33
|
export type { AIBalanceBridge, AIBalanceChargeInput, AIProviderBillFn, AIProviderChargedOutput, AIProviderChargedResponse, AIProviderChargeLine, } from "./service/ai/charge.js";
|
package/bin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAepD,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAmC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAepD,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAmC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AA4BpE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,6BAA6B,EAC7B,qCAAqC,EACrC,gBAAgB,EAChB,gBAAgB,EAChB,4BAA4B,EAC5B,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAiBjC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAShE,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAQ1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAOtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAsB3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAUxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAyCxE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AA8BzD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE7E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City 客户端 UIMessage 流包装模块。
|
|
3
|
+
*
|
|
4
|
+
* Federation `/v1/ai/stream` 只返回标准 LanguageModelV3 流。该模块在客户端使用
|
|
5
|
+
* AI SDK `streamText()` 将 CityModel 流转换为 `UIMessageChunk`,避免 UI 协议进入
|
|
6
|
+
* Federation 或 CityModel transport 边界。
|
|
7
|
+
*/
|
|
8
|
+
import type { UserServiceInput, UserStreamResult } from "../../user/types.js";
|
|
9
|
+
import type { UserModelRef } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* 使用 CityModel 执行流式生成,并在客户端转换成 UIMessageChunk。
|
|
12
|
+
*/
|
|
13
|
+
export declare function create_client_ui_stream(input: UserServiceInput, model: UserModelRef): Promise<UserStreamResult>;
|
|
14
|
+
//# sourceMappingURL=client-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-stream.d.ts","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/client-stream.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiB/C;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAwC3B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City 客户端 UIMessage 流包装模块。
|
|
3
|
+
*
|
|
4
|
+
* Federation `/v1/ai/stream` 只返回标准 LanguageModelV3 流。该模块在客户端使用
|
|
5
|
+
* AI SDK `streamText()` 将 CityModel 流转换为 `UIMessageChunk`,避免 UI 协议进入
|
|
6
|
+
* Federation 或 CityModel transport 边界。
|
|
7
|
+
*/
|
|
8
|
+
import { convertToModelMessages, jsonSchema, streamText, tool, } from "ai";
|
|
9
|
+
/** AI SDK `streamText()` 支持直接透传的公开生成参数。 */
|
|
10
|
+
const STREAM_OPTION_KEYS = [
|
|
11
|
+
"maxOutputTokens",
|
|
12
|
+
"temperature",
|
|
13
|
+
"topP",
|
|
14
|
+
"topK",
|
|
15
|
+
"presencePenalty",
|
|
16
|
+
"frequencyPenalty",
|
|
17
|
+
"stopSequences",
|
|
18
|
+
"seed",
|
|
19
|
+
"toolChoice",
|
|
20
|
+
"activeTools",
|
|
21
|
+
"abortSignal",
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* 使用 CityModel 执行流式生成,并在客户端转换成 UIMessageChunk。
|
|
25
|
+
*/
|
|
26
|
+
export async function create_client_ui_stream(input, model) {
|
|
27
|
+
const tools = create_client_tool_set(input.tools);
|
|
28
|
+
const messages = Array.isArray(input.messages)
|
|
29
|
+
? input.messages
|
|
30
|
+
: undefined;
|
|
31
|
+
const prompt = typeof input.prompt === "string" ? input.prompt : undefined;
|
|
32
|
+
if (!messages?.length && prompt === undefined) {
|
|
33
|
+
throw new TypeError("client.ai.stream() requires prompt or messages");
|
|
34
|
+
}
|
|
35
|
+
const reasoning_effort = read_reasoning_effort(input);
|
|
36
|
+
const common_options = {
|
|
37
|
+
model,
|
|
38
|
+
...(tools ? { tools } : {}),
|
|
39
|
+
...read_stream_options(input),
|
|
40
|
+
...(reasoning_effort
|
|
41
|
+
? {
|
|
42
|
+
providerOptions: {
|
|
43
|
+
downcity: { reasoningEffort: reasoning_effort },
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
: {}),
|
|
47
|
+
};
|
|
48
|
+
if (messages?.length) {
|
|
49
|
+
const model_messages = tools
|
|
50
|
+
? await convertToModelMessages(messages, { tools })
|
|
51
|
+
: await convertToModelMessages(messages);
|
|
52
|
+
const result = streamText({
|
|
53
|
+
...common_options,
|
|
54
|
+
messages: model_messages,
|
|
55
|
+
});
|
|
56
|
+
return result.toUIMessageStream({ originalMessages: messages });
|
|
57
|
+
}
|
|
58
|
+
const result = streamText({
|
|
59
|
+
...common_options,
|
|
60
|
+
prompt: prompt ?? "",
|
|
61
|
+
});
|
|
62
|
+
return result.toUIMessageStream();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 将公开 stream 输入中的工具定义规范化为不带 execute 的 AI SDK ToolSet。
|
|
66
|
+
*
|
|
67
|
+
* `client.ai.stream()` 只负责一次模型流,不在 City SDK 内执行工具循环。
|
|
68
|
+
*/
|
|
69
|
+
function create_client_tool_set(value) {
|
|
70
|
+
const entries = Array.isArray(value)
|
|
71
|
+
? value.map((item) => [read_tool_name(undefined, item), item])
|
|
72
|
+
: value && typeof value === "object"
|
|
73
|
+
? Object.entries(value)
|
|
74
|
+
: [];
|
|
75
|
+
const tools = entries.flatMap(([fallback_name, definition]) => {
|
|
76
|
+
const name = read_tool_name(fallback_name, definition);
|
|
77
|
+
if (!name)
|
|
78
|
+
return [];
|
|
79
|
+
const record = read_record(definition);
|
|
80
|
+
const function_record = read_record(record?.function);
|
|
81
|
+
const description = read_optional_string(function_record?.description)
|
|
82
|
+
?? read_optional_string(record?.description)
|
|
83
|
+
?? "";
|
|
84
|
+
const input_schema = function_record?.parameters
|
|
85
|
+
?? unwrap_json_schema(record?.inputSchema)
|
|
86
|
+
?? record?.parameters
|
|
87
|
+
?? {};
|
|
88
|
+
return [[name, tool({
|
|
89
|
+
description,
|
|
90
|
+
inputSchema: jsonSchema(input_schema),
|
|
91
|
+
})]];
|
|
92
|
+
});
|
|
93
|
+
return tools.length > 0 ? Object.fromEntries(tools) : undefined;
|
|
94
|
+
}
|
|
95
|
+
/** 读取 AI SDK 或 OpenAI function tool 的名称。 */
|
|
96
|
+
function read_tool_name(fallback_name, definition) {
|
|
97
|
+
const fallback = read_optional_string(fallback_name);
|
|
98
|
+
if (fallback)
|
|
99
|
+
return fallback;
|
|
100
|
+
const record = read_record(definition);
|
|
101
|
+
const direct_name = read_optional_string(record?.name);
|
|
102
|
+
if (direct_name)
|
|
103
|
+
return direct_name;
|
|
104
|
+
return read_optional_string(read_record(record?.function)?.name) ?? "";
|
|
105
|
+
}
|
|
106
|
+
/** 展开 AI SDK jsonSchema 包装,得到可传输的 JSON Schema。 */
|
|
107
|
+
function unwrap_json_schema(value) {
|
|
108
|
+
const record = read_record(value);
|
|
109
|
+
return record?.jsonSchema ?? value;
|
|
110
|
+
}
|
|
111
|
+
/** 只读取允许传给 AI SDK `streamText()` 的生成参数。 */
|
|
112
|
+
function read_stream_options(input) {
|
|
113
|
+
return Object.fromEntries(STREAM_OPTION_KEYS.flatMap((key) => input[key] === undefined ? [] : [[key, input[key]]]));
|
|
114
|
+
}
|
|
115
|
+
/** 读取 Downcity 推理强度。 */
|
|
116
|
+
function read_reasoning_effort(input) {
|
|
117
|
+
return read_optional_string(input.reasoning_effort);
|
|
118
|
+
}
|
|
119
|
+
/** 将未知值收窄为普通对象。 */
|
|
120
|
+
function read_record(value) {
|
|
121
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
122
|
+
? value
|
|
123
|
+
: undefined;
|
|
124
|
+
}
|
|
125
|
+
/** 读取非空字符串。 */
|
|
126
|
+
function read_optional_string(value) {
|
|
127
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=client-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-stream.js","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/client-stream.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,IAAI,GAGL,MAAM,IAAI,CAAC;AAIZ,2CAA2C;AAC3C,MAAM,kBAAkB,GAAG;IACzB,iBAAiB;IACjB,aAAa;IACb,MAAM;IACN,MAAM;IACN,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,MAAM;IACN,YAAY;IACZ,aAAa;IACb,aAAa;CACL,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAuB,EACvB,KAAmB;IAEnB,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,QAAuB;QAC/B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,cAAc,GAAG;QACrB,KAAK;QACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,mBAAmB,CAAC,KAAK,CAAC;QAC7B,GAAG,CAAC,gBAAgB;YAClB,CAAC,CAAC;gBACE,eAAe,EAAE;oBACf,QAAQ,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE;iBAChD;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,cAAc,GAAG,KAAK;YAC1B,CAAC,CAAC,MAAM,sBAAsB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;YACnD,CAAC,CAAC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,GAAG,cAAc;YACjB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,GAAG,cAAc;QACjB,MAAM,EAAE,MAAM,IAAI,EAAE;KACrB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,iBAAiB,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,KAAc;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAU,CAAC;QACvE,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;YAClD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,oBAAoB,CAAC,eAAe,EAAE,WAAW,CAAC;eACjE,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC;eACzC,EAAE,CAAC;QACR,MAAM,YAAY,GAAG,eAAe,EAAE,UAAU;eAC3C,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;eACvC,MAAM,EAAE,UAAU;eAClB,EAAE,CAAC;QACR,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;oBAClB,WAAW;oBACX,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC;iBACtC,CAAC,CAAU,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,4CAA4C;AAC5C,SAAS,cAAc,CAAC,aAAsB,EAAE,UAAmB;IACjE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,oBAAoB,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,kDAAkD;AAClD,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;AACrC,CAAC;AAED,2CAA2C;AAC3C,SAAS,mBAAmB,CAAC,KAAuB;IAClD,OAAO,MAAM,CAAC,WAAW,CACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,wBAAwB;AACxB,SAAS,qBAAqB,CAAC,KAAuB;IACpD,OAAO,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACtD,CAAC;AAED,mBAAmB;AACnB,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,eAAe;AACf,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type CityModelDescriptor } from "@downcity/type";
|
|
7
7
|
import type { UserModelRef } from "./types.js";
|
|
8
|
-
import type { CityLanguageModelStreamRequestV1 } from "../../../types/CityLanguageModelTransport.js";
|
|
9
8
|
import type { UserImageInput, UserImageJobCreateResult, UserImageJobResult, UserImageJobResultInput, UserAsrInput, UserAsrResult, UserServiceInput, UserStreamResult, UserTextResult, UserTtsInput, UserTtsResult, UserVideoResult } from "../../user/types.js";
|
|
10
9
|
import type { FetchResponseLike, RequestInitLike } from "../../http.js";
|
|
11
10
|
/**
|
|
@@ -40,10 +39,14 @@ export declare class AIInvoker {
|
|
|
40
39
|
get base_url(): string;
|
|
41
40
|
/** 文本生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
|
|
42
41
|
text(input: UserServiceInput): Promise<UserTextResult>;
|
|
43
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* 使用 CityModel 流式生成 UIMessageChunk。
|
|
44
|
+
*
|
|
45
|
+
* Federation `/v1/ai/stream` 只传输 LanguageModelV3 事件;UIMessage 转换在客户端完成。
|
|
46
|
+
*/
|
|
44
47
|
stream(input: UserServiceInput): Promise<UserStreamResult>;
|
|
45
|
-
/** 使用当前 City user
|
|
46
|
-
|
|
48
|
+
/** 使用当前 City user 鉴权上下文调用模型流端点。 */
|
|
49
|
+
private request_model_stream;
|
|
47
50
|
/** 创建图片生成任务 */
|
|
48
51
|
image_create(input: UserImageInput): Promise<UserImageJobCreateResult>;
|
|
49
52
|
/** 查询图片生成任务 */
|
|
@@ -69,6 +72,10 @@ export declare class AIInvoker {
|
|
|
69
72
|
* ```
|
|
70
73
|
*/
|
|
71
74
|
model(ref: UserModelRef | string): ModelHandle;
|
|
75
|
+
/** 将模型输入解析为绑定当前鉴权请求器的 CityModel。 */
|
|
76
|
+
private resolve_city_model;
|
|
77
|
+
/** 使用公开目录描述创建可执行 CityModel。 */
|
|
78
|
+
private create_city_model;
|
|
72
79
|
private post;
|
|
73
80
|
/**
|
|
74
81
|
* 解析 AI SDK / OpenAI function tool 的名称。
|
|
@@ -90,7 +97,7 @@ export declare class AIInvoker {
|
|
|
90
97
|
*/
|
|
91
98
|
export declare class ModelCatalog {
|
|
92
99
|
private readonly byId;
|
|
93
|
-
constructor(items: CityModelDescriptor[],
|
|
100
|
+
constructor(items: CityModelDescriptor[], create_model: (descriptor: CityModelDescriptor) => UserModelRef);
|
|
94
101
|
get(id: string): UserModelRef | undefined;
|
|
95
102
|
all(): UserModelRef[];
|
|
96
103
|
forModality(modality: string): UserModelRef[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 路由:/v1/ai/{modality} 和 /v1/ai/models。
|
|
5
5
|
*/
|
|
6
|
-
import { parseAIStreamBody } from "./stream.js";
|
|
7
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,17 +45,17 @@ export class AIInvoker {
|
|
|
45
45
|
body: JSON.stringify(this.input(this.serializeTools(input))),
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* 使用 CityModel 流式生成 UIMessageChunk。
|
|
50
|
+
*
|
|
51
|
+
* Federation `/v1/ai/stream` 只传输 LanguageModelV3 事件;UIMessage 转换在客户端完成。
|
|
52
|
+
*/
|
|
49
53
|
async stream(input) {
|
|
50
|
-
|
|
51
|
-
method: "POST",
|
|
52
|
-
body: JSON.stringify(this.input(this.serializeTools(input))),
|
|
53
|
-
});
|
|
54
|
-
return parseAIStreamBody(res.body);
|
|
54
|
+
return create_client_ui_stream(input, this.resolve_city_model(input.model));
|
|
55
55
|
}
|
|
56
|
-
/** 使用当前 City user
|
|
57
|
-
|
|
58
|
-
return this.reqRaw(`${PREFIX}/
|
|
56
|
+
/** 使用当前 City user 鉴权上下文调用模型流端点。 */
|
|
57
|
+
request_model_stream(request, signal) {
|
|
58
|
+
return this.reqRaw(`${PREFIX}/stream`, {
|
|
59
59
|
method: "POST",
|
|
60
60
|
body: JSON.stringify(request),
|
|
61
61
|
signal,
|
|
@@ -84,7 +84,7 @@ export class AIInvoker {
|
|
|
84
84
|
/** 获取模型目录 */
|
|
85
85
|
async listModels() {
|
|
86
86
|
const body = await this.req(`${PREFIX}/models`, { method: "GET" });
|
|
87
|
-
return new ModelCatalog(body.items, this);
|
|
87
|
+
return new ModelCatalog(body.items, (descriptor) => this.create_city_model(descriptor));
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* 获取指定模型的操作句柄。
|
|
@@ -104,6 +104,31 @@ export class AIInvoker {
|
|
|
104
104
|
}
|
|
105
105
|
return new ModelHandle(this, ref.id, ref.name, this.base_url, this.token, ref.meta);
|
|
106
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
|
+
}
|
|
107
132
|
post(path, input) {
|
|
108
133
|
return this.req(`${PREFIX}${path}`, {
|
|
109
134
|
method: "POST",
|
|
@@ -192,15 +217,12 @@ export class AIInvoker {
|
|
|
192
217
|
*/
|
|
193
218
|
export class ModelCatalog {
|
|
194
219
|
byId;
|
|
195
|
-
constructor(items,
|
|
220
|
+
constructor(items, create_model) {
|
|
196
221
|
if (!items?.length) {
|
|
197
222
|
this.byId = new Map();
|
|
198
223
|
return;
|
|
199
224
|
}
|
|
200
|
-
const enriched = items.map(
|
|
201
|
-
descriptor: item,
|
|
202
|
-
request_stream: (request, signal) => ai.language_model_stream(request, signal),
|
|
203
|
-
}));
|
|
225
|
+
const enriched = items.map(create_model);
|
|
204
226
|
this.byId = new Map(enriched.map((item) => [item.id, item]));
|
|
205
227
|
}
|
|
206
228
|
get(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pact/invoker/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,11 @@
|
|
|
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 — 查询图片生成任务
|
|
15
15
|
* - POST /v1/ai/chat/completions — OpenAI 兼容端点
|
|
16
|
-
* - POST /v1/ai/language-model/stream — CityModel 原生 LanguageModelV3 端点
|
|
17
16
|
* - GET /v1/ai/models — 模型列表
|
|
18
17
|
*/
|
|
19
18
|
import { Service } from "../service.js";
|
|
@@ -49,10 +48,10 @@ export declare class AIService extends Service {
|
|
|
49
48
|
private plan_text_execution;
|
|
50
49
|
private handleModality;
|
|
51
50
|
/**
|
|
52
|
-
* 执行 CityModel
|
|
51
|
+
* 执行 CityModel LanguageModelV3 模型流调用。
|
|
53
52
|
*
|
|
54
|
-
* 路由、fallback、reasoning 和计费仍由 AIService 统一拥有;
|
|
55
|
-
*
|
|
53
|
+
* 路由、fallback、reasoning 和计费仍由 AIService 统一拥有;Provider 负责执行
|
|
54
|
+
* 标准模型流,transport 模块只编码 SSE,避免把 Provider 决策泄漏到客户端。
|
|
56
55
|
*/
|
|
57
56
|
private handleLanguageModelStream;
|
|
58
57
|
private createImageJob;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-service.d.ts","sourceRoot":"","sources":["../../../src/service/ai/ai-service.ts"],"names":[],"mappings":"AAAA
|
|
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;AAgFpB,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAWrD,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;IAmBjB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,2BAA2B;IAmCnC,OAAO,CAAC,kBAAkB;IAU1B,kCAAkC;IAClC,OAAO,CAAC,mBAAmB;YAkBb,cAAc;IAiC5B;;;;;OAKG;YACW,yBAAyB;YA4CzB,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"}
|
|
@@ -8,12 +8,11 @@
|
|
|
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 — 查询图片生成任务
|
|
15
15
|
* - POST /v1/ai/chat/completions — OpenAI 兼容端点
|
|
16
|
-
* - POST /v1/ai/language-model/stream — CityModel 原生 LanguageModelV3 端点
|
|
17
16
|
* - GET /v1/ai/models — 模型列表
|
|
18
17
|
*/
|
|
19
18
|
import { Service } from "../service.js";
|
|
@@ -24,10 +23,10 @@ import { AIModelRegistry } from "./model-registry.js";
|
|
|
24
23
|
import { resolve_text_routing_plan } from "./model-routing.js";
|
|
25
24
|
import { claim_image_job, finish_image_job_fetch, release_image_job_claim, } from "./image-job-store.js";
|
|
26
25
|
import { settle_response_charge } from "./charge-runtime.js";
|
|
27
|
-
import { create_city_language_model_stream, decode_city_language_model_request, } from "./language-model-stream.js";
|
|
26
|
+
import { create_city_language_model_stream, decode_city_language_model_request, prepare_city_language_model_call, } from "./language-model-stream.js";
|
|
28
27
|
import { countImageOutputs, extractUsage, imageActionError, isImageProviderCreateResult, isImageProviderResult, isPromiseLike, isProviderChargedOutput, isProviderChargedResponse, isResponse, isStorableRemoteFilePart, normalizePositiveNumber, normalizeUsage, parseImageMessage, parseRecordJson, readFilePartFilename, readFilePartMediaType, readOptionalNumber, readOptionalString, rowToAsyncJobRecord, } from "./ai-service-values.js";
|
|
29
|
-
/** AIService 直接暴露的
|
|
30
|
-
const MODALITIES = ["text", "
|
|
28
|
+
/** AIService 直接暴露的 action 模态列表。模型流与图片任务使用独立 handler。 */
|
|
29
|
+
const MODALITIES = ["text", "video", "tts", "asr"];
|
|
31
30
|
/** 用户侧默认以 text 模态排序模型 */
|
|
32
31
|
const DEFAULT_MODEL_MODE = "text";
|
|
33
32
|
/** CityModel 原生 LanguageModelV3 运行模式。 */
|
|
@@ -42,14 +41,13 @@ const IMAGE_FETCH_ACTION = "image/fetch";
|
|
|
42
41
|
const DEFAULT_IMAGE_MAX_PENDING_DURATION_MS = 2 * 60 * 60 * 1000;
|
|
43
42
|
/** 图片任务 pending 超时错误。 */
|
|
44
43
|
const IMAGE_PENDING_TIMEOUT_ERROR = "upstream timeout";
|
|
45
|
-
/** 判断 Provider runtime
|
|
46
|
-
function
|
|
44
|
+
/** 判断 Provider runtime 是否返回了标准模型流结果。 */
|
|
45
|
+
function is_language_model_stream_result(value) {
|
|
47
46
|
if (!value || typeof value !== "object")
|
|
48
47
|
return false;
|
|
49
|
-
const
|
|
50
|
-
return
|
|
51
|
-
typeof
|
|
52
|
-
typeof model.doGenerate === "function";
|
|
48
|
+
const stream = value.stream;
|
|
49
|
+
return Boolean(stream && typeof stream === "object" && "getReader" in stream &&
|
|
50
|
+
typeof stream.getReader === "function");
|
|
53
51
|
}
|
|
54
52
|
export class AIService extends Service {
|
|
55
53
|
/** 模型注册表 */
|
|
@@ -70,6 +68,10 @@ export class AIService extends Service {
|
|
|
70
68
|
auth: ["user", "admin"],
|
|
71
69
|
}).before((ctx) => this.precheck(ctx));
|
|
72
70
|
}
|
|
71
|
+
// `/stream` 是 CityModel 唯一模型流入口,不经过旧 UIMessage action。
|
|
72
|
+
this.action("stream", async (ctx) => this.handleLanguageModelStream(ctx), {
|
|
73
|
+
auth: ["user", "admin"],
|
|
74
|
+
}).before((ctx) => this.precheck(ctx));
|
|
73
75
|
// 图片生成的任务式端点。SDK 通过 image_create / image_result 显式访问。
|
|
74
76
|
this.action("image/create", async (ctx) => this.createImageJob(ctx), {
|
|
75
77
|
auth: ["user", "admin"],
|
|
@@ -84,10 +86,6 @@ export class AIService extends Service {
|
|
|
84
86
|
this.action("chat/completions", async (ctx) => this.handleChatCompletions(ctx), {
|
|
85
87
|
auth: ["user", "admin"],
|
|
86
88
|
}).before((ctx) => this.precheck(ctx));
|
|
87
|
-
// CityModel 原生 LanguageModelV3 endpoint。
|
|
88
|
-
this.action("language-model/stream", async (ctx) => this.handleLanguageModelStream(ctx), {
|
|
89
|
-
auth: ["user", "admin"],
|
|
90
|
-
}).before((ctx) => this.precheck(ctx));
|
|
91
89
|
// 模型列表走同一路径,根据身份决定可见范围。
|
|
92
90
|
this.action("models", (ctx) => ({
|
|
93
91
|
items: AIService.listModels(this, {
|
|
@@ -131,7 +129,7 @@ export class AIService extends Service {
|
|
|
131
129
|
getAction(model, mode) {
|
|
132
130
|
if (mode === LANGUAGE_MODEL_MODE) {
|
|
133
131
|
return model.language_model
|
|
134
|
-
? (ctx) => model.language_model?.
|
|
132
|
+
? (ctx) => model.language_model?.stream(ctx, ctx.input.call)
|
|
135
133
|
: undefined;
|
|
136
134
|
}
|
|
137
135
|
if (mode === "image" || IMAGE_ACTION_MODES.includes(mode)) {
|
|
@@ -183,6 +181,8 @@ export class AIService extends Service {
|
|
|
183
181
|
}
|
|
184
182
|
getModelModalities(model) {
|
|
185
183
|
const modalities = Object.keys(model.actions).filter((key) => model.actions[key] !== undefined);
|
|
184
|
+
if (model.language_model && !modalities.includes("stream"))
|
|
185
|
+
modalities.push("stream");
|
|
186
186
|
if (modalities.includes("image_create") && modalities.includes("image_fetch")) {
|
|
187
187
|
modalities.push("image");
|
|
188
188
|
}
|
|
@@ -206,7 +206,7 @@ export class AIService extends Service {
|
|
|
206
206
|
async handleModality(modality, ctx) {
|
|
207
207
|
const initial_resolved = this.resolve({ model: this.normalizeModelId(ctx.input.model), mode: modality }, ctx.env);
|
|
208
208
|
const { resolved, fallback_from, fallback_reason, fallback_media_type } = this.plan_text_execution(initial_resolved, ctx, modality);
|
|
209
|
-
const reasoning = resolved.model &&
|
|
209
|
+
const reasoning = resolved.model && modality === "text"
|
|
210
210
|
? resolve_model_reasoning(resolved.model, ctx.input)
|
|
211
211
|
: undefined;
|
|
212
212
|
this.attachResolvedModel(ctx, resolved.model, modality, { fallback_from, fallback_reason, fallback_media_type });
|
|
@@ -230,16 +230,18 @@ export class AIService extends Service {
|
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
233
|
-
* 执行 CityModel
|
|
233
|
+
* 执行 CityModel LanguageModelV3 模型流调用。
|
|
234
234
|
*
|
|
235
|
-
* 路由、fallback、reasoning 和计费仍由 AIService 统一拥有;
|
|
236
|
-
*
|
|
235
|
+
* 路由、fallback、reasoning 和计费仍由 AIService 统一拥有;Provider 负责执行
|
|
236
|
+
* 标准模型流,transport 模块只编码 SSE,避免把 Provider 决策泄漏到客户端。
|
|
237
237
|
*/
|
|
238
238
|
async handleLanguageModelStream(ctx) {
|
|
239
239
|
const request = decode_city_language_model_request(ctx.input);
|
|
240
|
+
const call = prepare_city_language_model_call(request.call, ctx.request?.signal);
|
|
240
241
|
ctx.input = {
|
|
241
242
|
...ctx.input,
|
|
242
243
|
model: request.model_id,
|
|
244
|
+
call,
|
|
243
245
|
...(request.reasoning_effort ? { reasoning_effort: request.reasoning_effort } : {}),
|
|
244
246
|
};
|
|
245
247
|
const initial_resolved = this.resolve({ model: request.model_id, mode: LANGUAGE_MODEL_MODE }, ctx.env);
|
|
@@ -250,15 +252,11 @@ export class AIService extends Service {
|
|
|
250
252
|
attach_resolved_reasoning(ctx, reasoning);
|
|
251
253
|
const started_at = Date.now();
|
|
252
254
|
const output = await resolved.action(ctx);
|
|
253
|
-
if (!
|
|
254
|
-
throw httpError(500, "
|
|
255
|
+
if (!is_language_model_stream_result(output)) {
|
|
256
|
+
throw httpError(500, "Provider stream did not return a LanguageModelV3 stream result");
|
|
255
257
|
}
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
model: output,
|
|
259
|
-
call: request.call,
|
|
260
|
-
provider_options,
|
|
261
|
-
signal: ctx.request?.signal,
|
|
258
|
+
const execution = create_city_language_model_stream({
|
|
259
|
+
result: output,
|
|
262
260
|
});
|
|
263
261
|
const completion = execution.completion.then((part) => {
|
|
264
262
|
if (part)
|