Spaces:
Paused
Universal Deep Research Backend (UDR-B)
A FastAPI-based backend service that provides intelligent research and reporting capabilities using large language models and web search APIs. The system can perform comprehensive research on user queries, aggregate findings, and generate detailed reports.
This software is provided exclusively for research and demonstration purposes. It is intended solely as a prototype to demonstrate research concepts and methodologies in artificial intelligence and automated research systems.
- This software is not intended for production deployment, commercial use, or any real-world application where reliability, accuracy, or safety is required.
- This software contains experimental features, unproven methodologies, and research-grade implementations that may contain bugs, security vulnerabilities, or other issues.
- The software is provided "AS IS" without any warranties. Neither NVIDIA Corporation nor the authors shall be liable for any damages arising from the use of this software to the fullest extent permitted by law.
By using this software, you acknowledge that you have read and understood the complete DISCLAIMER file and agree to be bound by its terms. For the complete legal disclaimer, please see the DISCLAIMER file in this directory.
Features
- Intelligent Research: Automated web search and content analysis using Tavily API
- Multi-Model Support: Configurable LLM backends (OpenAI, NVIDIA, local vLLM)
- Streaming Responses: Real-time progress updates via Server-Sent Events
- Session Management: Persistent research sessions with unique identifiers
- Flexible Architecture: Modular design with configurable components
- Dry Run Mode: Testing capabilities with mock data
- Advanced Framing: Custom FrameV4 system for increased reliability of instruction following across all models
Architecture
The backend consists of several key components:
main.py: FastAPI application with research endpointsscan_research.py: Core research and reporting logicclients.py: LLM and search API client managementframe/: Advanced reliability framework (FrameV4)items.py: Data persistence utilitiessessions.py: Session key generation and management
Quick Start
Prerequisites
- Python 3.8+
- API keys for your chosen LLM provider
- Tavily API key for web search functionality
Installation
Option 1: Automated Setup (Recommended)
The easiest way to set up the backend is using the provided setup.py script:
Clone the repository:
git clone <repository-url> cd backendRun the setup script:
python3 setup.pyThe setup script will:
- Check Python version compatibility
- Create necessary directories (
logs/,instances/,mock_instances/) - Set up environment configuration (
.envfile) - Check for required API key files
- Install Python dependencies
- Validate the setup
Configure API keys: Create the following files with your API keys:
echo "your-tavily-api-key" > tavily_api.txt echo "your-llm-api-key" > nvdev_api.txt # or openai_api.txtStart the server:
./launch_server.shNote: The
launch_server.shscript is the recommended way to start the server as it:- Automatically loads environment variables from
.env - Sets proper default configurations
- Runs the server in the background with logging
- Provides process management information
- Automatically loads environment variables from
Option 2: Manual Setup
If you prefer to set up the backend manually, follow these steps:
Clone the repository:
git clone <repository-url> cd backendCreate virtual environment:
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtCreate necessary directories:
mkdir -p logs instances mock_instancesSet up environment configuration: Copy the example environment file and configure it:
cp env.example .env # Edit .env file with your configurationConfigure API keys: Create the following files with your API keys:
echo "your-tavily-api-key" > tavily_api.txt echo "your-llm-api-key" > nvdev_api.txt # or e.g., openai_api.txtStart the server:
./launch_server.shNote: As noted for Option 1, the
launch_server.shscript is the recommended way to start the server as it:- Automatically loads environment variables from
.env - Sets proper default configurations
- Runs the server in the background with logging
- Provides process management information
- Automatically loads environment variables from
The server will be available at http://localhost:8000
You can now quickly test the server.
curl -X POST http://localhost:8000/api/research \
-H "Content-Type: application/json" \
-d '{
"prompt": "What are the latest developments in quantum computing?",
"start_from": "research"
}'
Configuration
Environment Variables
Create a .env file in the backend directory:
# Server Configuration
HOST=0.0.0.0
PORT=8000
LOG_LEVEL=info
# CORS Configuration
FRONTEND_URL=http://localhost:3000
# Model Configuration
DEFAULT_MODEL=llama-3.1-nemotron-253b
LLM_BASE_URL=https://integrate.api.nvidia.com/v1
LLM_API_KEY_FILE=nvdev_api.txt
# Search Configuration
TAVILY_API_KEY_FILE=tavily_api.txt
# Research Configuration
MAX_TOPICS=1
MAX_SEARCH_PHRASES=1
MOCK_DIRECTORY=mock_instances/stocks_24th_3_sections
# Logging Configuration
LOG_DIR=logs
TRACE_ENABLED=true
Model Configuration
The system supports multiple LLM providers. Configure models in clients.py:
MODEL_CONFIGS = {
"llama-3.1-8b": {
"base_url": "https://integrate.api.nvidia.com/v1",
"api_type": "nvdev",
"completion_config": {
"model": "nvdev/meta/llama-3.1-8b-instruct",
"temperature": 0.2,
"top_p": 0.7,
"max_tokens": 2048,
"stream": True
}
},
# Add more models as needed
}
API Key Files
The system expects API keys in text files:
tavily_api.txt: Tavily search API keynvdev_api.txt: NVIDIA API keyopenai_api.txt: OpenAI API key
API Endpoints
GET /
Health check endpoint that returns a status message.
POST /api/research
Main research endpoint that performs research and generates reports.
Request Body:
{
"dry": false,
"session_key": "optional-session-key",
"start_from": "research",
"prompt": "Your research query here",
"mock_directory": "mock_instances/stocks_24th_3_sections"
}
Parameters:
dry(boolean): Use mock data for testingsession_key(string, optional): Existing session to continuestart_from(string): "research" or "reporting"prompt(string): Research query (required for research phase)mock_directory(string): Directory for mock data
Response: Server-Sent Events stream with research progress
POST /api/research2
Advanced reliability framework endpoint using FrameV4 system. This is the endpoint that supports custom user deep research strategies.
Request Body:
{
"prompt": "Your research query",
"strategy_id": "custom-strategy",
"strategy_content": "Custom research strategy"
}
Usage Examples
Basic Research Request
curl -X POST http://localhost:8000/api/research \
-H "Content-Type: application/json" \
-d '{
"prompt": "What are the latest developments in quantum computing?",
"start_from": "research"
}'
Dry Run Testing
curl -X POST http://localhost:8000/api/research \
-H "Content-Type: application/json" \
-d '{
"dry": true,
"prompt": "Test research query",
"start_from": "research"
}'
Continue from Reporting Phase
curl -X POST http://localhost:8000/api/research \
-H "Content-Type: application/json" \
-d '{
"session_key": "20241201T120000Z-abc12345", # This would be the key of the session which you have previously started
"start_from": "reporting"
}'
Development
Logging
Logs are stored in the logs/ directory:
comms_YYYYMMDD_HH-MM-SS.log: Communication traces{instance_id}_compilation.log: Frame compilation logs{instance_id}_execution.log: Frame execution logs
Mock Data
Mock research data is available in mock_instances/:
stocks_24th_3_sections/: Stock market research datastocks_30th_short/: Short stock market data
Deployment
Production Deployment
Set up environment:
export HOST=0.0.0.0 export PORT=8000 export LOG_LEVEL=infoRun with gunicorn:
pip install gunicorn gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000Note: For development, prefer using
./launch_server.shwhich provides better process management and logging.
Docker Deployment
Create a Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Troubleshooting
Common Issues
- API Key Errors: Ensure API key files exist and contain valid keys
- CORS Errors: Check
FRONTEND_URLconfiguration - Model Errors: Verify model configuration in
clients.py - Permission Errors: Ensure write permissions for
logs/andinstances/directories
Debug Mode
Enable debug logging by setting the LOG_LEVEL environment variable:
export LOG_LEVEL=debug
./launch_server.sh
Or run uvicorn directly for debugging:
uvicorn main:app --reload --log-level=debug
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License and Disclaimer
This software is provided for research and demonstration purposes only. Please refer to the DISCLAIMER file for complete terms and conditions regarding the use of this software. You can find the license in LICENSE.
Do not use this code in production.
Support
For issues and questions:
- Create an issue in the repository
- Check the logs in the
logs/directory - Review the configuration settings