feat: add local auth billing and usage management
This commit is contained in:
1 parent
f642b5e71f
commit
196fdde83f
119 files changed
+15695
-2650
No files matched your search
@@ -26,9 +26,14 @@ export type SeedanceQueryResult = {
|
||||
status: "queued" | "running" | "succeeded" | "failed" | "cancelled";
|
||||
resultUrl?: string;
|
||||
errorMessage?: string;
|
||||
usage?: SeedanceUsage;
|
||||
raw: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type SeedanceUsage = {
|
||||
completionTokens: number;
|
||||
};
|
||||
|
||||
export function getSeedanceConfig() {
|
||||
const model = process.env.SEEDANCE_MODEL || "doubao-seedance-2-0-260128";
|
||||
return {
|
||||
@@ -107,10 +112,21 @@ export async function querySeedanceTask(providerTaskId: string): Promise<Seedanc
|
||||
json.data?.url ||
|
||||
json.data?.output,
|
||||
errorMessage: json.error?.message || json.data?.error?.message,
|
||||
usage: extractSeedanceUsage(json),
|
||||
raw: json as Record<string, unknown>
|
||||
};
|
||||
}
|
||||
|
||||
export function extractSeedanceUsage(value: unknown): SeedanceUsage | undefined {
|
||||
const root = recordValue(value);
|
||||
const data = recordValue(root?.data);
|
||||
const usage = recordValue(root?.usage) || recordValue(data?.usage);
|
||||
if (!usage) return undefined;
|
||||
const completionTokens = Number(usage.completion_tokens ?? usage.completionTokens);
|
||||
if (!Number.isFinite(completionTokens) || completionTokens <= 0) return undefined;
|
||||
return { completionTokens: Math.floor(completionTokens) };
|
||||
}
|
||||
|
||||
function normalizeSeedanceStatus(status: unknown): SeedanceQueryResult["status"] {
|
||||
const value = String(status || "").toLowerCase();
|
||||
if (["succeeded", "success", "completed"].includes(value)) return "succeeded";
|
||||
@@ -119,3 +135,9 @@ function normalizeSeedanceStatus(status: unknown): SeedanceQueryResult["status"]
|
||||
if (["running", "processing", "generating"].includes(value)) return "running";
|
||||
return "queued";
|
||||
}
|
||||
|
||||
function recordValue(value: unknown): Record<string, unknown> | undefined {
|
||||
return typeof value === "object" && value !== null && !Array.isArray(value)
|
||||
? value as Record<string, unknown>
|
||||
: undefined;
|
||||
}
|
||||
Reference in new issue
Block a user