New security extractors: - insecure_deserialization, orm_injection, path_traversal, security_headers - ssrf, unvalidated_redirects, weak_password, xxe - Enhanced tls_version extractor with comprehensive cipher/protocol checks Architecture docs: - Scout-judge extraction pattern for LLM-based code analysis - LLM prompt evaluation framework - LLM eval implementation guide Core improvements: - stemedb-ontology README and client enhancements - WAL journal/segment instrumentation - Signing and ingestion refinements - Consumer health demo script Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
240 lines
8.2 KiB
Bash
Executable File
240 lines
8.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Consumer Health Demo Script
|
|
# Demonstrates StemeDB + stemedb-ontology for the Consumer Health use case
|
|
#
|
|
# Prerequisites:
|
|
# - StemeDB API running: cargo run -p stemedb-api
|
|
# - steme-pharma built: cargo build -p stemedb-ontology
|
|
#
|
|
# Usage:
|
|
# ./scripts/demo-consumer-health.sh
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
STEMEDB_URL="${STEMEDB_URL:-http://localhost:18180}"
|
|
PHARMA_CLI="./target/release/steme-pharma"
|
|
PAUSE_SECONDS=2
|
|
|
|
# Helper functions
|
|
print_header() {
|
|
echo -e "\n${BOLD}${BLUE}════════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BOLD}${BLUE} $1${NC}"
|
|
echo -e "${BOLD}${BLUE}════════════════════════════════════════════════════════════════${NC}\n"
|
|
}
|
|
|
|
print_step() {
|
|
echo -e "${CYAN}▶ $1${NC}"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}✓ $1${NC}"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}✗ $1${NC}"
|
|
}
|
|
|
|
wait_for_user() {
|
|
if [ -t 0 ]; then
|
|
echo -e "\n${YELLOW}Press Enter to continue...${NC}"
|
|
read -r
|
|
else
|
|
sleep $PAUSE_SECONDS
|
|
fi
|
|
}
|
|
|
|
# Check prerequisites
|
|
print_header "Consumer Health Demo - Prerequisites Check"
|
|
|
|
# Check if steme-pharma exists
|
|
if [ ! -f "$PHARMA_CLI" ]; then
|
|
print_warning "steme-pharma not found at $PHARMA_CLI"
|
|
print_step "Building steme-pharma..."
|
|
cargo build --release -p stemedb-ontology
|
|
fi
|
|
|
|
# Check if StemeDB is running
|
|
print_step "Checking StemeDB connection..."
|
|
if curl -s "${STEMEDB_URL}/v1/health" > /dev/null 2>&1; then
|
|
print_success "StemeDB is running at $STEMEDB_URL"
|
|
else
|
|
print_error "StemeDB not reachable at $STEMEDB_URL"
|
|
echo -e "\nStart StemeDB with:"
|
|
echo -e " ${CYAN}cargo run -p stemedb-api${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# ============================================================================
|
|
# STEP 1: Ingest FDA Data + Mock Conflicts
|
|
# ============================================================================
|
|
print_header "Step 1: Ingest FDA Data + Mock Conflicts"
|
|
|
|
print_step "Ingesting FDA label data for Semaglutide and Tirzepatide..."
|
|
print_step "Adding mock conflicts (simulating social media contradictions)..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" ingest "semaglutide,tirzepatide" --with-conflicts
|
|
|
|
print_success "Data ingested with mock conflicts"
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# STEP 2: Conflict Detection (Skeptic Lens)
|
|
# ============================================================================
|
|
print_header "Step 2: Conflict Detection (Skeptic Lens)"
|
|
|
|
echo -e "${BOLD}Question:${NC} What do different sources say about Semaglutide's nausea rate?"
|
|
echo -e "${BOLD}Lens:${NC} Skeptic (shows all claims, highlights disagreements)\n"
|
|
|
|
print_step "Querying nausea_rate with Skeptic lens..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" query "Semaglutide" "nausea_rate" --mode skeptic
|
|
|
|
echo -e "\n${YELLOW}Note:${NC} The conflict score indicates disagreement between sources."
|
|
echo -e "FDA (Regulatory tier) reports clinical trial data."
|
|
echo -e "Reddit (Anecdotal tier) reports user experiences."
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# STEP 3: Source Hierarchy (Layered Consensus)
|
|
# ============================================================================
|
|
print_header "Step 3: Source Hierarchy (Layered Consensus)"
|
|
|
|
echo -e "${BOLD}Question:${NC} What's the consensus on HbA1c reduction, broken down by source tier?"
|
|
echo -e "${BOLD}Lens:${NC} LayeredConsensus (shows per-tier agreement)\n"
|
|
|
|
print_step "Querying hba1c_reduction_percent with Layered Consensus..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" query "Semaglutide:Type2Diabetes" "hba1c_reduction_percent" --mode layered
|
|
|
|
echo -e "\n${YELLOW}Note:${NC} Each tier shows its own consensus."
|
|
echo -e "Higher tiers (Regulatory, Clinical) have more weight in final resolution."
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# STEP 4: Drug Comparison
|
|
# ============================================================================
|
|
print_header "Step 4: Drug Comparison"
|
|
|
|
echo -e "${BOLD}Question:${NC} How do Semaglutide and Tirzepatide compare on weight loss?"
|
|
echo -e "${BOLD}Method:${NC} Side-by-side query of both subjects\n"
|
|
|
|
print_step "Comparing weight_loss_percent..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" compare \
|
|
"Semaglutide:Type2Diabetes" \
|
|
"Tirzepatide:Type2Diabetes" \
|
|
--predicate "weight_loss_percent"
|
|
|
|
echo -e "\n${YELLOW}Note:${NC} Both drugs' claims are shown with conflict scores."
|
|
echo -e "A consumer can see both FDA data and community reports."
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# STEP 5: Explore Available Data
|
|
# ============================================================================
|
|
print_header "Step 5: Explore Available Data"
|
|
|
|
echo -e "${BOLD}Question:${NC} What predicates are available for Semaglutide?"
|
|
echo -e "${BOLD}Method:${NC} List all predicates with assertions for this subject\n"
|
|
|
|
print_step "Exploring Semaglutide predicates..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" explore "Semaglutide:Type2Diabetes"
|
|
|
|
echo ""
|
|
|
|
print_step "Exploring Semaglutide safety predicates..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" explore "Semaglutide"
|
|
|
|
echo -e "\n${YELLOW}Note:${NC} Efficacy predicates use Drug:Indication subjects."
|
|
echo -e "Safety predicates use Drug-only subjects (apply across indications)."
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# STEP 6: JSON Output (for Integration)
|
|
# ============================================================================
|
|
print_header "Step 6: JSON Output (for Integration)"
|
|
|
|
echo -e "${BOLD}Use Case:${NC} Programmatic access for AI agents or web apps"
|
|
echo -e "${BOLD}Format:${NC} JSON output for parsing\n"
|
|
|
|
print_step "Getting JSON response..."
|
|
echo ""
|
|
|
|
$PHARMA_CLI --stemedb-url "$STEMEDB_URL" --format json query "Semaglutide" "nausea_rate" | head -50
|
|
|
|
echo -e "\n... (truncated for demo)"
|
|
wait_for_user
|
|
|
|
# ============================================================================
|
|
# Summary
|
|
# ============================================================================
|
|
print_header "Demo Summary"
|
|
|
|
echo -e "${GREEN}${BOLD}What We Demonstrated:${NC}\n"
|
|
|
|
echo -e " 1. ${CYAN}Data Ingestion${NC}"
|
|
echo -e " - FDA label extraction (Regulatory tier)"
|
|
echo -e " - Mock social media conflicts (Anecdotal tier)"
|
|
echo ""
|
|
|
|
echo -e " 2. ${CYAN}Conflict Detection${NC}"
|
|
echo -e " - Skeptic lens shows ALL claims"
|
|
echo -e " - Conflict score quantifies disagreement"
|
|
echo ""
|
|
|
|
echo -e " 3. ${CYAN}Source Hierarchy${NC}"
|
|
echo -e " - LayeredConsensus groups by authority tier"
|
|
echo -e " - FDA data weighted higher than Reddit"
|
|
echo ""
|
|
|
|
echo -e " 4. ${CYAN}Drug Comparison${NC}"
|
|
echo -e " - Side-by-side view of multiple subjects"
|
|
echo -e " - Each drug's claims with provenance"
|
|
echo ""
|
|
|
|
echo -e " 5. ${CYAN}Data Exploration${NC}"
|
|
echo -e " - Discover available predicates"
|
|
echo -e " - Different subject patterns for efficacy vs safety"
|
|
echo ""
|
|
|
|
echo -e " 6. ${CYAN}API Integration${NC}"
|
|
echo -e " - JSON output for programmatic access"
|
|
echo -e " - Ready for AI agents and web apps"
|
|
echo ""
|
|
|
|
echo -e "${BOLD}Consumer Health Value Proposition:${NC}"
|
|
echo -e " - ${GREEN}See all perspectives${NC}, not just the loudest"
|
|
echo -e " - ${GREEN}Understand source authority${NC} (FDA vs. Reddit)"
|
|
echo -e " - ${GREEN}Make informed decisions${NC} with conflict awareness"
|
|
echo ""
|
|
|
|
echo -e "${BOLD}Next Steps:${NC}"
|
|
echo -e " - Run Consumer Health UAT: ${CYAN}cargo test -p stemedb-ontology --test consumer_health_uat${NC}"
|
|
echo -e " - Read the guide: ${CYAN}docs/app-concepts/consumer-health.md${NC}"
|
|
echo -e " - Try the Go SDK: ${CYAN}sdk/go/steme/${NC}"
|
|
echo ""
|
|
|
|
print_success "Demo complete!"
|