fix(agent): smooth Chinese stream chunks
This commit is contained in:
@@ -22,6 +22,21 @@ const optionalString = () =>
|
||||
z.string().optional(),
|
||||
);
|
||||
|
||||
const optionalBoolean = (defaultValue: boolean) =>
|
||||
z.preprocess((value) => {
|
||||
if (typeof value !== "string") {
|
||||
return value;
|
||||
}
|
||||
const normalized = value.trim().toLowerCase();
|
||||
if (["1", "true", "yes", "on"].includes(normalized)) {
|
||||
return true;
|
||||
}
|
||||
if (["0", "false", "no", "off"].includes(normalized)) {
|
||||
return false;
|
||||
}
|
||||
return value;
|
||||
}, z.boolean().default(defaultValue));
|
||||
|
||||
// 统一在启动时解析环境变量,避免业务代码里散落字符串默认值。
|
||||
const envSchema = z
|
||||
.object({
|
||||
@@ -51,6 +66,16 @@ const envSchema = z
|
||||
OPENCODE_MODEL: z.string().default("deepseek/deepseek-v4-flash"),
|
||||
// 聊天 UI 和 /stream 允许选择的 opencode 模型完整配置,JSON 数组。
|
||||
OPENCODE_MODEL_OPTIONS: z.string().default(defaultAgentModelOptionsJson),
|
||||
// 平滑 token 输出,避免上游模型大块/抖动 token 直接传到前端。
|
||||
AGENT_TOKEN_SMOOTHING_ENABLED: optionalBoolean(true),
|
||||
// 平滑输出每段之间的间隔(毫秒)。
|
||||
AGENT_TOKEN_SMOOTHING_DELAY_MS: z.coerce
|
||||
.number()
|
||||
.int()
|
||||
.min(0)
|
||||
.default(20),
|
||||
// 平滑输出分词 locale,中文默认使用 zh。
|
||||
AGENT_TOKEN_SMOOTHING_LOCALE: z.string().default("zh"),
|
||||
// opencode skills 树目录;会在运行时解析为绝对路径,避免工具 cwd 偏移。
|
||||
OPENCODE_SKILLS_ROOT_DIR: z.string().default("./.opencode/skills"),
|
||||
// client 模式下,目标 opencode server 的基础地址。
|
||||
|
||||
Reference in New Issue
Block a user