Skip to content

Releases: LLM-X-Factorer/topic2md

v0.2.0 — first tagged release

21 Apr 08:00
567665a

Choose a tag to compare

End-to-end production-quality pipeline: topic → researched markdown with real images, persisted and re-runnable.

Added

  • PDF export via scripts/mkpdf.mjs (Chromium headless). Remote images cached to out/_pdf_assets/ so PDFs are offline-reproducible.
  • CLIP warm-up (#26) — fire-and-forget warmup from runTopic2md / regenSection entry; cold-start ~114s → ~1.4s on a warm Replicate container.
  • Persistent image embeddings (#27) — SQLite image_embeddings table caches jina-clip-v2 embeddings per URL + model_version across runs. 100% cache-hit on regen.
  • Alt-quality penalty (#28) — soft multiplier on raw CLIP cosine for empty/generic alt, short alt, CMS-dump URLs.
  • CLIP relevance gatezsxkib/jina-clip-v2 on Replicate, threshold 0.30 calibrated on 68 labeled candidates (AUC 0.85, recall 0.97).
  • Candidate pool + vision rerank — multi-plugin candidates → qwen3-vl-32b picks one per section, with pickIndex=-1 respected.
  • Background context field (#24) — WorkflowInput.background threads through research → outline → sections. CLI --background / --background-file; Web UI textarea.
  • SQLite persistence — run history + topic2md list / show / regen --section N.
  • LLM model fallback chain + per-generation Langfuse telemetry.
  • Plugin dispose?() lifecycle hook.
  • Open-source baseline: CONTRIBUTING, SECURITY, issue/PR templates, English README, CHANGELOG, deployment guide.

Changed

  • generateObject forced to mode: 'json' — sections step dropped from ~500s → ~60s on OpenRouter-routed providers.

Fixed

  • Outline retries once on first failure.
  • Section two-retry failure now falls back to outline bullets instead of leaving the section empty.
  • regen runId parsing accepts nanoids starting with - / _.
  • Docker image builds better-sqlite3 cleanly via build-essential.
  • DATABASE_URL anchored via import.meta.url so Web and CLI share one run history.

Install

Pull the Docker image:

docker run --rm -p 3000:3000 \
  -e OPENROUTER_API_KEY=... -e TAVILY_API_KEY=... \
  ghcr.io/llm-x-factorer/topic2md:v0.2.0

Or build from source — see the README and deployment guide.

See the full CHANGELOG.