Skip to content

Commit ed62732

Browse files
authored
Alonragoler/multiagent (#6)
1 parent d72c846 commit ed62732

15 files changed

Lines changed: 1013 additions & 39 deletions

File tree

Makefile

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ KUBECTL := CLOUDSDK_CONFIG=$(GCLOUD_CONFIG_ABS) pixi run kubectl
6161
gcp-admin-auth gcp-admin-project gcp-admin-kms-create-keyring gcp-admin-kms-create-key gcp-admin-kms-grant-user gcp-admin-kms-setup \
6262
gke-auth gke-namespace gke-dummy-build gke-dummy-push gke-dummy-run-once gke-dummy-schedule gke-dummy-delete gke-dummy-logs \
6363
sentiment-build sentiment-push sentiment-run-once sentiment-schedule sentiment-delete sentiment-logs \
64+
redis-deploy redis-delete sentiment-rbac \
6465
logout
6566

6667
# ------------------------------------------------------------------------------------ #
@@ -277,7 +278,20 @@ sentiment-push: gcp-docker-auth gcp-artifact-registry-repo
277278
$(GCLOUD) auth print-access-token | docker login -u oauth2accesstoken --password-stdin "https://$$REGISTRY_HOST"
278279
@CLOUDSDK_CONFIG=$(GCLOUD_CONFIG_ABS) docker push "$(SENTIMENT_IMAGE)"
279280

280-
sentiment-run-once: gke-namespace
281+
redis-deploy: gke-namespace
282+
@sed -e 's|__NAMESPACE__|$(GKE_NAMESPACE)|g' cloud/k8s/redis/deployment.yaml | $(KUBECTL) apply -f -
283+
@sed -e 's|__NAMESPACE__|$(GKE_NAMESPACE)|g' cloud/k8s/redis/service.yaml | $(KUBECTL) apply -f -
284+
@echo "Redis deployed. Waiting for pod to be ready..."
285+
@$(KUBECTL) -n "$(GKE_NAMESPACE)" rollout status deployment/redis --timeout=60s
286+
287+
redis-delete: gke-auth
288+
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete deployment redis --ignore-not-found
289+
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete service redis-service --ignore-not-found
290+
291+
sentiment-rbac: gke-namespace
292+
@sed -e 's|__NAMESPACE__|$(GKE_NAMESPACE)|g' "$(SENTIMENT_MANIFEST_DIR)/rbac.yaml" | $(KUBECTL) apply -f -
293+
294+
sentiment-run-once: gke-namespace sentiment-rbac
281295
@test -n "$(OPENAI_API_KEY)" || (echo "Set OPENAI_API_KEY=... (e.g. make OPENAI_API_KEY=... sentiment-run-once)"; exit 1)
282296
@test -n "$(TAVILY_API_KEY)" || (echo "Set TAVILY_API_KEY=... (e.g. make TAVILY_API_KEY=... sentiment-run-once)"; exit 1)
283297
@sed -e 's|__IMAGE__|$(SENTIMENT_IMAGE)|g' \
@@ -287,7 +301,7 @@ sentiment-run-once: gke-namespace
287301
-e 's|__SENTIMENT_TOPIC__|$(SENTIMENT_TOPIC)|g' \
288302
"$(SENTIMENT_MANIFEST_DIR)/job.yaml" | $(KUBECTL) apply -f -
289303

290-
sentiment-schedule: gke-namespace
304+
sentiment-schedule: gke-namespace sentiment-rbac
291305
@test -n "$(OPENAI_API_KEY)" || (echo "Set OPENAI_API_KEY=... (e.g. make OPENAI_API_KEY=... sentiment-schedule)"; exit 1)
292306
@test -n "$(TAVILY_API_KEY)" || (echo "Set TAVILY_API_KEY=... (e.g. make TAVILY_API_KEY=... sentiment-schedule)"; exit 1)
293307
@sed -e 's|__IMAGE__|$(SENTIMENT_IMAGE)|g' \
@@ -300,6 +314,8 @@ sentiment-schedule: gke-namespace
300314
sentiment-delete: gke-auth
301315
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete cronjob sentiment-agent --ignore-not-found
302316
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete job sentiment-agent-once --ignore-not-found
317+
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete jobs -l role=researcher --ignore-not-found
318+
@$(KUBECTL) -n "$(GKE_NAMESPACE)" delete jobs -l role=synthesizer --ignore-not-found
303319

304320
sentiment-logs: gke-auth
305321
@$(KUBECTL) -n "$(GKE_NAMESPACE)" logs -l app=sentiment-agent --all-containers=true --tail=200 --prefix=true || ( \

cloud/k8s/redis/deployment.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: redis
5+
namespace: __NAMESPACE__
6+
labels:
7+
app: redis
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: redis
13+
template:
14+
metadata:
15+
labels:
16+
app: redis
17+
spec:
18+
containers:
19+
- name: redis
20+
image: redis:7-alpine
21+
ports:
22+
- containerPort: 6379
23+
resources:
24+
requests:
25+
cpu: "50m"
26+
memory: "64Mi"
27+
limits:
28+
cpu: "200m"
29+
memory: "128Mi"
30+
args: ["--maxmemory", "100mb", "--maxmemory-policy", "allkeys-lru"]

cloud/k8s/redis/service.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: redis-service
5+
namespace: __NAMESPACE__
6+
labels:
7+
app: redis
8+
spec:
9+
type: ClusterIP
10+
selector:
11+
app: redis
12+
ports:
13+
- port: 6379
14+
targetPort: 6379
15+
protocol: TCP

cloud/k8s/sentiment-agent/cronjob.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,26 @@ spec:
1717
metadata:
1818
labels:
1919
app: sentiment-agent
20+
role: orchestrator
2021
spec:
22+
serviceAccountName: sentiment-orchestrator
2123
restartPolicy: Never
2224
containers:
2325
- name: sentiment-agent
2426
image: __IMAGE__
2527
imagePullPolicy: IfNotPresent
2628
env:
29+
- name: AGENT_ROLE
30+
value: "orchestrator"
2731
- name: OPENAI_API_KEY
2832
value: "__OPENAI_API_KEY__"
2933
- name: TAVILY_API_KEY
3034
value: "__TAVILY_API_KEY__"
3135
- name: SENTIMENT_TOPIC
3236
value: "__SENTIMENT_TOPIC__"
37+
- name: REDIS_HOST
38+
value: "redis-service"
39+
- name: SENTIMENT_IMAGE
40+
value: "__IMAGE__"
41+
- name: K8S_NAMESPACE
42+
value: "__NAMESPACE__"

cloud/k8s/sentiment-agent/job.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,26 @@ spec:
1212
metadata:
1313
labels:
1414
app: sentiment-agent
15+
role: orchestrator
1516
spec:
17+
serviceAccountName: sentiment-orchestrator
1618
restartPolicy: Never
1719
containers:
1820
- name: sentiment-agent
1921
image: __IMAGE__
2022
imagePullPolicy: Always
2123
env:
24+
- name: AGENT_ROLE
25+
value: "orchestrator"
2226
- name: OPENAI_API_KEY
2327
value: "__OPENAI_API_KEY__"
2428
- name: TAVILY_API_KEY
2529
value: "__TAVILY_API_KEY__"
2630
- name: SENTIMENT_TOPIC
2731
value: "__SENTIMENT_TOPIC__"
32+
- name: REDIS_HOST
33+
value: "redis-service"
34+
- name: SENTIMENT_IMAGE
35+
value: "__IMAGE__"
36+
- name: K8S_NAMESPACE
37+
value: "__NAMESPACE__"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: sentiment-orchestrator
5+
namespace: __NAMESPACE__
6+
---
7+
apiVersion: rbac.authorization.k8s.io/v1
8+
kind: Role
9+
metadata:
10+
name: sentiment-job-manager
11+
namespace: __NAMESPACE__
12+
rules:
13+
- apiGroups: ["batch"]
14+
resources: ["jobs"]
15+
verbs: ["create", "get", "list", "watch", "delete"]
16+
- apiGroups: [""]
17+
resources: ["pods"]
18+
verbs: ["get", "list", "watch"]
19+
- apiGroups: [""]
20+
resources: ["pods/log"]
21+
verbs: ["get"]
22+
---
23+
apiVersion: rbac.authorization.k8s.io/v1
24+
kind: RoleBinding
25+
metadata:
26+
name: sentiment-orchestrator-binding
27+
namespace: __NAMESPACE__
28+
subjects:
29+
- kind: ServiceAccount
30+
name: sentiment-orchestrator
31+
namespace: __NAMESPACE__
32+
roleRef:
33+
kind: Role
34+
name: sentiment-job-manager
35+
apiGroup: rbac.authorization.k8s.io

0 commit comments

Comments
 (0)