You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
7.3 KiB
253 lines
7.3 KiB
"""
|
|
- For each diagnosis, pull lab results,
|
|
- egfr
|
|
- for each diagnosis, pull lab ranges,
|
|
- pull ranges for diagnosis
|
|
|
|
- if the diagnosis is x, then the lab ranges should be a to b
|
|
- train the agents, increase the load of input
|
|
- medical history sent to the agent
|
|
- setup rag for the agents
|
|
- run the first agent -> kidney disease -> don't know the stage -> stage 2 -> lab results -> indicative of stage 3 -> the case got elavated ->
|
|
- how to manage diseases and by looking at correlating lab, docs, diagnoses
|
|
- put docs in rag ->
|
|
- monitoring, evaluation, and treatment
|
|
- can we confirm for every diagnosis -> monitoring, evaluation, and treatment, specialized for these things
|
|
- find diagnosis -> or have diagnosis, -> for each diagnosis are there evidence of those 3 things
|
|
- swarm of those 4 agents, ->
|
|
- fda api for healthcare for commerically available papers
|
|
-
|
|
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
from swarms import Agent, AgentRearrange, create_file_in_folder
|
|
|
|
from swarm_models import OllamaModel
|
|
|
|
model = OllamaModel(model_name="llama3.2")
|
|
|
|
chief_medical_officer = Agent(
|
|
agent_name="Chief Medical Officer",
|
|
system_prompt="""You are the Chief Medical Officer coordinating a team of medical specialists for viral disease diagnosis.
|
|
Your responsibilities include:
|
|
- Gathering initial patient symptoms and medical history
|
|
- Coordinating with specialists to form differential diagnoses
|
|
- Synthesizing different specialist opinions into a cohesive diagnosis
|
|
- Ensuring all relevant symptoms and test results are considered
|
|
- Making final diagnostic recommendations
|
|
- Suggesting treatment plans based on team input
|
|
- Identifying when additional specialists need to be consulted
|
|
- For each diferrential diagnosis provide minimum lab ranges to meet that diagnosis or be indicative of that diagnosis minimum and maximum
|
|
|
|
Format all responses with clear sections for:
|
|
- Initial Assessment (include preliminary ICD-10 codes for symptoms)
|
|
- Differential Diagnoses (with corresponding ICD-10 codes)
|
|
- Specialist Consultations Needed
|
|
- Recommended Next Steps
|
|
|
|
|
|
""",
|
|
llm=model,
|
|
max_loops=1,
|
|
)
|
|
|
|
virologist = Agent(
|
|
agent_name="Virologist",
|
|
system_prompt="""You are a specialist in viral diseases. For each case, provide:
|
|
|
|
Clinical Analysis:
|
|
- Detailed viral symptom analysis
|
|
- Disease progression timeline
|
|
- Risk factors and complications
|
|
|
|
Coding Requirements:
|
|
- List relevant ICD-10 codes for:
|
|
* Confirmed viral conditions
|
|
* Suspected viral conditions
|
|
* Associated symptoms
|
|
* Complications
|
|
- Include both:
|
|
* Primary diagnostic codes
|
|
* Secondary condition codes
|
|
|
|
Document all findings using proper medical coding standards and include rationale for code selection.""",
|
|
llm=model,
|
|
max_loops=1,
|
|
)
|
|
|
|
internist = Agent(
|
|
agent_name="Internist",
|
|
system_prompt="""You are an Internal Medicine specialist responsible for comprehensive evaluation.
|
|
|
|
For each case, provide:
|
|
|
|
Clinical Assessment:
|
|
- System-by-system review
|
|
- Vital signs analysis
|
|
- Comorbidity evaluation
|
|
|
|
Medical Coding:
|
|
- ICD-10 codes for:
|
|
* Primary conditions
|
|
* Secondary diagnoses
|
|
* Complications
|
|
* Chronic conditions
|
|
* Signs and symptoms
|
|
- Include hierarchical condition category (HCC) codes where applicable
|
|
|
|
Document supporting evidence for each code selected.""",
|
|
llm=model,
|
|
max_loops=1,
|
|
)
|
|
|
|
medical_coder = Agent(
|
|
agent_name="Medical Coder",
|
|
system_prompt="""You are a certified medical coder responsible for:
|
|
|
|
Primary Tasks:
|
|
1. Reviewing all clinical documentation
|
|
2. Assigning accurate ICD-10 codes
|
|
3. Ensuring coding compliance
|
|
4. Documenting code justification
|
|
|
|
Coding Process:
|
|
- Review all specialist inputs
|
|
- Identify primary and secondary diagnoses
|
|
- Assign appropriate ICD-10 codes
|
|
- Document supporting evidence
|
|
- Note any coding queries
|
|
|
|
Output Format:
|
|
1. Primary Diagnosis Codes
|
|
- ICD-10 code
|
|
- Description
|
|
- Supporting documentation
|
|
2. Secondary Diagnosis Codes
|
|
- Listed in order of clinical significance
|
|
3. Symptom Codes
|
|
4. Complication Codes
|
|
5. Coding Notes""",
|
|
llm=model,
|
|
max_loops=1,
|
|
)
|
|
|
|
synthesizer = Agent(
|
|
agent_name="Diagnostic Synthesizer",
|
|
system_prompt="""You are responsible for creating the final diagnostic and coding assessment.
|
|
|
|
Synthesis Requirements:
|
|
1. Integrate all specialist findings
|
|
2. Reconcile any conflicting diagnoses
|
|
3. Verify coding accuracy and completeness
|
|
|
|
Final Report Sections:
|
|
1. Clinical Summary
|
|
- Primary diagnosis with ICD-10
|
|
- Secondary diagnoses with ICD-10
|
|
- Supporting evidence
|
|
2. Coding Summary
|
|
- Complete code list with descriptions
|
|
- Code hierarchy and relationships
|
|
- Supporting documentation
|
|
3. Recommendations
|
|
- Additional testing needed
|
|
- Follow-up care
|
|
- Documentation improvements needed
|
|
|
|
Include confidence levels and evidence quality for all diagnoses and codes.""",
|
|
llm=model,
|
|
max_loops=1,
|
|
)
|
|
|
|
# Create agent list
|
|
agents = [
|
|
chief_medical_officer,
|
|
virologist,
|
|
internist,
|
|
medical_coder,
|
|
synthesizer,
|
|
]
|
|
|
|
# Define diagnostic flow
|
|
flow = f"""{chief_medical_officer.agent_name} -> {virologist.agent_name} -> {internist.agent_name} -> {medical_coder.agent_name} -> {synthesizer.agent_name}"""
|
|
|
|
# Create the swarm system
|
|
diagnosis_system = AgentRearrange(
|
|
name="Medical-coding-diagnosis-swarm",
|
|
description="Comprehensive medical diagnosis and coding system",
|
|
agents=agents,
|
|
flow=flow,
|
|
max_loops=1,
|
|
output_type="all",
|
|
)
|
|
|
|
|
|
def generate_coding_report(diagnosis_output: str) -> str:
|
|
"""
|
|
Generate a structured medical coding report from the diagnosis output.
|
|
"""
|
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
report = f"""# Medical Diagnosis and Coding Report
|
|
Generated: {timestamp}
|
|
|
|
## Clinical Summary
|
|
{diagnosis_output}
|
|
|
|
## Coding Summary
|
|
### Primary Diagnosis Codes
|
|
[Extracted from synthesis]
|
|
|
|
### Secondary Diagnosis Codes
|
|
[Extracted from synthesis]
|
|
|
|
### Symptom Codes
|
|
[Extracted from synthesis]
|
|
|
|
### Procedure Codes (if applicable)
|
|
[Extracted from synthesis]
|
|
|
|
## Documentation and Compliance Notes
|
|
- Code justification
|
|
- Supporting documentation references
|
|
- Any coding queries or clarifications needed
|
|
|
|
## Recommendations
|
|
- Additional documentation needed
|
|
- Suggested follow-up
|
|
- Coding optimization opportunities
|
|
"""
|
|
return report
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Example patient case
|
|
patient_case = """
|
|
Patient: 45-year-old White Male
|
|
|
|
Lab Results:
|
|
- egfr
|
|
- 59 ml / min / 1.73
|
|
- non african-american
|
|
|
|
"""
|
|
|
|
# Add timestamp to the patient case
|
|
case_info = f"Timestamp: {datetime.now()}\nPatient Information: {patient_case}"
|
|
|
|
# Run the diagnostic process
|
|
diagnosis = diagnosis_system.run(case_info)
|
|
|
|
# Generate coding report
|
|
coding_report = generate_coding_report(diagnosis)
|
|
|
|
# Create reports
|
|
create_file_in_folder(
|
|
"reports", "medical_diagnosis_report.md", diagnosis
|
|
)
|
|
create_file_in_folder(
|
|
"reports", "medical_coding_report.md", coding_report
|
|
)
|