Download src/tools/cdm_tools.py from DiabetesCareChatbot/dmChatbotBackend: direct link, hf CLI and curl.
- Browser
- Download file 1.68 kB
-
https://huggingface.co/spaces/DiabetesCareChatbot/dmChatbotBackend/resolve/main/src/tools/cdm_tools.py
- Command line
-
hf download hf://spaces/DiabetesCareChatbot/dmChatbotBackend/src/tools/cdm_tools.py
-
curl -L -o cdm_tools.py https://huggingface.co/spaces/DiabetesCareChatbot/dmChatbotBackend/resolve/main/src/tools/cdm_tools.py
1.68 kB
| """Deterministic CDM capabilities exposed through the Tool Broker.""" | |
| from __future__ import annotations | |
| from typing import Any, Dict | |
| from langchain_core.tools import tool | |
| from src.tools.fhir_memory import get_observations_by_patient | |
| def _trend_statistics(values: list[float]) -> Dict[str, Any]: | |
| if len(values) < 2: | |
| return {"trend": "insufficient", "slope": 0.0, "projection": None} | |
| slope = (values[-1] - values[0]) / (len(values) - 1) | |
| trend = "rising" if slope > 0.5 else "falling" if slope < -0.5 else "stable" | |
| return { | |
| "trend": trend, | |
| "slope": float(slope), | |
| "projection": float(values[-1] + slope), | |
| } | |
| def analyze_trends(patient_id: str) -> Dict[str, Any]: | |
| """Compute deterministic trend summaries from authorized FHIR observations.""" | |
| observations = get_observations_by_patient.invoke({"patient_id": patient_id}) | |
| if not isinstance(observations, list): | |
| return {"patient_id": patient_id, "metrics": {}, "status": "unavailable"} | |
| grouped: Dict[str, list[float]] = {} | |
| for observation in observations: | |
| try: | |
| resource = observation.get("resource", observation) | |
| display = resource["code"]["coding"][0]["display"] | |
| value = float(resource["valueQuantity"]["value"]) | |
| except (AttributeError, KeyError, IndexError, TypeError, ValueError): | |
| continue | |
| grouped.setdefault(display, []).append(value) | |
| return { | |
| "patient_id": patient_id, | |
| "metrics": { | |
| metric: {"values": values, **_trend_statistics(values)} | |
| for metric, values in grouped.items() | |
| }, | |
| "status": "completed", | |
| } | |