idempotency.sh
1 #!/bin/bash 2 # CLI Example: Idempotency Key Usage 3 # 4 # This example demonstrates how idempotency keys prevent duplicate job submissions. 5 # Submitting the same request with the same idempotency key returns the existing job. 6 # 7 # Requirements: 8 # - Jobs server running on http://127.0.0.1:8005 9 # 10 # Usage: 11 # bash idempotency.sh 12 13 set -e 14 15 API_URL="${PRAISONAI_BASE_URL:-http://127.0.0.1:8005}" 16 IDEM_KEY="example-idem-key-$(date +%s)" 17 18 echo "============================================================" 19 echo "PraisonAI Idempotency Key Example" 20 echo "============================================================" 21 22 # First submission 23 echo "" 24 echo "1. First submission with Idempotency-Key: $IDEM_KEY" 25 RESPONSE1=$(curl -s -X POST "$API_URL/api/v1/runs" \ 26 -H "Content-Type: application/json" \ 27 -H "Idempotency-Key: $IDEM_KEY" \ 28 -d '{"prompt": "What is 1+1?"}') 29 30 JOB_ID1=$(echo "$RESPONSE1" | python3 -c "import sys,json; print(json.load(sys.stdin)['job_id'])") 31 echo " Job ID: $JOB_ID1" 32 33 # Second submission with same key 34 echo "" 35 echo "2. Second submission with SAME Idempotency-Key: $IDEM_KEY" 36 RESPONSE2=$(curl -s -X POST "$API_URL/api/v1/runs" \ 37 -H "Content-Type: application/json" \ 38 -H "Idempotency-Key: $IDEM_KEY" \ 39 -d '{"prompt": "Different prompt but same key"}') 40 41 JOB_ID2=$(echo "$RESPONSE2" | python3 -c "import sys,json; print(json.load(sys.stdin)['job_id'])") 42 echo " Job ID: $JOB_ID2" 43 44 # Verify same job ID 45 echo "" 46 echo "3. Verification:" 47 if [ "$JOB_ID1" = "$JOB_ID2" ]; then 48 echo " ✓ SUCCESS: Same job ID returned (no duplicate created)" 49 else 50 echo " ✗ FAILURE: Different job IDs returned" 51 exit 1 52 fi 53 54 echo "" 55 echo "============================================================" 56 echo "Idempotency example completed!" 57 echo "============================================================"