import qrcode import io import base64 from datetime import datetime from fastapi import Request from fastapi.templating import Jinja2Templates from fastapi.responses import HTMLResponse from app.config import Settings from app.session_store import create_session, get_session from app.security import create_worker_join_token # Use a simple in-memory template for v1; Jinja2 templates directory if present templates = Jinja2Templates(directory="app/templates") def render_home(request: Request) -> HTMLResponse: return HTMLResponse(content=_home_html(), status_code=200) def render_worker_page(request: Request, session_id: str, token: str) -> HTMLResponse: return HTMLResponse(content=_worker_html(session_id, token), status_code=200) def render_session_dashboard(request: Request, session_id: str) -> HTMLResponse: session = get_session(session_id) if not session: return HTMLResponse(content="
Turn an iPhone into a temporary private ML compute worker.
""" def _worker_html(session_id: str, token: str) -> str: # This redirects to the static worker.html with query params return f"""Session: {session_id}
POST /api/session/{session_id}/job
GET /api/job/{{job_id}}
GET /api/receipt/{{receipt_id}}