Skip to content

Fix thinking models on Ollama - #12

Closed
Beirutii wants to merge 1 commit into
AienTech:mainfrom
Beirutii:tribalhouse/ollama-thinking-models
Closed

Beirutii wants to merge 1 commit into
AienTech:mainfrom
Beirutii:tribalhouse/ollama-thinking-models

Conversation

@Beirutii

Copy link
Copy Markdown

Thinking models (I used qwen3.5:4b) fail on Ollama with "cut off" or "didn't come back in the expected shape".

  • Ollama counts the thinking against num_predict, so the model can use its whole budget before it writes anything. The Ollama provider now sends think: false.
  • With thinking off, Ollama ignores format, so the schema is also added to the instructions.
  • Reading a posting: a requirement missing skill, years or language now reads as null, and an answer with no company, role or title is asked for once more. Before this, the Check the details step could come back empty.

Tested on qwen3.5:4b: the unit tests pass, and the full chain (read, match, tailor, cover letter) ran in about 20 s. Reading three real postings four times each, 11 of 12 filled in correctly. The other failed the shape check, and trying again fixes it.

think: false applies to every Ollama model, so one that needs thinking can't use it. I can make it a setting if you'd rather.

Ollama counts a model's thinking against num_predict, so a thinking model
(qwen3.5, for one) used its whole budget before writing an answer and the
call failed as cut off. Send think: false.

With thinking off Ollama also ignores `format`, so the schema goes into the
instructions as well.

Reading a posting: a requirement without skill, years or language now reads
as null, and an answer with no company, role or title is asked for once more.
AienTech added a commit that referenced this pull request Oct 24, 2026
A small release: local models on Ollama that think before they answer, such as Qwen 3.5, work now.

## Fixes

