CoolFace
Modelpublic

clarkkitchen22/PaintbotMistral-7b

sourceHugging Faceapache-2.0updated 11mo agoView on Hugging Face
1likes9downloads
Model Card

๐ŸŒ Geopolitical Analysis Agent

Advanced strategic forecasting and simulation engine combining RAG, SQLite, ChromaDB, and Claude AI

What Is This?

A production-ready geopolitical analysis system that:

  • โ€”Answers complex "what-if" questions about world events
  • โ€”Models quantitative scenarios (tank stocks, production rates, timelines)
  • โ€”Combines structured data + unstructured knowledge via RAG
  • โ€”Provides rigorous analysis like a think tank war games coordinator
  • โ€”Prepares training data for fine-tuning specialized models

Key Features

๐Ÿง  Intelligent RAG Architecture

  • โ€”Vector search with ChromaDB for semantic retrieval
  • โ€”Structured database with SQLite for facts, metrics, inventories
  • โ€”Hybrid retrieval combining both sources for comprehensive context

๐Ÿ“Š Quantitative Modeling

  • โ€”Project military inventories over time
  • โ€”Calculate attrition rates and production capacities
  • โ€”Model economic sustainability scenarios
  • โ€”Compare alternative pathways

๐Ÿ’พ Production-Ready Stack

  • โ€”FastAPI backend with async support
  • โ€”SQLAlchemy ORM for database management
  • โ€”Sentence Transformers for embeddings
  • โ€”Claude Sonnet 4 for analysis
  • โ€”Clean HTML/JS frontend

๐ŸŽฏ Example Queries

"Where will Russia's tank stock be in 5 years with 15% annual 
losses and 200 tanks/year production?"

"What's China's timeline to semiconductor parity with Taiwan 
if sanctions continue vs. if they're lifted?"

"How long can Iran sustain its proxy network at $60/barrel 
vs $100/barrel oil prices?"

"Model European energy security in 2030 under three scenarios: 
diversified LNG, accelerated renewables, or partial Russian 
reconciliation"

Quick Start

1. Install

bash
cd geopolitical-agent/backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

2. Configure

Create .env file:

bash
ANTHROPIC_API_KEY=your_key_here

3. Initialize

bash
python -c "from models.database import init_db; init_db()"

4. Run

bash
python app.py

Server starts on http://localhost:8000

5. Open Frontend

Open frontend/index.html in browser or:

bash
cd frontend
python -m http.server 8080

6. Load Sample Data

Click "Load Sample Data" button in UI or:

bash
curl -X POST http://localhost:8000/api/data/load-sample-data

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              Frontend (HTML/JS)                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚ REST API
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           FastAPI Backend                       โ”‚
โ”‚                                                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚      Analysis Service (Claude + RAG)     โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚            โ”‚                    โ”‚               โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚  RAG Service    โ”‚   โ”‚  Data Ingestion  โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚            โ”‚                    โ”‚               โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚   ChromaDB      โ”‚   โ”‚     SQLite       โ”‚   โ”‚
โ”‚   โ”‚  (Vectors)      โ”‚   โ”‚   (Structured)   โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Project Structure

geopolitical-agent/
โ”œโ”€โ”€ backend/
โ”‚   โ”œโ”€โ”€ app.py                    # Main FastAPI app
โ”‚   โ”œโ”€โ”€ config.py                 # Configuration
โ”‚   โ”œโ”€โ”€ requirements.txt          # Dependencies
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ”œโ”€โ”€ database.py          # SQLAlchemy models
โ”‚   โ”‚   โ””โ”€โ”€ embeddings.py        # ChromaDB manager
โ”‚   โ”œโ”€โ”€ services/
โ”‚   โ”‚   โ”œโ”€โ”€ rag_service.py       # RAG orchestration
โ”‚   โ”‚   โ”œโ”€โ”€ analysis_service.py  # Analysis engine
โ”‚   โ”‚   โ””โ”€โ”€ data_ingestion.py    # Data loading
โ”‚   โ”œโ”€โ”€ routes/
โ”‚   โ”‚   โ”œโ”€โ”€ query.py             # Query endpoints
โ”‚   โ”‚   โ””โ”€โ”€ data.py              # Data endpoints
โ”‚   โ””โ”€โ”€ data/
โ”‚       โ”œโ”€โ”€ geopolitical.db      # SQLite database
โ”‚       โ””โ”€โ”€ chroma_db/           # Vector store
โ”œโ”€โ”€ frontend/
โ”‚   โ””โ”€โ”€ index.html               # Web interface
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ sample_data/             # Sample datasets
โ”‚   โ””โ”€โ”€ training/                # Fine-tuning prep
โ””โ”€โ”€ docs/
    โ”œโ”€โ”€ SETUP.md                 # Setup guide
    โ””โ”€โ”€ API.md                   # API documentation

Database Schema

Countries

  • โ€”Basic country attributes
  • โ€”GDP, population, military budget
  • โ€”Regional categorization

Military Assets

  • โ€”Equipment inventories (tanks, aircraft, etc.)
  • โ€”Operational rates
  • โ€”Production and attrition rates

Geopolitical Events

  • โ€”Timeline of significant events
  • โ€”Impact scoring
  • โ€”Related countries tracking

