Instructions to use elichen-skymizer/GAP-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use elichen-skymizer/GAP-models 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 elichen-skymizer/GAP-models:UD-Q4_K_XL # Run inference directly in the terminal: llama cli -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf elichen-skymizer/GAP-models:UD-Q4_K_XL # Run inference directly in the terminal: llama cli -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
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 elichen-skymizer/GAP-models:UD-Q4_K_XL # Run inference directly in the terminal: ./llama-cli -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
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 elichen-skymizer/GAP-models:UD-Q4_K_XL # Run inference directly in the terminal: ./build/bin/llama-cli -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
Use Docker
docker model run hf.co/elichen-skymizer/GAP-models:UD-Q4_K_XL
- LM Studio
- Jan
- Ollama
How to use elichen-skymizer/GAP-models with Ollama:
ollama run hf.co/elichen-skymizer/GAP-models:UD-Q4_K_XL
- Unsloth Desktop
- Pi
How to use elichen-skymizer/GAP-models with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
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": "elichen-skymizer/GAP-models:UD-Q4_K_XL" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use elichen-skymizer/GAP-models with Docker Model Runner:
docker model run hf.co/elichen-skymizer/GAP-models:UD-Q4_K_XL
- Lemonade
How to use elichen-skymizer/GAP-models with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull elichen-skymizer/GAP-models:UD-Q4_K_XL
Run and chat with the model
lemonade run user.GAP-models-UD-Q4_K_XL
List all available models
lemonade list
- Hermes Agent
How to use elichen-skymizer/GAP-models with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
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 elichen-skymizer/GAP-models:UD-Q4_K_XL
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use elichen-skymizer/GAP-models with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf elichen-skymizer/GAP-models:UD-Q4_K_XL
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 "elichen-skymizer/GAP-models:UD-Q4_K_XL" \ --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 bpw/validate_refresh.py from elichen-skymizer/GAP-models: direct link, hf CLI and curl.
- Browser
- Download file 4.4 kB
-
https://huggingface.co/elichen-skymizer/GAP-models/resolve/main/bpw/validate_refresh.py
- Command line
-
hf download hf://elichen-skymizer/GAP-models/bpw/validate_refresh.py
-
curl -L -o validate_refresh.py https://huggingface.co/elichen-skymizer/GAP-models/resolve/main/bpw/validate_refresh.py
4.4 kB
| #!/usr/bin/env python3 | |
| """Validate current BPW inventory, arithmetic, HF matches, and newly added GGUFs.""" | |
| from pathlib import Path | |
| import hashlib, json, math, os, re, sys | |
| from datetime import datetime, timezone | |
| ROOT=Path(__file__).resolve().parent | |
| sys.path.insert(0,str(Path.home()/'projects/llama.cpp/gguf-py')) | |
| from gguf import GGUFReader, GGMLQuantizationType, GGML_QUANT_SIZES | |
| native=json.loads((ROOT/'native-bpw.json').read_text()) | |
| hf=json.loads((ROOT/'hf/hf-bpw-estimates.json').read_text()) | |
| lookup={tuple(sorted(r['local_paths'])):r for r in hf} | |
| files={p['path']:p for p in native['files']} | |
| assert len(lookup)==len(hf)==len(native['rows']) | |
| count=0 | |
| for item in native['files']: | |
| stat=Path(item['path']).stat() | |
| assert (stat.st_size,stat.st_mtime_ns)==(item['file_bytes'],item['mtime_ns']) | |
| for t in item['tensors']: | |
| block,size=GGML_QUANT_SIZES[GGMLQuantizationType[t['type'].upper()]] | |
| n=math.prod(t['shape']) | |
| assert t['shape'][0]%block==0 and n==t['elements'] and n//block*size==t['bytes'],t['name'] | |
| count+=1 | |
| for row in native['rows']: | |
| h=lookup[tuple(sorted(row['files']))] | |
| assert h['status']=='comparable' and h['hf_sibling_bytes']==row['file_bytes'] and h['hf_gguf_total']==row['llama_cpp_parameters'] | |
| tensors=[t for p in row['files'] for t in files[p]['tensors']] | |
| assert len({t['name'] for t in tensors})==len(tensors)==row['tensor_count'] | |
| excluded=set(row['embedded_mtp_tensors']) | |
| main=[t for t in tensors if t['name'] not in excluded] | |
| for group,paramkey,byteskey,bpwkey in [(tensors,'llama_cpp_parameters','llama_cpp_tensor_bytes','llama_cpp_bpw'),(main,'main_parameters','main_tensor_bytes','main_bpw')]: | |
| params=sum(t['elements'] for t in group); size=sum(t['bytes'] for t in group) | |
| assert params==row[paramkey] and size==row[byteskey] and size*8/params==row[bpwkey] | |
| assert not re.search(r'(?:^|[-_.])Q3_K_[MLS](?=[-_.]|$)',Path(row['model']).name,re.I) | |
| shapes={} | |
| for family in ('qwen3.5-4b','qwen3.6-35b-a3b'): | |
| variants=[] | |
| for row in [r for r in native['rows'] if r['family']==family]: | |
| excluded=set(row['embedded_mtp_tensors']) | |
| shape=sorted((t['name'],t['shape']) for p in row['files'] for t in files[p]['tensors'] if t['name'] not in excluded) | |
| digest=hashlib.sha256(json.dumps(shape,separators=(',',':')).encode()).hexdigest() | |
| variants.append({'model':row['model'],'tensor_count':len(shape),'main_tensor_names_shapes_sha256':digest}) | |
| assert len({v['main_tensor_names_shapes_sha256'] for v in variants})==1 | |
| shapes[family]=variants | |
| (ROOT/'main-tensor-shape-validation.json').write_text(json.dumps({'status':'passed','families':shapes},indent=2)+'\n') | |
| actual=set() | |
| for folder,dirs,names in os.walk(native['provenance']['models_dir']): | |
| dirs[:]=[d for d in dirs if not d.startswith('.')] | |
| actual.update(str(Path(folder)/name) for name in names if Path(name).suffix.lower()=='.gguf') | |
| assert actual==set(files)|{p['path'] for p in native['excluded']} | |
| newchecks=[] | |
| # Optional positional paths select files for the independent Python reader check. | |
| for filename in sorted({str(Path(arg).expanduser().resolve()) for arg in sys.argv[1:]}): | |
| assert filename in files, f"File not in current scan: {filename}" | |
| reader=GGUFReader(filename) | |
| expected=files[filename]['tensors'] | |
| actualt={t.name:(int(t.n_elements),int(t.n_bytes)) for t in reader.tensors} | |
| assert actualt=={t['name']:(t['elements'],t['bytes']) for t in expected} | |
| newchecks.append({'file':filename,'tensor_count':len(expected),'exact_match':True}) | |
| del reader | |
| print('GGUFReader verified new file:',filename,flush=True) | |
| result={'status':'passed','updated_utc':datetime.now(timezone.utc).isoformat(),'variants':len(native['rows']), | |
| 'families':len({r['family'] for r in native['rows']}),'main_files':len(files),'excluded_files':len(native['excluded']), | |
| 'visible_files_accounted_for':len(actual),'tensor_descriptors_independently_recalculated':count, | |
| 'native_scan_errors':native['errors'],'hf_pairing_and_bpw':'all matched','removed_Q3_K_M_L_S_absent':True, | |
| 'main_tensor_shape_check':'both Qwen families passed','added_files_independent_GGUFReader':newchecks} | |
| (ROOT/'refresh-validation.json').write_text(json.dumps(result,indent=2)+'\n') | |
| print(json.dumps({k:v for k,v in result.items() if k!='added_files_independent_GGUFReader'},indent=2)) | |