feat(chat): add local-first conversation workspace
This commit is contained in:
@@ -1,10 +1,24 @@
|
||||
import type {ResponseMetadata} from "./conversation-types";
|
||||
|
||||
export function responseMetadata(providerId: string, model: string, startedAt: number, outputTokens: number | undefined | null): ResponseMetadata {
|
||||
function normalizeTokenCount(value: unknown): number | null {
|
||||
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return Math.round(value);
|
||||
if (typeof value === "bigint" && value >= 0n) return Number(value);
|
||||
if (typeof value === "string") {
|
||||
const parsed = Number(value);
|
||||
if (Number.isFinite(parsed) && parsed >= 0) return Math.round(parsed);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function responseMetadata(
|
||||
providerId: string,
|
||||
model: string,
|
||||
startedAt: number,
|
||||
outputTokens: number | undefined | null,
|
||||
fallbackOutputTokens?: number | undefined | null
|
||||
): ResponseMetadata {
|
||||
const durationMs = Math.max(1, Math.round(performance.now() - startedAt));
|
||||
const normalizedTokens = typeof outputTokens === "number" && Number.isFinite(outputTokens) && outputTokens >= 0
|
||||
? Math.round(outputTokens)
|
||||
: null;
|
||||
const normalizedTokens = normalizeTokenCount(outputTokens) ?? normalizeTokenCount(fallbackOutputTokens);
|
||||
const tokensPerSecond = normalizedTokens === null
|
||||
? null
|
||||
: Math.round((normalizedTokens / (durationMs / 1000)) * 10) / 10;
|
||||
|
||||
Reference in New Issue
Block a user