66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
using System.Text.Json.Serialization;
|
|
using MarketAlly.AIPlugin;
|
|
using MarketAlly.AIPlugin.Conversation;
|
|
|
|
namespace MarketAlly.GitCommitEditor.Options;
|
|
|
|
/// <summary>
|
|
/// Model information for display in settings UI
|
|
/// </summary>
|
|
public sealed class ModelDisplayInfo
|
|
{
|
|
public string ModelId { get; init; } = string.Empty;
|
|
public string DisplayName { get; init; } = string.Empty;
|
|
public string Tier { get; init; } = string.Empty;
|
|
public decimal InputCostPer1MTokens { get; init; }
|
|
public decimal OutputCostPer1MTokens { get; init; }
|
|
public string Speed { get; init; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Formatted display string for picker: "DisplayName (Tier) - $X.XX/1M"
|
|
/// </summary>
|
|
public string FormattedDisplay => $"{DisplayName} ({Tier}) - ${InputCostPer1MTokens:F2}/1M in";
|
|
|
|
public override string ToString() => FormattedDisplay;
|
|
}
|
|
|
|
/// <summary>
|
|
/// AI configuration options.
|
|
/// For provider/model discovery, use IModelProviderService instead of static methods.
|
|
/// </summary>
|
|
public sealed class AiOptions
|
|
{
|
|
[JsonIgnore]
|
|
public string ApiKey { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// AI Provider: Claude, OpenAI, Gemini, Qwen
|
|
/// </summary>
|
|
public string Provider { get; set; } = "Claude";
|
|
|
|
/// <summary>
|
|
/// Model name specific to the provider
|
|
/// </summary>
|
|
public string Model { get; set; } = ModelConstants.Claude.Sonnet4;
|
|
|
|
public bool IncludeDiffContext { get; set; } = true;
|
|
public int MaxDiffLines { get; set; } = 200;
|
|
public int MaxTokens { get; set; } = 500;
|
|
public int RateLimitDelayMs { get; set; } = 500;
|
|
|
|
/// <summary>
|
|
/// Parses a provider string to AIProvider enum.
|
|
/// </summary>
|
|
public static AIProvider ParseProvider(string? provider)
|
|
{
|
|
return provider?.ToLowerInvariant() switch
|
|
{
|
|
"claude" or "anthropic" => AIProvider.Claude,
|
|
"openai" or "gpt" => AIProvider.OpenAI,
|
|
"gemini" or "google" => AIProvider.Gemini,
|
|
"qwen" or "alibaba" => AIProvider.Qwen,
|
|
_ => AIProvider.Claude
|
|
};
|
|
}
|
|
}
|