> ## Documentation Index
> Fetch the complete documentation index at: https://gligabao.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> The gligabao.toml config file, API keys, vector store, prices and eval/admin modes.

Configuration is read from `build/gligabao.toml` (override with `--config`).

## Settings

| Key | Default | Purpose |
| - | - | - |
| `port` | `7878` | HTTP port |
| `anthropic_api_key` | `ANTHROPIC_API_KEY` | LLM for remember/query |
| `openai_api_key` | `OPENAI_API_KEY` | Embeddings (without it no vectors are stored) |
| `pinecone_api_key` | `PINECONE_API_KEY` | Hosted vector store |
| `db_backend` | `"sqlite"` | `"sqlite"` or `"postgres"` (with `postgres_dsn`), see [Database](https://gligabao.mintlify.site/getting-started/database.md) |
| `vector_store` | `"chromem"` | `"chromem"` (embedded) or `"pinecone"` (hosted) |
| `embedding_dimensions` | `1536` | Vector size |
| `pinecone_index_host` | `PINECONE_INDEX_HOST` | Data-plane host of the Pinecone index |
| `chunk_size` | `1024` | Tokens per chunk, see [Chunking](https://gligabao.mintlify.site/guides/chunking.md) |
| `chunk_overlap_percent` | `20` | Overlap between chunks |
| `jev_api_key` | `JEV_API_KEY` | Enables Jev, TypeSafe's system 1 model (`jev_base_url` and `jev_model` are optional overrides) |
| `sidecar_url` | `SIDECAR_URL`, else `http://127.0.0.1:8787` | Base URL of the Python sidecar's REST API, the only service the Go server calls for [training jobs](https://gligabao.mintlify.site/training/overview.md); the sidecar proxies to Modal |
| `eval` | `false` | Register the eval endpoints |
| `admin_ui` | `false` | Serve the admin panel |
| `geo` | `false` | Make `remember` find the places among the entities it extracts and store their coordinates (`gb_entity_geo`), using the public Nominatim geocoder of OpenStreetMap; costs one more LLM call per text and sends the names of places to the geocoder. `serve --geo` turns it on. See [Geo](https://gligabao.mintlify.site/guides/geo.md) |

> [!NOTE]
>
> The chromem store fixes the embedding size when its directory is created, and a Pinecone index must match it. Details: [Vector storage](https://gligabao.mintlify.site/guides/vectors.md).

## Prices

A `[prices."<model-prefix>"]` table (`input`, `output`, optional `cache_write`/`cache_read`, USD per 1M tokens) overrides or extends the built-in model prices used to compute the cost of each LLM call; the longest matching prefix wins.

```toml theme={null}
[prices."claude-haiku"]
input = 1.0
output = 5.0
```

Every model invocation (LLM call, embedding request, web search, Jev classification) is a row of the `gb_inferences` table, with the model, the thinking level, the tokens and the cost. See [Inferences](https://gligabao.mintlify.site/operations/inferences.md).

## Jev

When a Jev key is set, `remember` first classifies the text as simple/medium/complex in the number of entities it will yield and logs it with Jev's confidence and the call's latency. See [Remember](https://gligabao.mintlify.site/api-reference/remember.md).

## Eval mode

With `serve --eval` (or `eval = true`) the server also registers `POST /v1/gb/eval/remember` and `POST /v1/gb/eval/query`. They take the same bodies as the regular endpoints, record the call as an [ATIF](https://github.com/laude-institute/harbor) trajectory, store it as pretty-printed JSON in an `atif/` directory next to the SQLite file, and return the full `trajectory` (and its `trajectory_id`) in the response. They are not registered otherwise, and the regular endpoints never generate trajectories. `go run ./evals/knowledge` runs through these endpoints (`-atif <dir>` also keeps the trajectories as files). See [Evals](https://gligabao.mintlify.site/evals/evals.md).

## Admin UI

`admin_ui/` holds a small admin panel (TypeScript, SCSS, HTML). `./run_build.sh` builds it (needs node/npm) and embeds `admin_ui/dist` into the binary with `go:embed`; pass `--no-admin-ui` (or `BUILD_ADMIN_UI=false`) to skip it. With `admin_ui = true` (or `serve --admin-ui`; default `false`) the server serves it at `/v1/gb/admin/`. If the assets were not embedded, the server logs a warning and does not register the handlers.

The panel has views for the databases (main), evals, timeseries, inferences, remember runs and **training**: the training view lists the training datasets (the manifests in the training datasets directory), uploads datasets and runs Gemma-4 fine-tuning jobs on the sidecar, with a dataset picker, the list of jobs, a live event feed and a loss graph (see [Training](https://gligabao.mintlify.site/training/overview.md)). It needs `sidecar_url` to reach the sidecar, which proxies to Modal. A `sidecar: up` / `sidecar: down` badge in the top bar shows whether the sidecar answers its health check. The training view also lists the training backends (Modal: healthy, app deployed or not) and can deploy, cancel, stop and inspect the volumes of the Modal app, with a live build log: see [Modal app lifecycle](https://gligabao.mintlify.site/training/modal.md).

A program that embeds gligabao can extend the admin UI with its own views (a button in the nav on the left) and with buttons, modals and blocks inside the existing views, with plain JavaScript and no build step: see [Admin UI extensions](https://gligabao.mintlify.site/embedding/admin-extensions.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.