<?xml version="1.0" encoding="UTF-8"?><oembed><type>video</type><version>1.0</version><html>&lt;iframe src=&quot;https://www.loom.com/embed/d0b6df37b0514febab2706f1488a3a84&quot; frameborder=&quot;0&quot; width=&quot;1670&quot; height=&quot;1252&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;</html><height>1252</height><width>1670</width><provider_name>Loom</provider_name><provider_url>https://www.loom.com</provider_url><thumbnail_height>1252</thumbnail_height><thumbnail_width>1670</thumbnail_width><thumbnail_url>https://cdn.loom.com/sessions/thumbnails/d0b6df37b0514febab2706f1488a3a84-78fb52e1d553b060.gif</thumbnail_url><duration>340.647</duration><title>Keyboard Manual Assistant RAG Demo with LangFuse</title><description>In this Loom I demo my Keyboard Manual Assistant, a FastAPI backend RAG app using QDurant for vector search, Sentence Transformers for embeddings, a local LLM, and LangFuse for observability. I upload the Montage manual PDF, convert it to text, chunk and embed it, then save it in the VectorData store. I ask a question like how do I layer sounds on a Montage keyboard and it returns detailed answers from retrieved chunks. In LangFuse I show the trace, retrieved chunks, and the response, plus an eval where the system did not behave exactly as expected regarding jazz voicings. No action is requested from viewers.</description></oembed>