-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
180 lines (138 loc) · 6.48 KB
/
Copy pathMakefile
File metadata and controls
180 lines (138 loc) · 6.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
.PHONY: up down logs build server worker restart-worker setup-db setup-opensearch setup-aoss setup-s3 setup-sqs seed-consent seed-products scan-events scan-jobs scan-consent scan-vectors peek-queue test-bedrock verify-bedrock test-tools test-recommend test-privacy test-e2e demo-conflict demo-tiered demo-backpressure demo-scale demo-async-recommend demo-complement scale worker-count show-trace clean ps
up:
docker compose up -d --build
down:
docker compose down
build:
docker compose build
logs:
docker compose logs -f
server:
docker compose logs -f server
worker:
docker compose logs -f worker
# Worker has no auto-reload — restart it after worker code changes.
restart-worker:
docker compose restart worker
# Phase 2 — DynamoDB tables and queue inspection
setup-db:
docker compose exec server python /app/scripts/setup_dynamodb.py
# Phase 7 — OpenSearch indexes (LOCAL Docker container) and vector inspection
setup-opensearch:
docker compose exec worker python /app/scripts/setup_opensearch.py
# Provision AWS OpenSearch Serverless (encryption + network + data access
# policies, collection, 4 indexes). Idempotent — safe to re-run. Run before
# flipping VECTOR_MODE=aoss.
setup-aoss:
docker compose exec worker python /app/scripts/setup_aoss.py
# Phase 9 — Idempotently create the S3 trace-sync bucket. Reads
# S3_TRACES_BUCKET and AWS_REGION from env. Run once before flipping
# TRACE_SYNC_MODE=s3.
setup-s3:
docker compose exec worker python /app/scripts/setup_s3.py
# Idempotently create the SQS job queue. Reads SQS_QUEUE_NAME (default
# hyperpersona-jobs) + AWS_REGION. Prints the queue URL — copy into .env
# as SQS_QUEUE_URL, then flip QUEUE_MODE=sqs and `make down && make up`.
setup-sqs:
docker compose exec worker python /app/scripts/setup_sqs.py
# Ecommerce M1 — seed products + categories into Dynamo and embed into product-catalog
# Runs in the server container (it imports server-side schema/writer modules).
seed-products:
docker compose exec server python /app/scripts/seed_products.py
# Recommender catalog (separate `product_catalog` table used by the
# complement-products recommender). Distinct from the storefront `products`
# table that `seed-products` writes to.
seed-recommender-catalog:
docker compose exec server python /app/scripts/seed_recommender_catalog.py
# Reconcile Dynamo products with OpenSearch product-catalog (drift recovery).
# Pass DELETE_ORPHANS=1 to also remove vectors with no matching Dynamo row.
reconcile-products:
docker compose exec server python /app/scripts/reconcile_products.py $(if $(DELETE_ORPHANS),--delete-orphans,)
# Ecommerce M2 — seed reviews + demo customer (auth + profile + orders).
seed-reviews:
docker compose exec server python /app/scripts/seed_reviews.py
seed-demo-customer:
docker compose exec server python /app/scripts/seed_demo_customer.py
# One-shot: tables + indexes + all seeds.
seed-all: setup-db setup-opensearch seed-products seed-reviews seed-demo-customer
# End-to-end smoke for the 17 ecommerce endpoints. Idempotent — safe to
# re-run against an already-seeded stack.
smoke-ecom:
./scripts/smoke_ecom.sh
# usage: make scan-vectors COLL=customer-facts CUST=cust_1
# CUST is optional; omit it to scan everything in the collection
scan-vectors:
docker compose exec worker python /app/scripts/scan_vectors.py $(COLL) $(CUST)
scan-events:
docker compose exec server python /app/scripts/scan.py customer_events
scan-jobs:
docker compose exec server python /app/scripts/scan.py jobs
scan-consent:
docker compose exec server python /app/scripts/scan.py customer_consent
peek-queue:
docker exec hyperpersona-redis-1 redis-cli LRANGE jobs:pending 0 -1
# Phase 4 — Bedrock wrapper sanity test (mock or real, depending on BEDROCK_MODE)
test-bedrock:
docker compose exec worker python /app/scripts/test_bedrock.py
# Verify real Bedrock is live in BOTH containers (worker AND server). Runs
# the exact same embed+generate against each container's factory and
# confirms the singleton type is BedrockClient (not MockBedrockClient).
# Re-run this any time you refresh Workshop Studio temp creds.
verify-bedrock:
@echo "=== WORKER ==="
@docker compose exec worker python /app/scripts/verify_bedrock.py
@echo
@echo "=== SERVER ==="
@docker compose exec server python /app/scripts/verify_bedrock.py
# Phase 5 — Seed test consent records and run all four agent tools
seed-consent:
docker compose exec worker python /app/scripts/seed_consent.py
test-tools:
docker compose exec worker python /app/scripts/test_tools.py
# Phase 6 — Show the agent trace for one job: make show-trace JOB=<job_id>
show-trace:
docker compose exec worker python /app/scripts/show_trace.py $(JOB)
# Phase 8 — Hit GET /recommend: make test-recommend CUST=cust_1 CTX="outdoor gear"
test-recommend:
curl -s -H "X-API-Key: test-key" \
--data-urlencode "customer_id=$(CUST)" \
--data-urlencode "context=$(CTX)" \
-G "http://localhost:8000/recommend"
# Phase 11 — End-to-end privacy + GDPR delete verification
test-privacy:
docker compose exec server python /app/scripts/test_privacy.py
# Phase 12 — Full happy-path demo + ACE conflict-detection demo
test-e2e:
docker compose exec server python /app/scripts/test_e2e.py
demo-conflict:
docker compose exec server python /app/scripts/conflict_demo.py
# Step 2 — tiered processing: high-signal events run the supervisor,
# low-signal events get cheap-stored and rolled into session summaries.
demo-tiered:
docker compose exec server python /app/scripts/demo_tiered.py
# Step 4 — backpressure + per-customer rate limit
demo-backpressure:
docker compose exec server python /app/scripts/demo_backpressure.py
# Step 5 — horizontal worker scaling
# Usage: make scale N=4 (defaults to 4)
N ?= 4
scale:
docker compose up -d --scale worker=$(N) worker
worker-count:
docker compose ps worker --format "table {{.Name}}\t{{.Status}}"
# Stress test: send 40 high-signal events, time how long until they all complete.
# Run before/after `make scale N=4` to see the throughput speedup.
demo-scale:
docker compose exec server python /app/scripts/demo_scale.py
# Step 6 — async /recommend handler. Fires N concurrent /recommend, shows
# they run in parallel on the server's event loop instead of serialising.
demo-async-recommend:
docker compose exec server python /app/scripts/demo_async_recommend.py
# Step 7 — Complementary-products demo (cart → bag/mouse/etc).
# Prereq: make seed-products
demo-complement:
docker compose exec server python /app/scripts/demo_complement.py
ps:
docker compose ps
clean:
docker compose down -v