1717 AnswerKeys ,
1818 ComponentNames ,
1919 Messages ,
20+ OllamaMode ,
2021 StorageBackends ,
2122)
2223from ..core .components import COMPONENTS , CORE_COMPONENTS , ComponentSpec , ComponentType
3738# Global variable to store skip LLM sync selection for template generation
3839_skip_llm_sync_selection : dict [str , bool ] = {}
3940
41+ # Global variable to store Ollama mode selection for template generation
42+ _ollama_mode_selection : dict [str , str ] = {}
43+
4044# Global variable to store database engine selection for template generation
4145_database_engine_selection : str | None = None
4246
@@ -437,6 +441,37 @@ def clear_skip_llm_sync_selection() -> None:
437441 _skip_llm_sync_selection .clear ()
438442
439443
444+ def get_ollama_mode_selection (service_name : str = "ai" ) -> str :
445+ """
446+ Get Ollama mode selection from interactive session.
447+
448+ Args:
449+ service_name: Name of the AI service (defaults to "ai")
450+
451+ Returns:
452+ Selected Ollama mode (host, docker, or none)
453+ """
454+ return _ollama_mode_selection .get (service_name , OllamaMode .NONE )
455+
456+
457+ def set_ollama_mode_selection (service_name : str , mode : str ) -> None :
458+ """
459+ Set Ollama mode selection.
460+
461+ Args:
462+ service_name: Name of the AI service (defaults to "ai")
463+ mode: Ollama mode (host, docker, or none)
464+ """
465+ global _ollama_mode_selection
466+ _ollama_mode_selection [service_name ] = mode
467+
468+
469+ def clear_ollama_mode_selection () -> None :
470+ """Clear stored Ollama mode selection (useful for testing)."""
471+ global _ollama_mode_selection
472+ _ollama_mode_selection .clear ()
473+
474+
440475def set_ai_service_config (
441476 service_name : str = "ai" ,
442477 framework : str | None = None ,
@@ -455,13 +490,17 @@ def set_ai_service_config(
455490 providers: List of AI providers
456491 """
457492 global _ai_framework_selection , _ai_backend_selection , _ai_provider_selection
493+ global _ollama_mode_selection
458494
459495 if framework is not None :
460496 _ai_framework_selection [service_name ] = framework
461497 if backend is not None :
462498 _ai_backend_selection [service_name ] = backend
463499 if providers is not None :
464500 _ai_provider_selection [service_name ] = providers
501+ # Auto-set ollama_mode to "host" when ollama is a provider (non-interactive default)
502+ if AIProviders .OLLAMA in providers :
503+ _ollama_mode_selection [service_name ] = OllamaMode .HOST
465504
466505
467506def clear_all_ai_selections () -> None :
@@ -471,6 +510,7 @@ def clear_all_ai_selections() -> None:
471510 clear_ai_backend_selection ()
472511 clear_ai_rag_selection ()
473512 clear_skip_llm_sync_selection ()
513+ clear_ollama_mode_selection ()
474514 clear_database_engine_selection ()
475515
476516
@@ -575,6 +615,36 @@ def interactive_ai_service_config(
575615 # Store provider selection in global context for template generation
576616 _ai_provider_selection [service_name ] = providers
577617
618+ # Ollama deployment mode selection (only if Ollama was selected)
619+ if AIProviders .OLLAMA in providers :
620+ typer .echo ("\n Ollama Deployment Mode:" )
621+ typer .echo (" How do you want to run Ollama?" )
622+ typer .echo (
623+ " 1. Host - Connect to Ollama running on your machine (Mac/Windows)"
624+ )
625+ typer .echo (" 2. Docker - Run Ollama in a Docker container (Linux/Deploy)" )
626+
627+ use_host = typer .confirm (
628+ " Connect to host Ollama? (recommended for Mac/Windows)" ,
629+ default = True ,
630+ )
631+ ollama_mode = OllamaMode .HOST if use_host else OllamaMode .DOCKER
632+ _ollama_mode_selection [service_name ] = ollama_mode
633+
634+ if ollama_mode == OllamaMode .HOST :
635+ typer .secho (
636+ " Ollama will connect to host.docker.internal:11434" , fg = "green"
637+ )
638+ typer .echo (" Make sure Ollama is running: ollama serve" )
639+ else :
640+ typer .secho (
641+ " Ollama service will be added to docker-compose.yml" , fg = "green"
642+ )
643+ typer .echo (" Note: First startup may take time to download models" )
644+ else :
645+ # No Ollama selected - set mode to none
646+ _ollama_mode_selection [service_name ] = OllamaMode .NONE
647+
578648 # RAG selection with Python 3.14 compatibility check
579649 typer .echo ("\n RAG (Retrieval-Augmented Generation):" )
580650 if sys .version_info >= (3 , 14 ):
0 commit comments