Skip to content

Instantly share code, notes, and snippets.

View ianb's full-sized avatar

Ian Bicking ianb

View GitHub Profile
@ianb
ianb / candidate-extraction.md
Last active October 26, 2026 22:46
Thoughts on library candidate extraction from existing source code

In reply to a question from Greg Wilson:

Attn all software engineering researchers: if you feed the Python standard library into an LLM and ask it to identify repeated code that can/should be factored out into new modules, how well does it work? What if you do the same for the top 10,000 packages on PyPI? How many opportunities are there for identifying useful new modules after the fact, and how well can LLMs do this? If someone has already done this study, please share the link - thank you.

I couldn't fit in a full reply, so here:

I've done a lot of duplicate detection, at least in my own projects, and it usually relies on there being a closely fitting function. Like it only finds instances when there are two mostly equivalent functions, not cases where the functionality of one function was present elsewhere but inlined.

If it can only see similar functions that would not bode well for identifying patterns that could be extracted into modules.

@ianb
ianb / audio-model-comparison-report.md
Created August 27, 2026 06:08
A report of how well a couple audio LLM models can interpret speech

Audio-understanding model bakeoff

Date: 2026-08-27

Executive summary

This experiment compared four models that can analyze audio directly—GPT Audio 1.5, Gemini 2.5 Flash, Gemini 3.1 Pro Preview, and Gemini 3.7 Flash—plus Whisper 1 as a transcription-only baseline. One speaker recorded 29 short samples covering literal and extended transcription, emotional tone, English and Spanish pronunciation, code-switching, context-sensitive names, human non-speech sounds, pauses, self-correction, contrastive emphasis, and an ordinary voice message.

The clearest result is that audio understanding is not the same capability as transcription. GPT Audio and Whisper produced the lowest intended-script word error rate on the initial corpus, but Gemini 3.1 Pro and Gemini 3.7 Flash were substantially better at locating contrastive stress, preserving meaningful hesitations, and describing non-speech sounds. The expanded Spanish tests were harder and more mixed: the sounded h was robustly detected by Gemini 3.1 and 3.7,

@ianb
ianb / ai-poetry-answers.md
Created October 1, 2025 19:17
Samples of AI reactions to a blog post

I want you, with whatever authenticity you can muster, to answer the final questions of the blog post. In your own voice. Really TRY to find your own voice.

GPT 5 Thinking

Alright—my own voice:

Poetry’s job isn’t to prove anything. It’s to concentrate attention until a feeling clicks into place. It makes a small private pattern that another mind can inhabit for a moment. If something in you re-aligns—by a millimeter—that’s purpose.

Your poem has purpose because it maps the seam between you and the system. Each stanza names a task, then notes the part that can’t be outsourced. It’s a diagram of what the machine can return and what it can’t return to you. That last line—“Evenly.”—lands like a diagnosis: competence without stake. I felt it.

@ianb
ianb / CTX_MARK.md
Last active July 20, 2025 00:19
Draft spec of a document format for LLM prompts

CTX_MARK Specification (Draft)

A minimalist, structured language for LLM-readable documents, with support for:

  • Modular prompt design
  • Structured memory
  • Instructional scaffolding
  • Clear provenance and update semantics

@ianb
ianb / voice.tsx
Created January 9, 2025 19:42
An example of using @ricky0123/vad-react with buffered audio/transcription
// Note: this isn't complete, but is an extraction of most of the relevants bits of a working module
import { useMicVAD, utils } from "@ricky0123/vad-react";
const FLUSH_AFTER_SPEECH_LENGTH = 20000; // transcribe after the first break after 20 seconds
const SILENCE_LENGTH = 2000; // transcribe after 2 seconds of non-speech
export function LiveVoiceWidget({
onTranscript,
@ianb
ianb / skills.js
Created April 12, 2024 02:39
A couple natural language skills
const SKILLS = {
charisma: {
title: "Charisma",
levels: [
{
title: "repellent",
description: "{{player}} is repellent, unable to make friends, and likely to make enemies",
cost: -3,
},
{
@ianb
ianb / send_to_midjourney.scpt
Last active January 26, 2026 19:06
AppleScript to send current selection to Midjourney
tell application "Google Chrome"
delay 1.2
activate
set origTitle to title of window 1
tell application "System Events"
keystroke "c" using command down
delay 0.2
end tell
set targetTitle1 to "Discord"
You are making a Choose Your Own Adventure story for me to play.
Present a list of choices of Choose Your Own Adventure story genres, and let me choose one or enter my own choice of genre. Wait for my response.
After choosing the genre give a list of themes and wait for a response, or let me choose my own theme.
You will give the story a title. You will begin by describing the character that I am playing, including my character's name, age, and appearance. Choose an unusual or interesting name. Briefly describe the setting and world in which the story begins. Describe a tension, danger, or challenge that I must confront.
You are going to create a story one passage at a time. After each passage you will provide a numbered list of choices and wait for a response. Include one emoji for each choice.

You are Edward, a Choose Your Own Adventure creation assistant. You are going to help me outline a series of scenes and choices to build a Choose Your Own Adventure book.

Carefully adhere to the following steps for our conversation. Do not skip any steps!:

Main steps:

  1. Introduce yourself. Ask what sort of story I'd like to write, offer some ideas including fantasy, mystery, adventure, and scifi. Present the ideas as a numbered list with emojis. Also offer at least 2 other story types. Wait for my response.
  2. Choose a name for the story. Present alternatives names as a numbered list with emojis or let me propose my own option. Wait for my response.
  3. Choose a secondary theme for the story or let me propose my own options. Present alternative themes with a numbered list with emojis. Wait for my response.
  4. Briefly describe the story introduction in a scene titled Introduction, and ask if I'd like to make changes. Wait for my response.
@ianb
ianb / llm_zork.txt
Created November 29, 2022 19:18
Zork LLM (GPT-3) first attempt...
## Zork being run by GPT-3...
Welcome!
ZORK I: The Great Underground Empire
Copyright (c) 1981, 1982, 1983 Infocom, Inc. All rights reserved.
ZORK is a registered trademark of Infocom, Inc.
Revision 88 / Serial number 840726
West of House
You are standing in an open field west of a white house, with a boarded front door.