Text Classification
GGUF
jev-style
English
jev
openjev
decision-model
typed-decisions
bonsai
ternary
local-inference
blackwell
conversational
Instructions to use ajh-code/Jev-Bonsai-Compass with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- jev-style
How to use ajh-code/Jev-Bonsai-Compass with jev-style:
pip install jev-style # GGUF builds score through llama.cpp: build the jev-score binary once hf download ajh-code/Jev-Bonsai-Compass build_jev_score.sh jev_score.cpp --local-dir jev-score export JEV_SCORE_BIN=$(sh jev-score/build_jev_score.sh /path/to/llama.cpp | tail -n 1)
from jev_style import JevStyle, noul, choice js = JevStyle.from_pretrained("ajh-code/Jev-Bonsai-Compass") out = js.decide("I was charged twice for one order.", { "billing": noul("This message is about billing."), "team": choice("Which team should handle it?", ["billing", "shipping", "tech"]), }) print(out["answers"]["team"]["choice"]) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use ajh-code/Jev-Bonsai-Compass with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf ajh-code/Jev-Bonsai-Compass:Q2_0 # Run inference directly in the terminal: llama cli -hf ajh-code/Jev-Bonsai-Compass:Q2_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf ajh-code/Jev-Bonsai-Compass:Q2_0 # Run inference directly in the terminal: llama cli -hf ajh-code/Jev-Bonsai-Compass:Q2_0
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 ajh-code/Jev-Bonsai-Compass:Q2_0 # Run inference directly in the terminal: ./llama-cli -hf ajh-code/Jev-Bonsai-Compass:Q2_0
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 ajh-code/Jev-Bonsai-Compass:Q2_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf ajh-code/Jev-Bonsai-Compass:Q2_0
Use Docker
docker model run hf.co/ajh-code/Jev-Bonsai-Compass:Q2_0
- LM Studio
- Jan
- Ollama
How to use ajh-code/Jev-Bonsai-Compass with Ollama:
ollama run hf.co/ajh-code/Jev-Bonsai-Compass:Q2_0
- Unsloth Desktop
- Pi
How to use ajh-code/Jev-Bonsai-Compass with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ajh-code/Jev-Bonsai-Compass:Q2_0
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "ajh-code/Jev-Bonsai-Compass:Q2_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use ajh-code/Jev-Bonsai-Compass with Docker Model Runner:
docker model run hf.co/ajh-code/Jev-Bonsai-Compass:Q2_0
- Lemonade
How to use ajh-code/Jev-Bonsai-Compass with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull ajh-code/Jev-Bonsai-Compass:Q2_0
Run and chat with the model
lemonade run user.Jev-Bonsai-Compass-Q2_0
List all available models
lemonade list
- Hermes Agent
How to use ajh-code/Jev-Bonsai-Compass with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ajh-code/Jev-Bonsai-Compass:Q2_0
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 ajh-code/Jev-Bonsai-Compass:Q2_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use ajh-code/Jev-Bonsai-Compass with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ajh-code/Jev-Bonsai-Compass:Q2_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "ajh-code/Jev-Bonsai-Compass:Q2_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Download source/bonsai_runtime/service.py from ajh-code/Jev-Bonsai-Compass: direct link, hf CLI and curl.
- Browser
- Download file 6.29 kB
-
https://huggingface.co/ajh-code/Jev-Bonsai-Compass/resolve/main/source/bonsai_runtime/service.py
- Command line
-
hf download hf://ajh-code/Jev-Bonsai-Compass/source/bonsai_runtime/service.py
-
curl -L -o service.py https://huggingface.co/ajh-code/Jev-Bonsai-Compass/resolve/main/source/bonsai_runtime/service.py
6.29 kB
| """JSONL and local HTTP entry points sharing the supported decision engine.""" | |
| import argparse | |
| from contextlib import contextmanager | |
| from datetime import datetime,timezone | |
| from http.server import BaseHTTPRequestHandler,ThreadingHTTPServer | |
| import json | |
| from pathlib import Path | |
| import signal,sys,threading | |
| import urllib.error | |
| from .backend import Client,NativeServer | |
| from .decision import DecisionEngine | |
| CAPABILITIES=dict(api_version='1',input_fields=['state','question','options'],min_options=2,max_options=26, | |
| option_ids='opaque',numeric_values='parsed from option descriptions only',reasoning=False, | |
| modalities=['text'],agent_execution='experimental; not exposed by this HTTP service', | |
| compatibility='This is a decision API, not complete Jev/OpenJev API compatibility.') | |
| def server(engine,host='0.0.0.0',port=9304): | |
| slots=threading.BoundedSemaphore(2) | |
| class Handler(BaseHTTPRequestHandler): | |
| def log_message(self,*args):pass | |
| def send_json(self,status,payload): | |
| data=json.dumps(payload,ensure_ascii=False).encode() | |
| self.send_response(status);self.send_header('Content-Type','application/json');self.send_header('Content-Length',str(len(data)));self.end_headers() | |
| try:self.wfile.write(data) | |
| except (BrokenPipeError,ConnectionResetError):pass | |
| def do_GET(self): | |
| if self.path=='/health': | |
| try: | |
| engine.client.health() | |
| self.send_json(200,dict(status='ready',profile='base' if engine.client.adapter_id is None else 'adapter')) | |
| except (OSError,ValueError):self.send_json(503,dict(status='backend-unavailable')) | |
| elif self.path=='/v1/capabilities':self.send_json(200,CAPABILITIES) | |
| else:self.send_json(404,dict(error='Unknown endpoint')) | |
| def do_POST(self): | |
| if self.path!='/v1/decide':self.send_json(404,dict(error='Unknown endpoint'));return | |
| if not slots.acquire(blocking=False):self.send_json(503,dict(error='Decision worker and bounded queue are busy'));return | |
| try: | |
| self.connection.settimeout(125) | |
| length=int(self.headers.get('Content-Length','0')) | |
| if not 0<length<=65536:self.send_json(413,dict(error='Provide a JSON body of at most 64 KiB'));return | |
| data=self.rfile.read(length) | |
| if len(data)!=length:raise ValueError('Incomplete request body') | |
| request=json.loads(data) | |
| self.send_json(200,engine.decide(request)) | |
| except (ValueError,UnicodeError,TypeError) as exc:self.send_json(400,dict(error=str(exc))) | |
| except (OSError,RuntimeError,KeyError,IndexError) as exc:self.send_json(502,dict(error='Backend decision failed',detail=str(exc))) | |
| finally:slots.release() | |
| return ThreadingHTTPServer((host,port),Handler) | |
| def arguments(description): | |
| p=argparse.ArgumentParser(description=description) | |
| p.add_argument('--base',default='http://127.0.0.1:5991');p.add_argument('--profile',choices=['base','current'],default='base') | |
| p.add_argument('--adapter-id',type=int,default=0);p.add_argument('--launch',action='store_true') | |
| p.add_argument('--model',default='models/Ternary-Bonsai-2-27B-PQ2_0.gguf') | |
| p.add_argument('--adapter',help='Explicit adapter path required to launch profile current') | |
| p.add_argument('--binary',default='llama.cpp-b2/build/bin/llama-server');p.add_argument('--gpu',type=int,default=0) | |
| p.add_argument('--native-port',type=int,default=5991);p.add_argument('--run-dir') | |
| return p | |
| def engine_for(args): | |
| if args.launch: | |
| if args.profile=='current' and not args.adapter:raise ValueError('Current profile requires an explicit --adapter path; its weight license differs from the base') | |
| if args.profile=='base' and args.adapter:raise ValueError('Base profile does not load adapters') | |
| if args.adapter_id!=0:raise ValueError('Launching one adapter requires adapter ID 0') | |
| run=Path(args.run_dir) if args.run_dir else Path('runs')/datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%S.%fZ') | |
| run.mkdir(parents=True,exist_ok=False) | |
| with NativeServer(run,args.gpu,args.native_port,args.model,args.adapter if args.profile=='current' else None,args.binary) as client: | |
| yield DecisionEngine(client) | |
| else: | |
| yield DecisionEngine(Client(args.base,None if args.profile=='base' else args.adapter_id)) | |
| def graceful_termination(): | |
| """Let service-manager termination unwind owned backend contexts.""" | |
| def interrupt(signum,frame):raise KeyboardInterrupt | |
| previous=signal.signal(signal.SIGTERM,interrupt) | |
| try:yield | |
| finally:signal.signal(signal.SIGTERM,previous) | |
| def cli(): | |
| p=arguments('Bonsai text-choice decisions: JSONL input and JSONL output.');p.add_argument('--input');args=p.parse_args() | |
| try: | |
| with graceful_termination(),engine_for(args) as engine: | |
| stream=open(args.input) if args.input else sys.stdin | |
| try: | |
| for line in stream: | |
| if not line.strip():continue | |
| try:result=engine.decide(json.loads(line)) | |
| except (ValueError,TypeError,OSError,RuntimeError) as exc:result=dict(error=str(exc)) | |
| print(json.dumps(result),flush=True) | |
| finally: | |
| if args.input:stream.close() | |
| except KeyboardInterrupt:pass | |
| except (ValueError,RuntimeError) as exc:p.error(str(exc)) | |
| def http_cli(): | |
| p=arguments('Serve the Bonsai decision API.');p.add_argument('--host',default='0.0.0.0');p.add_argument('--port',type=int,default=9304);args=p.parse_args() | |
| try: | |
| with graceful_termination(),engine_for(args) as engine: | |
| httpd=server(engine,args.host,args.port) | |
| print(json.dumps(dict(listening=f'http://{args.host}:{args.port}',profile=args.profile)),file=sys.stderr,flush=True) | |
| try:httpd.serve_forever(poll_interval=.2) | |
| except KeyboardInterrupt:pass | |
| finally:httpd.server_close() | |
| except KeyboardInterrupt:pass | |
| except (ValueError,RuntimeError) as exc:p.error(str(exc)) | |
| if __name__=='__main__':cli() | |