Spaces:
Build error
Build error
Download summarizer.py from Datycs/Datycs-Summarizer-Hedis-Agent: direct link, hf CLI and curl.
- Browser
- Download file 3.09 kB
-
https://huggingface.co/spaces/Datycs/Datycs-Summarizer-Hedis-Agent/resolve/main/summarizer.py
- Command line
-
hf download hf://spaces/Datycs/Datycs-Summarizer-Hedis-Agent/summarizer.py
-
curl -L -o summarizer.py https://huggingface.co/spaces/Datycs/Datycs-Summarizer-Hedis-Agent/resolve/main/summarizer.py
3.09 kB
| # summarizer.py | |
| from typing import Callable | |
| from crewai import Agent, Task, Crew, Process | |
| from crewai_tools import tool | |
| from langchain_community.vectorstores import Chroma | |
| from langchain_openai import ChatOpenAI | |
| class PatientChartSummarizer: | |
| """ | |
| Builds a single manager-style agent that queries the patient chart | |
| (backed by Chroma) and produces a comprehensive markdown summary. | |
| """ | |
| def __init__(self, vectordb: Chroma): | |
| self.vectordb = vectordb | |
| self.model = ChatOpenAI(model="gpt-4o", temperature=0) | |
| def patient_chart_search(query: str) -> str: | |
| """Search the patient chart embeddings for the given query.""" | |
| results = self.vectordb.similarity_search(query, k=15) | |
| return "\n".join([res.page_content for res in results]) | |
| self.summary_agent = Agent( | |
| role="Clinical Documentation Manager", | |
| goal=("Create a comprehensive, well-organized markdown summary of the entire patient chart."), | |
| verbose=True, | |
| memory=False, | |
| tools=[patient_chart_search], | |
| backstory=( | |
| "You coordinate information extraction for diagnoses, procedures, labs, vitals, and medications, " | |
| "then synthesize a clear, clinically relevant chart summary." | |
| ), | |
| llm=self.model | |
| ) | |
| self.summary_task = Task( | |
| description=( | |
| "Search and compile a full patient chart summary in markdown.\n\n" | |
| "# Patient Chart Summary\n\n" | |
| "## Patient Demographics\n" | |
| "Include patient name, age, DOB, gender, MRN (if available)\n\n" | |
| "## Chief Complaint & History\n" | |
| "Extract reason for visit, chief complaint, relevant history\n\n" | |
| "## Diagnoses\n" | |
| "Organize as Primary/Secondary/Chronic/Past Medical History\n\n" | |
| "## Procedures & Interventions\n" | |
| "Chronological list with outcomes\n\n" | |
| "## Laboratory Results\n" | |
| "Organize by category; highlight abnormal findings\n\n" | |
| "## Vital Signs & Measurements\n" | |
| "Present trends and significant findings\n\n" | |
| "## Medications\n" | |
| "Current, discontinued, allergies & adverse reactions\n\n" | |
| "## Clinical Assessment & Plan\n" | |
| "Summarize assessment and plan sections\n\n" | |
| "## Key Clinical Findings\n" | |
| "Bullet key takeaways and recommendations\n" | |
| ), | |
| expected_output="Comprehensive patient chart summary in well-formatted markdown.", | |
| agent=self.summary_agent, | |
| ) | |
| self.crew = Crew( | |
| agents=[self.summary_agent], | |
| tasks=[self.summary_task], | |
| process=Process.sequential, # simple, deterministic flow | |
| verbose=True, | |
| ) | |
| def summarize_chart(self) -> str: | |
| result = self.crew.kickoff() | |
| return str(result) |