Skip to content

v0.7.1

Choose a tag to compare

@RomanEmreis RomanEmreis released this 10 Oct 06:08
· 5 commits to main since this release
f4001c2

neva 0.7.1 moves the svir bridge to svir 0.1.6, takes in what svir 0.1.5 made expressible in sampling, and fixes a promise the registry module made and did not keep.

Compatible with 0.7.0: nothing in the public API was removed or changed. Two results change; see Behaviour changes.

Sampling through svir

  • sampling_request passes toolChoice: required on to the model as svir::ToolChoice::Required; it was an error, as svir 0.1.4 had no way to say it. With no tools given, it is InvalidParams up front. A model server may take it and still answer without a call, and the sample then says endTurn. toolChoice: none still leaves the tools out (#156).
  • sampling_result reports a refusal, FinishReason::Refusal, as the stop reason refusal, beside contentFilter. With svir 0.1.5, a refusal fell through to endTurn, and its text read as an answer (#156).
  • The svir feature requires svir 0.1.6, from live runs against mlx-lm, mlx-vlm, llama.cpp and vLLM: reasoning sent under two keys arrives once, a call of a named function that finishes with stop is a call, and a server's message is read from detail. Nothing in the bridge changes with it (#160).

Registry

  • ServerManifest::validate, and so to_json, refuses publisher metadata that is not a JSON object, as the schema types _meta["io.modelcontextprotocol.registry/publisher-provided"]; the registry refused it only at the upload. with_publisher_metadata no longer promises a 4 KB check: that limit is the official registry's, and it applies it at the upload (#153).
  • The registry module docs show the import a manifest written by hand needs. Argument is in both neva::prelude and neva::registry, so with both globs in scope it is ambiguous (E0659); name the registry's explicitly (#155):
use neva::prelude::*;
use neva::registry::*;
use neva::registry::Argument; // shadows the two globs

let package = Package::cargo("weather-mcp", "0.3.0")
    .with_package_argument(Argument::named("--port"));

Behaviour changes

  • A sampling refusal is refusal, not endTurn, with svir 0.1.5 or later. A client that read the text of an endTurn as the answer now learns that it is not one.
  • validate and to_json refuse publisher metadata that is not an object. A manifest that carried one failed at the upload before.

The full list is in CHANGELOG.md. Diff: 0.7.0...0.7.1.