On-Premises · Air-Gap Ready · No API Keys Required

AI-Powered NIH Grant
Resubmission Assistant

Stop guessing which reviewer criticism matters most. The Grant Pivot Engine extracts critiques, maps them to your proposal, drafts your response, and simulates your study-section review—all on your own hardware.

See How It Works Deployment Guide
70B
Local LLM (llama3.3)
100%
On-Premises Data
5
Core Features
0
External API Keys

Built for NIH Researchers

NIH resubmissions are high-stakes and time-consuming. GPE gives PIs and their teams an AI co-pilot that runs entirely on your own workstation.

🔬

Principal Investigators

Understand every reviewer criticism in minutes, not days. Get a structured breakdown mapped directly to the sections of your proposal that need the most work.

📄

Grant Writers

AI-generated "Introduction to Resubmission" drafted in your PI's voice, grounded in their prior funded work. Edit, refine, and submit with confidence.

🏛️

Research Administrators

Full audit trail of every action. Air-gap mode keeps sensitive proposal text entirely off the internet. Compliance-ready from day one.

🔒

Data-Sensitive Labs

Runs on a single on-premises workstation with no cloud API calls for proposal data. Your IRB-sensitive content never leaves your network.

From Summary Statement to Submission-Ready Draft

Five steps take you from raw reviewer feedback to a polished resubmission introduction, with a simulated study-section check before you finalize.

1

Create a Project

Start a new project for your grant application. Provide the PI name and NIH mechanism (R01, R21, etc.) to set the context for all AI operations.

2

Upload Your Documents

Upload your original proposal (PDF/DOCX/TXT), the NIH summary statement, and any prior funded work to establish your PI's writing voice.

3

Extract & Map Critiques

The engine parses your summary statement and extracts every reviewer criticism—severity-ranked and automatically mapped to the specific proposal sections they target via RAG.

4

Draft the Resubmission Intro

One API call generates a structured "Introduction to Resubmission" that addresses all critiques in the correct NIH format, written in the PI's voice.

5

Simulate Your Study Section

Before submitting, run a simulated NIH study-section review of your draft. Receive reviewer-style scores and comments so you can iterate before the real deadline.

GPE API — Quick Tour
# 1. Create a project $ curl -X POST /api/projects \ -d '{"title":"My R01","pi_name":"Dr. Smith"}' → {"id":"abc123","title":"My R01"} # 2. Upload summary statement $ curl -X POST /api/projects/abc123/documents \ -F file=@summary.pdf \ -F doc_type=summary_statement → {"doc_id":"d01","n_chunks":42} # 3. Extract reviewer critiques $ curl -X POST /api/projects/abc123/critiques/extract \ -d '{"summary_doc_id":"d01"}' → {"critiques_saved":7} # 4. Draft resubmission intro $ curl -X POST /api/projects/abc123/respond → {"draft_id":"dr1","kind":"intro_to_resubmission"} # 5. Simulate study-section review $ curl -X POST /api/projects/abc123/simulate → {"score":2.1,"comments":[...]}

Everything You Need for a Stronger Resubmission

Five integrated capabilities that take your NIH grant from rejected to fundable—with no data leaving your network.

🔍

Critique Extraction

Automatically parse NIH summary statements and extract every reviewer criticism. Each critique is classified by the standard NIH review criterion and assigned a severity level so you know where to focus first.

Significance Investigators Innovation Approach Environment
major moderate minor
🗺️

RAG-Based Proposal Mapping

Each extracted critique is embedded and searched against your original proposal using local vector search. The engine surfaces the exact proposal passages reviewers likely had in mind—no manual cross-referencing required.

Local Embeddings Cosine Similarity nomic-embed-text
✍️

Response Drafting

Generate a complete "Introduction to Resubmission" that addresses every reviewer concern. The LLM retrieves your PI's prior funded work to match their writing voice, producing a draft that sounds like them—not a generic chatbot.

PI Voice Modeling NIH Format llama3.3:70b
🎯

Review Simulation

Before your real submission deadline, test your draft against a simulated NIH study section. Receive reviewer-style priority scores and detailed comments—so you can iterate until you're confident in your resubmission.

Priority Score Reviewer Comments Iterative Feedback
📡

Funder Feed Search

Search NIH RePORTER and Grants.gov for current funding opportunities matching your research area. Outbound requests are limited to allow-listed federal APIs—your proposal text never leaves the box.

NIH RePORTER Grants.gov Allow-Listed Only
📋

Full Audit Trail

Every action—project creation, document ingestion, critique extraction, drafts, and simulations—is logged to a tamper-evident SQLite audit log. Essential for institutional compliance and reproducibility.

SQLite Log User Attribution SSO Headers

Data Never Leaves Your Network

Designed for institutions that cannot afford to send sensitive grant proposals to third-party AI services.

Air-Gap Mode

