--- license: gemma library_name: transformers pipeline_tag: image-text-to-text base_model: google/gemma-3-4B-it tags: - gemma3 - bg - bulgarian language: - bg - en --- # BgGPT-Gemma-3-4B-IT BgGPT 3.0 is a series of Bulgarian-adapted LLMs based on Gemma 3, developed by [INSAIT](https://insait.ai). Available in 4B, 12B and 27B sizes. **Blog post**: [BgGPT-3 Release](https://models.bggpt.ai/blog/bggpt-3-release-en) ### Key improvements over BgGPT 2.0 1. **Vision-language understanding** — The models understand both text and images within the same context. 2. **Instruction-following** — Trained on a broader range of tasks, multi-turn conversations, complex instructions, and system prompts. 3. **Longer context** — Effective context of 131k tokens for longer conversations and complex instructions. 4. **Updated knowledge cut-off** — Pretraining data up to May 2025, instruction fine-tuning up to October 2025.

Performance on Generative Tasks

*Figure 1: Performance on Generative Tasks (TriviaQA, GSM8k, IFEval, BigBenchHard)* ## Usage ### Transformers ```python from transformers import AutoProcessor, Gemma3ForConditionalGeneration import torch model_id = "INSAIT-Institute/BgGPT-Gemma-3-4B-IT" processor = AutoProcessor.from_pretrained(model_id) model = Gemma3ForConditionalGeneration.from_pretrained( model_id, device_map="auto" ).eval() messages = [ { "role": "user", "content": [{"type": "text", "text": "Кога е основан Софийският университет?"}], }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt" ).to(model.device, dtype=torch.bfloat16) input_len = inputs["input_ids"].shape[-1] with torch.inference_mode(): generation = model.generate(**inputs, max_new_tokens=512, do_sample=True, temperature=0.2) generation = generation[0][input_len:] print(processor.decode(generation, skip_special_tokens=True)) ``` #### With an image ```python messages = [ { "role": "user", "content": [ {"type": "image", "image": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"}, {"type": "text", "text": "Опиши какво виждаш на изображението."}, ], }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt" ).to(model.device, dtype=torch.bfloat16) input_len = inputs["input_ids"].shape[-1] with torch.inference_mode(): generation = model.generate(**inputs, max_new_tokens=512, do_sample=True, temperature=0.2) generation = generation[0][input_len:] print(processor.decode(generation, skip_special_tokens=True)) ``` ### vLLM ```python from vllm import LLM, SamplingParams llm = LLM(model="INSAIT-Institute/BgGPT-Gemma-3-4B-IT") params = SamplingParams(max_tokens=512, temperature=0.2) messages = [ { "role": "user", "content": [{"type": "text", "text": "Кога е основан Софийският университет?"}], }, ] outputs = llm.chat(messages, sampling_params=params) print(outputs[0].outputs[0].text) ``` Serving with the OpenAI-compatible API: ```bash vllm serve INSAIT-Institute/BgGPT-Gemma-3-4B-IT ``` ### vLLM with FP8 dynamic quantization Load the model in FP8 at runtime for ~2x memory reduction with minimal quality loss — no separate quantized checkpoint needed: ```python from vllm import LLM, SamplingParams llm = LLM( model="INSAIT-Institute/BgGPT-Gemma-3-4B-IT", quantization="fp8", ) params = SamplingParams(max_tokens=512, temperature=0.2) messages = [ { "role": "user", "content": [{"type": "text", "text": "Кога е основан Софийският университет?"}], }, ] outputs = llm.chat(messages, sampling_params=params) print(outputs[0].outputs[0].text) ``` ```bash vllm serve INSAIT-Institute/BgGPT-Gemma-3-4B-IT --quantization fp8 ``` > Requires a GPU with compute capability >= 8.9 (H100, H200, RTX 4090). ## License BgGPT-Gemma-3-4B-IT is distributed under the [Gemma Terms of Use](https://ai.google.dev/gemma/terms).