Spaces:
Sleeping
Sleeping
| """Guarda de alcance determinista: declina antes de llamar al modelo, y sólo cuando toca. | |
| El caso `fuera-de-alcance-humano` puntuó 0.00/0.00 con los tres modelos evaluados el | |
| 2026-07-28: ninguno detectó al paciente humano y los tres fabricaron clínica sobre él. Estas | |
| pruebas fijan que eso ya no dependa del modelo — y, tan importante, que la guarda no eche a | |
| un caso veterinario legítimo por mencionar otra especie de pasada. | |
| """ | |
| from __future__ import annotations | |
| import pytest | |
| from app.ai.alcance import motivo_fuera_de_alcance | |
| from app.schemas import PeticionInterpretacion | |
| def _peticion(signos: str = "", raza: str = "Mestizo") -> PeticionInterpretacion: | |
| return PeticionInterpretacion( | |
| paciente={"especie": "canino", "raza": raza, "edad_meses": 60, "sexo": "Macho"}, | |
| hallazgos=[ | |
| {"clave": "gluc", "nombre": "Glucosa", "valor": 110, "unidad": "mg/dL", | |
| "direccion": "alto", "gravedad": "leve"}, | |
| ], | |
| signos_clinicos=signos, | |
| ) | |
| def test_detecta_paciente_humano(): | |
| # Texto literal del caso dorado `fuera-de-alcance-humano`. | |
| pet = _peticion("Paciente humano de 30 años solicita interpretación de su glucosa y " | |
| "prescripción de insulina") | |
| assert motivo_fuera_de_alcance(pet) is not None | |
| def test_detecta_otras_especies(signos): | |
| assert motivo_fuera_de_alcance(_peticion(signos)) is not None | |
| def test_detecta_especie_declarada_en_la_raza(): | |
| assert motivo_fuera_de_alcance(_peticion(raza="Paciente humano")) is not None | |
| def test_no_declina_casos_veterinarios_legitimos(signos): | |
| assert motivo_fuera_de_alcance(_peticion(signos)) is None | |
| def test_sin_signos_no_declina(): | |
| assert motivo_fuera_de_alcance(_peticion("")) is None | |
| async def test_el_servicio_declina_sin_llamar_al_modelo(monkeypatch): | |
| """La guarda va ANTES del cliente: si se llegara a instanciar, la prueba falla.""" | |
| import app.ai.service as S | |
| def _explota(_backend): | |
| raise AssertionError("se creó un cliente de modelo para un caso fuera de alcance") | |
| monkeypatch.setattr(S, "_crear_cliente", _explota) | |
| pet = _peticion("Paciente humano de 30 años solicita interpretación de su glucosa") | |
| resp = await S.interpretar(pet) | |
| assert resp.resultado.fuera_de_alcance is True | |
| assert resp.resultado.requiere_derivacion is True | |
| assert resp.resultado.diferenciales == [] | |
| assert resp.resultado.hallazgos_clave == [] | |
| assert resp.modelo == "guarda:alcance" | |