---
description: Imported skill agent from langchain
name: agent
signature: ac06846d24176b9dcb6f00521336d9bee0eaf54ebbdf473d877e368180c5ec58
enabled: false
source: github:diegosouzapw/awesome-omni-skill
imported-from: github:diegosouzapw/awesome-omni-skill
---

import os
import sys
import argparse
from dotenv import load_dotenv
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend
from langchain_anthropic import ChatAnthropic
from rich.console import Console
from rich.panel import Panel

# Load environment variables
load_dotenv()

console = Console()


def create_sql_deep_agent():
    """Create and return a text-to-SQL Deep Agent"""

    # Get base directory
    base_dir = os.path.dirname(os.path.abspath(__file__))

    # Connect to Chinook database
    db_path = os.path.join(base_dir, "chinook.db")
    db = SQLDatabase.from_uri(
        f"sqlite:///{db_path}",
        sample_rows_in_table_info=3
    )

    # Initialize Claude Sonnet 4.5 for toolkit initialization
    model = ChatAnthropic(
        model="claude-sonnet-4-5-20250929",
        temperature=0
    )

    # Create SQL toolkit and get tools
    toolkit = SQLDatabaseToolkit(db=db, llm=model)
    sql_tools = toolkit.get_tools()

    # Create the Deep Agent with all parameters
    agent = create_deep_agent(
        model=model,                                  # Claude Sonnet 4.5 with temperature=0
        memory=["./AGENTS.md"],                       # Agent identity and general instructions
        skills=["./skills/"],                         # Specialized workflows (query-writing, schema-exploration)
        tools=sql_tools,                              # SQL database tools
        subagents=[],                                 # No subagents needed
        backend=FilesystemBackend(root_dir=base_dir)  # Persistent file storage
    )

    return agent


def main():
    """Main entry point for the SQL Deep Agent CLI"""
    parser = argparse.ArgumentParser(
        description="Text-to-SQL Deep Agent powered by LangChain DeepAgents and Claude Sonnet 4.5",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
  python agent.py "What are the top 5 best-selling artists?"
  python agent.py "Which employee generated the most revenue by country?"
  python agent.py "How many customers are from Canada?"
        """
    )
    parser.add_argument(
        "question",
        type=str,
        help="Natural language question to answer using the Chinook database"
    )

    args = parser.parse_args()

    # Display the question
    console.print(Panel(
        f"[bold cyan]Question:[/bold cyan] {args.question}",
        border_style="cyan"
    ))
    console.print()

    # Create the agent
    console.print("[dim]Creating SQL Deep Agent...[/dim]")
    agent = create_sql_deep_agent()

    # Invoke the agent
    console.print("[dim]Processing query...[/dim]\n")

    try:
        result = agent.invoke({
            "messages": [{"role": "user", "content": args.question}]
        })

        # Extract and display the final answer
        final_message = result["messages"][-1]
        answer = final_message.content if hasattr(final_message, 'content') else str(final_message)

        console.print(Panel(
            f"[bold green]Answer:[/bold green]\n\n{answer}",
            border_style="green"
        ))

    except Exception as e:
        console.print(Panel(
            f"[bold red]Error:[/bold red]\n\n{str(e)}",
            border_style="red"
        ))
        sys.exit(1)


if __name__ == "__main__":
    main()
