diff --git a/g4f/models.py b/g4f/models.py index fb310982e38..7704f977191 100644 --- a/g4f/models.py +++ b/g4f/models.py @@ -619,22 +619,167 @@ class VisionModel(Model): class ModelUtils: """ Utility class for mapping string identifiers to Model instances. + + Attributes: + convert (dict[str, Model]): Dictionary mapping model string identifiers to Model instances. """ - @staticmethod - def _get_all_models(): - # Get all variables from global scope - global_vars = globals() - # Filter only Model instances and exclude unnamed models - models = { - name: var for name, var in global_vars.items() - if isinstance(var, Model) and not name.startswith('_') and var.name - } - return models - - convert: dict[str, Model] = { - model.name: model # Automatically map model.name to model - for model in _get_all_models().values() if model.name # Ensure name is not empty - } + convert: dict[str, Model] = { + ############ + ### Text ### + ############ + + ### OpenAI ### + # gpt-3 + 'gpt-3': gpt_35_turbo, + + # gpt-3.5 + gpt_35_turbo.name: gpt_35_turbo, + + # gpt-4 + gpt_4.name: gpt_4, + + # gpt-4o + gpt_4o.name: gpt_4o, + gpt_4o_mini.name: gpt_4o_mini, + + # o1 + o1.name: o1, + o1_preview.name: o1_preview, + o1_mini.name: o1_mini, + + ### Meta ### + meta.name: meta, + + # llama-2 + llama_2_7b.name: llama_2_7b, + + # llama-3 + llama_3_8b.name: llama_3_8b, + llama_3_70b.name: llama_3_70b, + + # llama-3.1 + llama_3_1_8b.name: llama_3_1_8b, + llama_3_1_70b.name: llama_3_1_70b, + llama_3_1_405b.name: llama_3_1_405b, + + # llama-3.2 + llama_3_2_1b.name: llama_3_2_1b, + llama_3_2_11b.name: llama_3_2_11b, + llama_3_2_70b.name: llama_3_2_70b, + llama_3_2_90b.name: llama_3_2_90b, + + # llama-3.3 + llama_3_3_70b.name: llama_3_3_70b, + + ### Mistral ### + mixtral_7b.name: mixtral_7b, + mixtral_8x7b.name: mixtral_8x7b, + mistral_nemo.name: mistral_nemo, + + ### NousResearch ### + hermes_2_dpo.name: hermes_2_dpo, + hermes_3.name: hermes_3, + + ### Microsoft ### + # phi + phi_3_5_mini.name: phi_3_5_mini, + + # wizardlm + wizardlm_2_7b.name: wizardlm_2_7b, + wizardlm_2_8x22b.name: wizardlm_2_8x22b, + + ### Google ### + ### Gemini + gemini.name: gemini, + gemini_exp.name: gemini_exp, + gemini_1_5_pro.name: gemini_1_5_pro, + gemini_1_5_flash.name: gemini_1_5_flash, + gemini_2_0_flash.name: gemini_2_0_flash, + gemini_2_0_flash_thinking.name: gemini_2_0_flash_thinking, + ### Gemma + gemma_2_27b.name: gemma_2_27b, + + ### Anthropic ### + # claude 3 + claude_3_opus.name: claude_3_opus, + claude_3_sonnet.name: claude_3_sonnet, + claude_3_haiku.name: claude_3_haiku, + + # claude 3.5 + claude_3_5_sonnet.name: claude_3_5_sonnet, + + ### Reka AI ### + reka_core.name: reka_core, + + ### Blackbox AI ### + blackboxai.name: blackboxai, + blackboxai_pro.name: blackboxai_pro, + + ### CohereForAI ### + command_r.name: command_r, + command_r_plus.name: command_r_plus, + command_r7b.name: command_r7b, + + ### GigaChat ### + gigachat.name: gigachat, + + ### Qwen ### + qwen_1_5_7b.name: qwen_1_5_7b, + qwen_2_72b.name: qwen_2_72b, + qwen_2_vl_7b.name: qwen_2_vl_7b, + qwen_2_5_72b.name: qwen_2_5_72b, + qwen_2_5_coder_32b.name: qwen_2_5_coder_32b, + qwen_2_5_1m.name: qwen_2_5_1m, + + # qwq/qvq + qwq_32b.name: qwq_32b, + qvq_72b.name: qvq_72b, + + ### Inflection ### + pi.name: pi, + + ### x.ai ### + grok_2.name: grok_2, + + ### Perplexity AI ### + sonar.name: sonar, + sonar_pro.name: sonar_pro, + sonar_reasoning.name: sonar_reasoning, + + ### DeepSeek ### + deepseek_chat.name: deepseek_chat, + deepseek_v3.name: deepseek_v3, + deepseek_r1.name: deepseek_r1, + + nemotron_70b.name: nemotron_70b, ### Nvidia ### + dbrx_instruct.name: dbrx_instruct, ### Databricks ### + p1.name: p1, ### PollinationsAI ### + cably_80b.name: cably_80b, ### CablyAI ### + glm_4.name: glm_4, ### THUDM ### + mini_max.name: mini_max, ## MiniMax + evil.name: evil, ### Uncensored AI ### + + ############# + ### Image ### + ############# + + ### Stability AI ### + sdxl_turbo.name: sdxl_turbo, + sd_3_5.name: sd_3_5, + + ### Flux AI ### + flux.name: flux, + flux_pro.name: flux_pro, + flux_dev.name: flux_dev, + flux_schnell.name: flux_schnell, + + ### OpenAI ### + dall_e_3.name: dall_e_3, + + ### Midjourney ### + midjourney.name: midjourney, + } + demo_models = { gpt_4o.name: [gpt_4o, [PollinationsAI, Blackbox]],