namespace ClawdDotNet.Core.Api.Models; /// /// Repräsentiert ein verfügbares LLM-Modell von OpenRouter. /// public sealed class ModelInfo { /// OpenRouter Modell-ID (z.B. "anthropic/claude-sonnet-4-5") public string Id { get; set; } = ""; /// Anzeigename des Modells public string Name { get; set; } = ""; /// /// Preise laut OpenRouter. Null, wenn der Endpunkt für dieses Modell keine /// Angaben liefert — dann darf keine Kostenschätzung vorgetäuscht werden. /// public ModelPricing? Pricing { get; set; } public override string ToString() => Id; } /// /// Preise pro einer Million Token. OpenRouter liefert sie im /models-Endpunkt als /// Preis pro einzelnem Token in Textform. /// public sealed record ModelPricing(decimal InputPer1M, decimal OutputPer1M) { /// /// Wandelt eine OpenRouter-Preisangabe ("0.000003" pro Token) in den Preis pro /// einer Million Token um. Gibt null zurück, wenn der Wert unbrauchbar ist. /// public static decimal? ParsePerToken(string? value) { if (string.IsNullOrWhiteSpace(value)) return null; if (!decimal.TryParse(value, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var perToken)) { return null; } return perToken < 0 ? null : perToken * 1_000_000m; } }