ggen_cli_lib/cmds/ai/
models.rs1use clap::Args;
4use genai::adapter::AdapterKind;
5use genai::Client;
6use ggen_utils::error::Result;
7
8#[derive(Debug, Args)]
9pub struct ModelsArgs {
10 #[arg(short, long)]
12 pub adapter: Option<String>,
13}
14
15pub async fn run(args: &ModelsArgs) -> Result<()> {
16 println!("Listing available AI models...");
17
18 let client = Client::default();
19
20 let adapters = if let Some(adapter_name) = &args.adapter {
21 match adapter_name.as_str() {
22 "openai" => vec![AdapterKind::OpenAI],
23 "ollama" => vec![AdapterKind::Ollama],
24 "anthropic" => vec![AdapterKind::Anthropic],
25 "gemini" => vec![AdapterKind::Gemini],
26 "groq" => vec![AdapterKind::Groq],
27 "cohere" => vec![AdapterKind::Cohere],
28 _ => {
29 println!("Unknown adapter: {}. Available: openai, ollama, anthropic, gemini, groq, cohere", adapter_name);
30 return Ok(());
31 }
32 }
33 } else {
34 vec![
35 AdapterKind::OpenAI,
36 AdapterKind::Ollama,
37 AdapterKind::Anthropic,
38 AdapterKind::Gemini,
39 AdapterKind::Groq,
40 AdapterKind::Cohere,
41 ]
42 };
43
44 for adapter in adapters {
45 println!("--- Models for {:?}", adapter);
46 match client.all_model_names(adapter).await {
47 Ok(models) => {
48 for model in models {
49 println!(" - {}", model);
50 }
51 }
52 Err(e) => {
53 println!(" Error fetching models: {}", e);
54 }
55 }
56 }
57
58 Ok(())
59}