Offline-first AI assistant for Urdu and other low-resource languages, focused on privacy, accessibility, and culturally aware design.
# Zariya
Zariya is an offline-first AI assistant for Urdu and other low-resource languages. Once a model is downloaded, it runs entirely on your own device, so it works without an internet connection and doesn't depend on any cloud API to hold a conversation.
## Why this exists
A lot of AI tools quietly assume two things: that you have a solid internet connection, and that your language already has good support baked into the model. Neither of those is true everywhere, and they're especially not true for a lot of Urdu speakers. I started Zariya to see how far a genuinely local, privacy-first AI system could go, and to make sure Urdu wasn't treated as an afterthought.
## Two versions in this repo
The project has gone through two iterations, and both still work:
- **`webapp/`** - the version I'm actively developing. A Flask backend with a browser front end. It talks to a local model through Ollama, streams responses back token by token, and falls back to a small offline knowledge engine (no dependencies, no network calls) if a model isn't available yet. Claude API access, web search, and GitHub sign-in are all optional and configured server-side, so nobody using the app ever has to hold an API key.
- **the original Streamlit app** (`app/`, `core/`, `models/`) - a single-process version that loads a GGUF model directly with `llama.cpp`. Simpler to reason about, no server involved.
If you're only going to run one, use the web app - see `webapp/README.md` for its full setup.
## Features
- Works fully offline once a model is downloaded
- Bilingual Urdu/English support
- Local inference - no data leaves your machine unless you turn on an optional cloud feature yourself
- Streaming, token-by-token responses in the web app
- A small offline knowledge engine as a safety net when no model is loaded yet
- Semantic fallback search over the knowledge base: when the fast keyword matcher comes up empty, the web app can optionally use a local Ollama embedding model to f …