Metadata-Version: 2.4
Name: roshni
Version: 0.1.0
Summary: Personal data infrastructure framework — health, finance, journals, and AI agents
Project-URL: Homepage, https://github.com/uabbasi/roshni
Project-URL: Repository, https://github.com/uabbasi/roshni
Project-URL: Issues, https://github.com/uabbasi/roshni/issues
Author-email: Usman Abbasi <uabbasi@gmail.com>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agent,finance,health,journal,personal-data,rag
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.11
Requires-Dist: aiofiles>=23.2
Requires-Dist: loguru>=0.7
Requires-Dist: python-dotenv>=0.21
Requires-Dist: pyyaml>=6.0
Provides-Extra: agent
Requires-Dist: litellm>=1.60; extra == 'agent'
Provides-Extra: agent-langchain
Requires-Dist: langchain-core>=1.2; extra == 'agent-langchain'
Requires-Dist: langchain>=0.3; extra == 'agent-langchain'
Requires-Dist: litellm>=1.60; extra == 'agent-langchain'
Provides-Extra: all
Requires-Dist: apscheduler>=3.10; extra == 'all'
Requires-Dist: cvxpy>=1.6; extra == 'all'
Requires-Dist: duckdb>=1.4; extra == 'all'
Requires-Dist: faiss-cpu>=1.11; extra == 'all'
Requires-Dist: fitbit>=0.3; extra == 'all'
Requires-Dist: google-api-python-client>=2.123; extra == 'all'
Requires-Dist: google-auth-oauthlib>=1.0; extra == 'all'
Requires-Dist: google-cloud-storage>=2.16; extra == 'all'
Requires-Dist: gspread-dataframe>=4.0; extra == 'all'
Requires-Dist: gspread>=6.1; extra == 'all'
Requires-Dist: litellm>=1.60; extra == 'all'
Requires-Dist: pandas>=2.2; extra == 'all'
Requires-Dist: python-telegram-bot>=21.0; extra == 'all'
Requires-Dist: requests-oauthlib>=2.0; extra == 'all'
Requires-Dist: requests>=2.32; extra == 'all'
Requires-Dist: scikit-learn>=1.5; extra == 'all'
Requires-Dist: sentence-transformers>=4.0; extra == 'all'
Requires-Dist: yfinance>=0.2; extra == 'all'
Provides-Extra: dev
Requires-Dist: google-api-python-client>=2.123; extra == 'dev'
Requires-Dist: google-auth-oauthlib>=1.0; extra == 'dev'
Requires-Dist: google-cloud-storage>=2.16; extra == 'dev'
Requires-Dist: gspread-dataframe>=4.0; extra == 'dev'
Requires-Dist: gspread>=6.1; extra == 'dev'
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pandas>=2.2; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.1; extra == 'dev'
Requires-Dist: pytest-cov>=6.2; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: requests>=2.32; extra == 'dev'
Requires-Dist: ruff>=0.12; extra == 'dev'
Requires-Dist: scikit-learn>=1.5; extra == 'dev'
Requires-Dist: sentence-transformers>=4.0; extra == 'dev'
Provides-Extra: financial
Requires-Dist: pandas>=2.2; extra == 'financial'
Provides-Extra: financial-full
Requires-Dist: cvxpy>=1.6; extra == 'financial-full'
Requires-Dist: duckdb>=1.4; extra == 'financial-full'
Requires-Dist: pandas>=2.2; extra == 'financial-full'
Requires-Dist: yfinance>=0.2; extra == 'financial-full'
Provides-Extra: fitbit
Requires-Dist: fitbit>=0.3; extra == 'fitbit'
Requires-Dist: pandas>=2.2; extra == 'fitbit'
Requires-Dist: requests-oauthlib>=2.0; extra == 'fitbit'
Requires-Dist: requests>=2.32; extra == 'fitbit'
Provides-Extra: gateway-telegram
Requires-Dist: apscheduler>=3.10; extra == 'gateway-telegram'
Requires-Dist: python-telegram-bot>=21.0; extra == 'gateway-telegram'
Provides-Extra: google
Requires-Dist: google-api-python-client>=2.123; extra == 'google'
Requires-Dist: google-auth-oauthlib>=1.0; extra == 'google'
Requires-Dist: google-cloud-storage>=2.16; extra == 'google'
Requires-Dist: gspread-dataframe>=4.0; extra == 'google'
Requires-Dist: gspread>=6.1; extra == 'google'
Provides-Extra: health
Requires-Dist: pandas>=2.2; extra == 'health'
Requires-Dist: requests>=2.32; extra == 'health'
Provides-Extra: journal
Requires-Dist: scikit-learn>=1.5; extra == 'journal'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal'
Provides-Extra: journal-chroma
Requires-Dist: chromadb>=1.0; extra == 'journal-chroma'
Requires-Dist: scikit-learn>=1.5; extra == 'journal-chroma'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal-chroma'
Provides-Extra: journal-faiss
Requires-Dist: faiss-cpu>=1.11; extra == 'journal-faiss'
Requires-Dist: scikit-learn>=1.5; extra == 'journal-faiss'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal-faiss'
Provides-Extra: llm
Requires-Dist: litellm>=1.60; extra == 'llm'
Provides-Extra: storage-gcs
Requires-Dist: google-cloud-storage>=2.16; extra == 'storage-gcs'
Description-Content-Type: text/markdown

