diff --git a/tests/test_ollama_base_url.py b/tests/test_ollama_base_url.py index 0ad61b4b9..6c7cbe096 100644 --- a/tests/test_ollama_base_url.py +++ b/tests/test_ollama_base_url.py @@ -154,3 +154,14 @@ def test_ollama_model_labels_no_local_suffix(): for mode in ("quick", "deep"): labels = [label for label, _ in get_model_options("ollama", mode)] assert all("local" not in label for label in labels), labels + + +def test_ollama_offers_custom_model_id(): + """Ollama users with custom-pulled models can pick 'Custom model ID'.""" + from tradingagents.llm_clients.model_catalog import get_model_options + for mode in ("quick", "deep"): + entries = get_model_options("ollama", mode) + values = [v for _, v in entries] + assert "custom" in values, f"Ollama {mode!r} missing 'custom' option: {entries}" + # Custom option is last so it doesn't push the curated defaults off-screen + assert values[-1] == "custom", f"'custom' should be last entry: {values}" diff --git a/tradingagents/llm_clients/model_catalog.py b/tradingagents/llm_clients/model_catalog.py index fdde80507..d88c0f137 100644 --- a/tradingagents/llm_clients/model_catalog.py +++ b/tradingagents/llm_clients/model_catalog.py @@ -159,16 +159,20 @@ MODEL_OPTIONS: ProviderModeOptions = { # apply whether the user runs ollama-serve on localhost or against a # remote host. The actual resolved endpoint is surfaced separately by # cli.utils.confirm_ollama_endpoint() right after provider selection. + # "Custom model ID" lets users pick any model they have pulled via + # `ollama pull` beyond the three suggested defaults. "ollama": { "quick": [ ("Qwen3:latest (8B)", "qwen3:latest"), ("GPT-OSS:latest (20B)", "gpt-oss:latest"), ("GLM-4.7-Flash:latest (30B)", "glm-4.7-flash:latest"), + ("Custom model ID", "custom"), ], "deep": [ ("GLM-4.7-Flash:latest (30B)", "glm-4.7-flash:latest"), ("GPT-OSS:latest (20B)", "gpt-oss:latest"), ("Qwen3:latest (8B)", "qwen3:latest"), + ("Custom model ID", "custom"), ], }, }