Metrics Time Series

  • โ€”Economic indicators
  • โ€”Production statistics
  • โ€”Any quantitative metric over time

Knowledge Sources

  • โ€”Document provenance tracking
  • โ€”Credibility scoring
  • โ€”Source metadata

API Examples

Analyze Query

bash
curl -X POST http://localhost:8000/api/query/analyze \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Your geopolitical question here",
    "use_cache": true
  }'

Add Knowledge

bash
curl -X POST http://localhost:8000/api/data/add-document \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Your geopolitical knowledge document",
    "metadata": {"type": "report", "country": "China"}
  }'

Full API documentation: docs/API.md

Fine-Tuning Preparation

Export Training Data

python
from models.database import SessionLocal, AnalysisCache
import json

db = SessionLocal()
analyses = db.query(AnalysisCache).all()

training_data = []
for analysis in analyses:
    training_data.append({
        "messages": [
            {
                "role": "system",
                "content": "You are a geopolitical analysis expert..."
            },
            {
                "role": "user",
                "content": analysis.query_text
            },
            {
                "role": "assistant",
                "content": analysis.analysis_result
            }
        ]
    })

with open("training_data.jsonl", "w") as f:
    for item in training_data:
        f.write(json.dumps(item) + "\n")

LoRA Training

Use the exported data to fine-tune a LoRA adapter on geopolitical data:

  1. 1.Export queries/responses from analysis_cache table
  2. 2.Format as JSONL for LoRA training
  3. 3.Train LoRA adapter on domain-specific data
  4. 4.Deploy fine-tuned model for specialized analysis

Extending the System

Add New Countries

python
from models.database import SessionLocal, Country

db = SessionLocal()
country = Country(
    name="Pakistan",
    iso_code="PAK",
    region="South Asia",
    population=235000000,
    gdp_usd=376000000000,
    military_budget_usd=11000000000
)
db.add(country)
db.commit()

Add Military Assets

python
from models.database import MilitaryAsset

asset = MilitaryAsset(
    country_id=country.id,
    asset_type="Fighter Aircraft",
    asset_name="JF-17 Thunder",
    quantity=150,
    operational_rate=0.75,
    production_rate_yearly=25,
    attrition_rate_yearly=0.05
)
db.add(asset)
db.commit()

Add Knowledge Documents

python
from services.data_ingestion import DataIngestionService

service = DataIngestionService()
service.add_knowledge_document(
    text="Your geopolitical analysis or fact...",
    metadata={
        "type": "intelligence_assessment",
        "country": "Iran",
        "classification": "open_source"
    }
)

Configuration

Edit backend/config.py:

python
# Embedding model (smaller = faster, larger = better)
EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"

# RAG retrieval settings
TOP_K_RESULTS = 5              # Number of relevant chunks
SIMILARITY_THRESHOLD = 0.7      # Minimum relevance score

# Claude settings
DEFAULT_MODEL = "claude-sonnet-4-20250514"
MAX_TOKENS = 4000
TEMPERATURE = 0.3               # Lower = more analytical

Performance Tips

  1. 1.Adjust retrieval: Tune TOP_K_RESULTS and SIMILARITY_THRESHOLD
  2. 2.Enable caching: Set use_cache=true for repeated queries
  3. 3.Batch document ingestion: Use bulk-add for multiple documents
  4. 4.Index optimization: Add SQLite indexes for frequent queries

Use Cases

Strategic Planning

  • โ€”War games scenario modeling
  • โ€”Resource sustainability analysis
  • โ€”Timeline projections

Intelligence Analysis

  • โ€”Capability gap assessments
  • โ€”Economic constraint modeling
  • โ€”Production capacity tracking

Academic Research

  • โ€”Geopolitical trend analysis
  • โ€”Historical pattern recognition
  • โ€”Comparative case studies

Policy Analysis

  • โ€”Sanction impact modeling
  • โ€”Alliance dynamics assessment
  • โ€”Economic leverage analysis

Roadmap

  • โ€”[ ] Real-time data ingestion from news sources
  • โ€”[ ] Multi-agent debate for competing analyses
  • โ€”[ ] Temporal reasoning for historical patterns
  • โ€”[ ] Export to PDF reports
  • โ€”[ ] WebSocket streaming for long analyses
  • โ€”[ ] Named Entity Recognition for auto-tagging
  • โ€”[ ] Graph database for relationship modeling

Contributing

Areas for contribution:

  1. 1.Data: Add domain-specific geopolitical datasets
  2. 2.Models: Integrate specialized embedding models
  3. 3.Analysis: Enhance quantitative modeling functions
  4. 4.UI: Improve frontend visualization
  5. 5.Documentation: Add tutorials and examples

License

MIT License - See LICENSE file

Citation

If you use this system in research:

bibtex
@software{geopolitical_analysis_agent,
  title={Geopolitical Analysis Agent: RAG-based Strategic Forecasting},
  author={[Your Name]},
  year={2025},
  url={https://github.com/yourusername/geopolitical-agent}
}

Support

  • โ€”Documentation: docs/
  • โ€”API Reference: docs/API.md
  • โ€”Setup Guide: docs/SETUP.md
  • โ€”Issues: GitHub Issues

Acknowledgments

Built with:


Ready to analyze the world? Start with `python app.py` ๐Ÿš€