Packages
llm_db
2026.3.0
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
lib/mix/tasks/llm_db.history.sync.ex
defmodule Mix.Tasks.LlmDb.History.Sync do
use Mix.Task
@dialyzer {:nowarn_function, run: 1}
@shortdoc "Incrementally syncs model history into priv/llm_db/history"
@moduledoc """
Incrementally syncs model history from committed provider snapshots.
This task reads `priv/llm_db/history/meta.json` when present and appends only
events for commits after `to_commit`. If history does not exist yet, it
performs an initial full backfill into the output directory.
## Usage
mix llm_db.history.sync
mix llm_db.history.sync --to HEAD
mix llm_db.history.sync --output-dir priv/llm_db/history
## Options
- `--to` - End commit SHA/ref (default: `HEAD`)
- `--output-dir` - Directory for generated history files (default: `priv/llm_db/history`)
"""
@impl Mix.Task
def run(args) do
ensure_llm_db_project!()
{opts, _, invalid} =
OptionParser.parse(args,
strict: [
to: :string,
output_dir: :string
]
)
if invalid != [] do
Mix.raise("Invalid options: #{inspect(invalid)}")
end
runtime_opts =
[]
|> maybe_put(:to, opts[:to])
|> maybe_put(:output_dir, opts[:output_dir])
Mix.shell().info("Syncing model history from git...")
case LLMDB.History.Backfill.sync(runtime_opts) do
{:ok, summary} ->
Mix.shell().info("✓ History sync complete")
Mix.shell().info(" commits scanned: #{summary.commits_scanned}")
Mix.shell().info(" commits processed: #{summary.commits_processed}")
Mix.shell().info(" snapshots written: #{summary.snapshots_written}")
Mix.shell().info(" events written: #{summary.events_written}")
Mix.shell().info(" output dir: #{summary.output_dir}")
Mix.shell().info(" from commit: #{summary.from_commit}")
Mix.shell().info(" to commit: #{summary.to_commit}")
{:error, reason} ->
Mix.raise("History sync failed: #{inspect(reason)}")
end
end
defp maybe_put(opts, _key, nil), do: opts
defp maybe_put(opts, key, value), do: Keyword.put(opts, key, value)
defp ensure_llm_db_project! do
app = Mix.Project.config()[:app]
if app != :llm_db do
Mix.raise("""
mix llm_db.history.sync can only be run inside the llm_db project itself.
""")
end
end
end