Release 0.7.0 - #256
Merged
Merged
Release 0.7.0#256
Conversation
@Version 0.7.0, CHANGELOG Unreleased becomes 0.7.0, RELEASE_NOTES for 0.7.0, and {:imp, "~> 0.7"} and v0.7.0 links in the README, docs, livebooks and deployment example. The streamed-call model change and the incomplete-stream error are marked Breaking with their migrations.
# Conflicts: # CHANGELOG.md
A streamed call records the configured model id; Imp.Usage does not see streamed calls, so failed-stream spend is on the :model_response event only (new Known limit); OpenRouter's charge was read in 0.6.0 only for uncatalogued models; how ReqLLM's providers take an effort, here and in the Imp.Clients.ReqLLM moduledoc; both tuple shapes; using the filler for history is Imp's; the reloaded note's tool_calls is a plain map; and the CHANGELOG note entry says how to convert an old note.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The 0.7.0 release change. Nothing is tagged, published or merged; the owner tags
v0.7.0and runsmix hex.publish.It is 0.7.0, not 0.6.1, under the semver ruling in
decisions.md(a release that changes what a caller receives bumps the minor):costisnilwhere it was ReqLLM's estimate (#253), an incomplete stream returns an error where it returned the text that had arrived (#255), the model recorded for a streamed call, and theImp.Usagekey for some clients, change (#255), and ReActV2's:last_request_notehistory entry carries emptytool_callsandtool_call_results(#260).What changed
mix.exs@version "0.7.0";priv/public_api.jsonpackage_version(regenerated withmix imp.public_api; only that line changed);test/package_contract_test.exsasserts"0.7.0".{:imp, "~> 0.7"}in README,docs/getting-started/setting-up.md,docs/production.md,docs/coming-from-dspy.md, the five livebooks, andexamples/deployment(mix.exs,README.md). Thetree/v0.6.0andblob/v0.6.0links now point tov0.7.0; they 404 until the tag exists. README: "Imp 0.7 is experimental". The{:req, "~> 0.6"}lines are Req's version and are unchanged.CHANGELOG.md:## Unreleasedis## 0.7.0 — 2026-09-28.RELEASE_NOTES.md: rewritten for 0.7.0: why minor, install, headline changes, Upgrading from 0.6 (five steps), Known limits.Update: fact-check corrections
The fact-check ran the uncertain claims on v0.6.0 and 0.7.0, and commit "Release notes: apply the fact-check corrections" applies its text changes to RELEASE_NOTES.md, the 0.7.0 CHANGELOG section and one sentence of the
Imp.Clients.ReqLLMmoduledoc. No code changed.Imp.Usageentry at all.:model_responseevent only.Imp.Usagedoes not see streamed calls, which run in a separate process; this is a new Known limit.%{tool_calls: []}, and the CHANGELOG note entry gives the conversion.Checks after this commit: format exit 0, compile --warnings-as-errors exit 0, docs --warnings-as-errors exit 0,
imp.public_api --checkcurrent, the contract tests plustest/req_llm_client_test.exs207 tests, 0 failures (1 excluded).mix checkwas not re-run, since only docs text changed.Update: #260 merged in
origin/main (99ef8cd, #260) is merged into this branch as a merge commit, with no rebase or force-push. Its two Unreleased > Changed entries sit at the end of 0.7.0's Changed section, word for word; there is no Unreleased heading left. The RELEASE_NOTES edits for #260 are in the same merge commit (c95a832).
tool_callsandtool_call_results, or match the note by its key or text. A note stored by an earlier version keeps the input-only shape and, passed back, still renders with the "Not supplied" reply. It can be converted by addingtool_calls: %Imp.Adapter.Types.ToolCalls{tool_calls: []}andtool_call_results: []to it; for a dumped history,Imp.History.load!/1, add the fields, and dump again. I checked the conversion with a throwaway test (since deleted), in native and written tool modes: an old-shape entry passed back ashistory:produces the filler in the request, and the converted entry does not. The dumped form carries__imp_type__tags, which is why the step says to load and re-dump rather than edit the JSON.None. I found no text in the notes, CHANGELOG, docs or lib that calls it DSPy's. Two nearby texts are not changed here: the comment aboveappend_user_turn/2inlib/imp/predict/react_v2.excalls an input-only entry "a DSPyHistoryentry", which names the structure, not the filler; and the message of commit 67297cd says "keep DSPy's rendering", which history can't change. The divergence itself is History entries with missing outputs: Imp invents a filler DSPy doesn't; native replay drops answers #261 and is not in this release.Judgement calls in the CHANGELOG
{:error, %Imp.LMError{}}instead of a completion of the text that arrived;Imp.Usagekey changes. In 0.6.0 a ReqLLM stream carried no usage, so it had noImp.Usageentry at all; the change a host can see is thereq_llmmetadatamodelon the:model_responseevent (openai:gpt-testbecomesgpt-test, or the model the provider reported). The entry now says that.provider_name/1now goes throughmodel_identity/1, so a non-streamed call to a client built from a string-keyed spec map or a{provider, opts}/{provider, model, opts}tuple records its provider, where 0.6.0'sprovider_name/1matched only an atom-keyed:providermap or a"provider:model"string and gavenil. ItsImp.Usagekey goes from"m"to"openai/m". At main I checked the keys with a throwaway test ({:openai, id: "m"},%{"provider" => "openai", "id" => "m"}and"openai:m"each give["openai/m"]) and thatImp.req_llm/2keeps the spec as given. The 0.6.0 side comes from readinggit show v0.6.0:lib/imp/clients/req_llm.ex; I did not run it.estimated_costisnilfor a streamed call, as theImp.Core.LMResponseandImp.LMmoduledocs say.Judgement calls in RELEASE_NOTES
git diff --stat v0.6.0..origin/maintouches onlyreq_llm.ex,core.ex,lm.ex,saving.ex,streaming/execution.ex,exceptions.exand a benchmark task), andmix.lockis unchanged:mix.lockholds mint 1.10.1 and Finch 0.23.0. Hex's newest Finch is still 0.23.0, and Close abandoned HTTP/1 connections after request errors sneako/finch#397 is still open and unmerged. The limit stays word for word.Bearerlength in command output, and the GEPA full-validation checkpoint all stay.mix.exsstill declares{:mint, "~> 1.8"}.:usageon the event,Imp.Usage,get_lm_usage/1) is ReqLLM's, so for a non-streamed call its:cost/:total_costare the catalog estimate (ReqLLM.Usage.Cost.merge/3puts them there, andsanitize_usage/1keeps them). A model call's cost is the provider's reported charge; the catalog price is estimated_cost #253 changed thecostfield but not this map, so a host readingusage[:cost]still gets the estimate.statusnilandretryable: true(stream_failure/2passestrue;Imp.LMError's moduledoc gives the reason).Dependabot
GitHub reports open alerts for
accelerateandnltk. They come frombenchmarks/requirements-ifbench-parity.txt, the Python environment for a benchmark, not the Hex package.mix hex.build --unpackof this branch contains nobenchmarks/directory and no.txtfile (top level: CHANGELOG.md, LICENSE, NOTICE, README.md, RELEASE_NOTES.md, assets, docs, examples, hex_metadata.config, lib, ...). This PR does not change that file.Checks on this branch (merge commit c95a832)
mix format --check-formatted: exit 0mix compile --warnings-as-errors --force: exit 0 (427 files)mix docs --warnings-as-errors: exit 0mix dialyzer.check: "Total errors: 142, Skipped: 142, Unnecessary Skips: 0", "done (passed successfully)"mix imp.public_api --check: "Public API manifest is current: priv/public_api.json"MIX_ENV=test mix package.check: "clean-room package proof passed: tmp/package-clean-room"mix check(1-minute load 1.7, no other test VM): exit 0, "59 doctests, 9 properties, 3562 tests, 0 failures, 13 skipped (221 excluded)"No test was added, so there was nothing to falsify by reverting. The release only moves version strings and documents changes that are already merged.