Spaces:
Runtime error
Runtime error
Claude Opus 5.5
feat(embeddings): voyage-4-large remplace EmbeddingGemma (API Voyage, halfvec 1024)
57c8117 Download pyproject.toml from rahim237cm/jurix-api: direct link, hf CLI and curl.
- Browser
- Download file 4.97 kB
-
https://huggingface.co/spaces/rahim237cm/jurix-api/resolve/main/pyproject.toml
- Command line
-
hf download hf://spaces/rahim237cm/jurix-api/pyproject.toml
-
curl -L -o pyproject.toml https://huggingface.co/spaces/rahim237cm/jurix-api/resolve/main/pyproject.toml
4.97 kB
| [tool.poetry] | |
| name = "jurix-backend" | |
| version = "3.0.0" | |
| description = "JuriX v2.1 Backend API - Plateforme Juridique Camerounaise" | |
| authors = ["JuriX Team"] | |
| readme = "README.md" | |
| [tool.poetry.dependencies] | |
| python = "^3.11" | |
| # Core Framework | |
| fastapi = "^0.104.0" | |
| uvicorn = {extras = ["standard"], version = "^0.24.0"} | |
| # [email] fournit email-validator, requis par EmailStr au chargement des schemas | |
| pydantic = {extras = ["email"], version = "^2.5.0"} | |
| pydantic-settings = "^2.1.0" | |
| # Database | |
| sqlalchemy = "^2.0.23" | |
| alembic = "^1.12.1" | |
| psycopg2-binary = "^2.9.9" | |
| asyncpg = "^0.29.0" | |
| pgvector = ">=0.3.0,<1.0.0" | |
| # (Async background processing via FastAPI BackgroundTasks - no broker needed) | |
| # Security | |
| python-jose = {extras = ["cryptography"], version = "^3.3.0"} | |
| # bcrypt direct : passlib est incompatible avec bcrypt >= 4.1 | |
| bcrypt = ">=4.0,<6.0" | |
| python-multipart = "^0.0.6" | |
| # (Meilisearch replaced by PostgreSQL tsvector + pg_trgm) | |
| # Document Processing | |
| pypdf = "^3.17.0" | |
| pdfplumber = "^0.10.0" # Better text extraction with layout preservation | |
| python-docx = "^1.1.0" | |
| pytesseract = "^0.3.10" | |
| pdf2image = "^1.16.3" | |
| # NLP & ML - Détection Langue v2.1 | |
| # numpy 2, exige par opencv-python (Docling). fastText est contourne : | |
| # voir language_detector._fasttext_top1. Aligne sur requirements.txt. | |
| numpy = ">=2.0,<3.0" | |
| langdetect = "^1.0.9" | |
| # fasttext-wheel et non fasttext : le paquet source n'a pas de roue et echoue | |
| # a la compilation sur les Python recents. Aligne sur requirements.txt. | |
| fasttext-wheel = "^0.9.2" | |
| # ML - Catégorisation v2.1 | |
| scikit-learn = "^1.3.2" | |
| joblib = "^1.3.2" | |
| # LLM - Gemini API (SDK google-genai ; l'ancien google-generativeai est retire) | |
| google-genai = "^1.0.0" | |
| # Utils | |
| python-dotenv = "^1.0.0" | |
| httpx = ">=0.25.2,<1.0" # aligne sur requirements.txt ; Docling exige >=0.28 | |
| [tool.poetry.group.dev.dependencies] | |
| # Aligne sur requirements-dev.txt, le manifeste reellement installe. Les deux | |
| # avaient diverge : pytest 7 ici contre 8 la-bas, et pytest-asyncio 0.21 contre | |
| # 0.24 — or la portee des boucles d'evenements, dont depend toute la suite, a | |
| # change entre ces versions. | |
| # Testing | |
| pytest = "^8.3" | |
| pytest-asyncio = "^0.24" | |
| pytest-cov = "^5.0" | |
| pytest-mock = "^3.14" | |
| pytest-timeout = "^2.3" | |
| respx = "^0.21" | |
| httpx = ">=0.25.2,<1.0" # aligne sur requirements.txt ; Docling exige >=0.28 | |
| # aiosqlite retire : conftest.py tourne exclusivement sur PostgreSQL (pgvector, | |
| # tsvector et les fonctions PostgreSQL n'existent pas sous SQLite). | |
| # Linting & Formatting | |
| black = "^24.0" | |
| ruff = "^0.6" | |
| # Type stubs | |
| [build-system] | |
| requires = ["poetry-core"] | |
| build-backend = "poetry.core.masonry.api" | |
| [tool.black] | |
| line-length = 100 | |
| target-version = ['py311'] | |
| [tool.ruff] | |
| line-length = 100 | |
| target-version = "py311" | |
| # Le jeu de regles etait implicite : ruff tournait avec ses defauts et rendait | |
| # 1332 signalements, dont 98 faux positifs sur le motif `Depends()` de FastAPI | |
| # et 615 modernisations de style. Un controle que personne ne peut passer n'est | |
| # pas un controle. Ce qui suit ne retient que ce qui signale un VRAI defaut. | |
| [tool.ruff.lint] | |
| select = [ | |
| "F", # erreurs reelles : nom inconnu, import inutilise, f-string sans champ | |
| "E4", # imports mal places | |
| "E7", # comparaisons douteuses (== None, type(x) == y) | |
| "E9", # erreurs de syntaxe et d'execution | |
| "I", # ordre des imports | |
| "RUF100", # noqa devenus inutiles — ils masquent ce qu'ils ne masquent plus | |
| ] | |
| ignore = [ | |
| # `Depends()`, `Query()`, `File()` en valeur par defaut sont LA convention | |
| # FastAPI, pas un defaut. 98 occurrences legitimes. | |
| "B008", | |
| ] | |
| [tool.ruff.lint.per-file-ignores] | |
| # Les migrations Alembic importent les modeles pour enregistrer les metadonnees | |
| # sans les utiliser directement. | |
| # env.py doit inserer la racine du projet dans sys.path AVANT d'importer les | |
| # modeles : c'est le motif standard d'Alembic, et l'ordre n'est pas negociable. | |
| "alembic/env.py" = ["F401", "E402"] | |
| # Les scripts inserent eux aussi la racine dans sys.path avant leurs imports. | |
| "scripts/**" = ["E402"] | |
| # conftest surcharge DATABASE_URL avant d'importer l'application : l'ordre EST | |
| # la protection contre des tests qui ecriraient dans la base de developpement. | |
| # F841 : une variable de fixture liee et non lue nomme ce qui est mis en place. | |
| "tests/**" = ["E402", "F841"] | |
| [tool.mypy] | |
| python_version = "3.11" | |
| strict = true | |
| warn_return_any = true | |
| warn_unused_configs = true | |
| # NOTE : la configuration pytest vit exclusivement dans pytest.ini. | |
| # Un bloc [tool.pytest.ini_options] existait ici mais etait IGNORE en silence | |
| # (pytest.ini a la priorite), et les deux avaient deja diverge sur la liste des | |
| # marqueurs — avec --strict-markers, editer le mauvais fichier cassait la suite. | |
| [tool.pyrefly] | |
| # Exclude large directories to reduce memory usage | |
| project_excludes = [ | |
| "../frontend", | |
| "models/fasttext", | |
| "models/*.bin", | |
| "models/*.pkl", | |
| "../data", | |
| "data", | |
| "htmlcov", | |
| ".pytest_cache", | |
| ] | |
| python_version = "3.11" | |