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 buildUsageWithNoCost(params: {
input?: number;
output?: number;
cacheRead?: number;
cacheWrite?: number;
totalTokens?: number;
}): Usage {
const input = params.input ?? 0 ;
const output = params.output ?? 0 ;
const cacheRead = params.cacheRead ?? 0 ;
const cacheWrite = params.cacheWrite ?? 0 ;
return {
input,
output,
cacheRead,
cacheWrite,
totalTokens: params.totalTokens ?? input + output,
cost: { input: 0 , output: 0 , cacheRead: 0 , cacheWrite: 0 , total: 0 },
};
}
export function buildAssistantMessage(params: {
model: StreamModelDescriptor;
content: AssistantMessage["content" ];
stopReason: StopReason;
usage: Usage;
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: params.usage,
timestamp: params.timestamp ?? Date.now(),
};
}
export function buildAssistantMessageWithZeroUsage(params: {
model: StreamModelDescriptor;
content: AssistantMessage["content" ];
stopReason: StopReason;
timestamp?: number;
}): AssistantMessage {
return buildAssistantMessage({
model: params.model,
content: params.content,
stopReason: params.stopReason,
usage: buildZeroUsage(),
timestamp: params.timestamp,
});
}
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,
};
}
Messung V0.5 in Prozent C=100 H=97 G=98
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland