project-page Westside AI Assistant
project-westside-ai-assistant updated 2026-03-30

Vision

Nemo — an AI assistant that lives in GroupMe, enabling program admins (Marcus) to manage the Westside basketball program through natural language. Backed by Anthropic Haiku 4.5 with tool_use against basketball-api. Read-only V1, with a graduation path to write access based on interaction log analysis. Child project of Westside Basketball.

User Stories

Key Story Note Role Success Metric
read-ops story-westside-ai-assistant-read-ops Admin Marcus can query player/team/payment data via GroupMe and get accurate answers
write-ops story-westside-ai-assistant-write-ops Admin Marcus can update player info and manage teams via GroupMe with confirmation (future — not V1)
safety story-westside-ai-assistant-safety Admin V1 is read-only. Write ops excluded. Bot locked to approved group.

Future stories: Coach-level assistant with scoped permissions (spike #22).

Architecture

  1. Domain Model — GroupMe message → Nemo AI engine → basketball-api tool call → response
  2. Data Flow — GroupMe callback POST → Anthropic Haiku tool_use → cluster-internal HTTP → GroupMe bot post
  3. Deployment — FastAPI pod in k8s, Tailscale funnel, Keycloak service account (westside-ai-bot, admin role)

Key decisions:

  • GroupMe bot callback (not polling) — real-time conversational response
  • Anthropic Haiku 4.5 (cheapest model, ~$0.25/M input) — Ollama/qwen2.5:7b as zero-cost fallback (provider switch ticket #16)
  • Cluster-internal basketball-api calls — no external network hop
  • Keycloak service account with admin role — client credentials flow
  • Modular tool registry (ticket #18) — tools as directories, auto-discovered, enabled/disabled via frontmatter
  • Read-only V1 — write tools exist in codebase but disabled. Graduation via interaction log analysis.

Board

board-westside-ai-assistant

Status

Deployed and responding. Pod running in k8s, Haiku responding to GroupMe messages. Keycloak auth to basketball-api being validated. Test GroupMe group: "Westside AI Assistant - Test" (ID: 114069292).

Achieved: M1 (bot responds to messages). M2 in validation (read queries against basketball-api).

In progress: Repo restructure (#18), read-only lockdown (#20), interaction logging (#19/#21).

Backlog: Provider switch (#16), coach-level expansion (spike #22), secrets backup (pal-e-platform #253).

Milestones

  • M1 (achieved): Bot receives message in test group and responds conversationally
  • M2 (validating): Bot answers a read query ("list all players") correctly via basketball-api
  • M3 (future): Bot executes a confirmed write ("update height") end-to-end
  • M4 (future): Coach-level assistant in team GroupMe groups with scoped permissions

Repos

Repo Platform Role Status
westside-ai-assistant Forgejo Nemo AI assistant FastAPI service Deployed — 7 PRs merged, pod running, Haiku responding
basketball-api Forgejo Consumed API (not modified) Production
pal-e-services Forgejo Infra: namespace, Harbor, ArgoCD, Keycloak client Applied
pal-e-deployments Forgejo Kustomize overlay Merged
pal-e-platform Forgejo NetworkPolicies (keycloak + ollama) Applied

Infrastructure

  • Namespace: westside-ai-assistant
  • Funnel: https://westside-ai-assistant.tail5b443a.ts.net
  • Harbor: westside-ai-assistant/api
  • Keycloak client: westside-ai-bot (confidential, service account, admin role)
  • GroupMe bot: "Westside Assistant" (bot_id: 96060d69c3efb7a4aca500cc7d, group: 114069292)
  • Model: claude-haiku-4-5-20251001 (configurable via ANTHROPIC_MODEL env var)
  • Ollama fallback: qwen2.5:7b pulled and ready in cluster Ollama pod