wspr-ai-lite


Namewspr-ai-lite JSON
Version 0.4.0 PyPI version JSON
download
home_pageNone
SummaryLightweight WSPR analytics: DuckDB ingest + Streamlit dashboard.
upload_time2025-08-26 08:26:58
maintainerNone
docs_urlNone
authorGreg Beam (KI7MT)
requires_python>=3.11
licenseNone
keywords wspr ham radio duckdb streamlit amateur radio analytics
VCS
bugtrack_url
requirements streamlit duckdb pandas numpy requests pytest pyyaml-env-tag click commitizen
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # wspr-ai-lite
Lightweight WSPR analytics and AI‑ready backend using **DuckDB** + **Streamlit**, with safe query access via **MCP Agents**.

[![Made with Streamlit](https://img.shields.io/badge/Made%20with-Streamlit-FF4B4B)](https://streamlit.io/)
[![DuckDB](https://img.shields.io/badge/Database-DuckDB-blue)](https://duckdb.org/)
[![MCP](https://img.shields.io/badge/AI--Agent--Ready-MCP-green)](https://modelcontextprotocol.io/)
[![Docs](https://img.shields.io/badge/Docs-GitHub_Pages-blue)](https://ki7mt.github.io/wspr-ai-lite/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

## Workflows and Packaging Status

**Versions**
[![GitHub release](https://img.shields.io/github/v/release/KI7MT/wspr-ai-lite)](https://github.com/KI7MT/wspr-ai-lite/releases)
[![GitHub tag](https://img.shields.io/github/tag/KI7MT/wspr-ai-lite?sort=semver)](https://github.com/KI7MT/wspr-ai-lite/tags)
[![PyPI version](https://img.shields.io/pypi/v/wspr-ai-lite.svg)](https://pypi.org/project/wspr-ai-lite/)
[![Python versions](https://img.shields.io/pypi/pyversions/wspr-ai-lite.svg)](https://pypi.org/project/wspr-ai-lite/)

**CI/CD**
[![CI](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/ci.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/ci.yml)
[![Smoke](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/smoke.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/smoke.yml)
[![Publish](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/release.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/release.yml)
[![pre-commit](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/pre-commit.yml)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)

---

## Overview

- **Analytics Dashboard**: Streamlit UI lets you explore WSPR spots with SNR trends, DX distance analysis, station activity, and “QSO‑like” reciprocity views.
- **Canonical Schema**: Data is normalized into a portable DuckDB file—consistent, lightweight, and ready for future backend upgrades.
- **CLI Tools**: Click-based tools (`wspr-ai-lite`, `wspr-ai-lite-fetch`, `wspr-ai-lite-tools`) for downloading, ingesting, verifying, and managing the database.
- **MCP Integration**: Experimental MCP server (`wspr-ai-lite-mcp`) exposing safe APIs for AI agents. A manifest defines permitted queries and access control.
- **Roadmap (v0.4+ vision)**: MCP server will migrate to a **FastAPI + Uvicorn** backend with service control (start/stop/restart), enabling production-grade deployment.

---

## What Can You Do With It

Explore **Weak Signal Propagation Reporter (WSPR)** data with an easy, local dashboard:

- SNR distributions & monthly spot trends
- Top reporters, most-heard TX stations
- Geographic spread & distance/DX analysis
- QSO-like reciprocal reports
- Hourly activity heatmaps & yearly unique counts
- Works on **Windows, Linux, macOS** — no heavy server required.

## Key Features
- Local DuckDB storage with efficient ingest + caching
- Streamlit UI for interactive exploration
- Distance/DX analysis with Maidenhead grid conversion
- QSO-like reciprocal finder with configurable time window

## Fast Performance
- Columnar Storage: DuckDB is a columnar database, which allows for better data compression and faster query execution.
- Vectorization: processes data in batches, optimized CPU usage, significantly faster than traditional OLTP databases.

## Ease of Use
- Simple Installation: DuckDB can be installed with just a few lines of code, and on any platform.
- In-Process Operation: It runs within as a host application, eliminating network latency and simplifying data access.

## Quickstart (Recommended: PyPI)

### 1. Install from PyPI

> optional but recommended: [create a Python virtual environment](https://docs.python.org/3/library/venv.html) first

```bash
python3 -m venv .venv && source .venv/bin/activate
pip install wspr-ai-lite
```

### 2. Ingest Data
Fetch WSPRNet monthly archives and load them into DuckDB:

```bash
wspr-ai-lite ingest --from 2014-07 --to 2014-07 --db data/wspr.duckdb
```
- Downloads compressed monthly CSVs (caches locally in .cache/)
- Normalizes into data/wspr.duckdb
- Adds extra fields (band, reporter grid, tx grid)

### 3. Launch the Dashboard
```bash
wspr-ai-lite ui --db data/wspr.duckdb --port 8501
```
Open http://localhost:8501 in your browser 🎉

👉 For developers who want to hack on the code directly, see [Developer Setup](https://ki7mt.github.io/wspr-ai-lite/DEV_SETUP/).

## Example Visualizations
- SNR Distribution by Count
- Monthly Spot Counts
- Top Reporting Stations
- Most Heard TX Stations
- Geographic Spread (Unique Grids)
- Distance Distribution + Longest DX
- Best DX per Band
- Activity by Hour × Month
- TX/RX Balance and QSO Success Rate

## Development

For contributors and developers:
- docs/dev-setup.md --> Development setup guide
- docs/testing.md --> Testing instructions (pytest + Makefile)
- docs/troubleshooting.md --> Common issues & fixes

```bash
make setup-dev   # create venv and install deps
make ingest      # run ingest pipeline
make run         # launch Streamlit UI
make test        # run pytest suite
```

### Makefile Usage

There is an extensive list of Makefile targets that simplify operations. See `make help` for a full list of available targets.

## Get Help
- **Report a bug** → [New Bug Report](https://github.com/KI7MT/wspr-ai-lite/issues/new?template=bug_report.yml)
- **Request a feature** → [New Feature Request](https://github.com/KI7MT/wspr-ai-lite/issues/new?template=feature_request.yml)
- **Ask a question / share ideas** → [GitHub Discussions](https://github.com/KI7MT/wspr-ai-lite/discussions)
- **Read the docs** → https://ki7mt.github.io/wspr-ai-lite/

## Acknowledgements
- Joe Taylor, K1JT, and the WSJT-X Development Team
- WSPRNet community for providing global weak-signal data
- Contributors to DuckDB and Streamlit
- Amateur radio operators worldwide who share spots and keep the network alive

## Contributing
Pull requests are welcome!

## Roadmap
- **Phase 1**: wspr-ai-lite (this project)
  - Lightweight, local-only DuckDB + Streamlit dashboard
- **Phase 2**: wspr-ai-analytics (modernize [wspr-analytics](https://github.com/KI7MT/wspr-analytics))
  - Full analytics suite with ClickHouse, Grafana, AI Agents, and MCP integration
  - Designed for heavier infrastructure and richer analysis

## 📜 License
MIT — free to use for amateur radio and research.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "wspr-ai-lite",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "wspr, ham radio, duckdb, streamlit, amateur radio, analytics",
    "author": "Greg Beam (KI7MT)",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/00/9c/fcefbc26aea85bd2519a98086b251068f08a3c10c53eddd187706f21099d/wspr_ai_lite-0.4.0.tar.gz",
    "platform": null,
    "description": "# wspr-ai-lite\nLightweight WSPR analytics and AI\u2011ready backend using **DuckDB** + **Streamlit**, with safe query access via **MCP Agents**.\n\n[![Made with Streamlit](https://img.shields.io/badge/Made%20with-Streamlit-FF4B4B)](https://streamlit.io/)\n[![DuckDB](https://img.shields.io/badge/Database-DuckDB-blue)](https://duckdb.org/)\n[![MCP](https://img.shields.io/badge/AI--Agent--Ready-MCP-green)](https://modelcontextprotocol.io/)\n[![Docs](https://img.shields.io/badge/Docs-GitHub_Pages-blue)](https://ki7mt.github.io/wspr-ai-lite/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n## Workflows and Packaging Status\n\n**Versions**\n[![GitHub release](https://img.shields.io/github/v/release/KI7MT/wspr-ai-lite)](https://github.com/KI7MT/wspr-ai-lite/releases)\n[![GitHub tag](https://img.shields.io/github/tag/KI7MT/wspr-ai-lite?sort=semver)](https://github.com/KI7MT/wspr-ai-lite/tags)\n[![PyPI version](https://img.shields.io/pypi/v/wspr-ai-lite.svg)](https://pypi.org/project/wspr-ai-lite/)\n[![Python versions](https://img.shields.io/pypi/pyversions/wspr-ai-lite.svg)](https://pypi.org/project/wspr-ai-lite/)\n\n**CI/CD**\n[![CI](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/ci.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/ci.yml)\n[![Smoke](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/smoke.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/smoke.yml)\n[![Publish](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/release.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/release.yml)\n[![pre-commit](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/KI7MT/wspr-ai-lite/actions/workflows/pre-commit.yml)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\n---\n\n## Overview\n\n- **Analytics Dashboard**: Streamlit UI lets you explore WSPR spots with SNR trends, DX distance analysis, station activity, and \u201cQSO\u2011like\u201d reciprocity views.\n- **Canonical Schema**: Data is normalized into a portable DuckDB file\u2014consistent, lightweight, and ready for future backend upgrades.\n- **CLI Tools**: Click-based tools (`wspr-ai-lite`, `wspr-ai-lite-fetch`, `wspr-ai-lite-tools`) for downloading, ingesting, verifying, and managing the database.\n- **MCP Integration**: Experimental MCP server (`wspr-ai-lite-mcp`) exposing safe APIs for AI agents. A manifest defines permitted queries and access control.\n- **Roadmap (v0.4+ vision)**: MCP server will migrate to a **FastAPI + Uvicorn** backend with service control (start/stop/restart), enabling production-grade deployment.\n\n---\n\n## What Can You Do With It\n\nExplore **Weak Signal Propagation Reporter (WSPR)** data with an easy, local dashboard:\n\n- SNR distributions & monthly spot trends\n- Top reporters, most-heard TX stations\n- Geographic spread & distance/DX analysis\n- QSO-like reciprocal reports\n- Hourly activity heatmaps & yearly unique counts\n- Works on **Windows, Linux, macOS** \u2014 no heavy server required.\n\n## Key Features\n- Local DuckDB storage with efficient ingest + caching\n- Streamlit UI for interactive exploration\n- Distance/DX analysis with Maidenhead grid conversion\n- QSO-like reciprocal finder with configurable time window\n\n## Fast Performance\n- Columnar Storage: DuckDB is a columnar database, which allows for better data compression and faster query execution.\n- Vectorization: processes data in batches, optimized CPU usage, significantly faster than traditional OLTP databases.\n\n## Ease of Use\n- Simple Installation: DuckDB can be installed with just a few lines of code, and on any platform.\n- In-Process Operation: It runs within as a host application, eliminating network latency and simplifying data access.\n\n## Quickstart (Recommended: PyPI)\n\n### 1. Install from PyPI\n\n> optional but recommended: [create a Python virtual environment](https://docs.python.org/3/library/venv.html) first\n\n```bash\npython3 -m venv .venv && source .venv/bin/activate\npip install wspr-ai-lite\n```\n\n### 2. Ingest Data\nFetch WSPRNet monthly archives and load them into DuckDB:\n\n```bash\nwspr-ai-lite ingest --from 2014-07 --to 2014-07 --db data/wspr.duckdb\n```\n- Downloads compressed monthly CSVs (caches locally in .cache/)\n- Normalizes into data/wspr.duckdb\n- Adds extra fields (band, reporter grid, tx grid)\n\n### 3. Launch the Dashboard\n```bash\nwspr-ai-lite ui --db data/wspr.duckdb --port 8501\n```\nOpen http://localhost:8501 in your browser \ud83c\udf89\n\n\ud83d\udc49 For developers who want to hack on the code directly, see [Developer Setup](https://ki7mt.github.io/wspr-ai-lite/DEV_SETUP/).\n\n## Example Visualizations\n- SNR Distribution by Count\n- Monthly Spot Counts\n- Top Reporting Stations\n- Most Heard TX Stations\n- Geographic Spread (Unique Grids)\n- Distance Distribution + Longest DX\n- Best DX per Band\n- Activity by Hour \u00d7 Month\n- TX/RX Balance and QSO Success Rate\n\n## Development\n\nFor contributors and developers:\n- docs/dev-setup.md --> Development setup guide\n- docs/testing.md --> Testing instructions (pytest + Makefile)\n- docs/troubleshooting.md --> Common issues & fixes\n\n```bash\nmake setup-dev   # create venv and install deps\nmake ingest      # run ingest pipeline\nmake run         # launch Streamlit UI\nmake test        # run pytest suite\n```\n\n### Makefile Usage\n\nThere is an extensive list of Makefile targets that simplify operations. See `make help` for a full list of available targets.\n\n## Get Help\n- **Report a bug** \u2192 [New Bug Report](https://github.com/KI7MT/wspr-ai-lite/issues/new?template=bug_report.yml)\n- **Request a feature** \u2192 [New Feature Request](https://github.com/KI7MT/wspr-ai-lite/issues/new?template=feature_request.yml)\n- **Ask a question / share ideas** \u2192 [GitHub Discussions](https://github.com/KI7MT/wspr-ai-lite/discussions)\n- **Read the docs** \u2192 https://ki7mt.github.io/wspr-ai-lite/\n\n## Acknowledgements\n- Joe Taylor, K1JT, and the WSJT-X Development Team\n- WSPRNet community for providing global weak-signal data\n- Contributors to DuckDB and Streamlit\n- Amateur radio operators worldwide who share spots and keep the network alive\n\n## Contributing\nPull requests are welcome!\n\n## Roadmap\n- **Phase 1**: wspr-ai-lite (this project)\n  - Lightweight, local-only DuckDB + Streamlit dashboard\n- **Phase 2**: wspr-ai-analytics (modernize [wspr-analytics](https://github.com/KI7MT/wspr-analytics))\n  - Full analytics suite with ClickHouse, Grafana, AI Agents, and MCP integration\n  - Designed for heavier infrastructure and richer analysis\n\n## \ud83d\udcdc License\nMIT \u2014 free to use for amateur radio and research.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Lightweight WSPR analytics: DuckDB ingest + Streamlit dashboard.",
    "version": "0.4.0",
    "project_urls": {
        "Changelog": "https://github.com/KI7MT/wspr-ai-lite/blob/main/CHANGELOG.md",
        "Documentation": "https://ki7mt.github.io/wspr-ai-lite/",
        "Homepage": "https://github.com/KI7MT/wspr-ai-lite",
        "Issues": "https://github.com/KI7MT/wspr-ai-lite/issues",
        "Source": "https://github.com/KI7MT/wspr-ai-lite"
    },
    "split_keywords": [
        "wspr",
        " ham radio",
        " duckdb",
        " streamlit",
        " amateur radio",
        " analytics"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1a03627a0f02a58fc1dddf13d79edfa637e51d9bfa3023ceae2188329485ea2",
                "md5": "7678a82ea24de743b64ac11b1ff7f438",
                "sha256": "6a67f19c5741261c8b3888a8a2a111b374e2983bcf62fa224c029c81ce9149fe"
            },
            "downloads": -1,
            "filename": "wspr_ai_lite-0.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7678a82ea24de743b64ac11b1ff7f438",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 33141,
            "upload_time": "2025-08-26T08:26:56",
            "upload_time_iso_8601": "2025-08-26T08:26:56.138219Z",
            "url": "https://files.pythonhosted.org/packages/e1/a0/3627a0f02a58fc1dddf13d79edfa637e51d9bfa3023ceae2188329485ea2/wspr_ai_lite-0.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "009cfcefbc26aea85bd2519a98086b251068f08a3c10c53eddd187706f21099d",
                "md5": "b3a3bc7ef3aa1d9879056952c5d7ab73",
                "sha256": "fce90dc5278e58d503de3133f2481bb0be71d35d93fbcb9201728768fcc0b1e3"
            },
            "downloads": -1,
            "filename": "wspr_ai_lite-0.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b3a3bc7ef3aa1d9879056952c5d7ab73",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 34285,
            "upload_time": "2025-08-26T08:26:58",
            "upload_time_iso_8601": "2025-08-26T08:26:58.008647Z",
            "url": "https://files.pythonhosted.org/packages/00/9c/fcefbc26aea85bd2519a98086b251068f08a3c10c53eddd187706f21099d/wspr_ai_lite-0.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-26 08:26:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "KI7MT",
    "github_project": "wspr-ai-lite",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "streamlit",
            "specs": []
        },
        {
            "name": "duckdb",
            "specs": []
        },
        {
            "name": "pandas",
            "specs": []
        },
        {
            "name": "numpy",
            "specs": []
        },
        {
            "name": "requests",
            "specs": []
        },
        {
            "name": "pytest",
            "specs": []
        },
        {
            "name": "pyyaml-env-tag",
            "specs": []
        },
        {
            "name": "click",
            "specs": [
                [
                    ">=",
                    "8.1"
                ]
            ]
        },
        {
            "name": "commitizen",
            "specs": [
                [
                    ">=",
                    "3.30"
                ]
            ]
        }
    ],
    "lcname": "wspr-ai-lite"
}
        
Elapsed time: 3.87382s