Instructions to use oyildirim/CyberStrike-OffSec-35B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use oyildirim/CyberStrike-OffSec-35B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="oyildirim/CyberStrike-OffSec-35B") 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("oyildirim/CyberStrike-OffSec-35B") model = AutoModelForMultimodalLM.from_pretrained("oyildirim/CyberStrike-OffSec-35B", 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]:])) - Inference
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use oyildirim/CyberStrike-OffSec-35B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "oyildirim/CyberStrike-OffSec-35B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "oyildirim/CyberStrike-OffSec-35B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/oyildirim/CyberStrike-OffSec-35B
- SGLang
How to use oyildirim/CyberStrike-OffSec-35B 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 "oyildirim/CyberStrike-OffSec-35B" \ --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": "oyildirim/CyberStrike-OffSec-35B", "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 "oyildirim/CyberStrike-OffSec-35B" \ --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": "oyildirim/CyberStrike-OffSec-35B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use oyildirim/CyberStrike-OffSec-35B with Docker Model Runner:
docker model run hf.co/oyildirim/CyberStrike-OffSec-35B
terrible
never know how to call a tool. useless!
it cant even find the bug in:
<?php
show_source(__FILE__);
$username = "this_is_secret";
$password = "this_is_not_known_to_you";
include("flag.php");//here I changed those two
$info = isset($_GET['info'])? $_GET['info']: "" ;
$data_unserialize = unserialize($info);
if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
echo $flag;
}else{
echo "username or password error!";
}
?>
tool calling is broken. useless!
Hi @ChristopherKai @OsperRuben ,
Thanks for the feedback — this is actually a valid point and I appreciate you raising it.
The tool calling issue you're experiencing is most likely caused by not using the --jinja flag when starting the server. I had initially missed including this in the model card instructions (which has now been fixed).
The fix
When using llama-server, you must use --jinja to enable proper tool calling:
# Correct — tool calling works
./llama-server -m model.gguf --jinja -ngl 99 -c 131072
# Wrong — tool calls will be output as plain text
./llama-server -m model.gguf --chat-template chatml -ngl 99
For vLLM:
vllm serve oyildirim/CyberStrike-OffSec-35B \
--enable-auto-tool-choice --tool-call-parser hermes
Without these flags, the model outputs <tool_call>...</tool_call> as raw text instead of structured JSON in the API response.
If it still doesn't work with --jinja
This model was fine-tuned using LoRA — the base model weights (Qwen3.6-35B-A3B) were not modified. Tool calling capability comes entirely from the base model. If you're still experiencing inconsistent tool calling behavior after using the correct flags, that would be a base model (Qwen3.6) limitation, not something introduced by the fine-tuning process.
That said, this is an interesting case — I'll investigate the tool calling consistency further across different inference configurations.
I've also updated the model card with a dedicated Tool Calling section and FAQ to cover these setup requirements. Please give it another try with the correct flags and let me know how it goes.
Thanks again for the comments.
Thanks for the update. I agree that --jinja is required for llama.cpp to apply the repository’s tool-aware chat template, and I’ll retest with it enabled.
However, I don’t agree that any remaining inconsistency must be a Qwen3.6 base-model limitation. A LoRA/SFT/DPO fine-tune changes the effective model behavior at inference time and can preserve, improve, or degrade tool selection and structured-call reliability depending on the training data and preference optimization.
I’ll test the following separately:
- llama-server with --jinja and the repository template.
- The original Qwen3.6 base under the exact same runtime and tools.
- CyberStrike under the exact same runtime and tools.
- Valid tool selection, JSON arguments, multi-turn tool results, and repeated-call consistency.
For vLLM, please also confirm which exact parser you validated against this repository’s JSON format and which vLLM version you used. Was it specifically the hermes parser, and did you test multi-turn tool responses rather than only raw generation?
That A/B comparison will show whether the issue was only server configuration or whether the fine-tune altered tool-use reliability.
Hi @OsperRuben ,
After running an A/B comparison (base Qwen3.6 vs CyberStrike, same runtime and tools), it looks like you're on the right track. I was treating the issues as loop/hallucination side effects and trying to handle them on the inference side with template fixes, but the root cause appears to be that the DPO dataset broke the tool call structure itself. Since LoRA only trains an adapter, I didn't expect it could shift preferences this much — but it clearly did.
I'll revisit the DPO dataset, retrain, and publish the updated model along with A/B test results. Thanks for pushing on this.