diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 78 |
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 @@ | |||
| 1 | REPO_ROOT := $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) | ||
| 2 | CHART_PATH := $(REPO_ROOT)/charts/llm-app | ||
| 3 | AGENT_SRC := $(REPO_ROOT)/agent/agent.py | ||
| 4 | AGENT_IMG := localhost/agent:0.1.0 | ||
| 5 | CLUSTER := llm-local | ||
| 6 | CONTEXT := kind-$(CLUSTER) | ||
| 7 | |||
| 8 | export KIND_EXPERIMENTAL_PROVIDER=podman | ||
| 9 | |||
| 10 | .PHONY: help | ||
| 11 | help: | ||
| 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 | ||
| 27 | up-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 | ||
| 40 | up-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 | ||
| 53 | up-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 | ||
| 66 | ask: | ||
| 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 | ||
| 73 | down: | ||
| 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) | ||
