Foundation (phase 01, verified): - FastAPI app: /api/health, /api/suggestions, /api/chat (placeholder), static frontend served locally (no CDN) - Postgres 17 + pgvector via db/Containerfile + compose.yaml (podman compose up -d db), Alembic initial migration (documents, chunks with vector(768), query_log) - LLM client targeting https://aipi.reeseapps.com/v1 (turbo/embed); scripts/llm_probe.py verified models + 768-dim embeddings live - Conditional debugpy: imported only when DEBUGPY=1 (attach on demand, :5678); logging config for clean single-line logs - Frontend shell: mobile-first chat + Sources pages, tokens, a11y baselines - Tests: 24 unit+integration (99% coverage on app/), ruff + pyright clean, Playwright smoke E2E (3 tests) against a deterministic mock LLM - Planning: .agent/PLAN.md (architecture + LOCKED decisions), AGENTS.md, 6 user stories, 7 phase files (one story / one phase / one Playwright suite each)
50 lines
1.2 KiB
TOML
50 lines
1.2 KiB
TOML
[project]
|
|
name = "brain-of-reese"
|
|
version = "0.1.0"
|
|
description = "Brain of Reese — a chippy RAG chatbot that answers questions about Reese's Homelab and Deployments, powered by self-hosted models."
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
# --- Web framework ---
|
|
"fastapi>=0.115,<1.0",
|
|
"uvicorn[standard]>=0.30,<1.0",
|
|
"pydantic>=2.7,<3.0",
|
|
"pydantic-settings>=2.3,<3.0",
|
|
"python-dotenv>=1.0,<2.0",
|
|
# --- Database (PostgreSQL 17 + pgvector) ---
|
|
"sqlalchemy>=2.0,<2.1",
|
|
"alembic>=1.13,<2.0",
|
|
"psycopg[binary]>=3.1,<4.0",
|
|
"pgvector>=0.3,<1.0",
|
|
# --- LLM client (OpenAI-compatible, self-hosted "aipi") ---
|
|
"httpx>=0.27,<1.0",
|
|
"openai>=1.40,<3.0",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"debugpy>=1.8",
|
|
"ruff>=0.5",
|
|
"pyright>=1.1",
|
|
"pytest>=8.2",
|
|
"pytest-cov>=5.0",
|
|
"playwright>=1.45",
|
|
]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "W", "I", "UP", "B", "SIM"]
|
|
|
|
[tool.pyright]
|
|
pythonVersion = "3.12"
|
|
typeCheckingMode = "standard"
|
|
include = ["app", "scripts", "alembic", "tests"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests/unit", "tests/integration"]
|
|
pythonpath = ["."]
|
|
addopts = "-q"
|