diff --git a/src/curaflow_agent/activities.py b/src/curaflow_agent/activities.py index e1f29c2..3a251e4 100644 --- a/src/curaflow_agent/activities.py +++ b/src/curaflow_agent/activities.py @@ -17,7 +17,8 @@ def get_llm(): model=LLM_MODEL, api_key="ollama", # Ollama doesn't strictly need an API key base_url=OLLAMA_BASE_URL, - temperature=0.1 + temperature=0.1, + model_kwargs={"response_format": {"type": "json_object"}} ) @activity.defn diff --git a/src/curaflow_agent/workflows.py b/src/curaflow_agent/workflows.py index d689c92..99a82d5 100644 --- a/src/curaflow_agent/workflows.py +++ b/src/curaflow_agent/workflows.py @@ -1,5 +1,6 @@ from datetime import timedelta from temporalio import workflow +from temporalio.common import RetryPolicy with workflow.unsafe.imports_passed_through(): from .activities import ( @@ -23,14 +24,14 @@ class ClinicalIntakeWorkflow: structured_note = await workflow.execute_activity( structure_note_activity, raw_dictation, - start_to_close_timeout=timedelta(minutes=10) + retry_policy=RetryPolicy(maximum_attempts=3), start_to_close_timeout=timedelta(minutes=10) ) # Step 2: Medical Coder (Generate ICD-10/CPT codes) billing_codes = await workflow.execute_activity( generate_billing_codes_activity, structured_note, - start_to_close_timeout=timedelta(minutes=10) + retry_policy=RetryPolicy(maximum_attempts=3), start_to_close_timeout=timedelta(minutes=10) ) # Step 3: Save to the client's database via ORM @@ -43,7 +44,7 @@ class ClinicalIntakeWorkflow: save_status = await workflow.execute_activity( save_clinical_record_activity, save_payload, - start_to_close_timeout=timedelta(minutes=1) + retry_policy=RetryPolicy(maximum_attempts=3), start_to_close_timeout=timedelta(minutes=1) ) return { @@ -99,14 +100,14 @@ class LabResultWatcherWorkflow: anomaly_report = await workflow.execute_activity( analyze_lab_anomaly_activity, input_data, - start_to_close_timeout=timedelta(minutes=5) + retry_policy=RetryPolicy(maximum_attempts=3), start_to_close_timeout=timedelta(minutes=5) ) if anomaly_report.get("is_dangerous", False): await workflow.execute_activity( send_alert_activity, anomaly_report, - start_to_close_timeout=timedelta(minutes=1) + retry_policy=RetryPolicy(maximum_attempts=3), start_to_close_timeout=timedelta(minutes=1) ) self._alerts.append(anomaly_report) alerts_triggered += 1 @@ -137,7 +138,7 @@ class AppointmentBookingWorkflow: intent_data = await workflow.execute_activity( "parse_booking_intent_activity", self._chat_history, - schedule_to_close_timeout=timedelta(minutes=5) + retry_policy=RetryPolicy(maximum_attempts=3), schedule_to_close_timeout=timedelta(minutes=5) ) reply_msg = intent_data.get("reply_message", "I can help with that.") @@ -147,7 +148,7 @@ class AppointmentBookingWorkflow: await workflow.execute_activity( "send_whatsapp_reply_activity", {"phone_number": phone_number, "message": reply_msg}, - schedule_to_close_timeout=timedelta(minutes=1) + retry_policy=RetryPolicy(maximum_attempts=3), schedule_to_close_timeout=timedelta(minutes=1) ) # 3. Check if all details are gathered @@ -162,7 +163,7 @@ class AppointmentBookingWorkflow: "appointment_date": intent_data.get("appointment_date"), "appointment_time": intent_data.get("appointment_time") }, - schedule_to_close_timeout=timedelta(seconds=30) + retry_policy=RetryPolicy(maximum_attempts=3), schedule_to_close_timeout=timedelta(seconds=30) ) return intent_data