# Local Deep Research - Programmatic API Examples This directory contains examples demonstrating how to use Local Deep Research programmatically without requiring authentication or database access. ## Quick Start All examples use the programmatic API that bypasses authentication: ```python from local_deep_research.api import quick_summary, detailed_research from local_deep_research.api.settings_utils import create_settings_snapshot # Create settings for programmatic mode settings = create_settings_snapshot({ "search.tool": "wikipedia" }) # Run research result = quick_summary( "your topic", settings_snapshot=settings, programmatic_mode=True ) ``` ## Examples Overview | Example | Purpose | Key Features | Difficulty | |---------|---------|--------------|------------| | **minimal_working_example.py** | Simplest possible example | Basic setup, minimal code | Beginner | | **simple_programmatic_example.py** | Common use cases with the new API | quick_summary, detailed_research, generate_report, custom parameters | Beginner | | **search_strategies_example.py** | Demonstrates search strategies | source-based vs focused-iteration strategies | Intermediate | | **hybrid_search_example.py** | Combine multiple search sources | Multiple retrievers, web + retriever combo | Intermediate | | **advanced_features_example.py** | Advanced programmatic features | generate_report, export formats, result analysis, keyword extraction | Advanced | | **custom_llm_retriever_example.py** | Custom LLM and retriever integration | Ollama, custom retrievers, FAISS | Advanced | | **searxng_example.py** | Web search with SearXNG | SearXNG integration, error handling | Advanced | ## Example Details ### minimal_working_example.py **Purpose:** Show the absolute minimum code needed to use LDR programmatically. - Creates a simple LLM and search engine - Runs a basic search - No external dependencies beyond Ollama ### simple_programmatic_example.py **Purpose:** Demonstrate the main API functions with practical examples. - `quick_summary()` - Fast research with summary - `detailed_research()` - Comprehensive research with findings - `generate_report()` - Create full markdown reports - Custom search parameters - Different search tools (Wikipedia, SearXNG, etc.) ### search_strategies_example.py **Purpose:** Explain and demonstrate the two main search strategies. - **source-based**: Comprehensive research with detailed citations - **focused-iteration**: Iterative refinement of research questions - Side-by-side comparison of strategies - When to use each strategy ### hybrid_search_example.py **Purpose:** Show how to combine multiple search sources for comprehensive research. - Multiple named retrievers for different document types - Combining custom retrievers with web search - Source analysis and tracking ### advanced_features_example.py **Purpose:** Demonstrate advanced programmatic features and analysis capabilities. - `generate_report()` - Create comprehensive markdown reports - Export formats - JSON, Markdown, custom formats - Result analysis - Extract insights and patterns - Keyword extraction - Identify key terms and concepts - Batch research - Process multiple queries efficiently ### custom_llm_retriever_example.py **Purpose:** Advanced integration with custom components. - Custom LLM implementation (using Ollama) - Custom retriever with embeddings - Vector store integration (FAISS) - Direct use of AdvancedSearchSystem ### searxng_example.py **Purpose:** Web search integration using SearXNG. - SearXNG configuration - Error handling and fallbacks - Real-time web search - Direct use of search engines ## Key Concepts ### Programmatic Mode All examples use `programmatic_mode=True` as an explicit parameter to bypass authentication: ```python result = quick_summary( query="your topic", settings_snapshot=settings, programmatic_mode=True ) ``` ### Search Strategies - **source-based**: Best for academic research, fact-checking - **focused-iteration**: Best for exploratory research, complex topics ### Search Tools Available search tools include: - `wikipedia` - Wikipedia search - `arxiv` - Academic papers - `searxng` - Web search via SearXNG (recommended default) With the default langgraph-agent strategy, the research agent can also call other enabled engines dynamically per query — the former `auto`/`meta` engines were removed in favor of this. ### Custom Retrievers You can provide your own retrievers: ```python result = quick_summary( query="topic", retrievers={"my_docs": custom_retriever}, search_tool="my_docs", settings_snapshot=settings, programmatic_mode=True ) ``` ## API Functions ### `quick_summary()` Generate a quick research summary: ```python from local_deep_research.api import quick_summary from local_deep_research.api.settings_utils import create_settings_snapshot settings = create_settings_snapshot({}) result = quick_summary( query="Your research question", settings_snapshot=settings, search_tool="wikipedia", iterations=2, programmatic_mode=True ) ``` ### `detailed_research()` Perform in-depth research with multiple iterations: ```python from local_deep_research.api import detailed_research result = detailed_research( query="Your research question", settings_snapshot=settings, search_strategy="source-based", iterations=3, questions_per_iteration=5, programmatic_mode=True ) ``` ### `generate_report()` Generate comprehensive markdown reports with structured sections: ```python from local_deep_research.api import generate_report from local_deep_research.api.settings_utils import create_settings_snapshot settings = create_settings_snapshot(overrides={"programmatic_mode": True}) result = generate_report( query="Your research question", settings_snapshot=settings, output_file="report.md", searches_per_section=3 ) ``` ## Requirements - Python 3.8+ - Local Deep Research installed - Ollama (for most examples) - SearXNG instance (for searxng_example.py) ## Running the Examples 1. Install Local Deep Research: ```bash pip install -e . ``` 2. Start Ollama (if using Ollama examples): ```bash ollama serve ollama pull gemma3:12b ollama pull nomic-embed-text # For embeddings ``` 3. Run any example: ```bash python minimal_working_example.py python simple_programmatic_example.py python search_strategies_example.py ``` ## Troubleshooting ### "No settings context available" Error Make sure to pass `settings_snapshot` and `programmatic_mode` to all API functions: ```python settings = create_settings_snapshot({}) result = quick_summary( "topic", settings_snapshot=settings, programmatic_mode=True ) ``` ### Ollama Connection Error Ensure Ollama is running: ```bash ollama serve ``` ### SearXNG Connection Error Start a SearXNG instance or use the fallback in the example: ```bash docker run -p 8080:8080 searxng/searxng ``` ## Contributing When adding new examples: 1. Focus on demonstrating specific features 2. Include clear comments explaining the code 3. Handle errors gracefully 4. Update this README with the new example ## License See the main project LICENSE file.