Files
TicketTracker/tickettracker/config.py
laurent be4d4a7076 feat: fuzzy matching Picnic ↔ Leclerc + page /matches dans le dashboard
Nouvelle table product_matches (status: pending/validated/rejected).
Matching via RapidFuzz token_sort_ratio, seuil configurable (défaut 85%).

Workflow :
  1. python -m tickettracker.cli match [--threshold 85]
     → calcule et stocke les paires candidates
  2. http://localhost:8000/matches
     → l'utilisateur valide ou rejette chaque paire
  3. La comparaison de prix enrichie avec les paires validées

Nouvelles dépendances : rapidfuzz, watchdog (requirements.txt).
10 tests ajoutés (test_matcher.py), tous passent.
Suite complète : 129 passent, 1 xfail, 0 échec.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 18:02:48 +01:00

55 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Configuration de TicketTracker.
Toutes les valeurs sensibles (clé API) sont lues depuis des variables
d'environnement et ne doivent jamais être codées en dur.
Variables d'environnement disponibles :
TICKETTRACKER_LLM_URL URL de l'endpoint OpenAI-compatible
TICKETTRACKER_LLM_MODEL Nom du modèle LLM
TICKETTRACKER_LLM_API_KEY Clé API (obligatoire pour Mammouth)
TICKETTRACKER_LLM_TIMEOUT Timeout en secondes (défaut : 60)
TICKETTRACKER_LLM_BATCH_SIZE Taille des batchs de normalisation (défaut : 20)
"""
import os
from pathlib import Path
# ---------------------------------------------------------------------------
# Base de données
# ---------------------------------------------------------------------------
from tickettracker.db.schema import DEFAULT_DB_PATH as _DEFAULT_DB_PATH
# Chemin vers la base SQLite (surchargeable par variable d'environnement)
DB_PATH: Path = Path(os.environ.get("TICKETTRACKER_DB_PATH", str(_DEFAULT_DB_PATH)))
# ---------------------------------------------------------------------------
# LLM
# ---------------------------------------------------------------------------
# URL de l'endpoint compatible OpenAI (Mammouth)
LLM_URL: str = os.environ.get(
"TICKETTRACKER_LLM_URL",
"https://api.mammouth.ai/v1/chat/completions",
)
# Modèle à utiliser
LLM_MODEL: str = os.environ.get("TICKETTRACKER_LLM_MODEL", "mistral-small-3.2-24b-instruct")
# Clé API — jamais de valeur par défaut sensible ici
LLM_API_KEY: str = os.environ.get("TICKETTRACKER_LLM_API_KEY", "")
# Timeout par appel en secondes (le modèle local peut être lent)
LLM_TIMEOUT: int = int(os.environ.get("TICKETTRACKER_LLM_TIMEOUT", "60"))
# Nombre d'articles traités par appel LLM
LLM_BATCH_SIZE: int = int(os.environ.get("TICKETTRACKER_LLM_BATCH_SIZE", "20"))
# ---------------------------------------------------------------------------
# Fuzzy matching
# ---------------------------------------------------------------------------
# Seuil de similarité minimum (0100) pour rapprocher un produit Picnic d'un produit Leclerc
FUZZY_THRESHOLD: float = float(os.environ.get("TICKETTRACKER_FUZZY_THRESHOLD", "85"))