# Roshni

> *roshni* (روشنی) — "light" in Urdu

Personal data infrastructure framework for health tracking, financial planning, journal search, and AI agents.

## Install

```bash
pip install roshni                    # Core only (config, secrets, caching)
pip install roshni[health]            # + Health data collection framework
pip install roshni[fitbit]            # + Fitbit collector
pip install roshni[journal-faiss]     # + Journal RAG with FAISS
pip install roshni[financial-full]    # + Financial calculators + market data
pip install roshni[all]               # Everything
```

## Modules

| Module | What it does | Optional dep |
|--------|-------------|--------------|
| `core` | Config, secrets, caching, storage, LLM abstraction | *(included)* |
| `health` | Health data collection protocol + ETL base | `health` |
| `financial` | Mortgage, zakat, tax calculators, market data | `financial` / `financial-full` |
| `journal` | RAG-based journal search (chunking, embeddings, retrieval) | `journal-faiss` / `journal-chroma` |
| `agent` | AI agent framework (base agent, router, circuit breaker) | `agent` |
| `gateway` | Messaging gateway (Telegram bot framework) | `gateway-telegram` |
| `integrations` | Google Sheets, Drive, Gmail, Cloud Storage wrappers | `google` |

## Quick Start

### Configuration

```python
from roshni.core.config import Config

config = Config(
    config_file="config/config.yaml",
    env_prefix="MYAPP_",
    data_dir="~/.myapp-data",
)

print(config.get("llm.provider"))
```

### Secrets Management

```python
from roshni.core.secrets import SecretsManager, EnvProvider, YamlFileProvider

manager = SecretsManager(providers=[
    EnvProvider("MYAPP_"),
    YamlFileProvider("~/.myapp/secrets.yaml"),
])

api_key = manager.get("trello.api_key")
all_trello = manager.get_namespace("trello")
```

### Financial Calculators

```python
from roshni.financial.calculators import MortgageTerms, calculate_monthly_payment

terms = MortgageTerms(
    balance=500_000,
    current_rate=0.065,
    is_interest_only=False,
    remaining_term_years=30,
)

payment = calculate_monthly_payment(terms)
```

### Health Data Collection

```python
from roshni.health.collector import HealthCollector, BaseCollector
from roshni.health.models import DailyHealth

class MyCollector(BaseCollector):
    name = "my_tracker"

    def collect(self, start_date, end_date):
        # Fetch from your data source
        return [DailyHealth(date=start_date, steps=10000, sleep_hours=7.5)]
```

## Optional Dependencies

| Extra | Installs | Use case |
|-------|----------|----------|
| `health` | pandas, requests | Health data pipelines |
| `fitbit` | fitbit, requests-oauthlib | Fitbit API collector |
| `journal` | sentence-transformers, scikit-learn | Journal embeddings + search |
| `journal-faiss` | faiss-cpu | FAISS vector backend |
| `journal-chroma` | chromadb | ChromaDB vector backend |
| `financial` | pandas | Financial data analysis |
| `financial-full` | yfinance, duckdb, cvxpy | Market data + portfolio optimization |
| `llm` | litellm | Multi-provider LLM abstraction |
| `agent` | litellm | AI agent framework |
| `agent-langchain` | langchain, langchain-core | LangChain agent integration |
| `gateway-telegram` | python-telegram-bot, apscheduler | Telegram bot gateway |
| `google` | gspread, google-api-python-client, etc. | Google API integrations |
| `storage-gcs` | google-cloud-storage | GCS storage backend |

## Development

```bash
git clone https://github.com/uabbasi/roshni.git
cd roshni
uv sync --extra dev

# Run tests
uv run pytest tests/

# Lint + format
uv run ruff check . --fix && uv run ruff format .

# Type check
uv run mypy src/roshni/
```

## License

Apache 2.0
