# Semana 14: agentes y productos con modelos de lenguaje. Se usa dentro del
# contenedor del curso.
#
#   make            no hay nada que preparar: el kit no descarga ni compila nada
#   make test       revisa los tipos (tsc) y corre las pruebas: las evals con el
#                   modelo con guion y los ejemplos del apunte
#   make evals      solo las evals, con la métrica que imprimen
#   make eval-real  las mismas evals contra un servidor compatible con la API de
#                   OpenAI. Hay que definir LLM_BASE_URL y LLM_MODEL
#   make agente     el ciclo de un agente de juguete, con un modelo con guion
#   make mcp        una conversación con el servidor MCP de juguete, por stdio
#   make costo      el costo mensual de la estimación del apunte
#   make clean      borra build/
#
# El kit se copia a una carpeta del repositorio de Kallpa (por ejemplo, asistente/):
# no trae configuración de ESLint porque el `make check` de Kallpa ya lo revisa.
#
# Lo que está en recordings.json lo escribimos para la clase: no es la salida de
# ningún modelo real.

.PHONY: all test evals eval-real agente mcp costo clean

all:
	@echo "Nada que preparar. Prueben con: make test"

test:
	tsc -p .
	node --test "*.test.ts" "ejemplos/*.test.ts"
	@if [ -d solution ]; then tsc -p solution && node --test "solution/*.test.ts"; fi

evals:
	@node --test assistant.eval.test.ts

eval-real:
	@if [ -z "$(LLM_BASE_URL)" ] || [ -z "$(LLM_MODEL)" ]; then \
	  echo "Falta configurar el modelo. Ejemplo:"; \
	  echo "  LLM_BASE_URL=http://host.docker.internal:11434/v1 LLM_MODEL=<modelo> make eval-real"; \
	  exit 2; \
	fi
	@LLM_BASE_URL="$(LLM_BASE_URL)" LLM_MODEL="$(LLM_MODEL)" node --test assistant.eval.test.ts

agente:
	@node ejemplos/agent-loop-demo.ts

mcp:
	@node ejemplos/mcp-client-demo.ts

costo:
	@node ejemplos/cost-demo.ts

clean:
	rm -rf build
