querymind-api / README.md
Usman Bari
Add Hugging Face Spaces configuration metadata
5dde7f1
|
Raw
History Blame Contribute Delete
8.74 kB
metadata
title: Querymind Api
emoji: πŸ“Š
colorFrom: blue
colorTo: pink
sdk: docker
pinned: false

Natural Language Data Analyst

Overview

A powerful full-stack analytical web application that enables users to query structured databases using plain, conversational English. The system automatically converts natural language questions into highly optimized, dialect-specific SQL, executes it against an embedded SQLite database, renders beautiful responsive charts (pure SVG without third-party chart libraries), and synthesizes qualitative business insights from the results using generative AI.

Features

  • πŸ—£οΈ Natural language to SQL conversion: Translates conversational questions into accurate SQLite SELECT queries.
  • πŸ“Š Auto-generated charts: Renders pure-SVG Bar, Line, and Pie charts dynamically based on query results column metadata (completely zero-dependency).
  • πŸ’‘ AI-generated insights: Summarizes query execution results into concise business insights in real time.
  • πŸ“ Upload your own CSV datasets: Seamlessly upload custom CSV files which are automatically formatted, sanitized, and loaded into individual SQLite database files.
  • πŸ—ƒοΈ Built-in sample datasets: Pre-loaded with Sales, Employees, and E-commerce sample data to start querying immediately.
  • πŸ”„ Auto-retry on SQL errors: Automatically catches execution syntax/type failures and prompts the LLM to fix the query (up to 3 retries).
  • πŸ“₯ Export results as CSV: Downloads query data instantly as CSV files named based on the source question.
  • πŸ’‘ Query Suggestions: Generates and caches 6 interesting question suggestions using AI when a dataset is opened.
  • πŸ•’ Recent Queries Log: Retains the last 20 queries run during a session for rapid re-execution.
  • ⌨️ Keyboard Shortcuts: Focuses input with Ctrl+K, submits with Ctrl+Enter, and pulls the last query using the Arrow Up key when empty.

Tech Stack

Technology Purpose
Python 3.10+ / FastAPI Backend web server and REST API routing
Groq (Llama 3.1 8B) Advanced SQL query generation, self-correction, suggestions, and text insights
SQLite + Pandas SQL database storage, schema analysis, and query execution
React + Vite High-performance, reactive single-page frontend application
Pure CSS / HTML5 Modern, premium glassmorphism dark-mode styling and UI aesthetics
Pure SVG High-fidelity interactive charts and visual graphs (zero-dependency)

Project Structure

nl-data-analyst/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py                 # FastAPI routing, CORS middleware, and cache setup
β”‚   β”œβ”€β”€ config.py               # Global server constants, LLM model selection, and API keys
β”‚   β”œβ”€β”€ schemas.py              # Pydantic models validating REST request and response contracts
β”‚   β”œβ”€β”€ requirements.txt        # Python dependency manifest (FastAPI, Groq, Pandas)
β”‚   └── services/               # Core business logic handlers
β”‚       β”œβ”€β”€ csv_service.py      # CSV loading, parsing, and SQLite DB generation
β”‚       β”œβ”€β”€ sql_service.py      # SQLite execution, query sanitization, and safety audits
β”‚       β”œβ”€β”€ llm_service.py      # SQL generation, self-repair pipelines, and suggestions
β”‚       └── insight_service.py  # Text synthesis translating tabular data to business insights
β”œβ”€β”€ databases/                  # Storage directory containing generated SQLite .db files
β”œβ”€β”€ sample_data/                # Built-in sample CSV datasets (Sales, Employees, E-commerce)
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/         # Reusable React UI component layers
β”‚   β”‚   β”‚   β”œβ”€β”€ Sidebar.jsx     # Side menu listing datasets, upload buttons, and recent logs
β”‚   β”‚   β”‚   β”œβ”€β”€ UploadView.jsx  # Drag-and-drop CSV upload landing zone
β”‚   β”‚   β”‚   β”œβ”€β”€ DataPreview.jsx # Overview statistics, column schema, and data grid preview
β”‚   β”‚   β”‚   β”œβ”€β”€ QueryView.jsx   # Context bars, query log panels, and suggestions decks
β”‚   β”‚   β”‚   β”œβ”€β”€ QueryInput.jsx  # Query textarea form with key shortcut binds
β”‚   β”‚   β”‚   β”œβ”€β”€ QueryResult.jsx # Collapsible SQL, data table, and chart selector display
β”‚   β”‚   β”‚   β”œβ”€β”€ ChartView.jsx   # SVG chart routing, scaling, grid plotting, and tooltips
β”‚   β”‚   β”‚   β”œβ”€β”€ DataTable.jsx   # Interactive data matrix grid
β”‚   β”‚   β”‚   └── LoadingResult.jsx # Dynamic shimmers skeleton loading placeholders
β”‚   β”‚   β”œβ”€β”€ api.js              # JavaScript fetch integration layer mapping REST endpoints
β”‚   β”‚   β”œβ”€β”€ App.jsx             # Top-level state coordinator, stats bar, and toast managers
β”‚   β”‚   β”œβ”€β”€ index.css           # Global custom CSS styles, animations, and responsive queries
β”‚   β”‚   └── main.jsx            # React client DOM mounter
β”‚   β”œβ”€β”€ package.json            # Node.js dev server and build tool dependencies
β”‚   β”œβ”€β”€ vite.config.js          # Vite custom proxy and build settings
β”‚   └── index.html              # Main HTML skeleton file
β”œβ”€β”€ .env                        # Environment credentials (API keys, ports)
└── README.md                   # Project documentation manual

