physix / frontend /README.md
Pratyush-01's picture
Upload folder using huggingface_hub
0e24aff verified

PhysiX-Live frontend

React + TypeScript + Tailwind UI for the PhysiX-Live demo. Two tabs:

  • Run with LLM — drives a live episode via POST /interactive/sessions/:id/llm-step. Server calls a local Ollama daemon, parses the reply, scores it, returns the turn. The UI streams turn cards as they arrive.
  • Manual/interactive/sessions/:id/step: you submit equations yourself.

Stack

  • React 18 with strict TypeScript (exactOptionalPropertyTypes: true).
  • Tailwind CSS 3 (warm dark palette, custom tokens in tailwind.config.js).
  • Vite 5 dev server / bundler.
  • KaTeX for live equation rendering.
  • Plain HTML5 canvas for trajectory plots — no chart library.

Layout

src/
├── App.tsx                       # tab switch
├── main.tsx                      # ReactDOM root
├── components/
│   ├── HeroIntro.tsx             # 3-step "Observe / Hypothesise / Verify"
│   ├── RunWithLlmPane.tsx        # LLM-driven episode + turn-by-turn stream
│   ├── InteractivePane.tsx       # manual equation submission
│   ├── EquationInput.tsx         # textarea + KaTeX preview + starter chips
│   ├── EquationDisplay.tsx       # KaTeX render of one equation
│   ├── TrajectoryCanvas.tsx      # observed (cyan) + predicted (coral)
│   ├── RewardGauge.tsx           # 4-bar breakdown with tooltips
│   └── Skeleton.tsx              # loading shimmer
├── hooks/
│   ├── useInteractiveSession.ts  # manual-mode session lifecycle
│   └── useLlmEpisodeRunner.ts    # LLM run / pause / step-once orchestration
├── lib/
│   ├── interactiveClient.ts      # typed fetch over /interactive/*
│   ├── trajectory.ts             # canvas projection helpers
│   ├── format.ts                 # SymPy -> KaTeX
│   └── cn.ts                     # classnames joiner
└── types/physix.ts               # mirrors the Pydantic wire schema

Scripts

pnpm install        # install deps
pnpm dev            # vite dev server on http://localhost:5173
pnpm typecheck      # strict tsc --noEmit
pnpm build          # production build into dist/
pnpm preview        # serve the production build locally

The UI expects VITE_PHYSIX_API_URL (default http://localhost:8000) to point at a running env server (python -m physix.server.app). For the LLM tab you also need ollama serve and the model tag pulled.