99 lines
2.9 KiB
Python
Executable File
99 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import json
|
|
import anthropic
|
|
|
|
DISEASE_NAME = "Excessive frequent and irregular menstruation"
|
|
OUTPUT_FILE = "excessive_frequent_and_irregular_menstruation.json"
|
|
|
|
# Initialize the Anthropic client
|
|
client = anthropic.Anthropic()
|
|
|
|
print(f"Generating module for {DISEASE_NAME}...")
|
|
|
|
try:
|
|
# Send a message to Claude
|
|
message = client.messages.create(
|
|
model="claude-3-7-sonnet-20250219",
|
|
max_tokens=4000,
|
|
temperature=0,
|
|
messages=[
|
|
{"role": "user", "content": f"""Create a Synthea disease module for {DISEASE_NAME} in JSON format.
|
|
|
|
The module should follow this structure:
|
|
{{
|
|
"name": "Module Name",
|
|
"remarks": [
|
|
"Description of the module"
|
|
],
|
|
"states": {{
|
|
"Initial": {{
|
|
"type": "Initial",
|
|
"direct_transition": "Next State"
|
|
}},
|
|
"Terminal": {{
|
|
"type": "Terminal"
|
|
}}
|
|
// Additional states with appropriate transitions
|
|
}}
|
|
}}
|
|
|
|
Make sure the JSON is properly formatted with no syntax errors.
|
|
Do not include any markdown formatting, comments, or explanations outside the JSON.
|
|
Output only the valid JSON object."""}
|
|
]
|
|
)
|
|
|
|
# Extract the JSON from the response
|
|
module_json = message.content[0].text
|
|
|
|
# Save the raw response for debugging
|
|
with open(f"{OUTPUT_FILE}.raw", "w") as f:
|
|
f.write(module_json)
|
|
|
|
print(f"Raw response saved to {OUTPUT_FILE}.raw")
|
|
|
|
# Find the first { and last } to extract just the JSON part
|
|
start = module_json.find("{")
|
|
end = module_json.rfind("}") + 1
|
|
if start >= 0 and end > start:
|
|
module_json = module_json[start:end]
|
|
|
|
# Fix common JSON issues
|
|
try:
|
|
# Manual cleaning of known JSON issues
|
|
# Find and remove lines with invalid syntax
|
|
cleaned_lines = []
|
|
for line in module_json.split('\n'):
|
|
# Skip lines with "{%" or any other invalid JSON syntax
|
|
if "{%" in line or "%}" in line or "//" in line:
|
|
print(f"Removing invalid line: {line}")
|
|
continue
|
|
cleaned_lines.append(line)
|
|
|
|
cleaned_json = '\n'.join(cleaned_lines)
|
|
|
|
# Try to parse and fix the JSON
|
|
parsed = json.loads(cleaned_json)
|
|
formatted_json = json.dumps(parsed, indent=2)
|
|
|
|
# Write to file
|
|
with open(OUTPUT_FILE, "w") as f:
|
|
f.write(formatted_json)
|
|
|
|
print(f"Successfully generated module and saved to {OUTPUT_FILE}")
|
|
except json.JSONDecodeError as e:
|
|
print(f"JSON parsing error: {e}")
|
|
print("Attempting secondary cleaning method...")
|
|
|
|
# Write the error details for debugging
|
|
with open(f"{OUTPUT_FILE}.error", "w") as f:
|
|
f.write(f"Error: {str(e)}\n\n")
|
|
f.write("JSON that failed to parse:\n")
|
|
f.write(module_json)
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
sys.exit(1) |