- **Thinking models on Ollama (#12):** with a model that thinks before it answers, such as `qwen3.5:4b`, reading a posting and writing documents ended in "The model's answer was cut off" or "didn't come back in the expected shape": the model used up all its room thinking and never wrote the answer, and on a CPU it could run out of time first. Dossier now has Ollama's models answer without thinking first, and gives them the shape of the answer in their instructions as well. Reading a posting also copes with a small model leaving out a requirement's details that don't apply, and reads the posting once more when the answer names no company, role or title. Thanks to @Beirutii, who sent the fix.

## Upgrading

Take a backup, then deploy `ghcr.io/aientech/dossier:v1.9.1` (see [Upgrading](https://github.com/AienTech/dossier/wiki/Upgrading) in the wiki). Nothing changes in the database or in your configuration.
@AienTech

AienTech commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Thanks a lot, and for testing it so thoroughly! It's out in 1.9.1: https://github.com/AienTech/dossier/releases/tag/v1.9.1

Releases land here as one snapshot commit per version, so I'm closing this instead of merging it. Also changed a few things on the way:

  • On Ollama 0.40.6, format still applies with think: false (a schema with made-up keys came back filled in, with nothing about it in the prompt), so the comment now just says Ollama's docs recommend the schema in the prompt too. Maybe it was different on your Ollama version?
  • When the second look at a posting finds nothing either, or fails, the first answer is kept, so a failed retry doesn't fail a reading that worked.
  • Bumped the prompt to extract-posting@2.

I kept think: false for every model, with no setting for now: when I let the writing steps think, qwen3.5:4b on a CPU ran past 5 minutes on the resume.

@AienTech AienTech closed this Oct 24, 2026
@AienTech AienTech self-assigned this Oct 24, 2026
BenVae pushed a commit to BenVae/dossier that referenced this pull request Oct 28, 2026
* Dossier 1.9.0

Publications on your profile and resumes, a photo on your resumes, a theme menu on each application, Dossier in Claude through a connector, startups that are hiring with the address they publish for applications, a way to leave any part off a tailored resume, a profile strength that only counts what a profile needs, and resumes of up to two pages by default.

## What's new

- **Publications (AienTech#7):** a new, optional section in your profile for papers, articles, books and chapters. Write each citation in the style your field uses: select words and press **B** or **I** (or Ctrl+B and Ctrl+I) to set your name in bold or the journal in italics, and a preview under the field shows how it looks. Add a link, or paste just the DOI and it becomes its doi.org link, and put them in your own order. Resumes show them after Education, word for word, with the link clickable in the PDF. Turn off **Show on resumes** to keep one in your profile but off every resume. The AI can mention them in your summary and letters, but never rewrites, picks or reorders them, and never sees their links. Importing a resume reads them too. Thanks to @VictoriaDom for asking for them.
- **A photo on your resumes (AienTech#8):** add one in Profile → Basics and crop it: drag it or use the arrow keys, and zoom with the slider. Each theme shows it in its own shape and place: a circle, a rounded or plain square, or a 3:4 portrait, at the end or start of the header, above your name, or at the top of the sidebar. Choose both under **Customize** on the Base resume screen, and they're saved in exported themes. Turn off **Show on resumes** to keep it off, and each application's Resume tab has a **Photo** switch, for places where photos are expected or not. It stays on your server, is never sent to the AI, and your photo file's details, such as where it was taken, are left behind when it's cropped. Thanks to @hakimh02 for asking for it.
- **A theme for each application (AienTech#10):** the Resume and Cover letter tabs have a **Theme** menu. Pick another theme and that application's resume and cover letter both change to it, in the preview and the PDF, without writing anything again. A new base theme is still what new applications start with. Thanks to @beeglebug for asking for it.
- **Use Dossier from Claude:** turn on **Settings → Claude connector**, add the address it shows in Claude as a custom connector, sign in and press **Allow**. Then Claude, on claude.ai, in the Desktop and mobile apps or in Claude's command-line app, can search for jobs, score them against your profile, read your profile and applications, and save the resume and cover letter it writes as a Draft, checked like Dossier's own AI's, on your own Claude plan. It never sends or deletes anything, and never sees your contact details or notes. Without an AI model of Dossier's own, **Write it with Claude** in New application and **Score** in Find jobs hand the work to a new Claude chat. **Disconnect Claude** signs it out. Claude on the web needs Dossier at a public HTTPS address; see [Connecting Claude](https://github.com/AienTech/dossier/wiki/Connecting-Claude). Thanks to @anirudhsharma-2000, whose fork it comes from.
- **Startups:** a new screen of startups that are hiring: YC startups' job posts and the posts in Hacker News' monthly “Who is hiring?” thread, kept to the ones that hire in your city or country, or remotely and open to your country. Each is ranked against your profile, with the reasons, and shows the address it publishes for applications, read from its own site. That's addresses like jobs@ by default; people's own only when you press **Look for people's addresses**, and those go after 14 days unless you write to that startup. Dossier follows each site's robots.txt, says who it is, and leaves alone a startup whose site says it takes no unsolicited applications. **Write to them** starts a new application from what's known about the startup, without its addresses, and fills in the email's recipient for you. Nothing is fetched until you press **Refresh**; after that it refreshes once a day while you use the screen. Save, dismiss, keep notes, or **Remove for good**. [PRIVACY.md](https://github.com/AienTech/dossier/blob/main/PRIVACY.md#startups) says what it reads and keeps. Thanks to @anirudhsharma-2000, whose fork it comes from.
- **Leave out:** every part of a tailored resume has **Leave out** in its toolbar, for a role, project, publication or degree that doesn't help with this job, or even the summary. It's listed above the resume with **Put back**, together with anything cut to fit the page limit.
- **What your profile needs, and what's optional:** Profile strength now counts only your name, headline, email, city, country and summary, your experience, education and skills. Projects, Publications, References, Facts about me and Languages are marked optional, and so are phone, date of birth, street address, website and LinkedIn, so a profile reaches 100% without them.
- **The Bundesagentur für Arbeit is your own choice:** it has no official API, and its terms of use don't allow automated access, so choosing it in Settings → Job search now shows a note saying so, and it's saved only once you tick **I understand**. The job agent no longer searches it; choose JSearch or Adzuna for the agent. Each of its postings links to its ad on arbeitsagentur.de, next to the employer's own link. A server can take it out with `DOSSIER_JOBS_ARBEITSAGENTUR=off`.
- **Up to two pages by default:** unless you've chosen a **Resume length** in Settings → Documents, tailored resumes now aim for and are trimmed to two pages instead of one. A length you chose stays as it is.

## Fixes

- **Adzuna's label:** Adzuna's terms ask for a linked "Adzuna" on each posting shown. Postings from Adzuna now carry a **Jobs by Adzuna** badge that opens Adzuna's site for the posting's country, on each card in Find jobs, on the open posting and on the job agent's scored postings. Until now it was plain text, on the open posting only.

## Upgrading

Take a backup, then deploy `ghcr.io/aientech/dossier:v1.9.0` (see [Upgrading](https://github.com/AienTech/dossier/wiki/Upgrading) in the wiki). On its first start, Dossier adds a table for publications, the photo's settings for themes and applications, a table for postings handed to Claude, and tables for Startups; nothing else changes in your data or configuration.

If you search the Bundesagentur für Arbeit, its searches wait until you tick **I understand** under the note, in Find jobs or Settings → Job search, and the job agent stops until you choose JSearch or Adzuna for it.

Exports now include your publications and Startups, so a 1.9.0 export can't be imported into an older version, and neither can a theme exported from 1.9.0. Exports and themes from older versions import as before.

* Dossier 1.9.1

A small release: local models on Ollama that think before they answer, such as Qwen 3.5, work now.

## Fixes

- **Thinking models on Ollama (AienTech#12):** with a model that thinks before it answers, such as `qwen3.5:4b`, reading a posting and writing documents ended in "The model's answer was cut off" or "didn't come back in the expected shape": the model used up all its room thinking and never wrote the answer, and on a CPU it could run out of time first. Dossier now has Ollama's models answer without thinking first, and gives them the shape of the answer in their instructions as well. Reading a posting also copes with a small model leaving out a requirement's details that don't apply, and reads the posting once more when the answer names no company, role or title. Thanks to @Beirutii, who sent the fix.

## Upgrading

Take a backup, then deploy `ghcr.io/aientech/dossier:v1.9.1` (see [Upgrading](https://github.com/AienTech/dossier/wiki/Upgrading) in the wiki). Nothing changes in the database or in your configuration.

* Add the website at dossier.aien.me

Dossier has a website now: what it does, how it works, its features and privacy, a look at its screens, and how to install it. It lives in site/, and the Pages workflow publishes it whenever it, the README's screenshots, or the icons and fonts it shares with the app change on main.

[skip ci]

* Dossier 1.9.2

A small release: the Gmail inbox check works again after mail it was about to read got deleted.

## Fixes

- **"Google couldn't find that. It may have been deleted." in the inbox and in Settings:** when a message arrived and was deleted before Dossier's next inbox check read it, spam for example, the check stopped at that message. It never got past it, so every check after that failed with the same message and no new mail came in. Dossier now skips mail that's gone and carries on; the next check after upgrading clears the message.

## Upgrading

Take a backup, then deploy `ghcr.io/aientech/dossier:v1.9.2` (see [Upgrading](https://github.com/AienTech/dossier/wiki/Upgrading) in the wiki). Nothing changes in the database or in your configuration.

---------

Co-authored-by: Alien <hi@aien.me>
Co-authored-by: SchokoShake <28960930+SchokoShake@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants