Files
openclaw/src/agents/stream-message-shared.ts

54 lines
1.3 KiB
TypeScript

import type { AssistantMessage, StopReason, Usage } from "@mariozechner/pi-ai";
export type StreamModelDescriptor = {
api: string;
provider: string;
id: string;
};
export function buildZeroUsage(): Usage {
return {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 0,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
};
}
export function buildAssistantMessageWithZeroUsage(params: {
model: StreamModelDescriptor;
content: AssistantMessage["content"];
stopReason: StopReason;
timestamp?: number;
}): AssistantMessage {
return {
role: "assistant",
content: params.content,
stopReason: params.stopReason,
api: params.model.api,
provider: params.model.provider,
model: params.model.id,
usage: buildZeroUsage(),
timestamp: params.timestamp ?? Date.now(),
};
}
export function buildStreamErrorAssistantMessage(params: {
model: StreamModelDescriptor;
errorMessage: string;
timestamp?: number;
}): AssistantMessage & { stopReason: "error"; errorMessage: string } {
return {
...buildAssistantMessageWithZeroUsage({
model: params.model,
content: [],
stopReason: "error",
timestamp: params.timestamp,
}),
stopReason: "error",
errorMessage: params.errorMessage,
};
}