# afterexam/kaggle-tpu-lab-mobile architecture

> Architecture diagram of the GitHub repository afterexam/kaggle-tpu-lab-mobile, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/afterexam/kaggle-tpu-lab-mobile
- Repository: https://github.com/afterexam/kaggle-tpu-lab-mobile

## Overview

Kaggle TPU Lab Mobile is an Android companion for configuring and racing Kaggle accounts to obtain TPU instances, monitoring startup, and chatting with the resulting model endpoint. Its main path runs from the app through account racing and Kaggle scheduling to a serving kernel, then through a streamed chat connection; progress events also reach Android notifications. The README documents both Qwen and GLM serving, export, and quota protection. Source excerpts are partial, so some links reflect documented capabilities rather than inspected call sites.

Main entry points: [`src/App.tsx`](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/App.tsx) (App root), [`kernels/serve_glm53.py`](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_glm53.py) (GLM serving kernel), [`kernels/serve_qwen38.py`](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_qwen38.py) (Qwen serving kernel), [`src/services/racer.ts`](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/racer.ts) (Instance manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_app["App root<br/>[App.tsx]"]
  node_dashboard["Dashboard<br/>[DashboardView.tsx]"]
  node_chatview["Chat view<br/>[ChatView.tsx]"]
  node_settings["Settings<br/>[SettingsView.tsx]"]
  node_export["Export modal<br/>[ExportModal.tsx]"]
  node_chat_service["Chat service<br/>[chat.ts]"]
  node_clipboard["Export helpers<br/>[clipboard.ts]"]
end

subgraph group_control["Scheduling and monitoring"]
  node_racer["Instance manager<br/>[racer.ts]"]
  node_kaggle["Kaggle API client<br/>[kaggle.ts]"]
  node_templates["Kernel templates<br/>[templates.ts]"]
  node_template_data["Embedded templates<br/>[templates_data.ts]"]
  node_ntfy["Progress listener<br/>[ntfy.ts]"]
end

subgraph group_serving["TPU serving"]
  node_qwen["Qwen serving kernel<br/>[serve_qwen38.py]"]
  node_glm["GLM serving kernel<br/>[serve_glm53.py]"]
  node_glm_engine["GLM inference engine<br/>[engine.py]"]
end

subgraph group_native["Android integration"]
  node_queue_monitor["Queue monitor service"]
  node_plugin["Monitor plugin"]
  node_activity["Capacitor activity<br/>[MainActivity.java]"]
end

node_user(("User"))
node_kaggle_api{{"Kaggle REST API"}}
node_tpu{{"Kaggle TPU"}}
node_ntfy_service{{"ntfy.sh"}}
node_endpoint{{"Model endpoint"}}

node_user -->|"uses"| node_app
node_app -->|"shows"| node_dashboard
node_app -->|"shows"| node_chatview
node_app -->|"shows"| node_settings
node_app -->|"opens"| node_export
node_app -->|"starts instances"| node_racer
node_dashboard -->|"manages races"| node_racer
node_racer -->|"requests actions"| node_kaggle
node_kaggle -->|"calls"| node_kaggle_api
node_kaggle_api -->|"schedules"| node_tpu
node_racer -.->|"uses"| node_templates
node_templates -->|"reads"| node_template_data
node_kaggle_api -.->|"pushes kernel"| node_qwen
node_kaggle_api -.->|"pushes kernel"| node_glm
node_qwen -->|"serves on"| node_tpu
node_glm -->|"serves on"| node_tpu
node_glm -->|"runs inference"| node_glm_engine
node_qwen -.->|"publishes progress"| node_ntfy_service
node_glm -.->|"publishes progress"| node_ntfy_service
node_ntfy -->|"listens"| node_ntfy_service
node_ntfy_service -->|"streams events"| node_queue_monitor
node_activity -->|"registers"| node_plugin
node_plugin -->|"controls"| node_queue_monitor
node_app -.->|"bridges monitor"| node_plugin
node_qwen -->|"exposes"| node_endpoint
node_glm -->|"exposes"| node_endpoint
node_chatview -->|"sends chat"| node_chat_service
node_chat_service -->|"streams requests"| node_endpoint
node_dashboard -->|"copies endpoint data"| node_clipboard
node_chatview -->|"copies snippets"| node_clipboard
node_export -->|"formats config"| node_clipboard

click node_app "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/App.tsx"
click node_dashboard "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/DashboardView.tsx"
click node_chatview "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/ChatView.tsx"
click node_settings "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/SettingsView.tsx"
click node_export "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/ExportModal.tsx"
click node_racer "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/racer.ts"
click node_kaggle "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/kaggle.ts"
click node_templates "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/templates.ts"
click node_template_data "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/templates_data.ts"
click node_ntfy "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/ntfy.ts"
click node_queue_monitor "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/QueueMonitorService.java"
click node_plugin "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/QueueMonitorPlugin.java"
click node_activity "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/MainActivity.java"
click node_chat_service "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/chat.ts"
click node_clipboard "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/clipboard.ts"
click node_qwen "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_qwen38.py"
click node_glm "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_glm53.py"
click node_glm_engine "https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/glm53/engine.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_dashboard,node_chatview,node_settings,node_export,node_chat_service,node_clipboard,node_user toneBlue
class node_racer,node_kaggle,node_templates,node_template_data,node_ntfy toneAmber
class node_qwen,node_glm,node_glm_engine,node_kaggle_api toneMint
class node_queue_monitor,node_plugin,node_activity toneRose
class node_tpu,node_ntfy_service,node_endpoint toneIndigo
```

## Components

### Mobile app

- [App root](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/App.tsx): `src/App.tsx`
- [Dashboard](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/DashboardView.tsx): `src/components/DashboardView.tsx`
- [Chat view](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/ChatView.tsx): `src/components/ChatView.tsx`
- [Settings](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/SettingsView.tsx): `src/components/SettingsView.tsx`
- [Export modal](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/components/ExportModal.tsx): `src/components/ExportModal.tsx`
- [Chat service](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/chat.ts): `src/services/chat.ts`
- [Export helpers](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/clipboard.ts): `src/services/clipboard.ts`

### Scheduling and monitoring

- [Instance manager](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/racer.ts): `src/services/racer.ts`
- [Kaggle API client](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/kaggle.ts): `src/services/kaggle.ts`
- [Kernel templates](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/templates.ts): `src/services/templates.ts`
- [Embedded templates](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/templates_data.ts): `src/services/templates_data.ts`
- [Progress listener](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/src/services/ntfy.ts): `src/services/ntfy.ts`

### TPU serving

- [Qwen serving kernel](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_qwen38.py): `kernels/serve_qwen38.py`
- [GLM serving kernel](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/serve_glm53.py): `kernels/serve_glm53.py`
- [GLM inference engine](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/kernels/glm53/engine.py): `kernels/glm53/engine.py`

### Android integration

- [Queue monitor service](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/QueueMonitorService.java): `android/app/src/main/java/com/kaggletpulab/app/QueueMonitorService.java`
- [Monitor plugin](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/QueueMonitorPlugin.java): `android/app/src/main/java/com/kaggletpulab/app/QueueMonitorPlugin.java`
- [Capacitor activity](https://github.com/afterexam/kaggle-tpu-lab-mobile/blob/main/android/app/src/main/java/com/kaggletpulab/app/MainActivity.java): `android/app/src/main/java/com/kaggletpulab/app/MainActivity.java`

### Other components

- **User**
- **Kaggle REST API**
- **Kaggle TPU**
- **ntfy.sh**
- **Model endpoint**

## Connections

- User → App root: uses
- App root → Dashboard: shows
- App root → Chat view: shows
- App root → Settings: shows
- App root → Export modal: opens
- App root → Instance manager: starts instances
- Dashboard → Instance manager: manages races
- Instance manager → Kaggle API client: requests actions
- Kaggle API client → Kaggle REST API: calls
- Kaggle REST API → Kaggle TPU: schedules
- Instance manager → Kernel templates: uses
- Kernel templates → Embedded templates: reads
- Kaggle REST API → Qwen serving kernel: pushes kernel
- Kaggle REST API → GLM serving kernel: pushes kernel
- Qwen serving kernel → Kaggle TPU: serves on
- GLM serving kernel → Kaggle TPU: serves on
- GLM serving kernel → GLM inference engine: runs inference
- Qwen serving kernel → ntfy.sh: publishes progress
- GLM serving kernel → ntfy.sh: publishes progress
- Progress listener → ntfy.sh: listens
- ntfy.sh → Queue monitor service: streams events
- Capacitor activity → Monitor plugin: registers
- Monitor plugin → Queue monitor service: controls
- App root → Monitor plugin: bridges monitor
- Qwen serving kernel → Model endpoint: exposes
- GLM serving kernel → Model endpoint: exposes
- Chat view → Chat service: sends chat
- Chat service → Model endpoint: streams requests
- Dashboard → Export helpers: copies endpoint data
- Chat view → Export helpers: copies snippets
- Export modal → Export helpers: formats config
