traiy_core 0.0.13

An utility to serve AI suggestions according to user-provided guidelines and (optionally) context
Documentation
//! Enums module
//!
//! This module holds several enums used through out traiy crate.

use clap::ValueEnum;
use core::fmt;
use std::fmt::{Display, Formatter};

/// Represents the type of file being processed.
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum FileType {
    /// The main input file.
    Input,
    /// The guidelines file.
    Guidelines,
    /// The context file.
    Context,
}

/// Enumerates the available Language Model Providers.
#[derive(Debug, Clone, ValueEnum, PartialEq, Default)]
pub enum LlmProvider {
    /// Google's Language Model Provider.
    #[default]
    Google,
    /// OpenIA's Language Model Provider.
    Openai,
    // In the backlog to suport more backends
}

/// Enumerates the available Language Model Providers.
#[derive(Debug, Clone, ValueEnum, PartialEq, Default)]
pub enum LlmModel {
    // NOTE: Remember to add it via crate feature
    /// Google Gemini Flash 2 Model - $0.10 / $0.70
    #[default]
    #[clap(name = "gemini-2.0-flash")]
    GeminiFlash2,
    /// Google Gemini Flash 2.5 Pro Model - $0.15 / $1.00
    #[clap(name = "gemini-2.5-flash-preview-05-20")]
    GeminiFlash25Prev,
    /// Openai 4o Mini Model - $0.15 / $0.60
    #[clap(name = "gpt-4o-mini-2024-07-18")]
    Openai4oMini,
    /// Openai 4.1 nano Model - $0.10 / $0.40
    #[clap(name = "gpt-4.1-nano-2025-04-14")]
    Openai41Nano,
}

impl Display for LlmModel {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        match self {
            LlmModel::GeminiFlash2 => write!(f, "gemini-2.0-flash"),
            LlmModel::GeminiFlash25Prev => write!(f, "gemini-2.5-flash-preview-05-20"),
            LlmModel::Openai4oMini => write!(f, "gpt-4o-mini-2024-07-18"),
            LlmModel::Openai41Nano => write!(f, "gpt-4.1-nano-2025-04-14"),
        }
    }
}