Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 53 additions & 43 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,62 +5,72 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [2.0.0]

### Added
- `Candil.Health` — provider health probes (ping, probe) migrated from `Apero.Llm.Health`.
- `Candil.ConfigManager` — config validation and normalization for LLM/embedding providers,
migrated from `Apero.Llm.ConfigManager`. Complements `Candil.Config` (ETS registry)
by handling raw map-based config.
- `Candil.Embeddings` — embedding generation abstraction for ollama, local, and
OpenAI-compatible providers, migrated from `Apero.Llm.Embeddings`.

### Fixed
- `Candil.Registry` is now started in `Candil.Application` — previously it was only
created in `test_helper.exs`, causing `Candil.Engine.Server.start_link/1` to crash
in production with `"Candil.Registry not started"`.

## [0.3.0] - 2026-06-27

### Added
- New `Candil.Provider` struct (in `lib/candil/provider.ex`) that
encapsulates remote LLM provider configuration: name, base_url,
api_key, default model, max_tokens, and provider-specific options.
Replaces the previous pattern of passing raw keyword lists to
`Candil.Client.chat/3`.
- `Candil.Health` — provider health probes (ping, probe) migrated from
`Apero.Llm.Health`.
- `Candil.ConfigManager` — config validation and normalization for LLM
and embedding providers, migrated from `Apero.Llm.ConfigManager`.
Complements `Candil.Config` (ETS registry) by handling raw map-based
config.
- `Candil.Embeddings` — embedding generation abstraction for ollama,
local, and OpenAI-compatible providers, migrated from
`Apero.Llm.Embeddings`.
- `Candil.Provider` struct (`lib/candil/provider.ex`) that encapsulates
remote LLM provider configuration: name, base_url, api_key, default
model, max_tokens, and provider-specific options. Replaces the
previous pattern of passing raw keyword lists to `Candil.Client.chat/3`.
- `Candil.Cost` — cost estimation for LLM API usage with pricing table
for OpenAI, Anthropic, and local models.
- `Candil.Application` — OTP application with ETS-based config and
DynamicSupervisor for engine management.
- **Function calling (tools)**: pass a list of tool definitions in
`:tools` opt, response includes `tool_calls` key with parsed arguments.
Supported in OpenAI and Anthropic builders.
- Tests for the new modules: `test/candil/cost_test.exs`,
`test/candil/request_builder_test.exs`, and integration coverage of
`Candil.Provider` and the registry lifecycle.

### Changed
- Bumped version to 0.3.0 to tag the release that includes the
`Candil.Provider` struct. Pre-v0.3.0, downstream consumers using
`%Candil.Provider{}` would fail to compile with
`Candil.Provider.__struct__/1 is undefined`.

## [0.2.0] - 2026-06-24
- **`chat_remote/4` refactored**: collapsed 5 pattern-match clauses into
a single function with `build_request_body/4` and `response_parser/1`
dispatch. Adding a new provider is now a 2-line change.
- Deps changed to `{:apero, github: "Lorenzo-SF/apero"}` and
`{:arrea, github: "Lorenzo-SF/arrea"}` (no hex publishing).
- Mix.exs adds doc groups_for_modules, dialyzer_config, and a new
`CHANGELOG.md`.

### Added
- `Candil.Cost` — cost estimation for LLM API usage with pricing table for OpenAI, Anthropic, and local models.
- `Candil.Application` — OTP application with ETS-based config and DynamicSupervisor for engine management.
- **Function calling (tools)**: pass a list of tool definitions in `:tools` opt, response includes `tool_calls` key with parsed arguments. Supported in OpenAI and Anthropic builders.
- Tests for the new modules: `test/candil/cost_test.exs`, `test/candil/request_builder_test.exs`.

### Changed
- **i18n**: documented the existing English-only public surface under Project history and linked the 1.0.0 release to hex.pm.
- **`chat_remote/4` refactored**: collapsed 5 pattern-match clauses into a single function with `build_request_body/4` and `response_parser/1` dispatch. Adding a new provider is now a 2-line change.
- Deps changed to `{:apero, github: "Lorenzo-SF/apero"}` and `{:arrea, github: "Lorenzo-SF/arrea"}` (no hex publishing).
- Mix.exs adds doc groups_for_modules, dialyzer_config, and a new `CHANGELOG.md`.
### Fixed
- `Candil.Registry` is now started in `Candil.Application` — previously
it was only created in `test_helper.exs`, causing
`Candil.Engine.Server.start_link/1` to crash in production with
`"Candil.Registry not started"`.

### Removed
- `lib/candil/provider/` directory (5 files, 753 lines, dead code: never called by the dispatch).
- `lib/candil/provider/` directory (5 files, 753 lines, dead code:
never called by the dispatch).
- `lib/candil/engine/behaviour.ex` (99 lines, 0 implementers).

## [1.0.0] - 2026-06-10

### Added
- Initial open source release: local llama.cpp engine, OpenAI/Anthropic/Ollama remote providers, conversation, streaming, embeddings.
- Initial open source release: local llama.cpp engine,
OpenAI/Anthropic/Ollama remote providers, conversation, streaming,
embeddings.

[2.0.0]: https://hex.pm/packages/candil/2.0.0
[1.0.0]: https://hex.pm/packages/candil/1.0.0


> ## A note on versioning
>
> The only canonical tag is `1.0.0` — the initial open-source
> cut-over. Any `[0.X.Y]` headers above are **planning milestones**,
> not releases: they have no corresponding git tag. `mix.exs`
> `version` reflects the current development state and may be ahead
> of the public surface.

> ## A note on history
>
> The git history of this repository was rewritten as part of a
Expand All @@ -73,6 +83,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
> not preserved is, by the maintainer's choice, no longer part of the
> canonical development line.
>
> Tag `1.0.0` points to the initial open-source cut-over.
> All versioned artifacts on Hex.pm and GitHub Releases follow this
> convention.
> Tag `1.0.0` points to the initial open-source cut-over. Tag
> `2.0.0` will be created when this release ships. All versioned
> artifacts on Hex.pm and GitHub Releases follow this convention.
Loading