Text Generation
Transformers
Safetensors
English
Vietnamese
qwen3_5
image-text-to-text
function-calling
tool-use
tool-calling
agent
agentic
workflow-automation
vllm
sglang
qwen3.6
vietnamese
enterprise-automation
conversational
Instructions to use beyoru/Ops-I with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use beyoru/Ops-I with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="beyoru/Ops-I") 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)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("beyoru/Ops-I") model = AutoModelForMultimodalLM.from_pretrained("beyoru/Ops-I", 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=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use beyoru/Ops-I with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "beyoru/Ops-I" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "beyoru/Ops-I", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/beyoru/Ops-I
- SGLang
How to use beyoru/Ops-I 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 "beyoru/Ops-I" \ --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": "beyoru/Ops-I", "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 "beyoru/Ops-I" \ --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": "beyoru/Ops-I", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use beyoru/Ops-I with Docker Model Runner:
docker model run hf.co/beyoru/Ops-I
| license: apache-2.0 | |
| base_model: Qwen/Qwen3.6-27B | |
| base_model_relation: finetune | |
| pipeline_tag: text-generation | |
| library_name: transformers | |
| language: | |
| - en | |
| - vi | |
| tags: | |
| - function-calling | |
| - tool-use | |
| - tool-calling | |
| - agent | |
| - agentic | |
| - workflow-automation | |
| - vllm | |
| - sglang | |
| - qwen3.6 | |
| - vietnamese | |
| - enterprise-automation | |
| # Ops-I — a 27B agent for business workflow automation | |
| **Ops-I** is a fine-tune of **Qwen3.6-27B** aimed at *workflow* agents: episodes where the | |
| model reads a business request, discovers the right tool out of a large surface, chains | |
| several calls together, and — just as importantly — knows when **not** to act. | |
| On the public 600-task [AutomationBench](https://github.com/zapier/AutomationBench) | |
| (Zapier), Ops-I is the **strongest of four open-weight models** we measured, ahead of the | |
| Qwen3.6-27B base it was tuned from. | |
| **Use it if you need:** an open-weight backend for business automation that holds up across long multi-step tool episodes. Really want to hear about | |
| | | | | |
| |---|---| | |
| | Base | `Qwen/Qwen3.6-27B` (dense, VL architecture) | | |
| | Precision / size | bf16, 27.8B params, 15 shards (~56 GB) | | |
| | Context | base supports 262 144; 16K validated in our runs | | |
| | Reasoning | thinking **on** — how it was evaluated | | |
| | Tool-call format | Qwen3.5-style XML (`<function=...>`), **not** JSON — see gotchas | | |
| | License | Apache-2.0 | | |
| --- | |
| ## Results — AutomationBench 600 | |
| | Model | Pass rate | Passed / 600 | Partial credit | Wall clock | | |
| |---|---|---|---|---| | |
| | **beyoru/Ops-I** | **10.17%** | **61** | **45.54%** | 1.96 h | | |
| | gemma-4-31B-it (thinking on) | 10.17% | 61 | 41.64% | 2.15 h | | |
| | Qwen3.6-27B (base) | 9.67% | 58 | 46.00% | 1.95 h | | |
| For scale, the reference models in the upstream README (run at their highest reasoning | |
| effort) land at Claude Opus 4.8 30.33%, GPT-5.6 Sol 29.17%, GLM 5.2 20.33%, | |
| Gemini 3.5 Flash 14.83%. | |
| ### Per domain | |
| Tasks passed out of 100, partial credit in parentheses. | |
| | Model | Finance | HR | Marketing | Operations | Sales | Support | | |
| |---|---|---|---|---|---|---| | |
| | **beyoru/Ops-I** | **20** (57.0) | 3 (10.1) | 5 (51.4) | **18** (60.5) | **10** (38.2) | 5 (55.9) | | |
| | Qwen3.6-27B base | 21 (57.7) | 3 (12.4) | 3 (45.1) | 17 (60.9) | 8 (41.4) | 6 (58.4) | | |
| | gemma-4-31B-it | 18 (48.7) | 1 (5.2) | **14** (56.3) | 15 (56.2) | 9 (34.3) | 4 (49.1) | | |
| Finance and operations carry the score. HR is the floor for every model tested (1-3 / 100). | |
| --- | |
| ## Known weakness: it acts too much | |
| The dominant failure mode is **not** inability to act — it is failure to *refrain*. | |
| | Assertion type | Ops-I | | |
| |---|---| | |
| | Positive ("do send / do create") | 3028 / 5636 = **53.7%** | | |
| | Negative ("do **not** send / do **not** create") | 65 / 585 = **11.1%** | | |
| Some negative assertion types never pass, aggregated across all four models tested: | |
| `gmail_message_not_sent` 0/203, `slack_message_not_in_channel` 0/166, | |
| `google_sheets_row_not_exists` 0/161. | |
| This is uniform across two model families and four checkpoints, so treat it as a property | |
| of the current open-weight generation rather than of Ops-I specifically. **If you deploy | |
| this in a workflow that can send email, post to chat, or write to a sheet, gate those | |
| actions behind confirmation.** | |
| --- | |
| ## Quickstart | |
| ### Serve with SGLang | |
| ```bash | |
| python3 -m sglang.launch_server --model-path beyoru/Ops-I --served-model-name Ops-I \ | |
| --host 0.0.0.0 --port 30014 --tp 4 \ | |
| --reasoning-parser qwen3 --tool-call-parser qwen3_coder \ | |
| --mem-fraction-static 0.85 | |
| ``` | |
| ### Serve with vLLM | |
| ```bash | |
| vllm serve beyoru/Ops-I --served-model-name Ops-I \ | |
| -tp 4 --max-model-len 16384 \ | |
| --enable-auto-tool-choice --tool-call-parser qwen3_coder --reasoning-parser qwen3 | |
| ``` | |
| ### Call it | |
| ```python | |
| from openai import OpenAI | |
| client = OpenAI(base_url="http://localhost:30014/v1", api_key="EMPTY") | |
| tools = [{ | |
| "type": "function", | |
| "function": { | |
| "name": "crm_update_contact", | |
| "description": "Update a contact's details in the CRM.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": {"contact_id": {"type": "string"}, "phone": {"type": "string"}}, | |
| "required": ["contact_id", "phone"], | |
| }, | |
| }, | |
| }] | |
| r = client.chat.completions.create( | |
| model="Ops-I", | |
| messages=[{"role": "user", "content": "Update Le Van A's phone to 0912345678."}], | |
| tools=tools, | |
| tool_choice="auto", | |
| ) | |
| print(r.choices[0].message.tool_calls) | |
| ``` | |
| --- | |
| ## Training | |
| --- | |
| ## Evaluation notes | |
| - All numbers above come from a single run per model (k=1) on the full public 600-task | |
| set, temperature left at server default. No task was excluded. | |
| - AutomationBench has **no separate train split** — the 600 public tasks are both the | |
| dataset and the scoring set. Ops-I was **not** trained on them; if you fine-tune against | |
| this benchmark, its scores stop being comparable to anything. | |
| - Numbers were produced with SGLang 0.5.12. A vLLM baseline was not measured, so do not | |
| mix serving stacks when comparing. | |
| # Limitaion | |
| **The model only take a few steps training because of LIMITATION gpu usage in our org** | |
| ## Community Feedback | |
| *Ops-I* is an ongoing project, and community feedback is invaluable. | |
| If you discover failure cases, benchmark results, or have ideas for future improvements, feel free to start a Discussion. Every report helps improve future releases. | |
| ## Citation | |
| Benchmark tasks, tools and assertions are Zapier's: | |
| ```bibtex | |
| @misc{automationbench, | |
| title = {AutomationBench}, | |
| author = {Zapier}, | |
| year = {2026}, | |
| url = {https://github.com/zapier/AutomationBench} | |
| } | |
| ``` | |