Week 2026-W44 2026-10-26 – 2026-11-01, in progress
Versions: 0.104.0 → 0.107.0
5 commits so far, all on 2026-10-26.
Summary
Hooks and naming. Hosts can now route a trained model's prompts to their own inference code, exporting was renamed deploying, recall became query everywhere, and an Auth hook lets a host's API keys identify users. Three of the four releases are breaking.
Highlights
- Inference hooks for trained models (0.104.0):
ServeOptions.TrainedModelInferenceHooksbinds a hook to a trained model by name; prompts to that model go to the hook instead of the sidecar (Modal). The infer answer has ahookfield,GET /v1/gb/training/inference-hookslists them, and the admin UI says when a model does not run on Modal. - Auth hook (0.107.0): with
ServeOptions.Authset, user routes (remember,query, datasets, timeseries, ontologies) needAuthorization: Bearer <key>; the hook maps the key to a user ID, the request acts as that user, and a missing or rejected key is a401. Without the hook nothing changes. Seedocs/hooks.mdanddocs/identity.md. - Python client: reads the API key from
GLIGABAO_API_KEY(orClient(api_key=...)) and sends it as the bearer token;user_idis no longer a parameter ofremember,queryorattach_timeseries. NewClient.query().
Breaking changes
recallis nowquery(0.106.0):POST /v1/gb/query(and/v1/gb/eval/query), thememory_querypackage,query.completed/query.failedevents, inference type/stagequery, evalreasoningkey, and the eval DB columnsquery_callsandquery_cost_usd. The eval database must be recreated. Older changelog entries keep the old name.- Exporting is now deploying (0.105.0):
TrainedModelExportersisTrainedModelDeployers, endpoints are/v1/gb/training/models/{id}/deploymentsand/v1/gb/training/deployers, the config key istrained_model_deploy_dir(flag--trained-model-deploy-dir), events aretraining.model_deploy.*, and the table isgb_trained_model_deployments. The admin UI says Deploy. No migration: recreate the DB or rename the table by hand. - Python client:
user_idremoved fromremember,queryandattach_timeseries(0.107.0).
Releases
| Version | Date | Commit | Title |
|---|---|---|---|
| 0.104.0 | 2026-10-26 | 9147471 | Inference hooks for trained models |
| 0.105.0 | 2026-10-26 | f4c7426 | Exporting renamed to deploying |
| 0.106.0 | 2026-10-26 | 3e52843 | recall renamed to query |
| 0.107.0 | 2026-10-26 | 1d14ffd | Auth hook; Python client uses GLIGABAO_API_KEY |
Week 2026-W43 2026-10-19 – 2026-10-25
Versions: 0.51.0 → 0.103.0
88 commits.
Summary
Two themes. The first half of the week was an overhaul of evals and training checks: evals now have cases and share one data model, and the training-data audit was split out as its own package. The second half opened gligabao up to programs that embed it: trained-model exporters, admin UI extensions, a public CLI package, content directories in the config, and gligabao.Mount for hosting the handlers on an existing HTTP server. Several renames and schema changes are breaking.
Highlights
Evals and audits
- Experiments for trained models (0.51.0): trained-model evals can be run as named experiments, each run linked to its eval and trained model.
- Eval vocabulary settled (0.56.0): an eval case is one input/output to check, an eval is a set of cases (the "suite" concept is gone), a run executes cases, an experiment is a named series of runs. Training evals have one case result per example, and judged cases pass at judge score >= 4. Admin API, schema, runner flags (
-eval,-list-evals) and docs follow. - Real evals for trained models (0.61.0):
POST /v1/gb/training/models/{id}/evalstakes anevalname andcases, not just the model's own training dataset../run_evals.sh -t training -model IDdoes the same from the command line and stores the run. - Training data audits (0.58.0): asking a model the questions from its own training data is an audit, not an eval. It shows whether training took and which examples keep failing. Audits first lived next to evals, then moved to a new, separate
internal/training_auditspackage (0.77.0–0.80.0), and the admin UI got an audit modal (0.81.0). Cases scored 0/5 are shown in magenta. - Evals rewrite (
evals_neo) (0.71.0–0.88.0): a new data model (per-type metadata tables for case defs, case runs and eval runs), DB functions, runners, and the admin UI and training evals switched over; the oldinternal/evalswas removed, thenevals_neotook over its name andgb_neo_*tables becamegb_*. - Evals definitions moved to
bin/and are read from disk; eval files are{name, cases}.
Training and admin UI
- Gemma 4 31B (0.95.0): third model size,
31b, in the training API and size picker. - Cheaper inference: GPU inference containers now stay up 60 s after the last request instead of 300 (0.89.0).
- More robust training event delivery (Modal Dict -> SSE -> Go monitor -> UI).
serve --training/training = truegates the training handlers.- Admin UI: clicking a trained model opens an actions box (info, prompt, eval, audit, later export); prompt and info have their own dialogs; dataset upload in a modal; help modals for models and datasets; Cancel renamed to Stop; audit container indicator.
Embedding gligabao in other programs
- Trained-model exporters (0.96.0, 0.101.0, 0.103.0): a hook,
ServeOptions.TrainedModelExporters, lets a host program take a model's weights.POST /v1/gb/training/models/{id}/exportsfetches the files from the sidecar (verified by size and sha256) and calls the named exporter. The admin UI has an Export dialog and an Exporters block,GET /v1/gb/training/exporterslists them, and exporters can report progress withreq.Update. - Admin UI extensions (0.97.0): hosts can add views, buttons and blocks with plain JavaScript through
ServeOptions.AdminExtensions, with named slots and CSS variables. Seedocs/admin-extensions.md. - Public CLI package (0.98.0):
github.com/deepblue-phoenix/gligabao/cligives embedding programsserve,version,--configand allserveflags throughcli.New. - Content directories as lists (0.99.0, 0.100.0):
datasets_training_dirs,evals_training_dirs,evals_knowledge_dirsandontology_dirsingligabao.toml(first directory wins), plustrained_model_export_dir. Ontologies load by file name fromontology_dirs. gligabao.Mount(0.102.0): register all handlers under/v1/gb/on a host's*http.ServeMuxinstead of listening on a port.serveno longer prints usage on runtime errors and force-closes connections if graceful shutdown times out.
Breaking changes
- Eval renames (0.56.0, 0.68.0–0.70.0):
suiteisevalin the eval DB, admin API and Go types; runner flags are-evals,-eval,-list-evalsandrun_evals.sh -e; tables were renamed (gb_experiments_defs,gb_experiment_case_runs, ...). - 0.61.0 and 0.88.0: the eval database must be recreated; old eval and audit tables are no longer created.
schemeandfinetune_datasetare gone from the evals API (use an audit). - Training API now works with one database;
training.Databaseandtraining.Pickare gone (0.67.0). ServeOptions.TrainingDatasetDirandTrainingEvalDirbecame lists,TrainingDatasetDirsandTrainingEvalDirs(0.100.0).- Nothing is migrated; leftover schema migration code was removed. The unused
gb_itemstable was dropped (0.66.0).
Other changes
- Large internal reorganisation: evals into
internal/evals, training code intointernal/trainingandinternal/training/db,internal/memory/memory_ontology, and jev/buildinfo/config/sidecar/server intointernal/sys. Config fieldsEvalandAdminUIrenamed toEvalModeEnableandAdminUIenable(TOML keys unchanged). - New docs:
docs/listings/db-tables.md(every table) andgo-structs.md(every struct), model exporting page, docs reorganised intoevals/andtraining/. run_tests.shruns Go then Python tests, with-g/--goand-p/--py.- The example ontology moved to
bin/ontology; many stale comments and README paths fixed.
Releases
Selected releases (there were more, including patch releases; see CHANGELOG.md):
| Version | Date | Commit | Title |
|---|---|---|---|
| 0.51.0 | 2026-10-19 | 75350d4 | Training experiments |
| 0.56.0 | 2026-10-19 | 9e79221 | A set of cases is an eval; suites dropped |
| 0.58.0 | 2026-10-19 | f31c266 | Training data audit of trained models |
| 0.61.0 | 2026-10-19 | dbe8b4a | Real evals for trained models; shared types with audits |
| 0.71.0 | 2026-10-20 | 14d8de0 | evals_neo data model |
| 0.77.0 | 2026-10-20 | 48b15ab | training_audits package |
| 0.85.0 | 2026-10-20 | 8e4acb1 | evals_neo runners; primary evals package |
| 0.88.0 | 2026-10-20 | 6fd87a3 | Old internal/evals removed |
| 0.89.0 | 2026-10-20 | c6ebca8 | Inference containers stay up 60 s |
| 0.95.0 | 2026-10-21 | 617ba3f | Gemma 4 31B |
| 0.96.0 | 2026-10-22 | 9c79036 | Trained model exporters hook |
| 0.97.0 | 2026-10-23 | b79f2fe | Admin UI extensions |
| 0.98.0 | 2026-10-23 | bf4d377 | Public cli package |
| 0.100.0 | 2026-10-23 | e8b0cdd | Content directories as lists in the config |
| 0.101.0 | 2026-10-23 | 53c5688 | Export dialog and Exporters block |
| 0.102.0 | 2026-10-23 | 2fd7725 | gligabao.Mount |
| 0.103.0 | 2026-10-25 | 4dbdfbc | Exporter progress updates |
Week 2026-W42 2026-10-12 – 2026-10-18
Versions: 0.1.0 → 0.50.0
This was the biggest week (119 commits).
Summary
Three things happened. The memory pipeline grew a lot: images, long-text chunking, sessions, web search, timeseries, per-stage models and reasoning levels. The embedded admin UI became the main way to see what the server does. And a whole training side appeared: a Python sidecar that runs Gemma 4 fine-tuning and inference on Modal, with training jobs, trained models, and LLM-judged evals of those models. Versioning and CHANGELOG.md started on 10-13. Database schemas changed many times without migrations (see Breaking changes).
Highlights
Memory pipeline (remember / recall)
- Artifacts. What were "memories" are now artifacts, with provenance on entities and edges and a
kind. Entities/edges are embedded into per-dataset vector stores, andrememberfinds candidate facts by entity similarity. - Images (0.2.0).
rememberaccepts animage(JPEG/PNG/GIF/WebP); a vision-LLM pipeline does OCR and classification. Files are kept on disk, deduplicated by SHA-256. The admin UI lets you paste an image to remember it. - Sessions (0.5.0). Optional
session_idonrememberandrecalllabels a user/agent session and tracks which sessions discovered each entity and fact. - Chunking (0.6.0) and chunk summaries (0.18.0). Long texts are split into token-sized overlapping chunks, each extracted, summarised and embedded on its own; chunks are child artifacts. Config:
chunk_size,chunk_overlap_percent. A 60-person eval corpus checks it. - Per-stage models and reasoning (0.7.0, 0.19.0).
modelspicks the LLM for each stage (extract_graph,resolve_edges,extract_image, ...) andreasoningsets a thinking level per stage, in the API, Go and Python clients and evals. - Jev classifier (0.8.0). An optional small "system 1" model (
jev_api_key) classifies text as simple/medium/complex in expected entity count; logged and traced. - Web search (0.9.0).
web_searchflag searches the web for key entities after storing; results becomeweb_searchartifacts. - Timeseries (0.11.0–0.13.0, 0.15.0–0.17.0).
rememberaccepts series,POST /v1/gb/timeseriesstores and anchors them, embedding programs can register timeseries providers that an LLM chooses from, andseries_observationartifacts turn stored series into text for the graph. The admin UI has a timeseries view with sparkline previews. - Model and run tracking.
gb_modelsrecords which model inferred each fact (0.4.0);gb_model_runsrecords every model call with tokens, cost and thinking level (0.19.0);gb_remember_runslogs each remember execution stage by stage (0.21.0). A remember manager now runs one pipeline at a time and returns a run ID at once, with a replaceable queue (0.23.0). Hooks for embedding programs are documented indocs/hooks.md.
Admin UI
- Introduced at the start of the week under
/v1/gb/admin/: datasets with counts, d3 force-directed graph with fact validity, vector DB stats, delete button, and the eval DB side by side. - Evals block with experiments, runs, history and trace flow graphs; web search card; model runs and remember runs views; left-hand view switcher (0.14.0); in-page modals instead of browser dialogs; version and commit link in the corner.
Training (Python sidecar + Modal)
- Sidecar (0.24.0). A FastAPI service in
sidecar/, a Go client,Dockerfile.sidecar,docker-compose.yml(server + sidecar on one network). Go only talks to the sidecar, which proxies to a pluggable compute provider (Modal first). - Gemma 4 fine-tuning and inference (0.26.0). 4B (Unsloth, A10G) and 12B (transformers + peft, A100); the image was later modernised (Unsloth, torch 2.10, CUDA 12.8).
- Training API under
/v1/gb/training/(0.30.0–0.31.0): JSONL dataset upload handled by Go and sent with each job. Training jobs are tracked ingb_training_job_runsand started from the admin UI with a dataset picker, live SSE progress and loss graph (0.27.0–0.28.0). Jobs can be stopped; failed jobs log a traceback. - Modal management (0.33.0–0.34.0). The UI shows backends and Modal deployment status, and can deploy, cancel and stop apps and manage volumes.
- Trained models and inference (0.38.0–0.46.0). Trained models are tracked with their weights; inference runs on a chosen model in a warm container (idle timeout, Stop button, cold-start indicator); inference requests, tokens and timing are stored and shown with past replies (
model runsbecameinferencesin 0.42.0). - Evals of trained models with an LLM judge (0.49.0–0.50.0). An Eval button asks the model the questions of its training dataset and has an external LLM score the answers (
POST /v1/gb/training/models/{id}/evals); the admin UI streams answers and verdicts live over SSE. Knowledge evals and training evals are split intoevals/knowledge/andevals/training/. - A 500-example world-knowledge dataset generator (economics, finance, geopolitics) and a design note on training data attribution.
Other
- Versioning starts (0.1.0):
VERSIONembedded in the binary,CHANGELOG.md,gligabao version,GET /version, and agent rules to bump the version on every change. run_pypi_upload.shpublishes the Python client to PyPI; the server default port is 7878.
Breaking changes
- No database migrations. Most schema changes this week required recreating the database (new columns and tables for sessions, chunks, models, model runs, artifacts and others). Delete the DB file and the eval DB and let the server recreate them.
gb_llm_callsreplaced bygb_model_runs(0.19.0), later renamed to inferences (0.42.0).go run ./evalsis nowgo run ./evals/knowledge(0.49.0);./run_evals.shis unchanged.- The Go API of
api.Register,server.NewHandlerand related functions gained extra arguments (Jev, web searcher, providers, manager). - Sidecar routes were reorganised under
/training,/infer,/evalsand/datasets; the sidecar's dataset endpoints were then removed (datasets are managed by Go). The training API lives under/v1/gb/training/.
Other changes
- Refactors: the image, remember and recall pipelines moved into
memory_image,memory_remember,memory_recallandmemory_core;Factview of an edge; snake_case file names; Modal code underproviders/modal/; Gemma 4 code inai_core/gemma4with a model-family registry. - Eval runner can run a single suite (
-suite,-list-suites); new evals for timeseries ingestion and chunking. - Fixes: Gemma 4 turn markers so models stop, zstd job-start decoding, Modal apps list hanging, Modal 303 redirects on long inference calls, silenced access log for status polling.
docs/not-included.mdlists things deliberately left out (e.g. a per-session turn cache).
Releases
Selected releases (there were more, including patch releases; see CHANGELOG.md):
| Version | Date | Commit | Title |
|---|---|---|---|
| 0.1.0 | 2026-10-13 | b7b0287 | Version tracking and changelog |
| 0.2.0 | 2026-10-13 | f7f2537 | Image knowledge extraction |
| 0.4.0 | 2026-10-13 | b46719a | Track the model that inferred entities and edges |
| 0.5.0 | 2026-10-13 | 85b84df | session_id on remember and recall |
| 0.6.0 | 2026-10-13 | 8d7c984 | Chunking of long texts |
| 0.7.0 | 2026-10-14 | c96977c | Per-stage LLM models |
| 0.8.0 | 2026-10-14 | 941baba | Jev classifier stage |
| 0.9.0 | 2026-10-14 | 427ade6 | Web search in remember |
| 0.11.0 | 2026-10-14 | 847928f | Timeseries support |
| 0.13.0 | 2026-10-14 | a9d8c0e | series_observation artifacts |
| 0.18.0 | 2026-10-15 | d660e74 | Chunk summaries |
| 0.19.0 | 2026-10-15 | 54158e5 | Model runs and reasoning levels |
| 0.21.0 | 2026-10-15 | 4f3eefb | Remember run log |
| 0.23.0 | 2026-10-15 | da53a39 | Remember manager and queue |
| 0.24.0 | 2026-10-16 | eb3e16e | Python sidecar skeleton |
| 0.26.0 | 2026-10-16 | 5184ab5 | Gemma 4 fine-tuning and inference |
| 0.28.0 | 2026-10-16 | 83bbb4a | Admin UI training view with progress and loss graph |
| 0.31.0 | 2026-10-16 | 4c083d6 | Datasets managed by Go |
| 0.34.0 | 2026-10-17 | 59583f7 | Manage the Modal app from the admin UI |
| 0.38.0 | 2026-10-17 | 17f90c4 | Track trained models |
| 0.39.0 | 2026-10-17 | 5a6c133 | Warm inference containers |
| 0.42.0 | 2026-10-17 | 93b19aa | Token counts for inferences; model runs renamed |
| 0.49.0 | 2026-10-18 | fb6e2ca | Trained-model evals with an LLM judge |
| 0.50.0 | 2026-10-18 | c7339e6 | Live view of trained-model evals |
Week 2026-W41 2026-10-05 – 2026-10-11
The project started on 2026-10-09, so this week covers 3 days (56 commits). No versions were released yet: version tracking and the changelog arrived in W42.
Summary
gligabao went from an empty repo to a working temporal knowledge-graph memory server. It has a CLI and HTTP API, remember and recall endpoints backed by an LLM, datasets owned by users, SQLite/PostgreSQL storage, vector search, an embeddable Go API, a first Python client, and an eval runner. The shape of the code (packages, module layout) was reorganised several times while this settled.
Highlights
- Core memory API.
POST /v1/gb/rememberextracts entities and facts from text with an LLM (Anthropic,claude-haiku-5-5by the end of the week) and stores them as a graph.POST /v1/gb/recallanswers questions from the graph and returns the evidence. - Bi-temporal facts (Graphiti model). Episodes carry
valid_at; facts are edges withvalid_at,invalid_atandexpired_at, so the graph keeps how long a fact was true. A separate events table was dropped in favour of this. - Datasets and users. Memories, entities and edges are scoped to a dataset (default
main) owned by auser_id, with soft delete and REST endpoints.GET /v1/gb/datasets/{name}/graphexports a dataset's graph as JSON. - Storage backends. SQLite and PostgreSQL behind one
internal/dblayer (split into relational, graph and vector clients bundled indb.DB). Vector stores: a Pinecone backend, then sqlite-vec, replaced by pure-Gochromem-go(no more CGO). - Ontologies. OWL ontologies can be loaded and updated.
- Embeddings and cost tracking. OpenAI
text-embedding-3-smallembeddings; every LLM call records tokens and cost. - Embedding and CLI. A public Go API at the repo root (
github.com/deepblue-phoenix/gligabao) so other programs can embed the server; agligabao servecommand (cobra); TOML config (bin/gligabao.toml) holding port, API keys, vector store and DB backend. - Python client. Skeleton with
remember(). - Observability. A
monitoringpackage with system event hooks, structured logging with logrus, and ATIF trajectories (step-by-step traces of remember/recall) for eval calls. - Evals. A Go eval runner with remember/recall cases (e.g. a
job_changecase), suites in files, a-vflag, eval endpoints that return ATIF trajectories, andrun_evals.sh. Docs for evals and ATIF. - Packaging.
Dockerfileandrun_build_container.sh;run_tests.sh; a README with project description and DB/remember/recall sections.
Other changes
- Timestamps standardised as RFC 3339
DATETIMEwith shared time helpers. - Many package moves (server logic into
internal/server, API handlers split per endpoint, prompts in their own files,internal/db/*subpackages, CLI tocmd/gligabao) and the Go module rename togithub.com/deepblue-phoenix/gligabao. - A dataset lifecycle test across the relational, graph and vector DBs; pretty-printed SQL in logs.