Repository navigation
Release Notes
See the migration guide
for required Rust changes, retrieval defaults, and cassette re-recording.
Breaking changes
- Rust
EmbedRequestliterals must includeoptions;RerankRequestliterals
must includetimeout_ms.ValueandSemaErrorare neitherSendnor
Sync; send owned Rust data between threads. - Synchronous evaluation from a running host callback is rejected, including
evaluation of another interpreter on the same thread. Use async host
functions or wait for the current call to settle before evaluating again. - The implicit Voyage embedding model is
voyage-3(wasvoyage-3-lite).
Existing indexes must keep their original model or be rebuilt. Together's
default reranker ismixedbread-ai/mxbai-rerank-large-v2. - Embedding cassettes use
embed-v2identities and must be re-recorded.
Embedding inputs must be strings. Malformed options and retrieval responses
now return errors instead of being silently coerced or partially discarded.
Added
-
Public MCP embedding through
sema::mcp::McpSessionandMcpWorker, with
explicit presets, async host-function dispatch, typed errors, cancellation,
bounded input/output, configurable server identity, and host callbacks.
sema mcp --preset embedded --checklists the selected tools after loading
their definitions. Built MCP binaries share the CLI's MCP argument parser. -
Shared embedding presets for OpenRouter, DeepInfra, Azure OpenAI, Cloudflare,
Alibaba, and self-hosted TEI, including provider-specific option validation
and batching. Native Ollama embeddings use/api/embed. -
Native Nomic hosted text embeddings with task selection, dimensionality,
long-text options, endpoint overrides, andNOMIC_API_KEYdetection. The
publicRerankDialect::Nomicvariant remains available for existing custom
hosts; the hosted preset supports embeddings only. -
Nomic schema-based mock tests and an opt-in live smoke test.
-
Interpreter::register_async_fn: register async host functions through the
public crate. The call runs as prepare (interpreter thread), run (Sema's
process-wide Tokio pool) and finish (interpreter thread), suspends the calling
Sema task while the future runs, and maps host errors, cancellation and
worker failures to distinct, catchable errors. The stdlib async offload path
now shares its cancel hook and assembler with the newsema_io::host_async
module. -
Typed host functions:
FromValue/IntoValue,register_fn_typedand
register_async_fn_typedconvert arguments and results, with arity and type
errors that note the argument position. -
register_async_fn_cx: one closure with anAsyncCxthat returns a value or
cx.await_future(..), spawns tasks on Sema's pool withcx.spawn, and gets a
CancellationTokentied to the calling task. -
ValueRef: a public, matchable view of values (ValueRef::slice(args)) with
keyword names comparable to&strandMapRefover both map kinds.
Fixed
- Read rational components in complex literals, including
1/2+3i,3/4i,
and the reader's own printed arithmetic results. - Keep embedding and reranking configuration separate from chat configuration.
Validate complete responses and cassette replay, preserve input ordering and
usage, and reject malformed vectors or reranking indices. - Honor evaluation deadlines while a root is parked on an external wait.
MCP handlers run through the cooperative runtime; output hooks are restored
after dispatch, and later calls do not drive earlier detached tasks under
their deadlines. Compilation borrows span tables and caches native names
with invalidation on environment changes. - Clear interrupted callback frames before reusing a VM, preserving captured
values and allowing later MCP calls to run after a timeout or step limit. - MCP file tools enforce sandbox capabilities and paths. Compile and disasm
use session macros without retaining new compile-time bindings. Notebook
creation preserves the host's LLM state. The CLI build hook runs in process
and requires an unrestricted session; library adapters and built MCP
binaries omit build unless the host installs a hook.
MCP compatibility
- Per-call
timeout_mscan shorten a session limit. Zero retains the default;
larger values are clamped. The CLI's--timeout-ms 0disables its default. - Hidden deftools and reserved MCP names cannot be called as user tools.
Unknown or unavailable names in explicit tool filters are option errors. - MCP protocol types are non-exhaustive; construct them with their methods and
include a wildcard arm when matchingToolContent. - MCP sessions bound input frames/source files to 16 MiB and output text to
1 MiB by default. Collection results retain JSON text, with a depth limit of
128. Rust hosts can configure the byte limits.
Install sema-lang 2.0.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/sema-lisp/sema/releases/download/v2.0.0/sema-lang-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/sema-lisp/sema/releases/download/v2.0.0/sema-lang-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install helgesverre/tap/sema-langDownload sema-lang 2.0.0
| File | Platform | Checksum |
|---|---|---|
| sema-lang-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| sema-lang-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| sema-lang-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| sema-lang-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| sema-lang-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo sema-lisp/semaYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>