Getting Started

Prerequisites

Installation & Running

1. Setup the Backend

Navigate to the root directory and create a virtual environment:

# Create python virtual environment
python -m venv .venv

# Activate the virtual environment
# On Windows (Command Prompt/PowerShell):
.venv\Scripts\activate
# On macOS/Linux:
source .venv/bin/activate

# Install backend dependencies
pip install -r backend/requirements.txt

Create a .env configuration file in the project root (using .env.template as a model) and fill in your Groq API Key:

GROQ_API_KEY=gsk_your_actual_groq_api_key_here
PORT=8000

Start the backend FastAPI server:

# Run the backend using Uvicorn
python -m uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload

The API documentation will be available at http://127.0.0.1:8000/docs.

2. Setup the Frontend

Open a new terminal session, navigate to the frontend/ directory, install packages, and start the development server:

cd frontend

# Install client packages
npm install

# Start Vite dev environment
npm run dev -- --port 5173 --host 127.0.0.1

The web application is now active at http://127.0.0.1:5173/.


How It Works

  1. Dataset Selection & Conversion: The user selects a preloaded dataset or drops in a custom CSV file. The backend parses it using Pandas and maps datatypes to create an optimized SQLite database file inside the databases/ folder.
  2. Dynamic Question Suggestions: When a dataset is loaded, its schema is analysed and passed to the Llama model on Groq to compile 6 business-relevant query suggestions. Suggestions are cached in-memory.
  3. Natural Language Translation: The user submits a conversational question. The LLM translates the query based on the table schema and SQL formatting system prompts.
  4. Execution & Self-Correction: The SQLite query is verified against destructive SQL keywords (only SELECTs allowed) and executed. If SQLite throws a syntax error, the LLM-service receives the failing SQL and stacktrace to attempt self-correction.
  5. Visualization Layout: The frontend parses the output matrix. If column headers contain labels + numbers, it charts the data:
    • Pie Chart: Used for $\le 6$ distinct labels (great for composition summaries).
    • Bar Chart: Generates dynamic scale sizes and plots vertical bars with custom hover tooltips.
    • Line Chart: Draws line series, highlights points, and adds linear gradients under the curves.
  6. Insight Synthesis: Groq translates the final matrix rows and original question to output a concise 2-3 sentence business summary.

Future Improvements

  • PostgreSQL / MySQL Connectors: Run natural language analytics on enterprise production databases.
  • Multi-Table JOIN Support: Incorporate relational schema graphs to query complex multi-table relationships.
  • Dashboard View: Pin multiple query results cards and auto-refresh reports.
  • Interactive Visualizations: Modify chart styles, axes, and colors using conversational commands.
  • PDF Exporter: Export the full history log along with SVG charts and text insights into a PDF report document.

License

MIT