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;
}
}