diff --git a/libs/cli/langgraph_cli/__init__.py b/libs/cli/langgraph_cli/__init__.py index 6ff6db180..ac1552129 100644 --- a/libs/cli/langgraph_cli/__init__.py +++ b/libs/cli/langgraph_cli/__init__.py @@ -1 +1 @@ -__version__ = "0.4.16" +__version__ = "0.4.17" diff --git a/libs/cli/langgraph_cli/templates.py b/libs/cli/langgraph_cli/templates.py index c06b7d1ff..bd53902b2 100644 --- a/libs/cli/langgraph_cli/templates.py +++ b/libs/cli/langgraph_cli/templates.py @@ -8,36 +8,20 @@ from zipfile import ZipFile import click TEMPLATES: dict[str, dict[str, str]] = { + "Deep Agent": { + "description": "An opinionated deployment template for a Deep Agent.", + "python": "https://github.com/langchain-ai/deep-agent-template/archive/refs/heads/main.zip", + "js": "https://github.com/langchain-ai/deep-agent-template-js/archive/refs/heads/main.zip", + }, + "Agent": { + "description": "A simple agent that can be flexibly extended to many tools.", + "python": "https://github.com/langchain-ai/simple-agent-template/archive/refs/heads/main.zip", + }, "New LangGraph Project": { "description": "A simple, minimal chatbot with memory.", "python": "https://github.com/langchain-ai/new-langgraph-project/archive/refs/heads/main.zip", "js": "https://github.com/langchain-ai/new-langgraphjs-project/archive/refs/heads/main.zip", }, - "ReAct Agent": { - "description": "A simple agent that can be flexibly extended to many tools.", - "python": "https://github.com/langchain-ai/react-agent/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/react-agent-js/archive/refs/heads/main.zip", - }, - "Memory Agent": { - "description": "A ReAct-style agent with an additional tool to store memories for use across conversational threads.", - "python": "https://github.com/langchain-ai/memory-agent/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/memory-agent-js/archive/refs/heads/main.zip", - }, - "Retrieval Agent": { - "description": "An agent that includes a retrieval-based question-answering system.", - "python": "https://github.com/langchain-ai/retrieval-agent-template/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/retrieval-agent-template-js/archive/refs/heads/main.zip", - }, - "Data-enrichment Agent": { - "description": "An agent that performs web searches and organizes its findings into a structured format.", - "python": "https://github.com/langchain-ai/data-enrichment/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/data-enrichment-js/archive/refs/heads/main.zip", - }, - "Basic Deep Agent": { - "description": "An opinionated deployment template for a Deep Agent built with createDeepAgent.", - "python": "https://github.com/langchain-ai/deep-agent-template/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/deep-agent-template-js/archive/refs/heads/main.zip", - }, } # Generate TEMPLATE_IDS programmatically @@ -83,19 +67,25 @@ def _choose_template() -> str: click.secho("❌ Invalid choice. Please try again.", fg="red") return _choose_template() - # Prompt the user to choose between Python or JS/TS version + template_info = TEMPLATES[selected_template] + available_langs = [lang for lang in ("python", "js") if lang in template_info] + click.secho( - f"\nYou selected: {selected_template} - {TEMPLATES[selected_template]['description']}", + f"\nYou selected: {selected_template} - {template_info['description']}", fg="green", ) + + if len(available_langs) == 1: + return template_info[available_langs[0]] + version_choice: int = click.prompt( "Choose language (1 for Python 🐍, 2 for JS/TS 🌐)", type=int ) if version_choice == 1: - return TEMPLATES[selected_template]["python"] + return template_info["python"] elif version_choice == 2: - return TEMPLATES[selected_template]["js"] + return template_info["js"] else: click.secho("❌ Invalid choice. Please try again.", fg="red") return _choose_template() @@ -135,37 +125,6 @@ def _download_repo_with_requests(repo_url: str, path: str) -> None: sys.exit(1) -def _get_template_url(template_name: str) -> str | None: - """ - Retrieves the template URL based on the provided template name. - - Args: - template_name: The name of the template. - - Returns: - Optional[str]: The URL of the template if found, else None. - """ - if template_name in TEMPLATES: - click.secho(f"Template selected: {template_name}", fg="green") - version_choice: int = click.prompt( - "Choose version (1 for Python 🐍, 2 for JS/TS 🌐)", type=int - ) - - if version_choice == 1: - return TEMPLATES[template_name]["python"] - elif version_choice == 2: - return TEMPLATES[template_name]["js"] - else: - click.secho("❌ Invalid choice. Please try again.", fg="red") - return None - else: - click.secho( - f"Template '{template_name}' not found. Please select from the available options.", - fg="red", - ) - return None - - def create_new(path: str | None, template: str | None) -> None: """Create a new LangGraph project at the specified PATH using the chosen TEMPLATE.