# Session-Prompt — W5 Client & Tests (parallel, nach W1) ``` Modell: Sonnet Du bist WORKER für Paket W5 in /pfad/zu/jetson-ai-ollama, Branch `feat/w5-client-tests` (von `main`, nach W1-Merge). Lies AGENTS.md → STATE.md → CONVENTIONS.md. ## Aufgabe Einen schlanken OpenAI-kompatiblen Client + CLI, und die Tests, die die Erfolgskriterien KODIEREN (damit der Review sie ausführen statt glauben muss). ## Deliverables (Ownership: `client/`, `tests/`, `requirements/client.txt`, `requirements/dev.txt`) - `client/python/jetson_ai/client.py` — dünner Wrapper um `/v1/chat/completions` (Profil per Modellname `qwen-light`/`gemma`/`qwen-heavy`), Type Hints + Docstrings. - `client/cli/ai.py` — CLI: `ai -m qwen-light "..."`. - `tests/test_modelfiles.py` — prüft alle drei Modelfiles: `num_ctx` explizit, korrekte FROM-Pfade, Profilnamen (R-02/R-04-Oracle). - `tests/test_endpoints.py` — Smoke gegen Ollama `:11434` + Exporter `:8000/metrics` (gegen laufende Dienste oder gemockt). (R-06/R-10) - `requirements/client.txt`, `requirements/dev.txt`. ## Akzeptanzkriterien - [ ] `pytest tests/ -q` grün (R-09, R-10). - [ ] `tests/test_modelfiles.py` schlägt fehl, wenn ein `num_ctx` fehlt (negativer Fall). - [ ] Client spricht die OpenAI-Route, NICHT Ollamas natives `/api/generate`. ## Nicht anfassen `ollama/`, `exporter/`, `scripts/`, `.github/`, `docs/`. Nur deine Pfade. Form der Modelfiles/Endpoints kommt aus CONVENTIONS — bei Unklarheit dort nachsehen, nicht raten. ## Abschluss 1. `manifests/requirements.md`: R-09, R-10 → `done`. 2. `STATE.md` + Session-Log. 3. Commit `feat(w5): openai client, cli, tests` + Trailer `Co-Authored-By: Claude Sonnet 4.6 `. 4. `bash scripts/gate-session-hygiene.sh && bash scripts/gate-ownership.sh`. 5. PR (Base `main`). Dann Review-Gate (Opus). ```