Finnish-language conversational AI assistant specialized for dental medicine. This is a fine-tuned large language model (LLM) that generates structured text responses to dental consultation queries, designed to simulate professional dentist-to-dentist consultations with clinical reasoning and recommendations.
Base Model:Finnish-NLP/Ahma-2-4B-Instruct - Special thanks to Aapo Tanskanen and Rasmus Toivanen for creating this excellent Finnish LLM
Context Length: Up to 128K input tokens, 8K output tokens (inherited from Ahma-2 base model)
Release Date: January 7, 2026
Full fine-tuned model for Finnish dental medicine consultations between healthcare professionals. Trained on 50,132 synthetic dental conversations (approximately 80% expert clinical cases, 20% concept explanations) covering a broad range of different scenarios. Generated using pipeline with GPT-4.1.
Version 3 Improvements: This v3 release upgrades to the new Ahma-2-4B-Instruct base model, a significantly more capable 4B parameter Finnish LLM. The new base model features improved Finnish language understanding and generation quality through continued pretraining, supervised fine-tuning, and direct preference optimization. Training method changed from LoRA to full fine-tuning for maximum quality. Same proven dataset as v2.
⚠️ Precision Requirement: This model must be loaded in BF16 (torch.bfloat16). Ahma-2 is based on Gemma architecture which requires BF16 precision.
Research Focus: This model demonstrates domain-specific fine-tuning with accessible computational resources. The goal is to explore how specialized models can be trained and deployed on consumer hardware (including personal GPUs) rather than requiring high-end infrastructure.
System Prompt Recommendation: This model was trained with a specific system prompt. For best results, we recommend using the same prompt format shown in the examples below. While the system prompt can be modified, a 4B parameter model has limited ability to adapt to nuanced prompt changes — it will react to modifications, but don't expect the same prompt-following flexibility as larger models. Significant deviations from the training prompt may lead to inconsistent behavior.
⚠️ Multi-Turn System Prompt Note: Ahma-2 is based on Gemma architecture, which has no native system role — only user and model. When you pass role: "system", the chat template silently prepends it to the first user message. This means:
The model treats system instructions as regular user text
In multi-turn conversations, the system prompt gets buried deeper in the context and its effect fades
The model may start ignoring instructions or behaving inconsistently in longer chats
Recommended fix for multi-turn use: Prepend the system prompt to every user message, not just the first one. This keeps instructions in the strongest attention position regardless of conversation length. See the Multi-Turn Example below.
Response Format: The model is trained to structure all clinical responses in three sections: "### Tausta" (Background), "### Arvio" (Assessment), "### Suositus" (Recommendation).
Context Limit: Supports up to 128K input tokens and 8K output tokens for inference (training used 2048 token sequences).
This model was trained 2x faster with Unsloth and Huggingface's Transformers library.
Model Comparison
Version
Base Model
Parameters
Training Method
Dataset
Notes
v3
Ahma-2-4B-Instruct
4B
Full fine-tuning
50,132
Latest, highest quality
v2
Ahma-3B-Instruct
3B
LoRA
50,132
Enhanced dataset, available as LoRA and merged
v1
Ahma-3B-Instruct
3B
LoRA
30,908
Original release, available as LoRA and merged
v3 (this model): Full fine-tuned on Ahma-2-4B-Instruct, highest quality
1# Use exact system prompt from training2system_prompt ="""Olet kokenut suomalainen hammaslääkäri. Vastaat ammattimaisesti kollegojesi
3kysymyksiin käyttäen oikeaa hammaslääketieteellistä terminologiaa ja viittaat Käypä hoito
4-suosituksiin kun relevanttia."""56user_question ="""87-vuotias nainen, jolla on vaikea muistisairaus, asuu palvelutalossa ja on
7kotihoidon piirissä. Potilaalla on hampaattomuus, yläleuan kokoproteesi ja alaleuassa 6
8luonnollista hammasta. Lääkityksenä on mm. rivaroksabaani eteisvärinään, donepetsiili,
9metoprololi, kalsium+D-vitamiini, sekä useita muita lääkkeitä (yhteensä 9). Suun limakalvot
10ovat kuivat, kielessä fissuroitumista, ja proteesin alla lievää punoitusta. HbA1c 46 mmol/mol,
11BMI 22. Kotihoito raportoi potilaan nielevän huonosti ja syljen erityksen olevan vähäistä.
12Karies- ja parodontiittiriski arvioidaan korkeaksi. Miten suosittelisit suun hoidon
13järjestämistä ja priorisointia tässä tilanteessa?"""1415messages =[16{"role":"system","content": system_prompt},17{"role":"user","content": user_question}18]1920inputs = tokenizer.apply_chat_template(21 messages,22 tokenize=True,23 add_generation_prompt=True,24 return_tensors="pt"25).to(model.device)2627# Recommended settings (model supports up to 128K input / 8K output context)28with torch.no_grad():29 outputs = model.generate(30 inputs,31 max_new_tokens=800,32 temperature=0.1,33 do_sample=True,34 top_p=0.9,35 repetition_penalty=1.236)3738response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)39print(response)4041# Expected example response:42# ### Tausta43# Potilas on iäkäs, monisairas ja polyfarmasian vuoksi haavoittuvassa asemassa. Hampaattomuus44# ja proteesin käyttö yhdistettynä kuivaan suuhun lisäävät riskejä kuten sieni-infektioihin45# ja limakalvo-ongelmiin. Nielemisvaikeudet ja alentunut syljeneritys korostavat aspiraatioriskin46# hallinnan tarvetta. Antikoagulanttihoito (rivaroksabaani) tulee huomioida kaikissa47# invasiivisissa toimenpiteissä. Kotihoidon rooli on keskeinen päivittäisen suuhygienian48# toteutumisessa.49#50# ### Arvio51# Kliinisesti merkittäviä löydöksiä ovat kuivuminen, fissuroitunut kieli ja proteesistomatiitti.52# Korkea kariesriski liittyy sekä vähentyneeseen sylkeen että mahdolliseen heikentyneeseen53# omahoitoon. Parodontaalisairauksien riski kasvaa jäljellä olevien hampaiden määrän54# myötä. Muistisairaudet rajoittavat yhteistyökykyä ja edellyttävät yksinkertaisia55# ohjeita kotihoidolle. Käypä hoito -suositusten mukaan lyhennetyn hammaskaaren malli56# voi olla riittävä toiminnallisesti.57#58# ### Suositus59# Prioriteettina on kivuttoman ja infektiovapaan suun ylläpito: tehostettu mekaaninen60# puhdistus pehmeällä harjalla kahdesti päivässä, fluorilakkaus vastaanotolla neljännesvuosittain61# sekä klooriheksidiinigeeli paikallisesti riskialueille. Proteesi tulisi poistaa yöksi62# ja puhdistaa huolellisesti päivittäin. Syljenkorvikkeet tai keinotekoiset syljet63# voivat helpottaa oireita; ksylitolituotteet eivät ole ensisijaisia nielemishäiriön64# vuoksi. Säännölliset kontrollikäynnit suuhygienistin kanssa sekä tiivis yhteistyö65# kotihoidon henkilöstön kanssa ovat välttämättisiä. Tarvittaessa konsultoi erikoishammaslääkäriä66# mahdollisten sieni-infektiodiagnostiikan ja antifungaalisen hoidon osalta.
Multi-Turn Example
In multi-turn conversations, prepend the system prompt to every user message to prevent instruction drift. Store only the raw user messages in history — prepend the system prompt fresh for each request.
python
1system_prompt ="""Olet kokenut suomalainen hammaslääkäri. Vastaat ammattimaisesti kollegojesi
2kysymyksiin käyttäen oikeaa hammaslääketieteellistä terminologiaa ja viittaat Käypä hoito
3-suosituksiin kun relevanttia."""45separator ="\n---\nYllä olevat ohjeet ovat pysyviä. Kollegan viesti:\n"67# Conversation history — stores raw user messages (no system prompt)8history =[]910defgenerate_response(user_message):11# Prepend system prompt to this user message12 augmented_message = system_prompt + separator + user_message
1314# Build messages for the model: history + current augmented message15 messages = history.copy()16 messages.append({"role":"user","content": augmented_message})1718 inputs = tokenizer.apply_chat_template(19 messages,20 tokenize=True,21 add_generation_prompt=True,22 return_tensors="pt"23).to(model.device)2425with torch.no_grad():26 outputs = model.generate(27 inputs,28 max_new_tokens=800,29 temperature=0.1,30 do_sample=True,31 top_p=0.9,32 repetition_penalty=1.233)3435 response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)3637# Store raw user message (not augmented) and response in history38 history.append({"role":"user","content": user_message})39 history.append({"role":"assistant","content": response})4041return response
4243# Turn 144print(generate_response("Mitä pitäisi huomioida viisaudenhampaan poistossa?"))4546# Turn 2 — system prompt is still in the strongest attention position47print(generate_response("Entä jos potilas käyttää verenohennuslääkitystä?"))
The key insight: by prepending system instructions to every user message, they always appear right before the model's generation point — the highest-attention position in the context. Without this, the system prompt would be at the very beginning of a growing conversation and gradually lose influence.
Example
User: 27-vuotias mies, jolla on voimakas kipu ja turvotus alaleuan oikealla puolella. Viisaudenhammas 48 on puoliksi puhkeamassa, ympärillä runsasta ienturvotusta ja märkäkertymä. Potilaalla on kuumetta 38,3°C ja suun avausrajoitus 22 mm. Mitä ensihoitoa suosittelet terveyskeskuksessa?
Assistant:
Tausta
Potilas esittää tyypillisiä akuutin perikoroniitin oireita: paikallinen turvotus, märkäkertymä sekä yleisoireet kuten kuume ja trismus (avausrajoitus). Puoliksi puhjenneen alaviisaudenhampaan ympäristöön kehittynyt infektio voi levitä nopeasti pehmytkudoksiin tai aiheuttaa syvempiä komplikaatioita. Yleistilan heikkeneminen näkyy tässä tapauksessa selvästi kohonneena lämpötilana (>38 °C) sekä rajoittuneena suun avaamisena (<30 mm), mikä lisää riskiä vakavammille infektioille.
Arvio
Kliinisesti kyseessä on vaikea akuutti perikoroniitti, jossa systeemiset oireet ovat jo ilmeisiä. Märkäkertymän koko ja potilaan yleisvointi edellyttävät välitöntä toimenpidettä infektion leviämisen estämiseksi. Suun avauksen rajoitus viittaa mahdolliseen lihasjäykkyyteen tai alkavaan flegmonaaliseen prosessiin submandibulaarialueella. Tilanne vaatii ripeää arviota mahdollisesta sairaalahoitoon ohjaamisesta.
Suositus
Ensihoitona tulee tehdä huolellinen mekaaninen debridementti eli irrottaa tulehtunut limakalvo hampaan kruunun alta steriilein instrumentein. Mikrobiologisen viljelyn kannalta otetaan bakteerinäyte ennen antibioottihoidon aloittamista. Aloitetaan empiirinen mikrobilääkehoito esimerkiksi amoksisilliini + metronidatsoli; penisilliiniallergiselle klindamysiini. Kipulääkitys toteutetaan parasetamolilla ja/tai ibuprofeenilla annosteluohjeiden mukaisesti. Tarvittaessa konsultoidaan erikoissairaanhoitoa jatkohoidosta tilanteen mukaan.
Follow-up: Potilas palaa seuraavana päivänä. Kuume on noussut 39,2 °C:een, suun avaus onnistuu enää 10 mm, alaleuan oikea puoli on selvästi turvonnut ja nieleminen on kivuliasta. Hengitys on hieman rohisevaa. Mitä toimenpiteitä suosittelet tässä vaiheessa?
Assistant:
Tausta
Tilanne on edennyt nopeasti: kuume nousee entisestään yli 39 °C:n tasolle, suun avaus vähenee merkittävästi vain noin 10 mm:iin sekä kasvoalueen turvotus laajenee myös kaulan alueelle. Nieleminen muuttuu kivuliaaksi ja hengityksessä ilmenee rohinaa – tämä viittaa mahdolliseen syvemmälle levinneeseen infektioprosessiin kuten submandibulaariseen absessiin tai Ludwig'n anginaan.
Arvio
Kyseessä on henkeä uhkaavan infektion alkuvaihe: hengitysteiden ahtauma voi johtua pehmytkudosödeemasta tai varhaisesta mediastiniitista. Trismus yhdessä laaja-alaisen turvotuksen kanssa nostaa riskin hengitystiekomplikaatioihin erityisesti nuorilla aikuisilla. Tällaisissa tapauksissa pelkkä polikliininen seuranta ei riitä vaan tarvitaan välitöntä kirurgista interventiota.
Suositus
Suosittelen kiireellistä lähettämistä erikoissairaanhoidon yksikköön suukirurgiaan tai korva-, nenä- ja kurkkutauteihin päivystyksellisesti. Sairaalaolosuhteissa voidaan tehdä tarvittavat kuvantamistutkimukset (esim. KKTT), aloittaa suonensisäinen antibioottihoito sekä harkita kirurgista dreneerausta anestesiassa. Hengitysteiden turvaaminen priorisoidaan aina ennen muita toimenpiteitä.
Training Details
Method: Full fine-tuning (all parameters trained)
Base Model: Finnish-NLP/Ahma-2-4B-Instruct (4B parameters)