Status Week 33

This week is still largely focused on finalizing API/ABI for the 1.0 of Foundry in a few weeks.

Foundry

  • Did a bunch of work on LLM completion and and conversation APIs. They are not focused on supporting everything possible but instead making some of the common stuff extremely simple. That goes for both the model size of things and the UI side of things.

    For example, heavy usage of GListModel everywhere we can.

  • Created new abstractions for LlmTool, LlmToolProviders, and the actual call of a tool (aptly, LlmToolCall). One reason this all takes so much time to scaffold is that you want to allow some amount of flexibility when connecting models, but also avoid too much API surface area.

    I think I’ve managed to do that here.

  • Landed Ollama implementation of the FoundryLlmConversation API. The ollama server appears to be stateless, which means copying the conversation over-and-over as you go. I guess this at least gives you an idea of your context window.

  • Setup a couple tool call implementations to test out that infrastructure. For example, it’s really easy to tell the model that you build with build tool and then provide it the results.

  • Fixed some licensing issues where I mostly just forgot to update the headers when copying them over. Things should be in a good place now for distributions to adhere to their SPDX rules.

  • Language settings now have a very last resort setting which are the “defaults” we ship with the library. That is just sensible stuff like using 4 spaces for tabs/indent in Python.

    Settings at any layer can override these values.

  • Lots of work on project templates. We have both GTK 4 and Adwaita templates again. They support C/Python/rust/JavaScript like Builder does too.

    But this time I tried to go a bit further. They should have a bunch of integration bits setup which we didn’t get to before.

  • Setup an example Flatpak manifest for applications wanting to use libfoundry (see examples/flatpak/) that should help get you started.

  • Setup i18n/l10n for libfoundry. I don’t think anything is consuming translations for GNOME 49 though, so mostly just gets us up and running for 50.

  • Landed some new API for working with the stage/index within FoundryGitVcs. Tested it with a speed-run challenge a bit later on in this report.

Assist

  • To test out the LLM APIs and ensure they can actually be used I did a speed-run to implement a “Foundry-based Developer Chat” with a time limit of two hours.

    The reality is that I’m still _much_ faster writing code with all of my templates and snippets than I thought.

    The new templates in Foundry are killer though.

  • It requires a model which supports tool calls if you want to do anything interesting with it. I’m not sure if there are models which can do both written output _and_ tool-calls which makes this a bit annoying to wait while it figures out it should call a tool.

  • While doing this, I realized a bunch of little things to fix in the LLM APIs. One piece still missing that I’d want to have in the future is the ability for specialized FoundryLlmMessage which not only have text content but typed data as well.

    For example, a tool call that is essentially a ls should really display the output as an interactive directory list and not text.

    But since this was a speed run, I did not implement that. Only made sure that the APIs could adapt to it in the future.

Staged

  • Started another speed-run app to test out the version control engine we have in Foundry. This one is basically just to replace my very quick use of git-gui to line stage patches.

    Came up with a neat way to highlight old/new versions of a file and then display them with GtkListView instead of using a source view. No reason to power up the editing infrastructure if you’ll never be editing.

Manuals

  • Discovered I wasn’t getting notifications since the move to the GNOME/ namespace so flushed out the backlog of MR there.

GtkSourceView

  • Fix click-through on the overview map which broke again during this development cycle. My fault for not reviewing and/or testing better.

  • Now that we have GNOME CI doing LSAN/ASAN/UBSAN/coverage/scanbuild I went ahead and fixed a bunch of leaks that are part of the testsuite.

    Additionally, it helped me find a few that were there in everyday code use, so that is always a lovely thing to fix.

Ptyxis

  • Merge some last minute string changes before we can’t anymore.

  • Still having to unfortunately close issues which come from Debian not sourcing /etc/profile.d/vte.sh by default, thus breaking integration features.

    The good news I hear is that will be changing before long.

  • Other good news is that Ptyxis has landed in the 25.10 builds and will also be landing in Debian unstable in the near future as the default terminal.

  • After some back-and-forth I merged support for the kgx palette as the “GNOME” palette in Ptyxis. My very hopeful desire is that this becomes something maintained by the design team. The problem is just that terminal colors are a huge piles of hacks on hacks.

  • Nightly builds should be fixed. Apparently something changed in the CI setup and since we’re under chergert/ptyxis/ and not GNOME/ it didn’t get automatically applied.

  • Some styling changed in libadwaita this cycle and I needed to adapt how we propagate our styling to tab close buttons.

    Really though, this all just needs to be redone (like Text Editor and Builder) to use var() properly in CSS.

Libspelling

  • Merged patch improving life-cycle tracking of the piecetable/b+tree regions (branches/leaves).

Sysprof

  • More code review and future feature planning so we can land GSoC things after I branch for 49 (very soon I hope).

Other

  • Turned 41, saw Stevie Ray Vaughan’s broadcaster guitar, finally had the “weird” pizza at Lovely’s fifty/fifty, jammed at MoPOP with my niece.

  • Lots of random little things this week to lend a hand/ear here or there as we get closer to release.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.