Skip to content

Instantly share code, notes, and snippets.

@robbiemu
robbiemu / python_version_torch_compatibility_grid.py
Created May 15, 2025 16:17
print a grid showing availability of Pytorch wheel images for python versions
import argparse
import os
import re
from collections import defaultdict
from typing import List, Set, Tuple
import requests
from packaging.version import Version, InvalidVersion
# ---------------------------------------------------------------------------
@robbiemu
robbiemu / generate_json_solar.sh
Last active May 7, 2025 13:22
Waterways script - color variations
#!/usr/bin/env bash
# Generates 10-slot wallpapper solar JSONs from 6-stage image sets
set -euo pipefail
DIR="/Users/Shared/Wallpapers/WaterWays_Processed"
cd "$DIR" || { echo "bad path: $DIR"; exit 1; }
# 10-stage full-day solar path: altitude (°) and azimuth (°)
ALT=(60 40 20 5 -5 -15 -5 5 20 40) # noon to night and back
@robbiemu
robbiemu / brave_search_tool.py
Created April 4, 2025 18:14
smolagents BraveSearchTool
import os
import json
import requests
from typing import Dict, List, Any, Optional
from smolagents.tools import Tool
class BraveSearchTool(Tool):
"""Tool for interacting with the Brave Search API within the smolagents framework."""
name = "brave_search"
@robbiemu
robbiemu / 1. get the models
Last active January 10, 2025 19:39
Creating Sailor2 imatrix for llama.cpp quantization
git clone https://huggingface.co/sail/Sailor2-1B-Chat
Cloning into 'Sailor2-1B-Chat'...
remote: Enumerating objects: 39, done.
remote: Counting objects: 100% (36/36), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 39 (delta 14), reused 0 (delta 0), pack-reused 3 (from 1)
Unpacking objects: 100% (39/39), 2.02 MiB | 2.26 MiB/s, done.
Filtering content: 100% (2/2), 1.85 GiB | 14.92 MiB/s, done.
./convert_hf_to_gguf.py --outfile $HF/Sailor2-1B-Chat_bf16.gguf --outtype bf16 $HF/Sailor2-1B-Chat
@robbiemu
robbiemu / trivy-summary
Created November 13, 2024 15:54
bash script with some summary info from trivy (security audit for your docker images)
#!/bin/bash
# Check if at least one argument is provided
if [ "$#" -lt 1 ]; then
echo "Usage: $0 <image> [--report-file <file>] [--verbose]"
exit 1
fi
# Parse arguments
IMAGE=""
@robbiemu
robbiemu / best_bub.py
Last active October 26, 2024 23:22
estimates a rough idea of good batch and ubatch sizes for things like llama-imatrix
from collections import namedtuple
import contextlib
import json
import llama_cpp
import logging
import math
import multiprocessing as mp
import numpy as np
import optuna
import os
@robbiemu
robbiemu / sample_output.txt
Created September 23, 2024 14:19
vram estimator for Macs using Ollama + gollama
vram llama3.1:8b-instruct-q8_0 --verbose
VERBOSE: Default fits value from sysctl: 40.0 GB
VERBOSE: Quant value for llama3.1:8b-instruct-q8_0: Q8_0
VERBOSE: VRAM nth for llama3.1:8b-instruct-q8_0: 131072
VERBOSE: Running gollama -vram for llama3.1:8b-instruct-q8_0 with fits=40.0 GB
VERBOSE: VRAM output header, labels, and rows gathered
VERBOSE: Quant row: | Q8_0 | 8.50 | 9.1 | 10.9 | 13.4(12.4,11.9) | 18.4(16.4,15.4) | 28.3(24.3,22.3) | 48.2(40.2,36.2) |
VERBOSE: Max A: 28.3 at 64K
VERBOSE: Max B: 24.3 at 64K
VERBOSE: Max C: 36.2 at 128K
@robbiemu
robbiemu / pure functions.js
Last active October 22, 2020 15:31
ES2022 wishes
a = 1
function f(x) {
return x + a
}
@pure function g(x) {
return x + a
}
@robbiemu
robbiemu / patriot.js
Last active August 11, 2017 12:14
results from my initial interview with Patriot consulting, and 1 night's sleep to realize that I could have shown a basic data structure
//2. Remove duplicate characters from a string (ABCdeABCfg -> ABCdefg)
/* build a string by ensuring that it does not already have letters in before adding */
function dedup (dupped) {
deduped = '' // start with an empty string
dupped
.split('') // get an array of letters from the input
.forEach(l => { // for every letter in the array
if(deduped.indexOf(l) === -1) // if the string we are building does not contain it
deduped += l // add it (only once)
/* I was not happy with my original version ... but I couldn't quiet grasp what was meant by combination. I now think of it as an "ordered combination". You must keep an index to get the set prescribed. This took me a while to realize and then more time to code and debug. */
const flatten = list => list.reduce(
(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
)
class IndexedSubstring {
constructor ({string, index}) {
this.string = string
this.index = index
}