Text Generation
Transformers
Safetensors
gemma4_unified
image-text-to-text
gemma4
sft
finetune
reasoning
roleplay
tool-use
conversational
Instructions to use aimeri/spoomplesmaxx-whiskeyjack-12B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use aimeri/spoomplesmaxx-whiskeyjack-12B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="aimeri/spoomplesmaxx-whiskeyjack-12B") 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("aimeri/spoomplesmaxx-whiskeyjack-12B") model = AutoModelForMultimodalLM.from_pretrained("aimeri/spoomplesmaxx-whiskeyjack-12B", 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 aimeri/spoomplesmaxx-whiskeyjack-12B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "aimeri/spoomplesmaxx-whiskeyjack-12B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "aimeri/spoomplesmaxx-whiskeyjack-12B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/aimeri/spoomplesmaxx-whiskeyjack-12B
- SGLang
How to use aimeri/spoomplesmaxx-whiskeyjack-12B 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 "aimeri/spoomplesmaxx-whiskeyjack-12B" \ --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": "aimeri/spoomplesmaxx-whiskeyjack-12B", "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 "aimeri/spoomplesmaxx-whiskeyjack-12B" \ --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": "aimeri/spoomplesmaxx-whiskeyjack-12B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use aimeri/spoomplesmaxx-whiskeyjack-12B with Docker Model Runner:
docker model run hf.co/aimeri/spoomplesmaxx-whiskeyjack-12B
| license: gemma | |
| base_model: | |
| - google/gemma-4-12B | |
| library_name: transformers | |
| pipeline_tag: text-generation | |
| tags: | |
| - gemma4 | |
| - sft | |
| - finetune | |
| - reasoning | |
| - roleplay | |
| - tool-use | |
| <!doctype html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>SpoomplesMaxx Whiskeyjack 12B</title> | |
| </head> | |
| <style> | |
| @import url("https://fonts.googleapis.com/css2?family=Consolas&display=swap"); | |
| .crt-container { | |
| padding: 10px; | |
| max-width: 1000px; | |
| margin: 0 auto; | |
| width: 95%; | |
| } | |
| .crt-case { | |
| background: #e8d7c3; | |
| border-radius: 10px; | |
| padding: 15px; | |
| box-shadow: | |
| inset -2px -2px 5px rgba(0, 0, 0, 0.3), | |
| 2px 2px 5px rgba(0, 0, 0, 0.2); | |
| } | |
| .crt-inner-case { | |
| background: #e8d7c3; | |
| border-radius: 8px; | |
| padding: 3px; | |
| box-shadow: | |
| inset -1px -1px 4px rgba(0, 0, 0, 0.3), | |
| 1px 1px 4px rgba(0, 0, 0, 0.2); | |
| } | |
| .crt-bezel { | |
| background: linear-gradient(145deg, #1a1a1a, #2a2a2a); | |
| padding: 15px; | |
| border-radius: 5px; | |
| border: 3px solid #0a0a0a; | |
| position: relative; | |
| box-shadow: | |
| inset 0 0 20px rgba(0, 0, 0, 0.5), | |
| inset 0 0 4px rgba(0, 0, 0, 0.4), | |
| inset 2px 2px 4px rgba(255, 255, 255, 0.05), | |
| inset -2px -2px 4px rgba(0, 0, 0, 0.8), | |
| 0 0 2px rgba(0, 0, 0, 0.6), | |
| -1px -1px 4px rgba(255, 255, 255, 0.1), | |
| 1px 1px 4px rgba(0, 0, 0, 0.3); | |
| } | |
| .crt-bezel::before { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: linear-gradient( | |
| 45deg, | |
| rgba(255, 255, 255, 0.03) 0%, | |
| rgba(255, 255, 255, 0) 40%, | |
| rgba(0, 0, 0, 0.1) 60%, | |
| rgba(0, 0, 0, 0.2) 100% | |
| ); | |
| border-radius: 3px; | |
| pointer-events: none; | |
| } | |
| .terminal-screen { | |
| background: #0c100d; | |
| padding: 20px; | |
| border-radius: 15px; | |
| position: relative; | |
| overflow: hidden; | |
| font-family: "Consolas", monospace; | |
| font-size: clamp(12px, 1.5vw, 16px); | |
| color: #3dc862; | |
| line-height: 1.4; | |
| text-shadow: 0 0 2px #3dc862; | |
| filter: brightness(1.1) contrast(1.1); | |
| box-shadow: | |
| inset 0 0 30px rgba(0, 0, 0, 0.9), | |
| inset 0 0 8px rgba(0, 0, 0, 0.8), | |
| 0 0 5px rgba(0, 0, 0, 0.6); | |
| max-width: 80ch; | |
| margin: 0 auto; | |
| } | |
| .terminal-screen h2, | |
| .terminal-screen h3 { | |
| font-size: clamp(16px, 2vw, 20px); | |
| margin-bottom: 1em; | |
| color: #ffdf00; | |
| text-shadow: 0 0 3px rgba(255, 223, 0, 0.5); | |
| } | |
| .terminal-screen pre.code-block-image { | |
| display: inline-block; | |
| text-align: left; | |
| font-size: clamp(2px, 0.4vw, 12px); | |
| font-family: monospace; | |
| margin: 1em 0; | |
| background-color: #1a1a1a; | |
| padding: 1em; | |
| border-radius: 4px; | |
| color: #3dc862; | |
| overflow-x: auto; | |
| line-height: 1; | |
| max-width: 100%; | |
| overflow: hidden; | |
| white-space: pre; | |
| } | |
| .terminal-screen pre.code-block { | |
| display: inline-block; | |
| text-align: left; | |
| font-size: clamp(10px, 1.3vw, 14px); | |
| font-family: monospace; | |
| margin: 1em 0; | |
| background-color: #1a1a1a; | |
| padding: 1em; | |
| border-radius: 4px; | |
| color: #3dc862; | |
| overflow-x: auto; | |
| line-height: 1; | |
| max-width: 100%; | |
| overflow: hidden; | |
| white-space: pre; | |
| } | |
| .terminal-screen::before { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: | |
| linear-gradient( | |
| rgba(18, 16, 16, 0) 50%, | |
| rgba(0, 0, 0, 0.25) 50% | |
| ), | |
| url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAGFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4o8JoAAAAB3RSTlMAGwQIEQMYADcPzwAAACJJREFUKM9jYBgFo2AU0Beg+A8YMCLxGYZCbNQEo4BaAAD5TQiR5wU9vAAAAABJRU5ErkJggg=="); | |
| background-size: 100% 2.5px; | |
| pointer-events: none; | |
| z-index: 2; | |
| } | |
| .terminal-screen::after { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: radial-gradient( | |
| circle at center, | |
| rgba(12, 16, 13, 0) 0%, | |
| rgba(12, 16, 13, 0.2) 50%, | |
| rgba(12, 16, 13, 0.15) 100% | |
| ); | |
| border-radius: 20px; | |
| pointer-events: none; | |
| z-index: 1; | |
| } | |
| .terminal-screen .notice { | |
| margin: 1.5em 0; | |
| padding: 0.8em 1.2em; | |
| border: 1px solid #ffdf00; | |
| border-radius: 4px; | |
| background-color: rgba(255, 223, 0, 0.04); | |
| } | |
| .terminal-screen .notice h3 { | |
| margin-top: 0.2em; | |
| margin-bottom: 0.5em; | |
| } | |
| .terminal-screen .notice p { | |
| margin-bottom: 0.2em; | |
| } | |
| .terminal-screen strong, | |
| .terminal-screen em { | |
| color: #f0f0f0; | |
| } | |
| .terminal-screen p, | |
| .terminal-screen li { | |
| color: #3dc862; | |
| } | |
| .terminal-screen a { | |
| color: #5da9ff; | |
| text-decoration: underline; | |
| text-shadow: 0 0 2px rgba(93, 169, 255, 0.5); | |
| transition: opacity 0.2s; | |
| } | |
| .terminal-screen a:hover { | |
| opacity: 0.8; | |
| } | |
| .terminal-screen code, | |
| .terminal-screen kbd, | |
| .terminal-screen samp { | |
| color: #3dc862; | |
| font-family: "Consolas", monospace; | |
| text-shadow: 0 0 2px #3dc862; | |
| background-color: #1a1a1a; | |
| padding: 0.2em 0.4em; | |
| border-radius: 4px; | |
| } | |
| </style> | |
| <div class="crt-container"> | |
| <div class="crt-case"> | |
| <div class="crt-inner-case"> | |
| <div class="crt-bezel"> | |
| <div class="terminal-screen"> | |
| <div style="text-align: center"> | |
| <h2>SpoomplesMaxx-Whiskeyjack-12B</h2> | |
| <h3>"Camp Robber"</h3> | |
| <pre class="code-block-image"> | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▒▓▓▓▓▓▓░▓░░▒░▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓░░░▓▓▓▓░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░▒▒░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒░░░▓▓▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░▒▒░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░▒░▒░░▒░░░░░░▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░▒░▒░░░░▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓░░░░░░░░░░░░▓░░▒░▓░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓░░░░░░▒░░░▒░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓░░░░░▓░░░░░▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░▓░░░░░▓░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▒░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓░░░▓░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░▒░░▒░░░▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓░▓░░░▒░░▓░▒▓░░░▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓▓▓▓▓▓▓▓▓▓▓░░▒░▓░░▓░░░░░▒▒▒▒▒▒▒▒▓▒▓▓▓▓▓▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░▓░▒░░░░▒▒▒▒▒▒▒▒▒▒▒▒▓░░▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓▓▓▓░░▓▓▓▓░░░▒░▓░░░░░░░░░░░░░░░▒░▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓░░░░░░░░▒▓▓░░░░░░░░░░░▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░▓▓▓░░░▓▓▓░░░░▓░░░░░░░░▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓░░░░▓░░░░░░░░▓▓▓▓▓░░▓▓▓▓░░░░░░░░░▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓░░░░▓▓░░░▓░░▒░░░░░▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓░░░░░▓░░░░░▓▓▓▓▓▓▓▓▓▓░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓░░░░▓▓▓░▓░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓▓▓░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓░░░▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓░▓░▓░▓░░░░░▓░▓▓▓▓▓░░░▓▓▓▓▓▓▓▓▓░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓░░░░░░░░░▓▓░░▓▓▓▓▓▒░░░░░░▓░░░▓▓▓▓▓▓▓▓░░░░░░░▓░▓░▓▓▓▓▓▓▓▓▓▓▓▓▓░▓▒░░░▒▓▓▓▓▓░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓░▓▓▓▓▓▒░░░░░░░░░░▓▓▓▓▓░░░░░░░░░░▓░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓░░░░░░▓▓▓▒░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓░░░░░░░░░▓▓▓░░░░░░░░░░▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░▓▓░░░░░░▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓░░░░░░░░░▓░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓▓░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▓▓▓▓░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓░░░░░░░▓░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓▓▓░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓░░░░░░░░▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░▓▓▓▓▓▓▓▓▓░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░▒░░▒░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░▓▓▓▓▓▓▓▓▓▓▓▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓░░░▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓░░░░░░░░▓░░░▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓░░░░░░▓▓▓░░▒░░░▒░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓░▒░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | |
| </pre> | |
| </div> | |
| <p> | |
| SpoomplesMaxx is a generalist model line with | |
| primary strengths in creative writing and roleplay, | |
| plus competence at instruction following, | |
| reasoning, and tool calling. Whiskeyjack brings the | |
| corvid line to Gemma: a full-parameter SFT of | |
| <strong>gemma-4-12B</strong>, trained in both | |
| thinking and non-thinking modes, with thinking off | |
| by default. | |
| </p> | |
| <p> | |
| Named for <em>Perisoreus canadensis</em> — the | |
| Canada jay, better known as the whisky jack or camp | |
| robber. A corvid bold enough to land on your hand | |
| and fly off with your lunch. The 35B got the | |
| jackdaw; the 12B gets the smaller, friendlier | |
| thief. | |
| </p> | |
| <h3>Prompt format</h3> | |
| <p> | |
| Gemma 4 uses a new turn format. It shares nothing | |
| with Gemma 3 — there is no | |
| <code><start_of_turn></code> — and the | |
| assistant role is spelled <code>model</code>: | |
| </p> | |
| <pre class="code-block"> | |
| <|turn>user | |
| ...<turn|> | |
| <|turn>model | |
| <|channel>thought | |
| ...reasoning... | |
| <channel|>...answer...<turn|> | |
| </pre> | |
| <pre class="code-block"> | |
| STOPS: stop on <turn|> (id 106). <eos> (id 1) is kept as a secondary | |
| EOS, but never set <eos> alone -- turns end on <turn|>. | |
| </pre> | |
| <p> | |
| The control tokens (<code><turn|></code>, | |
| <code><|channel></code>/<code><channel|></code>, | |
| <code><|tool_call></code>/<code><tool_call|></code>) | |
| were audited before training and re-verified after | |
| it: stop battery, boundary probes, and a tool-call | |
| battery all pass on the published checkpoint. | |
| </p> | |
| <h3>Thinking behavior</h3> | |
| <p> | |
| Thinking is opt-in and <strong>off by | |
| default</strong>. A <code><|think|></code> | |
| marker at the top of the <strong>system</strong> | |
| turn switches it on; | |
| <code>apply_chat_template(enable_thinking=True)</code> | |
| injects it for you. Both modes share the same bare | |
| <code><|turn>model</code> generation prefix — | |
| the model decides on its own whether to open | |
| <code><|channel>thought</code>. | |
| </p> | |
| <pre class="code-block"> | |
| MODE CONTROL: | |
| (default) thinking OFF -- no marker, no thought channel | |
| enable_thinking=True injects <|think|> into the system turn; the | |
| model opens <|channel>thought on its own | |
| PARSER NOTE: reasoning sits between <|channel>thought and <channel|>; | |
| the visible answer follows <channel|> in the same turn | |
| </pre> | |
| <div class="notice"> | |
| <h3>The chat template is not stock Gemma 4</h3> | |
| <p> | |
| Upstream Gemma 4 appends an empty thought | |
| channel | |
| (<code><|channel>thought\n<channel|></code>) | |
| to non-thinking turns. That form shows up | |
| <strong>0 times in 1,000 training turns</strong> | |
| of this corpus — a no-thoughts turn simply | |
| carries no channel — so the template here drops | |
| it. The stock template ships alongside as | |
| <code>chat_template.gemma-it-original.jinja</code>. | |
| Restore it and you push the model out of | |
| distribution: reasoning leaks into the answer | |
| and tool calls lose their opener. | |
| </p> | |
| </div> | |
| <p> | |
| What the thoughts look like depends on the system | |
| prompt. Under a SillyTavern-style character card | |
| the model writes a structured planner (~750 chars; | |
| 23/23 of the cards that opened a channel). Under | |
| the corpus's own RP framing it writes short | |
| first-person interiority (~90 chars). The model | |
| learned both forms separately, and the prompt picks | |
| which one you get. | |
| </p> | |
| <p>The planner, when it shows up:</p> | |
| <pre class="code-block"> | |
| SCENE: where/when, atmosphere, key environmental details currently in play | |
| CHARACTERS: who is present and their current physical/emotional state and motivation | |
| CONTINUITY: established facts that must stay consistent | |
| THREADS: active tensions and where they stand right now | |
| PLAN: what THIS turn needs to accomplish and the approach it takes | |
| </pre> | |
| <p> | |
| One more thing to expect: a conversational | |
| companion persona usually produces no thought | |
| channel at all (0/6 in testing), even with thinking | |
| on. Companion rows in the corpus are mostly | |
| non-thinking, and the model follows the data. | |
| </p> | |
| <h3>Tool calling</h3> | |
| <p> | |
| Gemma 4 tool calls use a DSL, <strong>not | |
| JSON</strong>: | |
| </p> | |
| <pre class="code-block"> | |
| FORM: <|tool_call>call:NAME{key:<|"|>value<|"|>}<tool_call|> | |
| EXAMPLE: <|tool_call>call:get_weather{city:<|"|>Lisbon<|"|>}<tool_call|> | |
| </pre> | |
| <div class="notice"> | |
| <h3>Serve tool calls inside one turn</h3> | |
| <p> | |
| In the training corpus a whole tool episode | |
| lives inside a single | |
| <code><|turn>model</code>, with | |
| <code><|tool_response></code> blocks | |
| interleaved inline. The model never emitted | |
| <code><turn|></code> after a call, so it | |
| never learned to yield there. A harness that | |
| waits for <code><turn|></code> will hang | |
| while the model keeps generating plausible | |
| calls — the classic infinite tool loop. | |
| </p> | |
| <pre class="code-block"> | |
| SERVE WITH: stop=["<tool_call|>"] | |
| THEN: inject <|tool_response>response:NAME{...}<tool_response|> | |
| and continue the SAME turn | |
| NEVER: wait for <turn|> after a tool call | |
| </pre> | |
| </div> | |
| <h3>Key Details</h3> | |
| <pre class="code-block"> | |
| BASE MODEL: google/gemma-4-12B | |
| LICENSE: gemma | |
| NOTE: the base is multimodal, so the checkpoint loads with | |
| AutoModelForImageTextToText (see Quickstart)</pre> | |
| <h3>Training</h3> | |
| <pre class="code-block"> | |
| METHOD: FULL-PARAMETER SFT -- ms-swift (swift sft), DeepSpeed ZeRO-2, | |
| torch SDPA attention, custom liger fused CE | |
| STAGES: three, each tagged in this repo; main = stage 3 | |
| stage 1 (v1-baseline-rp) aviary burn corpus, 1 epoch | |
| 1,917 steps @ lr 1e-5 eval 1.311 tok-acc 0.6465 | |
| stage 2 (v2-corrected-rp) thinking-weighted resample | |
| 568 steps @ lr 2e-6 eval 1.3067 tok-acc 0.6479 | |
| stage 3 (main) + 4,000 converted RP-reasoning rows | |
| 574 steps @ lr 2e-6 eval 1.301 tok-acc 0.6491 | |
| </pre> | |
| <div class="notice"> | |
| <h3>Why there is a stage 3</h3> | |
| <p> | |
| Stage 2 could think, but only under one prompt | |
| shape: 19,605 of the corpus's 20,666 | |
| thought-bearing rows share a single RP framing. | |
| So the model opened a thought channel on 8/8 | |
| in-corpus rows — and on 1 of 25 real character | |
| cards. Stage 3 mixed in RP-reasoning rows under | |
| ~4,000 distinct character cards so that | |
| thinking no longer depends on one specific | |
| prompt. | |
| </p> | |
| <pre class="code-block"> | |
| opens a thought channel on 25 held-out character cards | |
| (846-5,053 chars, short opening message): | |
| stage 2: 1/25 (4%) | |
| stage 3: 23/25 (92%) | |
| unchanged across the pass: | |
| stop rate 10/10 in both thinking and non-thinking modes | |
| tool-call round trip passes | |
| stray channels with thinking off: 0/3 | |
| P(<channel|>) at the true close: 1.000 | |
| </pre> | |
| </div> | |
| <h3>Sampling</h3> | |
| <p> | |
| Use the defaults in <code>generation_config.json</code>. | |
| <pre class="code-block"> | |
| "temperature": 1.0, | |
| "top_k": 64, | |
| "top_p": 0.95, | |
| </pre> | |
| </p> | |
| <h3>Quickstart</h3> | |
| <pre class="code-block"> | |
| from transformers import AutoModelForImageTextToText, AutoTokenizer | |
| tok = AutoTokenizer.from_pretrained("aimeri/spoomplesmaxx-whiskeyjack-12B") | |
| model = AutoModelForImageTextToText.from_pretrained( | |
| "aimeri/spoomplesmaxx-whiskeyjack-12B", | |
| dtype="bfloat16", device_map="auto") | |
| msgs = [{"role": "user", "content": "Solve (x + 2)^2 = 0."}] | |
| ids = tok.apply_chat_template(msgs, add_generation_prompt=True, | |
| enable_thinking=True, return_tensors="pt").to(model.device) | |
| out = model.generate(ids, max_new_tokens=512) | |
| print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=False)) | |
| </pre> | |
| <p>This one will hear how unhinged you are</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </html> |