llmrouter: Anthropic-Messages-Pfad (/messages, count_tokens) für Claude Code
Weiterleitung an OpenRouters Messages-Endpunkt (x-api-key, anthropic-version, anthropic-beta), Effort als reasoning.effort, Usage in Anthropic-Form gelesen (auch im Stream aus message_start/message_delta). Nur openrouter-Ziele; lokale llama-server sprechen kein Messages-Format. Verifiziert: claude -p über http://llm.lan:4010 mit alt/anthropic/claude-sonnet-5 -> glm-5.3-flash. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+8
-4
@@ -63,11 +63,15 @@ export class Log {
|
||||
|
||||
/** Zieht Tokens und Kosten aus einer OpenAI-/OpenRouter-Usage. */
|
||||
export function usageLesen(u: unknown): Pick<Eintrag, "prompt_tokens" | "completion_tokens" | "cached_tokens" | "cost"> {
|
||||
const usage = (u ?? {}) as { prompt_tokens?: number; completion_tokens?: number; cost?: number; prompt_tokens_details?: { cached_tokens?: number } };
|
||||
// OpenAI-Form (prompt_tokens/completion_tokens) und Anthropic-Form (input_tokens/output_tokens)
|
||||
const usage = (u ?? {}) as {
|
||||
prompt_tokens?: number; completion_tokens?: number; cost?: number; prompt_tokens_details?: { cached_tokens?: number };
|
||||
input_tokens?: number; output_tokens?: number; cache_read_input_tokens?: number;
|
||||
};
|
||||
return {
|
||||
prompt_tokens: usage.prompt_tokens ?? null,
|
||||
completion_tokens: usage.completion_tokens ?? null,
|
||||
cached_tokens: usage.prompt_tokens_details?.cached_tokens ?? null,
|
||||
prompt_tokens: usage.prompt_tokens ?? usage.input_tokens ?? null,
|
||||
completion_tokens: usage.completion_tokens ?? usage.output_tokens ?? null,
|
||||
cached_tokens: usage.prompt_tokens_details?.cached_tokens ?? usage.cache_read_input_tokens ?? null,
|
||||
cost: typeof usage.cost === "number" ? usage.cost : null,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user