Set GPE_AIR_GAPPED=1 to block all outbound HTTP traffic. Critique extraction, response drafting, and review simulation continue to work with zero internet access.

Local LLM Inference

Runs llama3.3:70b via Ollama on the GX10's NVIDIA GB10 GPU. No OpenAI, Anthropic, or other cloud API keys are required or used.

Outbound Allow-List

When not air-gapped, only api.reporter.nih.gov and api.grants.gov are reachable. Funder searches send keywords only—never proposal text.

On-Premises Storage

All data—documents, critiques, drafts, vectors—lives in a local SQLite database and NumPy array files under GPE_DATA_DIR. No cloud sync.

SSO-Ready

Place any reverse proxy (Shibboleth, oauth2-proxy) in front. The engine reads the authenticated user from the X-Remote-User header for per-action audit logging.

Audit Log

Every API action is written to a structured audit log with timestamp, authenticated user, action type, and detail payload. Meets most institutional audit requirements.

Cloudflare Hybrid Deployment

A Cloudflare Worker serves the static front-end from the edge while routing API calls through an encrypted tunnel to your on-premises GX10.

┌─────────────────────────────────────┐ │ Cloudflare Edge │ │ ┌─────────────────────────────┐ │ │ │ Cloudflare Worker │ │ │ │ • Serves static HTML/CSS │ │ │ │ • Routes /api/* → Tunnel │ │ │ └────────────┬────────────────┘ │ └───────────────│─────────────────────┘ │ HTTPS (Cloudflare Tunnel) ┌───────────────▼─────────────────────┐ │ GX10 On-Premises │ │ ┌──────────────────────────────┐ │ │ │ FastAPI (port 8800) │ │ │ │ • Critique extraction │ │ │ │ • Response drafting │ │ │ │ • Review simulation │ │ │ └──────────┬───────────────────┘ │ │ │ │ │ ┌──────────▼──────┐ ┌──────────┐ │ │ │ Ollama LLM │ │ SQLite + │ │ │ │ llama3.3:70b │ │ NumPy │ │ │ │ GB10 GPU 128GB │ │ Vectors │ │ │ └──────────────────┘ └──────────┘ │ └─────────────────────────────────────┘

☁️ Cloudflare Layer

  • • Static site served from CDN edge nodes
  • • Zero-config DDoS protection & TLS
  • • Encrypted tunnel via cloudflared
  • • Optional: rate limiting, access rules, SSO

🖥️ GX10 On-Premises Layer

  • • FastAPI backend handles all LLM operations
  • • Ollama serves llama3.3:70b on NVIDIA GB10
  • • SQLite + NumPy: no external DB needed
  • • All sensitive data stays on-premises

Deploy in Four Steps

Bring up the full hybrid stack—on-premises LLM backend plus Cloudflare edge—in an afternoon.

1

Install & Start the Engine on GX10

Run the one-line installer on your ASUS Ascent GX10. It installs Ollama, pulls llama3.3:70b and nomic-embed-text, sets up the Python venv, and registers a systemd service at http://<gx10-ip>:8800.

$ sudo bash grant-pivot-engine/install_gx10.sh ● Downloading Ollama (ARM64)… ● Pulling llama3.3:70b (43 GB)… ● Pulling nomic-embed-text… ● Installing Python venv… ✓ grant-pivot-engine service started on :8800
2

Create a Cloudflare Tunnel

On the GX10, install cloudflared, create a named tunnel, and configure it to forward to localhost:8800. Start the tunnel as a systemd service for automatic reconnection.

$ cloudflared tunnel create gpe-api-tunnel $ cloudflared tunnel route dns gpe-api-tunnel api.gpe.example.com $ cloudflared service install
3

Deploy the Cloudflare Worker

From the cloudflare-worker/ directory, deploy with Wrangler. Set the TUNNEL_BASE_URL environment variable in the Cloudflare dashboard to point to your tunnel hostname.

$ cd grant-pivot-engine/cloudflare-worker $ npx wrangler deploy ✓ Deployed gpe-hybrid-proxy https://gpe-hybrid-proxy.your-account.workers.dev
4

Verify End-to-End

Hit the public Worker URL to confirm the static site loads, then check /api/status to confirm the tunnel reaches the GX10 backend. You're ready to create your first project.

$ curl https://gpe.example.com/api/status → {"status":"ok","model":"llama3.3:70b","mock":false} ✓ Engine is live and reachable
💡
Development without a GX10?

Run the backend in mock mode on any laptop with no GPU or model server required: GPE_MOCK_LLM=1 uvicorn app.main:app --port 8800. All endpoints return deterministic canned responses—perfect for CI pipelines and UI development.

Ready to Transform Your Next Resubmission?

GPE is an open, internal research tool. Deploy it on your GX10 today and take the guesswork out of your next NIH resubmission cycle.