commit_gpt/
data.rs

1use clap::{Parser, ValueEnum};
2
3#[derive(Parser, Debug)]
4#[command(author, version, about, long_about = None)]
5pub struct Args {
6    /// The prompt to use when generating the commit message.
7    #[arg(
8    short,
9    long,
10    default_value = "Generate a Git commit message based on the following diff:"
11    )]
12    pub prompt: String,
13
14    /// Which GPT model to use.
15    #[arg(short, long, value_enum, default_value_t = Model::GPT4)]
16    pub model: Model,
17
18    /// The maximum amount of tokens to generate. Tokens as pieces of words, where 1,000 tokens is about 750 words.
19    #[arg(short, long, default_value_t = 512)]
20    pub tokens: u16,
21}
22
23#[derive(ValueEnum, Clone, Debug)]
24pub enum Model {
25    GPT4,
26    GPT35,
27}
28
29impl Model {
30    pub fn model_str(&self) -> String {
31        match self {
32            Model::GPT4 => String::from("gpt-4"),
33            Model::GPT35 => String::from("gpt-3.5-turbo"),
34        }
35    }
36
37    pub fn max_tokens(&self) -> usize {
38        match self {
39            Model::GPT4 => 8192,
40            Model::GPT35 => 4096
41        }
42    }
43}