Skip to content

Instantly share code, notes, and snippets.

@jwiegley
Created May 22, 2025 01:30
Show Gist options
  • Save jwiegley/5eb6c419147f1cd6b6362cdf329db261 to your computer and use it in GitHub Desktop.
Save jwiegley/5eb6c419147f1cd6b6362cdf329db261 to your computer and use it in GitHub Desktop.

NOTE Pool thoughts

John: In the pool now, no Element

Will I be able to put an @ cookie at the beginning of a system prompt in gptel-directives, and use that to set the model for when that directive is used? Like if I need to use a specific local LLM for tool-related prompts…

Karthik: Since you have access to gptel-prompt-transform-functions, you can do it

John: I’m just checking because I don’t mean the per rewrite directive that you can select in that pop-up menu, but the system prompt that you select from the rewrite menu.

Does that mean I would need to write code to make it happen, or that this is certainly a built-in feature of this approach?

I guess I can always just try it and see what happens too. :-)

Karthik: You don’t need to put the @ in front of a system prompt in the directives.

Basically you want to treat the system prompts as presets?

John: Pool thoughts, coming to you live

Karthik: I’m in the gym myself

John: No, I want to define a system prompt in my GPTel directives that will make use of a preset to set up some parameters for any request that makes use of that directive

I know I can do it the other way around, where the preset can set the system message. But can the system message engage a particular preset?

Like my current shortening system message. What if I always want that to be processed using Claude, in the case were no other explicit choice has been made.

(setq gptel-directives '((shorten . "@claude Do the thing")))

In this sense, presets are just “collections of buffer-local globals” as you’ve implemented them, and there are plenty of places I would want to use that mechanism outside of user prompts/directives.

Oh, and another reason why you may want to support @@ to reset the state of the buffer local globals back to before the last preset was chosen: there will be times when a person doesn’t remember everything that a preset does, so they’re going to select a preset, but not realize how many different settings it’s going to change. They may then realize that’s a mistake, and they want to undo it and go back to where they were a moment before. I imagine it will probably only be used for that sort of immediate undo, but that’s just my thinking right now. I know I wanted to do exactly that today.

Something else I realized: I don’t think I want to use GPTel chat buffers ephemerally anymore. Every buffer should be a file within my org-roam thinkbase. This way it becomes part of the general collection of my thoughts on various topics. I only want to create an ephemeral buffer explicitly. I’ll try implementing that tonight.

Karthik: Okay, that’s a lot of pool thinking!

Something else I realized: I don’t think I want to use GPTel chat buffers ephemerally anymore. Every buffer should be a file within my org-roam thinkbase. This way it becomes part of the general collection of my thoughts on various topics. I only want to create an ephemeral buffer explicitly. I’ll try implementing that tonight.

You should probably check them into git then

In this sense, presets are just “collections of buffer-local globals” as you’ve implemented them, and there are plenty of places I would want to use that mechanism outside of user prompts/directives.

They’re not buffer-local

The scope with which a preset is applied can be changed on the fly

In this sense, presets are just “collections of buffer-local globals” as you’ve implemented them, and there are plenty of places I would want to use that mechanism outside of user prompts/directives.

“plenty of places to use it outside of prompts/directives”: But presets are not tied to prompts/directives

I know I can do it the other way around, where the preset can set the system message. But can the system message engage a particular preset?

Not unless you write a custom augmentor

John: More thoughts: I wonder if there’s a way to export the current chat conversation into the Perplexity web interface, because I often find myself wanting to start a dialog with a local model, but then “upgrade” it to the full power of their deep research model, but via the Web so it’s included in my monthly fee rather than charged at API rates. Same would go for the other prescription services.

I’m not clear on what you’re saying above. Can I use the preset in my system directive and have it changed the parameters of the query?

Karthik:

I’m not clear on what you’re saying above. Can I use the preset in my system directive and have it changed the parameters of the query?

No. You’d have to write a new augmentor

But it’s simple enough, simpler than the current implementation

What I’m trying to understand is why

When presets exist

John: I see, maybe that’s a good candidate for a built-in augmentor that the user could choose

But I want to pre-code the use of the preset

I want to use the preset as the way of defining the collection of parameters. And then I want to reference the preset in the system directive as one of the ways I might switch to that set of parameters

Karthik: Why not set the system message in the preset?

John: Because certain directives will only make the most sense in the context of certain presets

But then I have to choose the preset using the syntax, when I might wanna just choose the system directive and use it over the course of several queries

Oh I see

You would want me to first set the system directive, and then set the preset in the transient menu

I guess what I’m reacting to is that sometimes the system directive implies the preset, as well as the reverse

Karthik:

But then I have to choose the preset using the syntax, when I might wanna just choose the system directive and use it over the course of several queries

If you have to choose the system message you can just apply the corresponding preset? It’s fewer keys than activating a system message

John: Hmmm

I see now

You would want me to use the preset instead of the system directive. That only works if there’s a one-to-one or one too many correlation from preset to system directive. Sometimes there’s a one-to-one relationship from system directive to preset.

Karthik: Presets are designed to be an umbrella covering as little or as much as you want

John: Meaning, I might have a preset that sets the system directive. But I might have a system directive that wants to engage the settings of multiple presets.

I suppose I’m blurring the line now between system messages and presets. Maybe there’s not even a reason to have the distinction anymore.

If a preset can inherit from multiple parents, then I think presets alone can do everything I’m wanting to do

Got just two laps before I’m done :-)

Karthik:

I suppose I’m blurring the line now between system messages and presets. Maybe there’s not even a reason to have the distinction anymore.

There isn’t a distinction because presets can act as system message

By setting only the system message

You don’t need gptel-directives at all

John: Right!

That’s what I just realized as well. We could drop directives from the transient menu entirely, because a preset that only defines a system. Message is a directive.

Karthik: You don’t need any individual settings

John: i’m going to change my GP tell prompts package with respect to this now. Exciting!

Karthik: Haha

Sure. I’m going to retain gptel-directives

Users already find gptel highly confusing

It’s best to describe presets as an optional feature for a bundle of settings, I think

John: That’s fine, they are now just specialized presets with their own separate engagement interface

But implementation wise, there could be a benefit to unifying them

I think for my Org-roam idea, I’m going to make it so that control X control W rights to a file, but control X control S automatically creates an Org-roam entry with the current timestamp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment