# `Gralkor.Config`
[🔗](https://github.com/elimydlarz/gralkor/blob/main/lib/gralkor/config.ex#L1)

Configuration for the embedded Gralkor runtime.

Two operator-facing knobs decide what `:gralkor_ex` does at boot:

  * The FalkorDB connection — either embedded (`falkordblite` spawns a local
    `redis-server` child under a directory chosen by `GRALKOR_DATA_DIR`) or
    remote (network `host:port` plus optional credentials, set via the
    `:gralkor_ex, :falkordb` application env). Remote wins when both are
    configured. See `falkordb_spec/0`.
  * The LLM and embedder models — set via the `GRALKOR_LLM_MODEL` and
    `GRALKOR_EMBEDDER_MODEL` env vars in `"provider:model"` form (operator
    contract). `llm_model/0` and `embedder_model/0` return them as
    `%{provider: atom(), id: String.t()}` maps — the inline-map shape
    `ReqLLM.model/1` accepts without a catalog lookup (no "unverified model"
    `IO.warn` when the model id is newer than the LLMDB snapshot bundled
    with `req_llm`).

# `falkordb_spec`

```elixir
@type falkordb_spec() :: {:remote, keyword()} | {:embedded, String.t()}
```

Resolved FalkorDB selection. `:remote` carries the validated keyword list
the operator supplied; `:embedded` carries the expanded data directory.

# `model_spec`

```elixir
@type model_spec() :: %{provider: atom(), id: String.t()}
```

Resolved model spec — the inline-map shape `ReqLLM.model/1` accepts directly.

# `embedder_model`

```elixir
@spec embedder_model() :: model_spec()
```

# `falkordb_spec`

```elixir
@spec falkordb_spec() :: falkordb_spec() | nil
```

Resolve the FalkorDB connection spec from configuration. Returns `nil`
when neither knob is set so the supervisor can run with no children.

Remote wins over embedded when both are present.

# `llm_model`

```elixir
@spec llm_model() :: model_spec()
```

# `validate_falkordb!`

```elixir
@spec validate_falkordb!(any()) :: keyword()
```

Validate a remote FalkorDB keyword spec. Raises `ArgumentError` with a
pointed message if the shape is wrong; returns the keyword list unchanged
on success.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
