nwhitehouse/mike

Olava/Qwen3 legal assistant with vision mode, research orchestration, and tabular document review

Active development across product, model integration, and infrastructure. nwhitehouse is running Olava in production on Railway and the commits reflect real operational feedback: the blank-image bug in vision mode was discovered by checking actual model outputs, the per-marker citation verifier was disabled after measuring 12-17s latency per call in production, and token budgets were tuned against observed usage. The tabular review system and research orchestrator suggest this fork is targeting legal due diligence workflows beyond basic document chat.

View on GitHub →

nwhitehouse/mike is the most heavily modified fork tracked here. The core work centers on integrating Olava-001 (a vLLM-hosted Qwen3-VL model) as a drop-in LLM provider alongside Claude and Gemini, then building out capabilities specific to that model: Qwen3 reasoning controls, vision mode for PDF document analysis, and a streaming citation UI.

Beyond the Olava integration, nwhitehouse has shipped substantial product work: a multi-pass research orchestrator (feat-005), a structured agent events audit log (feat-015), in-chat memory that persists tool calls and results across turns (feat-017), tabular document review with pgvector RAG, column management, filtering, and a durable job queue for tabular generation. Legal-specific tools include a legal database search tool with a Files-and-Sources picker, Brave web search integration, and a tabular cell citation system.

Infrastructure work includes auth/RLS hardening, dark mode with semantic token migration, a full Finch-to-Olava rebrand, and a loop controller that bounds tool dispatches per turn (feat-014).

What's in it

Direction

discoverychat-uibranding

Activity

Themed changes and pull requests touching this fork, newest first. Themed changes that haven't been turned into a public post yet still appear — they're real work even without a published writeup.

Show 8 more
📝 377-line operations and architecture README for the Olava deployment 1 commit 3mo ago infrastructureknowledge-management draft
Replaces three lines with a full handoff document covering the production topology, all env vars, vLLM specifics, and operational gotchas. If you're evaluating what nwhitehouse actually built and how it runs, this is the…
📝 Wire Vercel Web Analytics into the Next.js frontend 0 commits minor change

Threads of work (detailed view)

50 threads have been distilled into posts.

RAG over tabular-review documents via pgvector and OpenAI embeddings

nwhitehouse added end-to-end RAG on top of the tabular review: every uploaded document gets chunked and embedded via a new job type on the existing worker pool, chunks land in a `document_chunks` table with a pgvector HNSW index, and the TR chat retrieves top-K passages and injects them into the system prompt. Four commits over roughly an hour show what actually goes wrong when you run this on real PDFs.

Citation chips and keyword chips in the tabular cell side-panel

nwhitehouse extended the tabular cell detail view with two chip types: citation chips that jump the doc viewer to the cited page, and keyword chips that drive the doc-search input. Four commits landed over a day, with three of them fixing issues found from running the feature on real data.

Tabular review filtering by flag, verified state, and per-column text

nwhitehouse added a filter bar above the tabular review table that lets reviewers narrow rows by flag color, whether a cell has been manually verified, and per-column text predicates. The filter logic is pure and unit-tested; four commits address UX issues - mostly popover rendering against a sticky-column z-index stack - found through smoke testing.

Tabular column management: hide, reprocess per-column, delete with confirm

nwhitehouse added the column-level actions that become necessary once a tabular review has more than a handful of columns: per-column reprocess, delete with a confirmation modal that names the column and counts cells, and per-device localStorage-backed column visibility. Three commits, with two of them relocating the manage-columns UI after user feedback.

Dark mode via semantic-token migration across 74 frontend files

nwhitehouse added light/dark/system theme support. The bulk of the diff isn't adding `dark:` Tailwind variants; it's migrating raw color classes to the semantic tokens that were already defined in `globals.css`, which made both modes work at once.

Tabular generate replaced with a durable job queue and worker pool

The biggest structural change in the tabular review subsystem: +1650/-475 in a single commit, swapping the SSE-streaming generate handler for a jobs table with leased worker claims. The author's stated target is 5K-10K-document reviews; the proximate problem was that proxy idle timeouts, tab closes, and backend restarts all killed runs with no recovery path.

nwhitehouse puts the AI's reasoning on a dial

The model's chain-of-thought is now tucked behind a click, and teams can turn the deliberation down when it isn't earning its keep.

