mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
54 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
}
|