namespace BotSharp.Abstraction.MLTasks.Settings;
public class LlmModelSetting
{
///
/// Model Id, like "gpt-4", "gpt-4o", "o1".
///
public string Id { get; set; } = null!;
///
/// Deployment model name
///
public string Name { get; set; } = null!;
///
/// Model version
///
public string Version { get; set; } = "1106-Preview";
///
/// Api version
///
public string? ApiVersion { get; set; }
///
/// Deployment same functional model in a group.
/// It can be used to deploy same model in different regions.
///
public string? Group { get; set; }
public string ApiKey { get; set; } = null!;
public string? Endpoint { get; set; }
public LlmModelType Type { get; set; } = LlmModelType.Chat;
///
/// If true, allow sending images/vidoes to this model
///
public bool MultiModal { get; set; }
///
/// If true, allow generating images
///
public bool ImageGeneration { get; set; }
///
/// Settings for embedding
///
public EmbeddingSetting? Embedding { get; set; }
///
/// Settings for reasoning model
///
public ReasoningSetting? Reasoning { get; set; }
///
/// Settings for web search
///
public WebSearchSetting? WebSearch { get; set; }
///
/// Settings for images
///
public ImageSetting? Image { get; set; }
///
/// Settings for llm cost
///
public LlmCostSetting Cost { get; set; } = new();
public override string ToString()
{
return $"[{Type}] {Name} {Endpoint}";
}
}
#region Embedding model settings
public class EmbeddingSetting
{
public bool IsDefault { get; set; }
public int Dimension { get; set; }
}
#endregion
#region Reasoning model settings
public class ReasoningSetting
{
public bool IsDefault { get; set; }
public float Temperature { get; set; } = 1.0f;
public string? EffortLevel { get; set; }
}
#endregion
#region Web search model settings
public class WebSearchSetting
{
public bool IsDefault { get; set; }
public string? SearchContextSize { get; set; }
}
#endregion
#region Image model settings
public class ImageSetting
{
public ImageReadSetting? Reading { get; set; }
public ImageGenerationSetting? Generation { get; set; }
public ImageEditSetting? Edit { get; set; }
public ImageVariationSetting? Variation { get; set; }
}
public class ImageReadSetting
{
public bool IsDefault { get; set; }
public string? ImageDetailLevel { get; set; }
}
public class ImageGenerationSetting
{
public bool IsDefault { get; set; }
public ModelSettingBase? Style { get; set; }
public ModelSettingBase? Size { get; set; }
public ModelSettingBase? Quality { get; set; }
public ModelSettingBase? ResponseFormat { get; set; }
}
public class ImageEditSetting
{
public bool IsDefault { get; set; }
public ModelSettingBase? Size { get; set; }
public ModelSettingBase? ResponseFormat { get; set; }
}
public class ImageVariationSetting
{
public bool IsDefault { get; set; }
public ModelSettingBase? Size { get; set; }
public ModelSettingBase? ResponseFormat { get; set; }
}
#endregion
public class ModelSettingBase
{
public string? Default { get; set; }
public IEnumerable? Options { get; set; }
}
///
/// Cost per 1K tokens
///
public class LlmCostSetting
{
// Input
public float TextInputCost { get; set; } = 0f;
public float CachedTextInputCost { get; set; } = 0f;
public float AudioInputCost { get; set; } = 0f;
public float CachedAudioInputCost { get; set; } = 0f;
// Output
public float TextOutputCost { get; set; } = 0f;
public float AudioOutputCost { get; set; } = 0f;
}
public enum LlmModelType
{
Text = 1,
Chat = 2,
Image = 3,
Embedding = 4,
Audio = 5,
Realtime = 6,
}