summaryrefslogtreecommitdiff
path: root/Makefile
blob: 15c0031cc38f1bd00fc057f700e478f7b120da3a (plain)
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
REPO_ROOT   := $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
CHART_PATH  := $(REPO_ROOT)/charts/llm-app
AGENT_SRC   := $(REPO_ROOT)/agent/agent.py
AGENT_IMG   := localhost/agent:0.1.0
CLUSTER     := llm-local
CONTEXT     := kind-$(CLUSTER)

export KIND_EXPERIMENTAL_PROVIDER=podman

.PHONY: help
help:
	@echo "Targets:"
	@echo "  up-dev         deploy dev LLM (Qwen2.5-0.5B, 2 replicas)"
	@echo "  up-prod        deploy prod LLM (Qwen2.5-1.5B, 1 replica + HPA 1->3)"
	@echo "  up-agent       up-prod + tool-using agent"
	@echo "  ask Q='...'    POST a question to the agent"
	@echo "  down           destroy everything + delete kind cluster"
	@echo ""
	@echo "URLs (after up-dev/up-prod):"
	@echo "  Grafana    http://grafana.localtest.me:8080  (admin/admin)"
	@echo "    curl -f http://grafana.localtest.me:8080/api/health"
	@echo "  Prometheus http://prom.localtest.me:8080"
	@echo "    curl -f http://prom.localtest.me:8080/-/healthy"
	@echo ""

.PHONY: up-dev
up-dev:
	@kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
	cd $(REPO_ROOT)/terraform/envs/bootstrap && \
	  tofu init -upgrade && \
	  tofu apply -auto-approve \
	    -var kube_context=$(CONTEXT)
	cd $(REPO_ROOT)/terraform/envs/dev && \
	  tofu init -upgrade && \
	  tofu apply -auto-approve \
	    -var kube_context=$(CONTEXT) \
	    -var chart_path=$(CHART_PATH)

.PHONY: up-prod
up-prod:
	@kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
	cd $(REPO_ROOT)/terraform/envs/bootstrap && \
	  tofu init -upgrade && \
	  tofu apply -auto-approve \
	    -var kube_context=$(CONTEXT)
	cd $(REPO_ROOT)/terraform/envs/prod && \
	  tofu init -upgrade && \
	  tofu apply -auto-approve \
	    -var kube_context=$(CONTEXT) \
	    -var chart_path=$(CHART_PATH)

.PHONY: up-agent
up-agent: up-prod
	podman build -t $(AGENT_IMG) $(REPO_ROOT)/agent/
	@tmp=$$(mktemp -t agent-XXXXXX.tar); \
	  podman save $(AGENT_IMG) -o $$tmp && \
	  kind load image-archive $$tmp --name $(CLUSTER) && \
	  rm -f $$tmp
	cd $(REPO_ROOT)/terraform/envs/agent && \
	  tofu init -upgrade && \
	  tofu apply -auto-approve \
	    -var kube_context=$(CONTEXT) \
	    -var agent_source_path=$(AGENT_SRC)

.PHONY: ask
ask:
	@if [ -z "$(Q)" ]; then echo "usage: make ask Q='what is 17*23?'"; exit 1; fi
	curl -s http://agent.localtest.me:8080/ask \
	  -H 'Content-Type: application/json' \
	  -d "$(shell printf '{"question":"%s"}' "$(Q)")" | python3 -m json.tool

.PHONY: down
down:
	-cd $(REPO_ROOT)/terraform/envs/agent     && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var agent_source_path=$(AGENT_SRC) || true
	-cd $(REPO_ROOT)/terraform/envs/prod      && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
	-cd $(REPO_ROOT)/terraform/envs/dev       && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
	-cd $(REPO_ROOT)/terraform/envs/bootstrap && tofu destroy -auto-approve -var kube_context=$(CONTEXT) || true
	KIND_EXPERIMENTAL_PROVIDER=podman kind delete cluster --name $(CLUSTER)