Qwen3 thinking mode gets env-var controls and a collapsed UI

nwhitehouse adds three env vars to gate Qwen3's reasoning budget and reworks the frontend thinking card so it collapses by default. The per-helper opt-out pattern - passing `enableThinking: false` on small single-purpose calls - is the most portable piece.

Structured agent_events audit log replaces 60+ scattered console.log calls

nwhitehouse replaced the only debug trail for agent activity - scattered `console.log` calls across `chatTools.ts` and `llm/olava.ts` - with an append-only `agent_events` table. The fire-and-forget write pattern and the metadata-only payload rule are worth stealing if your fork has any multi-step agent flow you need to diagnose after the fact.

Attachment chips in user messages now open the doc viewer

nwhitehouse fixes a silent UX gap: the filename chips shown next to a user prompt were display-only. Two commits make them clickable when a `document_id` is present, with the second commit catching a missed render path.

Five-pass research pipeline for a small reasoning model

nwhitehouse built a full multi-step research orchestrator on top of the Olava-001 vLLM endpoint - query expansion, parallel search fan-out, triage, per-result extraction, and streaming synthesis, all coordinated by a 302-line pipeline with hard caps of 25 Olava calls and 45 seconds wall-clock. Tested end-to-end against real CourtListener data, it produced a 2KB synthesis with inline citations where the single-pass path emitted only whitespace.

Search result cards rendered inline, then rescued from the collapsible wrapper

feat-004 makes every `legal_search` and `web_search` result visible as a clickable card in the assistant message regardless of whether Olava synthesizes anything useful. bug-003, 45 minutes later, fixes the UX failure where those cards landed inside the collapsible "Completed in N steps" wrapper and were invisible by default.

Brave web-search tool with per-message globe toggle

nwhitehouse added a `web_search` tool backed by the Brave Search API. It's a binary toggle per message, hard-gated so the tool never appears in the schema when the user hasn't enabled it.

Olava streaming restored, then corrected after live endpoint testing

Two commits, same day, in opposite directions. feat-001 restores streaming during tool-using turns by adding a state machine that hides `<think>` blocks and `<tool_call>` markup from the user-visible stream while keeping the raw buffer intact for the custom parser. bug-002 then discovers that on the actual RunPod endpoint the markup never lands in `delta.content` at all - vLLM just drops it - and pivots to re-issuing the first iter as a non-streaming request to recover the tool call.

Auth hardening: RLS migration, server-side security middleware, and HTML sanitization

nwhitehouse ran a broad security pass across 36 files, shipping a 451-line RLS migration, server-side HTTP security middleware, download-token tightening, and frontend HTML sanitization for assistant message rendering. This is the kind of sweep you do once you've decided the fork is hosting real user data.

377-line operations and architecture README for the Olava deployment

Replaces three lines with a full handoff document covering the production topology, all env vars, vLLM specifics, and operational gotchas. If you're evaluating what nwhitehouse actually built and how it runs, this is the single best artifact in the fork.

Olava-only lockdown: Anthropic and Gemini stripped from model picker

A -283/+99 commit across 22 files that commits the fork to a single-provider product. The model picker now shows only "Olava-001", the API-key entry UI is gone entirely, all defaults route to `olava-extract`, and the LLM router coerces any non-Olava model ID (from stale localStorage or DB rows) back to the default at the server layer.

Third LLM provider: Olava (vLLM/Qwen LoRA) wired into the router

nwhitehouse added a vLLM-backed "Olava" provider - an OpenAI-compatible endpoint serving a Qwen3-based reasoning LoRA - alongside the existing Anthropic and Gemini paths. The interesting part is not the provider addition itself but the scaffolding built to make a small reasoning model behave: think-block stripping, a 16384-token floor, a custom tool-call parser for non-standard LoRA markup, and a tool-stripping default that prevents 400s on vLLM servers without `--enable-auto-tool-choice`.

Finch rebrand and tabular doc-detail drill-in view

One commit doing two unrelated things: a string-level rename of the product from Mike to Finch, and a 675-line three-pane doc-detail view for tabular review drill-in with inline cell editing and in-document search.

Pull requests (detailed view)

1 PR touch this fork — inbound (filed against it) or outbound (filed from it). State icons match the editorial dashboard.

🟢 Open (1)