summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile78
1 files changed, 78 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..15c0031
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,78 @@
1REPO_ROOT := $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
2CHART_PATH := $(REPO_ROOT)/charts/llm-app
3AGENT_SRC := $(REPO_ROOT)/agent/agent.py
4AGENT_IMG := localhost/agent:0.1.0
5CLUSTER := llm-local
6CONTEXT := kind-$(CLUSTER)
7
8export KIND_EXPERIMENTAL_PROVIDER=podman
9
10.PHONY: help
11help:
12 @echo "Targets:"
13 @echo " up-dev deploy dev LLM (Qwen2.5-0.5B, 2 replicas)"
14 @echo " up-prod deploy prod LLM (Qwen2.5-1.5B, 1 replica + HPA 1->3)"
15 @echo " up-agent up-prod + tool-using agent"
16 @echo " ask Q='...' POST a question to the agent"
17 @echo " down destroy everything + delete kind cluster"
18 @echo ""
19 @echo "URLs (after up-dev/up-prod):"
20 @echo " Grafana http://grafana.localtest.me:8080 (admin/admin)"
21 @echo " curl -f http://grafana.localtest.me:8080/api/health"
22 @echo " Prometheus http://prom.localtest.me:8080"
23 @echo " curl -f http://prom.localtest.me:8080/-/healthy"
24 @echo ""
25
26.PHONY: up-dev
27up-dev:
28 @kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
29 cd $(REPO_ROOT)/terraform/envs/bootstrap && \
30 tofu init -upgrade && \
31 tofu apply -auto-approve \
32 -var kube_context=$(CONTEXT)
33 cd $(REPO_ROOT)/terraform/envs/dev && \
34 tofu init -upgrade && \
35 tofu apply -auto-approve \
36 -var kube_context=$(CONTEXT) \
37 -var chart_path=$(CHART_PATH)
38
39.PHONY: up-prod
40up-prod:
41 @kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
42 cd $(REPO_ROOT)/terraform/envs/bootstrap && \
43 tofu init -upgrade && \
44 tofu apply -auto-approve \
45 -var kube_context=$(CONTEXT)
46 cd $(REPO_ROOT)/terraform/envs/prod && \
47 tofu init -upgrade && \
48 tofu apply -auto-approve \
49 -var kube_context=$(CONTEXT) \
50 -var chart_path=$(CHART_PATH)
51
52.PHONY: up-agent
53up-agent: up-prod
54 podman build -t $(AGENT_IMG) $(REPO_ROOT)/agent/
55 @tmp=$$(mktemp -t agent-XXXXXX.tar); \
56 podman save $(AGENT_IMG) -o $$tmp && \
57 kind load image-archive $$tmp --name $(CLUSTER) && \
58 rm -f $$tmp
59 cd $(REPO_ROOT)/terraform/envs/agent && \
60 tofu init -upgrade && \
61 tofu apply -auto-approve \
62 -var kube_context=$(CONTEXT) \
63 -var agent_source_path=$(AGENT_SRC)
64
65.PHONY: ask
66ask:
67 @if [ -z "$(Q)" ]; then echo "usage: make ask Q='what is 17*23?'"; exit 1; fi
68 curl -s http://agent.localtest.me:8080/ask \
69 -H 'Content-Type: application/json' \
70 -d "$(shell printf '{"question":"%s"}' "$(Q)")" | python3 -m json.tool
71
72.PHONY: down
73down:
74 -cd $(REPO_ROOT)/terraform/envs/agent && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var agent_source_path=$(AGENT_SRC) || true
75 -cd $(REPO_ROOT)/terraform/envs/prod && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
76 -cd $(REPO_ROOT)/terraform/envs/dev && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
77 -cd $(REPO_ROOT)/terraform/envs/bootstrap && tofu destroy -auto-approve -var kube_context=$(CONTEXT) || true
78 KIND_EXPERIMENTAL_PROVIDER=podman kind delete cluster --name $(CLUSTER)