Instructions to use furkankucuk/ResuVL-S with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use furkankucuk/ResuVL-S with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="furkankucuk/ResuVL-S") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("furkankucuk/ResuVL-S") model = AutoModelForMultimodalLM.from_pretrained("furkankucuk/ResuVL-S", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.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(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use furkankucuk/ResuVL-S with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "furkankucuk/ResuVL-S" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "furkankucuk/ResuVL-S", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/furkankucuk/ResuVL-S
- SGLang
How to use furkankucuk/ResuVL-S 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 "furkankucuk/ResuVL-S" \ --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": "furkankucuk/ResuVL-S", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'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 "furkankucuk/ResuVL-S" \ --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": "furkankucuk/ResuVL-S", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use furkankucuk/ResuVL-S with Docker Model Runner:
docker model run hf.co/furkankucuk/ResuVL-S
ResuVL-S
ResuVL-S is the small model of ResuVL, three models that read CV page images into JSON: ResuVL-S (0.26B parameters), ResuVL-M (0.51B) and ResuVL-L (0.87B), from the tiny-resume-parser project.
It reads one CV page image and writes its content as JSON (name, contact details, work, education, skills, languages,
projects and more; schema in schema.py). 0.26B parameters, every weight fine-tuned (base model and its licence: see Licence below); the released model is the
average of the weights of 4 fine-tuned runs. Code, training recipe and full evaluation: https://github.com/iamkucuk/tiny-resume-parser.
In short: on 204 held-out CV pages, 67 % of the values ResuVL-S writes match the human-reviewed labels and it finds 63 % of the values in those labels (field F1 0.652). The model that made the training labels, run a second time on 50 reviewed pages, scores 0.912, which is the practical ceiling for models trained on its labels. ResuVL-S reads one page in about 30 seconds on a laptop CPU, with no GPU and no PDF text layer. For the highest accuracy, use ResuVL-L (0.845).
Use
pip install git+https://github.com/iamkucuk/tiny-resume-parser
tiny-resume-parser parse cv.pdf --model furkankucuk/ResuVL-S
PDF pages are rendered at 120 dpi and read one page at a time; the PDF text layer is not used. The command applies the settings the model was trained with: 12 image tiles (longest edge 2,048 px). A CPU reads one page in about 30 seconds (Apple M2 Max, float32).
Results
Field F1 compares each (field, value) pair of the answer with a human-reviewed label. Lenient ignores case, spacing and punctuation; content also accepts correct text placed under another field of the same section.
| Score | |
|---|---|
| Test, 204 reviewed pages, lenient field F1 | 0.652 (0.653 repaired) |
| Test, strict field F1 | 0.642 |
| Test, content F1 | 0.777 |
| Test pages with no parseable answer | 13 of 204 (7 reach the token limit) |
| Development lenient F1, 50 reviewed / 79 validation pages | 0.660 / 0.649 |
| Development content F1 | 0.798 / 0.780 |
The labelling model itself, run a second time on 50 reviewed pages, scores 0.912 lenient field F1 against them; its run-to-run variation limits what models trained on its labels can reach. Test scores are with transformers 5.5.4. Definitions: evaluation.md.
Training data
1,393 CV page images from the Cv Parsing Dataset (invoiceModelisation, Roboflow Universe, CC BY 4.0), labelled by GLM-5.3-Flash. Mostly French and English CVs. Recipe: training.md.
Limits of the training data
The labels come from a model that was not made for French. Every label was written by GLM-5.3-Flash, whose model card lists English and Chinese as its languages, while 80 % of the CVs are French. Its errors on French text become part of the training labels, and the students learn them. The 254 test and development pages were reviewed by hand starting from those labels, and the review changed fewer than 1 % of values, so the test measures agreement with reviewed model labels, not with labels written independently by people. Run a second time, the labelling model scores 0.912 against the reviewed labels, which limits what models trained on its labels can reach.
English-trained base models, a small and narrow sample of French. The base models that ResuVL was fine-tuned from learned to read mostly on English text. Those of ResuVL-S and ResuVL-M list English as their only language; those of ResuVL-L and ResuVL-L v0.1 are listed as multilingual, but neither model card gives a share per language, and French is likely a small part of their training data next to English. The training set here gives about 330,000 words of French from 1,116 CV pages, and it is narrow French: names, job titles, school names, dates and short skill lists, with half of all values one word long and few full sentences. Fine-tuning therefore asks models that read English well to learn to read French from a small and narrow sample, which covers little of French spelling, accents and vocabulary, while long training on it may weaken the English reading they started with. This makes training harder; how much of the remaining error it causes has not been measured.
Intended use and limits
For drafting a structured record of a CV page, to be checked by a person or by an applicant-tracking system. Not for ranking or rejecting candidates: the model leaves out values and misreads some, and its output must not decide anything about a person without review. One page at a time; other languages, scripts and very unusual layouts are untested; text written on the page is read like any other text.
Licence
The fine-tuned weights are licensed CC BY-NC 4.0: free for research and open-source use, not for commercial use. They were made by changing every weight of granite-docling-258M through fine-tuning. granite-docling-258M is licensed Apache 2.0; the licence texts are in LICENSE-base-model.txt and applies to the parts that come from it.
Citation
@software{kucuk2026tinyresumeparser,
author = {Kucuk, Furkan},
title = {tiny-resume-parser: small vision-language models that read CV page images into JSON},
year = {2026},
url = {https://github.com/iamkucuk/tiny-resume-parser}
}
- Downloads last month
- 35
Model tree for furkankucuk/ResuVL-S
Base model
ibm-granite/granite-docling-258M