[project] name = "ragsolver" version = "0.1.0" description = "Sistema multiagente de razonamiento verificable (RAG + Lean 4/Mathlib) — UPTC" requires-python = ">=3.12,<3.13" dependencies = [ "pydantic>=2.9", "pyyaml>=6.0", "lancedb>=0.17", "pyarrow>=17.0", "sentence-transformers>=3.3", "transformers>=4.51", "torch>=2.4", "huggingface_hub>=0.26", "pymupdf>=1.24", "langgraph>=0.2", "lean-interact>=0.7", "httpx>=0.27", # ragsolver/llm.py, rag/embed.py (backend llama): usado directamente, no sólo transitivo (auditoría DEP-1) "tenacity>=8.0", # ragsolver/llm.py: reintentos del cliente LLM ] [project.optional-dependencies] # Sólo necesario en la Fase 2 (ingesta de PDFs); pesado (modelos de layout/formula), se instala aparte. ingest = ["mineru>=2.5,<5"] # Demo Gradio (demo/app.py): gradio llegaba sólo como transitiva del extra `ingest` (vía mineru); # con `uv sync` a secas la demo fallaba en silencio (auditoría DEP-1). demo = ["gradio>=5.0"] dev = [ "pytest>=8.0", "pytest-cov>=5.0", "ranx>=0.3", # sólo se usa en tests/test_metrics.py para verificar rag/metrics.py contra la referencia (docs/DECISIONS.md #43); nunca en producción ] # ponytail: `pandas` y `accelerate` no se importan en ningún módulo de ragsolver/scripts/demo (grep # verificado); llegan igual como transitivas de `ranx`/`gradio` (pandas) y `mineru` (accelerate) en # los entornos que ya los necesitan. Confirmado sin ellos instalados (docs/DECISIONS.md #78): # tests/test_retriever_integration.py carga el embedder Y el reranker reales (rerank=True) en verde. [tool.uv] # ponytail: sin flash-attn por defecto (CUDA-only, no compila en ROCm — ver docs/PLAN_RAG.md §9.4). # Añadir sólo si la máquina de ejecución es NVIDIA y se quiere el acelerador opcional. [project.scripts] ragsolver = "ragsolver.cli:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/ragsolver"]