Skip to content

Commit 6738781

Browse files
committed
refactor: dedupe preview streaming helpers
1 parent 8ae6cf3 commit 6738781

3 files changed

Lines changed: 47 additions & 93 deletions

File tree

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,12 @@
1-
import { getChannelStreamingConfigObject } from "openclaw/plugin-sdk/channel-streaming";
1+
import { resolveChannelPreviewStreamMode } from "openclaw/plugin-sdk/channel-streaming";
22

33
export type DiscordPreviewStreamMode = "off" | "partial" | "block";
44

5-
function normalizeStreamingMode(value: unknown): string | null {
6-
if (typeof value !== "string") {
7-
return null;
8-
}
9-
const normalized = value.trim().toLowerCase();
10-
return normalized || null;
11-
}
12-
13-
function parseStreamingMode(value: unknown): "off" | "partial" | "block" | "progress" | null {
14-
const normalized = normalizeStreamingMode(value);
15-
if (
16-
normalized === "off" ||
17-
normalized === "partial" ||
18-
normalized === "block" ||
19-
normalized === "progress"
20-
) {
21-
return normalized;
22-
}
23-
return null;
24-
}
25-
26-
function parseDiscordPreviewStreamMode(value: unknown): DiscordPreviewStreamMode | null {
27-
const parsed = parseStreamingMode(value);
28-
if (!parsed) {
29-
return null;
30-
}
31-
return parsed === "progress" ? "partial" : parsed;
32-
}
33-
345
export function resolveDiscordPreviewStreamMode(
356
params: {
367
streamMode?: unknown;
378
streaming?: unknown;
389
} = {},
3910
): DiscordPreviewStreamMode {
40-
const parsedStreaming = parseDiscordPreviewStreamMode(
41-
getChannelStreamingConfigObject(params)?.mode ?? params.streaming,
42-
);
43-
if (parsedStreaming) {
44-
return parsedStreaming;
45-
}
46-
47-
const legacy = parseDiscordPreviewStreamMode(params.streamMode);
48-
if (legacy) {
49-
return legacy;
50-
}
51-
if (typeof params.streaming === "boolean") {
52-
return params.streaming ? "partial" : "off";
53-
}
54-
return "off";
11+
return resolveChannelPreviewStreamMode(params, "off");
5512
}
Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,12 @@
1-
import { getChannelStreamingConfigObject } from "openclaw/plugin-sdk/channel-streaming";
1+
import { resolveChannelPreviewStreamMode } from "openclaw/plugin-sdk/channel-streaming";
22

33
export type TelegramPreviewStreamMode = "off" | "partial" | "block";
44

5-
function normalizeStreamingMode(value: unknown): string | null {
6-
if (typeof value !== "string") {
7-
return null;
8-
}
9-
const normalized = value.trim().toLowerCase();
10-
return normalized || null;
11-
}
12-
13-
function parseStreamingMode(value: unknown): "off" | "partial" | "block" | "progress" | null {
14-
const normalized = normalizeStreamingMode(value);
15-
if (
16-
normalized === "off" ||
17-
normalized === "partial" ||
18-
normalized === "block" ||
19-
normalized === "progress"
20-
) {
21-
return normalized;
22-
}
23-
return null;
24-
}
25-
26-
function parseTelegramPreviewStreamMode(value: unknown): TelegramPreviewStreamMode | null {
27-
const parsed = parseStreamingMode(value);
28-
if (!parsed) {
29-
return null;
30-
}
31-
return parsed === "progress" ? "partial" : parsed;
32-
}
33-
345
export function resolveTelegramPreviewStreamMode(
356
params: {
367
streamMode?: unknown;
378
streaming?: unknown;
389
} = {},
3910
): TelegramPreviewStreamMode {
40-
const parsedStreaming = parseStreamingMode(
41-
getChannelStreamingConfigObject(params)?.mode ?? params.streaming,
42-
);
43-
if (parsedStreaming) {
44-
if (parsedStreaming === "progress") {
45-
return "partial";
46-
}
47-
return parsedStreaming;
48-
}
49-
50-
const legacy = parseTelegramPreviewStreamMode(params.streamMode);
51-
if (legacy) {
52-
return legacy;
53-
}
54-
if (typeof params.streaming === "boolean") {
55-
return params.streaming ? "partial" : "off";
56-
}
57-
return "partial";
11+
return resolveChannelPreviewStreamMode(params, "partial");
5812
}

src/plugin-sdk/channel-streaming.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export type {
2121

2222
type StreamingCompatEntry = {
2323
streaming?: unknown;
24+
streamMode?: unknown;
2425
chunkMode?: unknown;
2526
blockStreaming?: unknown;
2627
draftChunk?: unknown;
@@ -42,6 +43,27 @@ function asBoolean(value: unknown): boolean | undefined {
4243
return typeof value === "boolean" ? value : undefined;
4344
}
4445

46+
function normalizeStreamingMode(value: unknown): string | null {
47+
if (typeof value !== "string") {
48+
return null;
49+
}
50+
const normalized = value.trim().toLowerCase();
51+
return normalized || null;
52+
}
53+
54+
function parsePreviewStreamingMode(value: unknown): "off" | "partial" | "block" | null {
55+
const normalized = normalizeStreamingMode(value);
56+
if (
57+
normalized === "off" ||
58+
normalized === "partial" ||
59+
normalized === "block" ||
60+
normalized === "progress"
61+
) {
62+
return normalized === "progress" ? "partial" : normalized;
63+
}
64+
return null;
65+
}
66+
4567
function asBlockStreamingCoalesceConfig(value: unknown): BlockStreamingCoalesceConfig | undefined {
4668
return asObjectRecord(value) as BlockStreamingCoalesceConfig | undefined;
4769
}
@@ -99,3 +121,24 @@ export function resolveChannelStreamingNativeTransport(
99121
const config = getChannelStreamingConfigObject(entry);
100122
return asBoolean(config?.nativeTransport) ?? asBoolean(entry?.nativeStreaming);
101123
}
124+
125+
export function resolveChannelPreviewStreamMode(
126+
entry: StreamingCompatEntry | null | undefined,
127+
defaultMode: "off" | "partial",
128+
): "off" | "partial" | "block" {
129+
const parsedStreaming = parsePreviewStreamingMode(
130+
getChannelStreamingConfigObject(entry)?.mode ?? entry?.streaming,
131+
);
132+
if (parsedStreaming) {
133+
return parsedStreaming;
134+
}
135+
136+
const legacy = parsePreviewStreamingMode(entry?.streamMode);
137+
if (legacy) {
138+
return legacy;
139+
}
140+
if (typeof entry?.streaming === "boolean") {
141+
return entry.streaming ? "partial" : "off";
142+
}
143+
return defaultMode;
144+
}

0 commit comments

Comments
 (0)