(
provider_filter: Option<String>,
refresh: bool,
verbose: bool,
)
| 2863 | } |
| 2864 | |
| 2865 | async fn list_models( |
| 2866 | provider_filter: Option<String>, |
| 2867 | refresh: bool, |
| 2868 | verbose: bool, |
| 2869 | ) -> anyhow::Result<()> { |
| 2870 | if refresh { |
| 2871 | eprintln!( |
| 2872 | "Note: model cache refresh is parsed for parity, but Rust rewrite currently loads providers directly from runtime env." |
| 2873 | ); |
| 2874 | } |
| 2875 | |
| 2876 | let current_dir = std::env::current_dir()?; |
| 2877 | let config = load_config(¤t_dir)?; |
| 2878 | let registry = setup_providers(&config).await?; |
| 2879 | |
| 2880 | println!("\n╔══════════════════════════════════════════╗"); |
| 2881 | println!("║ Available Models ║"); |
| 2882 | println!("╚══════════════════════════════════════════╝\n"); |
| 2883 | |
| 2884 | let providers = registry.list(); |
| 2885 | |
| 2886 | if providers.is_empty() { |
| 2887 | println!("No providers configured. Set API keys to enable providers:"); |
| 2888 | println!(" - ANTHROPIC_API_KEY"); |
| 2889 | println!(" - OPENAI_API_KEY"); |
| 2890 | println!(" - OPENROUTER_API_KEY"); |
| 2891 | println!(" - GOOGLE_API_KEY"); |
| 2892 | println!(" - MISTRAL_API_KEY"); |
| 2893 | println!(" - GROQ_API_KEY"); |
| 2894 | println!(" - XAI_API_KEY"); |
| 2895 | println!(" - DEEPSEEK_API_KEY"); |
| 2896 | println!(" - COHERE_API_KEY"); |
| 2897 | println!(" - TOGETHER_API_KEY"); |
| 2898 | println!(" - PERPLEXITY_API_KEY"); |
| 2899 | println!(" - CEREBRAS_API_KEY"); |
| 2900 | println!(" - GOOGLE_VERTEX_API_KEY + GOOGLE_VERTEX_PROJECT_ID + GOOGLE_VERTEX_LOCATION"); |
| 2901 | println!(" - AZURE_OPENAI_API_KEY + AZURE_OPENAI_ENDPOINT"); |
| 2902 | println!(" - AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY + AWS_REGION"); |
| 2903 | return Ok(()); |
| 2904 | } |
| 2905 | |
| 2906 | for provider in providers { |
| 2907 | if let Some(ref filter) = provider_filter { |
| 2908 | if !provider.id().contains(filter.to_lowercase().as_str()) { |
| 2909 | continue; |
| 2910 | } |
| 2911 | } |
| 2912 | |
| 2913 | println!("Provider: {} ({})", provider.name(), provider.id()); |
| 2914 | println!("{}", "─".repeat(50)); |
| 2915 | |
| 2916 | let models = provider.models(); |
| 2917 | for model in models { |
| 2918 | println!(" {}", model.id); |
| 2919 | println!( |
| 2920 | " Context: {} tokens | Output: {} tokens", |
| 2921 | format_tokens(model.context_window), |
| 2922 | format_tokens(model.max_output_tokens) |
no test coverage detected