mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 23:08:28 +00:00
refactor: centralize typing mode signals
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { TypingMode } from "../../config/types.js";
|
||||
import type { TypingController } from "./typing.js";
|
||||
|
||||
export type TypingModeContext = {
|
||||
configured?: TypingMode;
|
||||
@@ -21,5 +22,56 @@ export function resolveTypingMode({
|
||||
return DEFAULT_GROUP_TYPING_MODE;
|
||||
}
|
||||
|
||||
export const shouldStartTypingImmediately = (mode: TypingMode) =>
|
||||
mode === "instant";
|
||||
export type TypingSignaler = {
|
||||
mode: TypingMode;
|
||||
shouldStartImmediately: boolean;
|
||||
shouldStartOnText: boolean;
|
||||
shouldStartOnReasoning: boolean;
|
||||
signalRunStart: () => Promise<void>;
|
||||
signalTextDelta: (text?: string) => Promise<void>;
|
||||
signalReasoningDelta: () => Promise<void>;
|
||||
};
|
||||
|
||||
export function createTypingSignaler(params: {
|
||||
typing: TypingController;
|
||||
mode: TypingMode;
|
||||
isHeartbeat: boolean;
|
||||
}): TypingSignaler {
|
||||
const { typing, mode, isHeartbeat } = params;
|
||||
const shouldStartImmediately = mode === "instant";
|
||||
const shouldStartOnText = mode === "message" || mode === "instant";
|
||||
const shouldStartOnReasoning = mode === "thinking";
|
||||
const disabled = isHeartbeat || mode === "never";
|
||||
|
||||
const signalRunStart = async () => {
|
||||
if (disabled || !shouldStartImmediately) return;
|
||||
await typing.startTypingLoop();
|
||||
};
|
||||
|
||||
const signalTextDelta = async (text?: string) => {
|
||||
if (disabled) return;
|
||||
if (shouldStartOnText) {
|
||||
await typing.startTypingOnText(text);
|
||||
return;
|
||||
}
|
||||
if (shouldStartOnReasoning) {
|
||||
typing.refreshTypingTtl();
|
||||
}
|
||||
};
|
||||
|
||||
const signalReasoningDelta = async () => {
|
||||
if (disabled || !shouldStartOnReasoning) return;
|
||||
await typing.startTypingLoop();
|
||||
typing.refreshTypingTtl();
|
||||
};
|
||||
|
||||
return {
|
||||
mode,
|
||||
shouldStartImmediately,
|
||||
shouldStartOnText,
|
||||
shouldStartOnReasoning,
|
||||
signalRunStart,
|
||||
signalTextDelta,
|
||||
signalReasoningDelta,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user