diff --git a/README.md b/README.md index 2b594f9..9108b40 100644 --- a/README.md +++ b/README.md @@ -331,20 +331,23 @@ sequenceDiagram ## RocketRide AI Pipelines -4 visual pipelines in `pipelines/` directory: - -| Pipeline | Purpose | -|----------|---------| -| `checkin_analysis.pipe` | Transcript → symptoms, mood, urgency | -| `drug_interaction.pipe` | Drug pair → plain-language explanation | -| `care_recommendation.pipe` | Graph data → personalized care plan | -| `condition_suggestion.pipe` | Symptom cluster → possible conditions | - -Each follows: `Webhook → Prompt → Gemini LLM → Response` - -**Setup:** Install RocketRide VS Code extension → Open .pipe file → Configure Gemini key → Click play - -**Inference chain:** RocketRide pipeline → GMI Cloud (Qwen3-235B) fallback → empty +5 visual pipelines in `pipelines/` directory: + +| Pipeline | Purpose | Use Case for Doctors | +|----------|---------|----------------------| +| `checkin_analysis.pipe` | Transcript → symptoms, mood, urgency | Automatic symptom extraction from patient calls | +| `drug_interaction.pipe` | Drug pair → plain-language explanation | Explaining *why* two meds interact based on graph data | +| `care_recommendation.pipe` | Graph data → personalized care plan | Generating tailored clinical steps for family caregivers | +| `condition_suggestion.pipe` | Symptom cluster → possible conditions | Differential reasoning based on reported trends | +| `neo4j_graph_chat.pipe` | **Natural Language Graph Chat** | **Clinical Data Retrieval**: Doctors can chat directly to get patient data, symptoms, and medical history across the entire graph. | + +Each follows: `Webhook → Question/Prompt → Gemini LLM → Response` + +### 🏥 Pipeline Workflow: Neo4j Graph Chat +The **Neo4j Graph Chat** follows a simple visual flow in RocketRide: +1. **Chat Source Box**: Captures the doctor's question in the chat interface. +2. **Neo4j Database Tool Box**: Connects to the Neo4j graph and receives the question. +3. **Gemini LLM Box**: Connected directly to the Neo4j box to handle query generation and provide the final response to the doctor. --- diff --git a/pipelines/neo4j_graph_chat.pipe b/pipelines/neo4j_graph_chat.pipe new file mode 100644 index 0000000..f4fb951 --- /dev/null +++ b/pipelines/neo4j_graph_chat.pipe @@ -0,0 +1,139 @@ +{ + "viewport": { + "x": -152.71395540622166, + "y": 220.8070018486664, + "zoom": 0.5 + }, + "name": "Neo4j Graph Chat", + "description": "Natural language interface to query the CareGraph Neo4j database using Gemini", + "components": [ + { + "id": "llm_gemini_1", + "provider": "llm_gemini", + "name": "gemini", + "config": { + "profile": "gemini-2_5-flash", + "gemini-2_5-flash": { + "apikey": "{{GEMINI_API_KEY}}" + }, + "parameters": { + "google": {} + } + }, + "ui": { + "position": { + "x": 1325.7382550335572, + "y": 288.758389261745 + }, + "measured": { + "width": 150, + "height": 66 + }, + "nodeType": "default", + "formDataValid": true + }, + "control": [ + { + "classType": "llm", + "from": "db_neo4j_1" + } + ] + }, + { + "id": "db_neo4j_1", + "provider": "db_neo4j", + "name": "CareGraph Neo4j", + "config": { + "profile": "default", + "default": { + "auth_method": "userpass", + "database": "neo4j", + "db_description": "CareGraph\n", + "max_attempts": 5, + "uri": "{{NEO4J_URI}}", + "user": "{{NEO4J_USER}}", + "password": "{{NEO4J_PASSWORD}}" + }, + "uri": "{{NEO4J_URI}}", + "user": "{{NEO4J_USER}}", + "password": "{{NEO4J_PASSWORD}}", + "schema": "Graph Schema:\nNodes: (:Senior {name, phone, schedule, notes}), (:Medication {name}), (:Symptom {name}), (:Condition {name}), (:Doctor {name, specialty, phone}), (:FamilyMember {name, phone, relation}), (:Service {label, type})\nRelationships:\n(:Senior)-[:TAKES]->(:Medication)\n(:Senior)-[:REPORTED]->(:Symptom)\n(:Medication)-[:INTERACTS_WITH]->(:Medication)\n(:Medication)-[:SIDE_EFFECT]->(:Symptom)\n(:Symptom)-[:SUGGESTS]->(:Condition)\n(:Doctor)-[:CAN_TREAT]->(:Condition)\n(:Senior)-[:HAS_CONTACT]->(:FamilyMember)\n(:CheckIn)-[:DETECTED]->(:Symptom)", + "invoke": { + "llm": "llm_gemini_1" + }, + "parameters": { + "google": {} + } + }, + "ui": { + "position": { + "x": 1300, + "y": 100 + }, + "measured": { + "width": 150, + "height": 121 + }, + "nodeType": "default", + "formDataValid": true + }, + "input": [ + { + "lane": "questions", + "from": "chat_1" + } + ] + }, + { + "id": "response_answers_1", + "provider": "response_answers", + "config": { + "laneName": "answers" + }, + "ui": { + "position": { + "x": 1550, + "y": 100 + }, + "measured": { + "width": 150, + "height": 66 + }, + "nodeType": "default", + "formDataValid": true + }, + "input": [ + { + "lane": "answers", + "from": "db_neo4j_1" + } + ] + }, + { + "id": "chat_1", + "provider": "chat", + "config": { + "hideForm": true, + "mode": "Source", + "parameters": {}, + "type": "chat" + }, + "ui": { + "position": { + "x": 835.2684563758389, + "y": -75.7046979865772 + }, + "measured": { + "width": 150, + "height": 66 + }, + "nodeType": "default", + "formDataValid": true + } + } + ], + "project_id": "4212d898-a73f-4e0f-818e-05f6ce48bb81", + "version": 1, + "docRevision": 11, + "source": "chat_1" +}