fix(usage): record exact embedding tokens

This commit is contained in:
zie
2026-07-23 16:07:57 +07:00
committed by decolua
parent 57b3b2c175
commit c85a5c57ba
3 changed files with 117 additions and 1 deletions
+25 -1
View File
@@ -12,6 +12,16 @@ import { errorResponse, unavailableResponse } from "open-sse/utils/error.js";
import { HTTP_STATUS } from "open-sse/config/runtimeConfig.js";
import * as log from "../utils/logger.js";
import { updateProviderCredentials, checkAndRefreshToken } from "../services/tokenRefresh.js";
import { saveRequestUsage } from "@/lib/usageDb.js";
function exactEmbeddingUsage(raw) {
if (!raw || typeof raw !== "object" || Array.isArray(raw) || raw.estimated === true) return null;
const promptTokens = raw.prompt_tokens ?? raw.input_tokens;
const completionTokens = raw.completion_tokens ?? raw.output_tokens ?? 0;
const totalTokens = raw.total_tokens;
if (!Number.isSafeInteger(promptTokens) || promptTokens <= 0 || completionTokens !== 0 || totalTokens !== promptTokens) return null;
return { prompt_tokens: promptTokens, completion_tokens: 0, total_tokens: totalTokens };
}
/**
* Handle embeddings request for the SSE/Next.js server.
@@ -124,7 +134,21 @@ export async function handleEmbeddings(request) {
}
});
if (result.success) return result.response;
if (result.success) {
const usage = exactEmbeddingUsage(result.usage);
if (usage) {
saveRequestUsage({
provider,
model,
connectionId: credentials.connectionId,
apiKey,
endpoint: url.pathname,
tokens: usage,
status: "success",
}).catch(() => {});
}
return result.response;
}
const { shouldFallback } = await markAccountUnavailable(credentials.connectionId, result.status, result.error, provider, model);