From b2f3539c5ed599748ac1fbf46fe07ecd084b4bbf Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 7 May 2026 03:19:42 +0200 Subject: [PATCH] feat: diversify assistant starter prompts --- public/js/assistant/data.js | 19 ++++++++++++------- src/routes/clinicalAssistant.js | 33 +++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/public/js/assistant/data.js b/public/js/assistant/data.js index fcb13eb..2916cd3 100644 --- a/public/js/assistant/data.js +++ b/public/js/assistant/data.js @@ -1,22 +1,27 @@ export var EMPTY_PROMPT_SETS = [ [ - { label: 'Status asthma escalation', prompt: 'In a 4-year-old with acute wheeze, when should magnesium sulfate be considered and what dose is recommended?' }, - { label: 'Bilious vomiting', prompt: 'What are the red flags for bilious vomiting in neonates, and what immediate workup is recommended?' }, - { label: 'Bronchiolitis vs asthma', prompt: 'Compare bronchiolitis and asthma management in infants, citing clinical references.' } + { label: 'Sickle fever', prompt: 'How should fever in a child with sickle cell disease be evaluated and treated?' }, + { label: 'Toxic ingestion', prompt: 'How should an unknown pediatric ingestion be initially assessed and when is activated charcoal appropriate?' }, + { label: 'Intussusception', prompt: 'What are the red flags, diagnostic steps, and reduction approach for suspected intussusception?' } ], [ { label: 'Febrile neonate', prompt: 'What initial workup and empiric antibiotics are recommended for a well-appearing febrile neonate?' }, - { label: 'DKA fluids', prompt: 'Summarize pediatric DKA fluid strategy and cerebral edema warning signs.' }, - { label: 'Croup escalation', prompt: 'When should a child with croup receive nebulized epinephrine and observation?' } + { label: 'Kawasaki workup', prompt: 'What clinical and laboratory features support incomplete Kawasaki disease evaluation?' }, + { label: 'NAT red flags', prompt: 'What injury patterns and history features should raise concern for non-accidental trauma?' } ], [ { label: 'Sepsis bolus', prompt: 'In pediatric septic shock, when should fluid boluses be limited and vasoactives started?' }, { label: 'Head injury CT', prompt: 'Which pediatric head injury features should prompt CT or observation?' }, - { label: 'UTI fever', prompt: 'How should febrile UTI be evaluated and treated in young children?' } + { label: 'Anaphylaxis epi', prompt: 'What is the recommended IM epinephrine dose for pediatric anaphylaxis and when should it be repeated?' } ], [ - { label: 'Sickle pain fever', prompt: 'How should fever and pain crisis be managed in a child with sickle cell disease?' }, + { label: 'UTI imaging', prompt: 'When should children with febrile UTI receive renal ultrasound or further imaging?' }, { label: 'Neonatal jaundice', prompt: 'What bilirubin risk factors change phototherapy decisions in a newborn?' }, + { label: 'Dehydration fluids', prompt: 'How should dehydration severity guide oral rehydration versus IV fluids in children?' } + ], + [ + { label: 'Croup escalation', prompt: 'When should a child with croup receive nebulized epinephrine and observation?' }, + { label: 'Bilious vomiting', prompt: 'What are the red flags for bilious vomiting in neonates, and what immediate workup is recommended?' }, { label: 'Status seizure', prompt: 'Outline first- and second-line treatment for pediatric status epilepticus.' } ] ]; diff --git a/src/routes/clinicalAssistant.js b/src/routes/clinicalAssistant.js index 1369ee4..36b753e 100644 --- a/src/routes/clinicalAssistant.js +++ b/src/routes/clinicalAssistant.js @@ -36,15 +36,25 @@ var VISUAL_CLASSIFIER_LIMIT = 6; var VISUAL_CLASSIFIER_MIN_CONFIDENCE = Number(process.env.CLINICAL_ASSISTANT_VISUAL_CLASSIFIER_MIN_CONFIDENCE || '0.005'); var EXAMPLE_CANDIDATES = [ { label: 'Status asthma escalation', prompt: 'In a 4-year-old with acute wheeze, when should magnesium sulfate be considered and what dose is recommended?' }, - { label: 'Asthma ED disposition', prompt: 'What clinical features support discharge versus admission after a pediatric asthma exacerbation?' }, - { label: 'Bronchiolitis support', prompt: 'What evidence-based supportive care is recommended for bronchiolitis, and when is admission indicated?' }, { label: 'Febrile neonate', prompt: 'What initial workup and empiric antibiotics are recommended for a well-appearing febrile neonate?' }, - { label: 'Neonatal resuscitation', prompt: 'Summarize the first minute steps in neonatal resuscitation and when positive pressure ventilation is indicated.' }, - { label: 'DKA cerebral edema', prompt: 'What warning signs suggest cerebral edema during pediatric DKA treatment, and what immediate treatment is recommended?' }, + { label: 'Sepsis vasoactives', prompt: 'In pediatric septic shock, when should fluid boluses be limited and vasoactives started?' }, + { label: 'Toxic ingestion', prompt: 'How should an unknown pediatric ingestion be initially assessed and when is activated charcoal appropriate?' }, + { label: 'Meningitis antibiotics', prompt: 'What empiric antibiotics are recommended for suspected bacterial meningitis by pediatric age group?' }, + { label: 'Sickle fever', prompt: 'How should fever in a child with sickle cell disease be evaluated and treated?' }, + { label: 'Head injury CT', prompt: 'Which pediatric head injury features should prompt CT imaging or ED observation?' }, + { label: 'Anaphylaxis IM epi', prompt: 'What is the recommended IM epinephrine dose for pediatric anaphylaxis and when should it be repeated?' }, + { label: 'Dehydration fluids', prompt: 'How should dehydration severity guide oral rehydration versus IV fluids in children?' }, + { label: 'Neonatal jaundice', prompt: 'Which neonatal jaundice risk factors change phototherapy thresholds or urgency?' }, + { label: 'UTI imaging', prompt: 'When should children with febrile UTI receive renal ultrasound or further imaging?' }, + { label: 'Kawasaki workup', prompt: 'What clinical and laboratory features support incomplete Kawasaki disease evaluation?' }, + { label: 'Intussusception', prompt: 'What are the red flags, diagnostic steps, and reduction approach for suspected intussusception?' }, + { label: 'NAT red flags', prompt: 'What injury patterns and history features should raise concern for non-accidental trauma?' }, { label: 'Status epilepticus', prompt: 'Outline first- and second-line treatment for pediatric status epilepticus with typical dosing.' }, { label: 'Croup escalation', prompt: 'When should a child with croup receive nebulized epinephrine, and how long should they be observed?' }, - { label: 'Sepsis fluids', prompt: 'In pediatric septic shock, when should fluid boluses be limited and vasoactives started?' }, - { label: 'Bilious vomiting', prompt: 'What are the red flags for bilious vomiting in neonates, and what immediate workup is recommended?' } + { label: 'Bilious vomiting', prompt: 'What are the red flags for bilious vomiting in neonates, and what immediate workup is recommended?' }, + { label: 'Bronchiolitis oxygen', prompt: 'What supportive care and oxygen/admission criteria are recommended for infant bronchiolitis?' }, + { label: 'DKA cerebral edema', prompt: 'What warning signs suggest cerebral edema during pediatric DKA treatment, and what immediate treatment is recommended?' }, + { label: 'Neonatal resuscitation', prompt: 'Summarize the first minute steps in neonatal resuscitation and when positive pressure ventilation is indicated.' } ]; var TOPIC_SUGGESTIONS = { asthma: [ @@ -1047,8 +1057,9 @@ async function getAvailableExamples() { if (_exampleCache.expiresAt > now && _exampleCache.examples.length) return _exampleCache.examples; var examples = []; - for (var i = 0; i < EXAMPLE_CANDIDATES.length && examples.length < 6; i++) { - var item = EXAMPLE_CANDIDATES[i]; + var candidates = rotateExamples(EXAMPLE_CANDIDATES, now); + for (var i = 0; i < candidates.length && examples.length < 9; i++) { + var item = candidates[i]; try { var searchResponse = await semanticSearch(item.prompt, { limit: 2, @@ -1076,6 +1087,12 @@ async function getAvailableExamples() { return examples; } +function rotateExamples(items, seed) { + var copy = items.slice(); + var offset = Math.floor(seed / EXAMPLE_CACHE_MS) % copy.length; + return copy.slice(offset).concat(copy.slice(0, offset)); +} + async function generateImage(prompt, model) { if (!process.env.LITELLM_API_BASE) throw new Error('LiteLLM is required for image generation'); var headers = { 'Content-Type': 'application/json' };