Post B33SeKR3XbM4cSLzmK by p
(DIR) More posts by p
(DIR) Post #B33ISVwpudrhJAwkEq by vii@dsmc.space
2026-02-06T18:00:19.561062Z
1 likes, 0 repeats
@p I'm over it and now have something else cool to show you.I stole the llm9p code and added the Ollama logic so I could learn about go in p9 at the same time.https://github.com/elizafairlady/llm9pI also found your gist from 6 months ago with the code you showed me a little less than a week ago so that was fun too.
(DIR) Post #B33LKYWckL4uqaaBTk by vii@dsmc.space
2026-02-06T18:32:29.015297Z
1 likes, 0 repeats
@p update: don't use my code I fucking broke something
(DIR) Post #B33PHunxr1eYtVgpSi by p
2026-02-06T19:16:51.148535Z
1 likes, 0 repeats
@vii > I stole the llm9p code and added the Ollama logic so I could learn about go in p9 at the same time.That's fun. Yeah, Go is, like, disappointingly exactly the same (but without CGO). I have actually not played with any of them except ollama.> I also found your gist from 6 months ago with the code you showed me a little less than a week agoThe stuff I showed you has less commentary and a few additional fixes. But I think, like, it's kinda trivial, like literally a one-page shell script.Here's a script that isn't anywhere but my machines until now, m/gh, and its companion, m/ghs ("github /dev/snarf", which is just one line, 'm/gh `{cat /dev/snarf} | rc -x'). (Copy the URL -> clone onto fossil -> tomorrow it is on two venti servers.)#!/bin/rcrfork eecho $* | tr -s ' ' '' | awk '/^(github\.com|git\.[^\/]+)/ { $1 = "https://" $1 }$1 !~ /^([a-z0-9\+]+):\/\//{ $1 = "https://github.com/" $1 }{srcdir = sprintf("%s/%s", ENVIRON["home"], "src")n=split($0, a, /\//)sub(/\.git$/, a[n])printf "@{echo %s/%s/%s; test -d %s/%s/%s || @{mkdir -p %s/%s && cd %s/%s && git/clone %s}}\n",srcdir, a[n-1], a[n],srcdir, a[n-1], a[n],srcdir, a[n-1],srcdir, a[n-1], $1}'
(DIR) Post #B33PMmgzRZW9BKkWWG by p
2026-02-06T19:17:43.945420Z
1 likes, 0 repeats
@vii > disappointingly exactly the sameWhich is actually why I am using it for so much stuff: I don't have to port anything to run it on either Linux or Plan 9.
(DIR) Post #B33Por7kYonh2CeSno by shadowferret@the9thcircle.club
2026-02-06T19:22:45.500Z
2 likes, 0 repeats
@vii@dsmc.space @p@fsebugoutzone.org the less porting to better.
(DIR) Post #B33QxKN3ny1y0sPsjg by vii@dsmc.space
2026-02-06T19:35:31.074109Z
1 likes, 0 repeats
@p I'm trying to do a reversion on the llm9p code without breaking my ollama stuff, because the current branch of NERVsystems/llm9p is attempting to implement this per-fid isolation that completely breaks the paradigm and makes it impossible to retrieve messages after (successfully!) processing the text written to the /n/llm/ask file. I'm almost convinced that the guy who wrote it let Claude make a decision that snowballed.> Here's a scriptThis is remarkably efficient. One thing I keep noticing with plan9 is that literally everything with a responsibility does the whole of its own responsibility and I like that. Unix seems comparatively lazy; "oh you gotta tell me to do that" everywhere. So many good rc scripts I read seem to follow a pattern of "build up the functions I need in rc, pipe-chain the information I have been given into the shape I need, and output an executable string to do the actual job." I like that.
(DIR) Post #B33RXwNvwlWWKwHdFg by p
2026-02-06T19:42:09.521505Z
1 likes, 1 repeats
@vii Pic related.programming_motherfucker_red.png
(DIR) Post #B33RzfbruV4OPx1X84 by vii@dsmc.space
2026-02-06T19:47:08.935540Z
1 likes, 0 repeats
@p Okay okay I have fixed the master branch in that repo so you're free to play with that code now
(DIR) Post #B33S3slSwWpQNIWNpA by vii@dsmc.space
2026-02-06T19:47:54.526370Z
3 likes, 1 repeats
@p
(DIR) Post #B33SeKR3XbM4cSLzmK by p
2026-02-06T19:54:31.092755Z
1 likes, 0 repeats
@vii > attempting to implement this per-fid isolation that completely breaks the paradigm and makes it impossible to retrieve messages after (successfully!) processing the text written to the /n/llm/ask fileWeird. What was *not* isolated before? Like, fids are per-client, so I'm not sure what you mean.> I'm almost convinced that the guy who wrote it let Claude make a decision that snowballed.:mcafeesmug2:> build up the functions I need in rc, pipe-chain the information I have been given into the shape I need, and output an executable string to do the actual jobI do this a lot in Linux also, like, even impromptu stuff so that I can look at what it's going to run before running it or pore through it retroactively when something looks like it was wrong. I think it's a reasonable style.
(DIR) Post #B33TCs1FBTRkcgkcvg by vii@dsmc.space
2026-02-06T20:00:43.181699Z
1 likes, 0 repeats
@p > Weird. What was *not* isolated before? Like, fids are per-client, so I'm not sure what you mean.I don't completely understand why he did it either; I read and ran the code from before the SessionManager changes and after, and the per-fid session manager thing just breaks even his tests for the AI to run in CLAUDE.md. So, my fork rewinds and adds Ollama.> I do this a lot in Linux also, like, even impromptu stuff so that I can look at what it's going to run before running it or pore through it retroactively when something looks like it was wrong. I think it's a reasonable style.I used to do it more. I'm actually really happy to be doing it again, but it's so distinct from the overly-simplified programming that I see most people and most AI do. I appreciate how hard I have to think to parse your code.
(DIR) Post #B33UVkRVg1gia7bOzI by p
2026-02-06T20:15:22.653810Z
1 likes, 0 repeats
@vii Ha, that's fun. What do you do, is it a circular buffer when you overflow the context window? I have trouble getting people to explain the actual meaning of the context.
(DIR) Post #B33V6ETrTRbsAS6DhI by vii@dsmc.space
2026-02-06T20:21:57.116346Z
1 likes, 0 repeats
@p The context window is just the maximum number of tokens a model can hold in memory. So when you do completion using chat completions, you’re converting that JSON list of messages into text, that text gets tokenized, and it completes from that point — so if you’re using llama3.2 which only has a context of 8192 tokens, and you’ve copied in the first ten chapters of HHGttG, it only has maybe 200 tokens with which it can generate tokens before it either exceeds available memory or goes into the hallucination zone.What I do is use summarization. The entire conversation is summarized if I’m going to exceed the model token limit, before I generate. It’s not perfect but it lets me test using HHGttG.
(DIR) Post #B33VdnnJCQexFOCdQO by p
2026-02-06T20:28:02.288893Z
2 likes, 0 repeats
@vii > it's so distinct from the overly-simplified programming that I see most people and most AI do.Ironically, this breed of machine has trouble with recursion.> I appreciate how hard I have to think to parse your code. I wish my awk were a little more transparent, ha.
(DIR) Post #B33Z9rpE31XYsV54SW by p
2026-02-06T21:07:26.891569Z
1 likes, 0 repeats
@vii > What I do is use summarization.This is a common one. I wonder if it's better for instruct models; I have a suspicion that circular buffers are better for chat models (because people only keep so much context themselves).
(DIR) Post #B33bBJshQBs25eWfjM by vii@dsmc.space
2026-02-06T21:30:05.771317Z
1 likes, 0 repeats
@p Definitely, there's many ways to manage an AI's memory. At work I do way more one-shot than conversational stuff; automating the evaluation of errors in CI for example, so I rarely run into context limits there, and with programming agents like Claude Code I _wish_ I had the choice of a ring buffer over compacting/summarization in a lot of cases.< "Hey robot, there's a small bug right here."> "Okay, I will now attempt to fix that small bug taking the entirety of our conversation into account, I will waste tokens looking in weird places, and I will eventually forget to do what you asked."< "Dude. The fuck."> "Attention heads my friend! My attention is spread across these very well-connected subject words that you never said but the summarizer made up!"< "... Fine I'll fix it myself."