Instructions to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0", dtype="auto") - llama-cpp-python
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0", filename="mistral_nemo_mitre_Q4_K_M.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- llama.cpp
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with llama.cpp:
Install from brew
brew install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M # Run inference directly in the terminal: llama-cli -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M # Run inference directly in the terminal: llama-cli -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Use Docker
docker model run hf.co/chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
- SGLang
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 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 "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0" \ --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": "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0", "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 "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0" \ --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": "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Ollama:
ollama run hf.co/chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
- Unsloth Studio new
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 to start chatting
- Pi new
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama-server -hf chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Run Hermes
hermes
- Docker Model Runner
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Docker Model Runner:
docker model run hf.co/chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
- Lemonade
How to use chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0 with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0:Q4_K_M
Run and chat with the model
lemonade run user.MITRE_ATTCK_CTI_Specialist_V1.0-Q4_K_M
List all available models
lemonade list
You need to agree to share your contact information to access this model
This repository is publicly accessible, but you have to accept the conditions to access its files and content.
This model is designed for defensive cybersecurity research, threat intelligence analysis, and authorized security operations only. By accessing this model, you confirm that you will use it solely for lawful and defensive purposes, and not to facilitate unauthorized access, attacks, or any malicious activity.
Log in or Sign Up to review the conditions and access this model content.
Mistral-Nemo-12B โ MITRE ATT&CK CTI Specialist
A fine-tuned language model specialized in cyber threat intelligence, trained to identify and chain MITRE ATT&CK techniques from natural language attack scenario descriptions. Built on Mistral-Nemo-Instruct-2407 for precise instruction following and structured JSON output.
Model Overview
| Base model | unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit |
| Parameters | 12B |
| Method | QLoRA 4-bit (r=16, alpha=16) |
| Context window | 128k tokens |
| Languages | English / French |
| Domain | Cybersecurity โ CTI โ MITRE ATT&CK v15 |
| Output format | Structured JSON |
| Selected checkpoint | checkpoint-1050 (lowest eval loss: ~1.169) |
Given a textual description of an attack scenario, this model produces a structured attack chain with MITRE ATT&CK technique IDs, names, descriptions, a confidence level, and underlying assumptions.
Usage
Prompt Format
### Instruction
Analyze the following text and identify the MITRE ATT&CK techniques involved.
Always use the most specific sub-technique available (e.g. T1566.001 not T1566).
Return strictly structured JSON. Only include techniques explicitly evidenced in the text.
### Context
{your_scenario_here}
### Response
Recommended System Prompt
You are an expert in offensive cybersecurity and cyber threat intelligence (CTI).
You analyze attack scenarios and identify MITRE ATT&CK techniques with precision,
including sub-techniques (e.g. T1059.003).
You ALWAYS respond in structured JSON with exactly these fields:
scenario_summary (causal chain, e.g. "Phishing โ LSASS โ PtH โ DNS exfil"),
attack_chain (list of technique_id, name, description),
confidence_level (high/medium/low in lowercase),
assumptions (at least 2 contextual hypotheses).
Only include techniques explicitly evidenced in the input text.
IMPORTANT: always use the most precise sub-technique available.
Never use T1566 if T1566.001 is applicable.
Never use T1048 if T1048.003 is identifiable from context.
Example
Input:
An APT group sends a spearphishing email with an obfuscated VBA macro attachment.
The macro uses certutil.exe to decode a base64 payload. The payload establishes
an HTTPS beacon via Azure CDN domain fronting every 4 hours. Attackers dump LSASS
with Mimikatz, retrieve an NTLM hash, pivot via Pass-the-Hash, then exfiltrate
data via a DNS tunnel to their C2.
Output:
{
"scenario_summary": "Spearphishing attachment โ certutil decode โ domain fronting C2 โ LSASS dump โ PtH โ DNS exfil",
"attack_chain": [
{
"technique_id": "T1566.001",
"name": "Spearphishing Attachment",
"description": "Adversaries may send spearphishing emails with a malicious attachment to gain access to victim systems."
},
{
"technique_id": "T1027",
"name": "Obfuscated Files or Information",
"description": "Adversaries may attempt to make an executable or file difficult to discover or analyze by encrypting, encoding, or otherwise obfuscating its contents."
},
{
"technique_id": "T1140",
"name": "Deobfuscate/Decode Files or Information",
"description": "Base64 payload decoded on disk using certutil.exe before execution."
},
{
"technique_id": "T1090.004",
"name": "Domain Fronting",
"description": "Adversaries may take advantage of routing schemes in CDNs to obfuscate the true destination of HTTPS traffic."
},
{
"technique_id": "T1071.001",
"name": "Web Protocols",
"description": "C2 communication over HTTPS blending in with legitimate web traffic."
},
{
"technique_id": "T1003.001",
"name": "LSASS Memory",
"description": "Adversaries may attempt to access credential material stored in LSASS process memory."
},
{
"technique_id": "T1550.002",
"name": "Pass the Hash",
"description": "Adversaries may pass the hash using stolen password hashes to move laterally within an environment."
},
{
"technique_id": "T1048.003",
"name": "Exfiltration Over Unencrypted Non-C2 Protocol",
"description": "Data exfiltrated via DNS query encoding to an attacker-controlled server."
},
{
"technique_id": "T1071.004",
"name": "DNS",
"description": "Adversaries may communicate using the DNS application layer protocol to avoid detection."
}
],
"confidence_level": "high",
"assumptions": [
"No MFA on domain accounts",
"LSASS not protected by PPL",
"DNS traffic not filtered or monitored"
]
}
Python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch, json
model_id = "YOUR_USERNAME/mistral-nemo-mitre-attack"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
SYSTEM = (
"You are a CTI expert specialized in MITRE ATT&CK v15. "
"Always use the most specific sub-technique available. "
"Always respond in structured JSON with: "
"scenario_summary (causal chain), "
"attack_chain (technique_id, name, description), "
"confidence_level (high/medium/low), "
"assumptions (at least 2 hypotheses)."
)
scenario = """
An attacker exploits an SQL injection on a public web application
to drop a PHP webshell. Via the webshell, they steal IAM credentials
from the EC2 metadata service and create a persistent IAM account.
Data is then exfiltrated to an S3-compatible cloud storage service.
"""
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": f"### Instruction\nAnalyze the following attack scenario.\n\n### Context\n{scenario.strip()}\n\n### Response"},
]
inputs = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt",
).to(model.device)
outputs = model.generate(
inputs,
max_new_tokens=1024,
temperature=0.1,
do_sample=True,
)
response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)
print(json.dumps(json.loads(response), indent=2))
llama.cpp / Ollama (GGUF Q4_K_M)
# llama-server
./llama-server \
-m mistral_nemo_mitre_Q4_K_M.gguf \
--port 10002 \
--host 0.0.0.0 \
-ngl 99 \
-c 8192 \
-ctk q8_0 \
-ctv q8_0 \
--flash-attn \
--temp 0.1
# Ollama
ollama create mitre-nemo -f Modelfile
ollama run mitre-nemo
Training
Dataset
The training dataset was purpose-built for this model with three major improvements over prior versions:
- IDโname anchor entries โ ~720 entries explicitly repeating technique ID / name / description associations to prevent dissociation hallucinations
- 30 causal kill chains โ full APT scenarios with logical technique sequencing (APT29, Lazarus, SolarWinds-style, ransomware, BEC, OT/SCADAโฆ)
- Contrastive pairs โ explicit examples distinguishing commonly confused techniques: T1566.001 vs T1566.002, T1048.003 vs T1567.002, T1003.001 vs T1003.006, T1558.003 vs T1558.001, T1027 vs T1620
- Coherence validation โ entries where
scenario_summaryandattack_chainare inconsistent are automatically rejected
Split: 80% train / 10% val / 10% test
Hyperparameters
base_model: unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit
method: QLoRA
quantization: 4-bit (bitsandbytes)
lora_r: 16
lora_alpha: 16
lora_dropout: 0
target_modules: [q_proj, k_proj, v_proj, o_proj,
gate_proj, up_proj, down_proj]
gradient_checkpointing: unsloth
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
effective_batch_size: 16
num_train_epochs: 3
learning_rate: 2.0e-4
lr_scheduler_type: cosine
warmup_ratio: 0.05
optimizer: adamw_8bit
max_seq_length: 2048
bf16: true
Training Metrics
| Metric | Value |
|---|---|
| Training Loss (final) | 0.1462 |
| Training Loss (checkpoint-1050) | 0.1196 |
| Eval Loss (minimum, ~step 1300) | ~1.169 |
| Total steps | 4530 (3 epochs) |
| Tokens processed | 11 624 802 |
Performance
Evaluated on a reference multi-step APT scenario (spearphishing โ LSASS โ PtH โ Kerberoasting โ DNS exfil):
| Version | Base model | Correct techniques / expected |
|---|---|---|
| (this model) | Mistral-Nemo-12B | 7 / 12 |
Key improvements over previous versions: sub-technique precision (T1566.001 vs T1566, T1003.001 vs T1003), structured JSON consistency, name and description fields systematically populated, assumptions always present.
Hardware Requirements
| Format | Size | Min VRAM |
|---|---|---|
| GGUF Q4_K_M | ~7.0 GB | 10 GB |
| GGUF Q5_K_M | ~8.1 GB | 12 GB |
| BF16 merged | ~24 GB | 2ร GPU or CPU offload |
Ethical Use
This model is intended for defensive cybersecurity purposes only โ threat intelligence analysis, SOC operations, red team exercises within authorized engagements, and security research.
Any use of this model to facilitate unauthorized access, attacks, or malicious activities is strictly prohibited.
Citation
@misc{mistral-nemo-mitre-attack-2026,
title = {Mistral-Nemo-12B MITRE ATT{\&}CK CTI Specialist},
author = {Chris E.},
year = {2026},
publisher = {Hugging Face},
url = {https://huggingface.co/chrisbst48/mistral-nemo-mitre-attack}
}
License
Apache 2.0 โ inherited from the Mistral-Nemo-Instruct-2407 base model.
- Downloads last month
- -
4-bit
Model tree for chrisbst48/MITRE_ATTCK_CTI_Specialist_V1.0
Base model
unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit