"""Cliente Anthropic compartido y cacheado. Antes cada llamada (scoring de cada chunk, generación, outline, diff…) instanciaba un AsyncAnthropic nuevo — cientos de veces por sesión, cada uno con su propio pool de conexiones. Se reutiliza una única instancia por proceso. """ from functools import lru_cache from src.config import settings @lru_cache(maxsize=1) def get_anthropic_client(): import anthropic return anthropic.AsyncAnthropic(api_key=settings.anthropic_api_key)