Instructions to use Luigi/K2-Horizon-0.9B-meeting-agent-zh with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Luigi/K2-Horizon-0.9B-meeting-agent-zh with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Luigi/K2-Horizon-0.9B-meeting-agent-zh") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Luigi/K2-Horizon-0.9B-meeting-agent-zh") model = AutoModelForCausalLM.from_pretrained("Luigi/K2-Horizon-0.9B-meeting-agent-zh", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Luigi/K2-Horizon-0.9B-meeting-agent-zh with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Luigi/K2-Horizon-0.9B-meeting-agent-zh" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Luigi/K2-Horizon-0.9B-meeting-agent-zh", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Luigi/K2-Horizon-0.9B-meeting-agent-zh
- SGLang
How to use Luigi/K2-Horizon-0.9B-meeting-agent-zh with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Luigi/K2-Horizon-0.9B-meeting-agent-zh" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Luigi/K2-Horizon-0.9B-meeting-agent-zh", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Luigi/K2-Horizon-0.9B-meeting-agent-zh" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Luigi/K2-Horizon-0.9B-meeting-agent-zh", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use Luigi/K2-Horizon-0.9B-meeting-agent-zh with Docker Model Runner:
docker model run hf.co/Luigi/K2-Horizon-0.9B-meeting-agent-zh
K2-Horizon-0.9B meeting agent (zh-TW), fine-tuned weights (safetensors)
IFM/K2-Horizon-0.9B adapted to zh-TW and fine-tuned as a
reading agent: it reads a live zh-TW meeting transcript window by window and writes short cited notes,
then turns the notes into a title and a prose summary. This is the best K2 checkpoint of the project
(release 2026-10-11, internal tag k2-r16n), full fp32 weights for further fine-tuning or re-export.
- GGUF (llama.cpp) build of the same weights: Luigi/K2-Horizon-0.9B-meeting-agent-zh-GGUF
- Code, agent protocol and evaluation: https://github.com/vieenrose/meeting-summarizer
| file | |
|---|---|
model.safetensors |
fp32, 4,375,300,664 bytes, sha256 e4dd62f51c9d97bf6bcf366432ce4ba532b362348c3fab4bd4d3c9d90be8b9c7 |
config.json, generation_config.json |
LlamaForCausalLM, vocab_size 69312, untied lm_head |
tokenizer.json, tokenizer_config.json |
extended zh-TW tokenizer (see below) |
chat_template.jinja |
the template used in training and deployment (no BOS, no thinking block) |
system_prompt.txt |
agent system prompt, use verbatim |
title_prompt.txt, prose_prompt.txt |
the two end-of-meeting conversion prompts ({journal} = the notes, one per line) |
How it was built
- zh-TW vocabulary + continued pretraining. +5,000 zh-TW BPE merges (about 30 % fewer tokens on zh-TW), continued pretraining on zh-TW web text and meeting transcripts with general replay.
- Agent SFT on reading-agent turns distilled from a larger teacher.
- On-policy DPO rounds (full fine-tuning, ฮฒ 0.1, NLL 0.5 on the chosen side, lr โค 3e-6), each round on pairs sampled from the current model and ranked by an LLM judge against the transcript: contradicted-note fixes (โ 2,200 pairs), speaker-binding swaps, prose, titles, and finally missed-key-point "replace" pairs (the nearest wrongly-stated note replaced by the correct one). Conservative DPO (label smoothing 0.1) on the judge-ranked rounds; ~1,000 replay rows of earlier rounds each time.
Results
38 held-out zh-TW meetings transcribed by ASR, 4k context, window 1,500 tokens, GGUF Q8_0 on llama.cpp, student decoding T 0.2; judge Gemma-4-31B checks each cited statement against the transcript. Two full runs (run-to-run noise โ ยฑ2 points / ยฑ0.015 coverage).
| run 1 | run 2 | target (fine-tuned Gemma-4-E2B) | |
|---|---|---|---|
| notes contradicted by the transcript | 13 % | 10โ12 % | 17 % |
| notes unsupported | 1โ2 % | 3 % | 5 % |
| coverage of the reference key points | 0.92 | 0.89 | 0.92 |
| title score (1โ5, mean of 4 runs) | 4.15 | 4.05 | |
| prose sentences supported by the notes | 87.7 % | 88 % | 86.6 % |
The Gemma-4-E2B reference was measured with its mobile runtime, this model with llama.cpp Q8_0. Prefer 8-bit: int4 cost about 7 points of contradiction in our tests.
Use (agent protocol)
One fresh conversation per transcript window (about 1,500 tokens) with the compacted journal of earlier notes
at its head; the model answers with at most 5 lines NOTE [time] (TYPE) text (or REVISE #id [time] text), then NEXT.
Stop at NEXT and cap replies at about 400 tokens. Types: DECISION, ACTION, PROPOSAL, OPEN-ISSUE, NUMBER, -.
Rendered note line, as fed back in the journal and to the conversion prompts: #1 [1:23] (DECISION) ้ ็ฎ็
งๆก้้.
The title and prose prompts are single user turns with no system turn.
from transformers import AutoTokenizer, AutoModelForCausalLM
repo = "Luigi/K2-Horizon-0.9B-meeting-agent-zh"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, torch_dtype="bfloat16")
Tokenizer
Extended vocabulary, not the base IFM tokenizer: 5,000 zh-TW merges at ids 64256โ69255; 69,256 tokens,
embedding matrix padded to 69,312 rows. bos <|begin_of_text|> 0 (the model was trained without BOS; the chat template adds none),
<|ifm|im_start|> 64018, <|ifm|im_end|> (eos) 64019, pad 64255. Never pair these weights with the base
tokenizer: ids above 64255 differ.
No training data is included. License: Apache-2.0 (base model).
- Downloads last month
- 147