Changes in version 0.4.0 The headline of this release is a document route: drop in PDFs, Word files, web pages, or spreadsheets, ask questions with cited sources, have a model write training questions from them, review those, and fine-tune. The app now opens on it, has a new look with a dark mode, and can train a 7B model in 4-bit on an 8 GB GPU. Everything below was measured on an 8 GB laptop GPU (RTX 4060) and on real documents: R's own manuals, a 76-page annual report as PDF and as Word, live web pages, and a spreadsheet. Documents - A document set that is mostly not in English is now indexed with a multilingual model (intfloat/multilingual-e5-small) instead of the English one, and the set's summary says so. On German product information for eight medicines (3,125 chunks, 58 questions), the passage a question came from reached the top four for 55 percent of questions, against 45 percent; six questions were found only by the multilingual model, none only by the English one. English sets, and tables with few words, keep the English model; naming a model in dragon_index() still wins. - Numbered headings in PDFs ("6.4 Updating packages") start their section even when the line before them was a long one that ended a sentence; they used to be glued on to the end of the previous paragraph, so the section was never started and search could not find it (26 such headings in R's installation and data manuals, 29 in An Introduction to R). With R's two installation and data manuals as a held-out test, the answer reached the top four excerpts for 19 of 20 questions (from 17) and a 7B answered 18 (from 16); on R's introduction and FAQ, 32 of 32 (from 31). - PDF lists printed one entry per line, such as an annual report's "CALIFORNIA – 140" location counts, keep their entries apart ("; ") instead of running together, and no-break spaces become plain spaces. Asked for eight places' counts, a 7B read 7 right against 4 with the run-on text; the report's California count, missed before, is now answered (21 of 23 known-answer questions, from 20). - New: dragon_documents() reads PDF, HTML, Markdown, text, Word, spreadsheet files, directories of them, and web pages into a document set: chunks of about 170 words that never cross a heading, each keeping its file, section, and (for PDFs) page, stored under runs_dir/documents//. Reading again re-reads only files whose contents changed, and a set built by an older version of the readers is re-read rather than reused. dragon_chunks() (with a page column), dragon_documents_load(), and dragon_documents_list() go with it. The Python environment gains pypdf (with cryptography, for encrypted PDFs), python-docx, and openpyxl. - dragon_example_documents(): three short policy documents for the fictional company behind the example tickets, so the route can be tried before bringing your own files. - PDFs. Pages whose text comes out of the standard extractor as two-letter fragments (Co st co Wh ol es al e, common in annual reports) are re-read in a layout-aware mode: a 76-page annual report went from 726 unreadable chunks to 273 readable ones under real section names. Running headers, page numbers, contents entries with dot leaders, and dot leaders inside table rows are dropped; a sentence broken across pages is rejoined; code, lead-in lines, rows of numbers, and single words are no longer taken for headings (R-intro went from 97 section names, one 1,489 characters long, to 79 real ones); apostrophes a font did not map are restored. A PDF with no text layer (a scan) is reported by name with advice to run OCR first, instead of silently adding nothing. - Year columns. In a financial table the years are printed once, above the figures; flattened into text, nothing said which figure was which year, and answers came from the wrong column. Rows under a year header that end in one figure per year now carry the years: "Net cash used in investing activities (2024: (4,409); 2023: (4,972); 2022: (3,915))". On ten questions about an annual report that need a specific year's figure, correct answers went from 5 to 9, and confident wrong-column answers from 2 to none. Word tables get the same treatment from a header row of dates, and their merged cells are no longer repeated once per column they span ("249,625 | 249,625"); the Word copy of the report went from 8 to 10 of 10. - Units. A note such as "(dollars in millions, except per share data)" is carried into later chunks that show money without a unit word, so answers from financial tables say "$4,409 million" rather than "$4,409". - Word. Unit notes styled as headings set the unit instead of becoming a section; short paragraphs set entirely in bold or italic become headings when prose follows them (the sub-headings of a 10-K are italic), while table column labels, which look the same, stay text. The Word annual report went from one 38-chunk "Note 1" to 123 real sections. - Web pages. Blocks made mostly of links and regions marked as navigation, banner, footer, or search are dropped, so a page without a