Download docs/development.md from MikelWL/ConverTA: direct link, hf CLI and curl.
- Browser
- Download file 3.74 kB
-
https://huggingface.co/spaces/MikelWL/ConverTA/resolve/main/docs/development.md
- Command line
-
hf download hf://spaces/MikelWL/ConverTA/docs/development.md
-
curl -L -o development.md https://huggingface.co/spaces/MikelWL/ConverTA/resolve/main/docs/development.md
Development Guide
This guide captures what future contributors need to know to extend the AI Survey Simulator quickly.
Environment Essentials
- Python 3.9+
- Ollama running locally (or another LLM provider wired into
llm_client.py) - Optional GPU for faster inference
cp .env.example .env # adjust values as needed
pip install -r requirements.txt
Key environment variables (see .env.example):
LLM_BACKENDβollama(local default) oropenrouterLLM_HOST/LLM_MODELβ target endpoint & model IDLLM_API_KEY,LLM_SITE_URL,LLM_APP_NAMEβ required when using OpenRouterAPP_PASSWORDβ optional shared password gate (when set, the UI + API require login)FRONTEND_BACKEND_BASE_URLandFRONTEND_WEBSOCKET_URLβ how the UI talks to FastAPILOG_LEVELβ INFO by default
Running the Stack
Recommended (HF-like) Local Run
This project is deployed on Hugging Face Spaces using Docker. The closest local workflow is to run the Docker image locally:
./run_docker_local.sh
One Command (legacy local stack)
./run_local.sh
- Starts
ollama serve(if not already running) β this mode expectsLLM_BACKEND=ollama - Launches FastAPI backend and Gradio frontend in the background
- Press
Ctrl+Cto stop all three processes
Manual Terminals (for logs, legacy)
# Terminal 1
ollama serve
# Terminal 2
cd backend
uvicorn api.main:app --reload --host 0.0.0.0 --port 8000
# Terminal 3
cd frontend
python gradio_app.py
Web UI (React hybrid)
The primary demo UI is served by frontend/react_gradio_hybrid.py and includes the analysis panel (bottom-up, care rubric, and top-down codebook categories).
When running outside Docker, you typically run the backend and the web UI separately; when running in Docker/HF, the backend is mounted under /api inside the same server.
The UI includes a Configuration view used to edit app-wide settings and personas stored in SQLite at DB_PATH (shared across users on HF). Persona selection for actually running conversations is done in the AI-to-AI and Human-to-AI panels.
Making Changes Safely
- All configuration flows through
config/settings.py; add new settings there and reference them viaget_settings(). - When adding LLM providers, implement a new client in
backend/core/llm_client.pyand hook it into the existing factory. - Keep WebSocket message schemas stable (
backend/api/conversation_ws.py); update both backend and frontend consumers if you change them.
Testing & Verification
- No automated test suite yet. Add lightweight
pytestmodules undertests/as you extend functionality. - Manually verify through the primary web UI (
frontend/react_gradio_hybrid.py). - For persistence + history: complete a run, confirm it appears in History, restart the container, and confirm it still appears and exports download.
- For persona config: edit the shared system prompt and/or a user persona in Configuration, click Save, and confirm the change is reflected in subsequent runs.
- If you need to debug the conversation loop, instrument
backend/core/conversation_manager.pyor launch a shell and run it directly.
Notes on Persistence (HF)
Hugging Face Spaces provide a persistent volume (typically mounted at /data in Docker Spaces). This repo persists sealed runs (conversation finished + analysis succeeded) to SQLite at DB_PATH (recommended on HF: /data/converta/converta.db).
Capabilities
See docs/capabilities.md for a concise description of what the app does today.
Note: the resource agent retries twice on transient OpenRouter errors (5s, 10s) before surfacing a failure in the UI.