Packages
llm_db
2026.6.2
2026.7.3
2026.7.2
2026.7.1
2026.7.0
2026.6.4
2026.6.3
2026.6.2
2026.6.1
2026.6.0
2026.5.2
2026.5.1
2026.5.0
2026.4.8
2026.4.7
2026.4.6
2026.4.5
2026.4.4
2026.4.3
2026.4.2
2026.4.1
2026.4.0
2026.3.3
2026.3.2
2026.3.1
2026.3.0
2026.2.9
2026.2.8
2026.2.7
2026.2.6
2026.2.5
2026.2.4
2026.2.3
2026.2.2
2026.2.1
2026.2.0
2026.1.5
2026.1.4
2026.1.3
2026.1.2
2026.1.1
2026.1.0
2025.12.4
2025.12.3
2025.12.2
2025.12.1
2025.11.18-preview
2025.11.14-preview
2025.11.7-preview
LLM model metadata catalog with fast, capability-aware lookups.
Current section
Files
Jump to
Current section
Files
guides/release-process.md
# Release Process
## Snapshot-Based Model Data
LLM Models packages a pre-built snapshot at `priv/llm_db/snapshot.json`.
### Snapshot Structure
V2 schema uses nested providers with embedded models:
```json
{
"version": 2,
"generated_at": "2025-11-06T14:23:45.123456Z",
"providers": {
"openai": {
"id": "openai",
"name": "OpenAI",
"base_url": "https://api.openai.com/v1",
"models": {
"gpt-4": {
"id": "gpt-4",
"provider": "openai",
"name": "GPT-4",
"capabilities": {...},
"limits": {...},
"cost": {...}
}
}
}
}
}
```
### Runtime Loading
```elixir
# Reads from priv/llm_db/snapshot.json
{:ok, _} = LLMDB.load()
```
Compile-time embed (zero runtime IO):
```elixir
# config/config.exs
config :llm_db, compile_embed: true
```
Snapshot is inlined into BEAM bytecode during compilation. Requires recompilation on snapshot changes.
## Updating Model Data
### 1. Pull Remote Sources
```bash
$ mix llm_db.pull
Pulling from configured sources...
✓ ModelsDev: 450 models cached at priv/llm_db/cache/models_dev.json
```
### 2. Build Snapshot
```bash
$ mix llm_db.build
$ mix llm_db.build --install
```
**Outputs**:
1. `_build/llm_db/snapshot/snapshot.json` - Canonical snapshot artifact
2. `_build/llm_db/snapshot/snapshot-meta.json` - Snapshot metadata
3. `priv/llm_db/snapshot.json` - Installed packaged snapshot when `--install` is used
### 3. Publish Snapshot Catalog Assets
```bash
$ mix llm_db.snapshot.publish
$ mix llm_db.history.rebuild --publish
```
This publishes immutable snapshot releases plus the mutable `catalog-index`
assets: `latest.json`, `snapshot-index.json`, `history.tar.gz`, and `history-meta.json`.
## Versioning and Tagging
Date-based versioning: `YYYY.M.D`
### Update Version
```bash
$ mix llm_db.version
Updated version to 2025.11.6 in mix.exs
```
Updates `@version` in `mix.exs`.
### Generate Changelog and Tag
```bash
$ mix git_ops.release
Analyzing commits since last release...
Updating CHANGELOG.md...
Creating git tag v2025.11.6...
```
1. Parses conventional commits since last tag
2. Updates `CHANGELOG.md`
3. Creates git tag `v2025.11.6`
### Push Tag
```bash
$ git push && git push --tags
```
CI triggers on tag push: Hex.pm publish, GitHub release, HexDocs publish.
## Snapshot Format
### V2 Schema
```json
{
"version": 2,
"generated_at": "ISO8601 timestamp",
"providers": {
"provider_atom_as_string": {
"id": "provider_atom_as_string",
"name": "Provider Name",
"base_url": "https://...",
"env": {...},
"doc": "https://...",
"extra": {...},
"models": {
"model_id": {
"id": "model_id",
"provider": "provider_atom_as_string",
"name": "Model Name",
"capabilities": {...},
"limits": {...},
"cost": {...},
"modalities": {...},
"deprecated": false,
"aliases": [...],
"extra": {...}
}
}
}
}
}
```
**Runtime-only indexes** (rebuilt during `LLMDB.load/1`):
- `providers_by_id`
- `models_by_key`
- `models_by_provider`
- `aliases_by_key`
## Release Triggers
1. Upstream data changes (new models, pricing, capabilities)
2. Schema changes (new fields, modality types)
3. Provider additions
4. Taxonomy updates
5. Metadata corrections
## Release Checklist
- [ ] `mix llm_db.pull`
- [ ] `mix llm_db.build`
- [ ] `mix test`
- [ ] Verify `mix llm_db.build --check --install`
- [ ] Commit snapshot and generated files
- [ ] `mix llm_db.version`
- [ ] `mix git_ops.release`
- [ ] Review `CHANGELOG.md`
- [ ] `git push && git push --tags`
## Automated Release
```bash
$ mix llm_db.pull && \
mix llm_db.build && \
mix test && \
mix llm_db.version && \
mix git_ops.release && \
git push && \
git push --tags
```
Or via mix alias:
```elixir
defp aliases do
[
release: [
"llm_db.pull",
"llm_db.build",
"test",
"llm_db.version",
"git_ops.release"
]
]
end
```
```bash
$ mix release
$ git push && git push --tags
```
## Snapshot Versions
- **v1**: Flat lists (deprecated)
- **v2**: Nested providers with models (current)
## Snapshot Size
Current: ~1.2 MB (400 models × 12 providers)
**Optimization options**:
1. Filter deprecated models at build time
2. gzip compression (transparent in BEAM)
3. Split by provider (on-demand load)
4. Remove `:extra` fields
## Schema Evolution Signals
- New capability types (e.g., "video generation")
- New cost models (e.g., "per-character")
- New modality types (e.g., "3d", "code")
- Provider-specific features becoming common
**Schema changes require updates to**:
1. Source adapters (ModelsDev transform)
2. Validation schemas (Zoi definitions)
3. Documentation (capability lists)
## Related Guides
- [Schema System](schema-system.md)
- [Sources and Engine](sources-and-engine.md)
- [Using the Data](using-the-data.md)