AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Sonder Inference is the inference runtime of the Sonder ecosystem
(sondercore.si). It is a C++20 library with a stable
C ABI that owns inference policy (model and session lifecycle, scheduling, KV
accounting, sampling, cancellation, telemetry) and delegates token execution
to backends. It ships a command-line tool, sonder-infer, that includes a
local HTTP server, and ctypes-based Python bindings.
Version 0.1.0 (CMakeLists.txt). Design notes and plans are in
docs/; the status of each planned item is in
docs/ROADMAP.md.README 전문 보기 ↗Sonder Inference is the inference runtime of the Sonder ecosystem
(sondercore.si). It is a C++20 library with a stable
C ABI that owns inference policy (model and session lifecycle, scheduling, KV
accounting, sampling, cancellation, telemetry) and delegates token execution
to backends. It ships a command-line tool, sonder-infer, that includes a
local HTTP server, and ctypes-based Python bindings.
Version 0.1.0 (CMakeLists.txt). Design notes and plans are in
docs/; the status of each planned item is in
docs/ROADMAP.md.
Engine, Device (CPU inventory), Model, Session,
Backend with capability advertisement, SamplingConfig validation and
cooperative cancellation. Public C++ headers are in
include/sonder/inference/.include/sonder_inference.h,
SONDER_ABI_VERSION 1.mock: deterministic synthetic output for tests; performs no inference.ollama: adapter for an Ollama server over HTTP, with streaming and
cancellation (src/backends/ollama).llamacpp: direct llama.cpp/GGML backend, built only with
SONDER_WITH_LLAMA_CPP=ON (docs/integration/llamacpp.md).llamaserver: supervised external llama-server, or an existing compatible
HTTP upstream; no llama.cpp linkage
(docs/integration/llama-server.md).sonder.observatory.event/1 envelope
through a bounded, non-blocking queue (docs/TELEMETRY.md).sonder-infer serve): HTTP/1.1 API under /v1 with health,
model listing, backend identity, an OpenAI-compatible
POST /v1/chat/completions subset, and live telemetry over SSE and NDJSON
(docs/SERVER.md).sonder-infer bench and the standalone sonder-bench
(bench/README.md).windows-latest and with the
default compiler on ubuntu-latest; the hardening workflow uses Clang 18.CI covers Linux and Windows only.
Configure, build and test presets are defined in
CMakePresets.json. Output goes to build/<preset>/.
| Preset | Platform | Build type |
|---|---|---|
msvc-debug, msvc-release | Windows (MSVC) | Debug, RelWithDebInfo |
linux-debug, linux-release | non-Windows (GCC/Clang) | Debug, RelWithDebInfo |
ci-windows, ci-linux | as above | RelWithDebInfo, warnings as errors |
Linux (as in CI):
cmake --preset ci-linux
cmake --build --preset ci-linux
ctest --preset ci-linux
Windows, from a Visual Studio x64 developer environment (as in CI):
cmake --preset ci-windows
cmake --build --preset ci-windows
ctest --preset ci-windows
Or let the script set up the developer environment:
powershell -NoProfile -File scripts\build.ps1 -Preset msvc-debug -Test
| Option | Default | Effect |
|---|---|---|
SONDER_BUILD_TESTS | ON when top-level | Build the test suites |
SONDER_BUILD_CLI | ON when top-level | Build sonder-infer |
SONDER_WARNINGS_AS_ERRORS | OFF | Warnings as errors (ON in ci-* presets) |
SONDER_WITH_LLAMA_CPP | OFF | Fetch llama.cpp at pinned tag b11195 and build the llamacpp backend; accelerators through GGML_* options |
SONDER_WITH_TLS | OFF | Enable https:// in the internal HTTP client |
SONDER_TLS_BACKEND | auto | auto (Schannel on Windows, OpenSSL elsewhere), openssl or schannel |
SONDER_BUILD_FUZZERS | OFF | Build the libFuzzer targets in fuzz/ (Clang) |
TLS builds as run in CI:
# Linux, OpenSSL (requires libssl-dev)
cmake --preset ci-linux -DSONDER_WITH_TLS=ON
# Windows, Schannel. OpenSSL is used only by the loopback test server.
cmake --preset ci-windows -DSONDER_WITH_TLS=ON "-DOPENSSL_ROOT_DIR=C:/Program Files/OpenSSL"
llama.cpp backend on Windows as in CI (the CI job is non-blocking):
cmake --preset ci-windows -DSONDER_WITH_LLAMA_CPP=ON -DGGML_NATIVE=OFF
Set FETCHCONTENT_SOURCE_DIR_LLAMACPP to a local llama.cpp checkout to build
offline. The optional modules and how they are wired are described in
docs/MODULES.md.
sonder-inferThe full command reference (options, environment variables, exit codes) is in docs/CLI.md.
B=build/ci-linux # or build/<preset>
$B/sonder-infer help
$B/sonder-infer version --json
$B/sonder-infer devices
$B/sonder-infer backends --json
# Mock backend: no model required, output is synthetic
$B/sonder-infer generate --backend mock --model mock:tiny \
--prompt "hello" --max-tokens 16 --telemetry events.jsonl
$B/sonder-infer chat --backend mock --model mock:tiny \
--messages tests/fixtures/chat_messages.json
# Local Ollama (default http://127.0.0.1:11434, or SONDER_OLLAMA_URL / OLLAMA_HOST)
$B/sonder-infer models --backend ollama
$B/sonder-infer generate --backend ollama --model <pulled-model> --prompt "Say hi"
# Benchmark harness
$B/sonder-infer bench --backend mock --model mock:tiny \
--corpus bench/corpus/smoke.json --out results.json --warmup 0 --runs 1
SONDER_INFER_BACKEND and SONDER_INFER_MODEL provide defaults for
--backend and --model. chat without --messages starts an interactive
session. Exit codes: 0 success, 1 runtime or backend failure, 2 usage error,
130 cancelled with Ctrl-C.
$B/sonder-infer serve --backend mock --port 11437
curl -fsS http://127.0.0.1:11437/v1/sonder/health
Routes, options, limits and the Observatory connection are documented in docs/SERVER.md.
The sonder-inference package (bindings/python)
wraps the C ABI with ctypes and needs no compiler at install time. Build the
shared library first:
cmake -S . -B build-shared -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON -DSONDER_BUILD_TESTS=OFF -DSONDER_BUILD_CLI=OFF
cmake --build build-shared --target sonder_inference
pip install ./bindings/python
export SONDER_INFERENCE_LIB_DIR=$PWD/build-shared
On Windows, add -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl and run from a
developer environment.
import sonder_inference as si
with si.Engine() as engine:
engine.register_mock_backend() # or engine.register_ollama_backend()
with engine.load_model("mock", "mock:tiny") as model:
with engine.create_session(model, si.SamplingConfig.greedy(max_tokens=32)) as session:
result = session.generate("hello", on_token=lambda t: print(t, end=""))
print(result.outcome, result.completion_tokens)
Session.stream() yields chunks from a worker thread. Session.chat() accepts
text conversations and streams through on_token; see the chat contract.
Older ABI v1 libraries without the additive chat export raise UnsupportedError for chat.
All four request methods accept keyword-only RequestMetadata for caller
parent lineage; see the request parent contract.
sonder-infer serve --help and docs/SERVER.md.The following is enforced in code; details are in docs/SERVER.md and docs/integration/tls.md.
serve listens on 127.0.0.1 by default. Binding a non-loopback address
requires --token-file; requests must then carry
Authorization: Bearer <token>, which is compared in constant time.Host header is not 127.0.0.1,
localhost or [::1] are rejected (DNS-rebinding defence).--capture-text is set, which
requires a token.--ollama-allow-remote), and the CLI refuses plain http:// to a
non-loopback host. https:// requires a SONDER_WITH_TLS=ON build.src/net/tls.hpp):
| Path | Contents |
|---|---|
include/ | Public C++ API (sonder/inference/) and C ABI (sonder_inference.h) |
src/ | Library implementation and optional modules (src/README.md) |
tools/sonder-infer/ | CLI entry point |
bindings/python/ | Python ctypes bindings and pytest suite |
bench/ | Benchmark harness, corpora and reviewed result snapshots |
tests/ | Core doctest suite and CTest CLI checks (tests/README.md) |
fuzz/ | libFuzzer targets and seed corpora (fuzz/README.md) |
cmake/, scripts/ | CMake modules and build.ps1 |
docs/ | Architecture, design decisions, contracts and integration notes |
C++ suites (doctest, registered with CTest as sonder.<suite>.*) run with the
test preset matching the configure preset:
ctest --preset ci-linux
Tests use the mock backend and a fake Ollama server; they do not require model weights or network services.
Python bindings, against a shared library built as above (as in
.github/workflows/python.yml):
python -m pip install "./bindings/python[test]"
cd bindings/python
SONDER_INFERENCE_LIB_DIR=../../build-shared python -m pytest -v
CI workflows:
ci.yml: Linux and Windows build and tests, CLI
smoke checks, TLS lanes (OpenSSL on Linux; Schannel on Windows,
non-blocking) and an optional llama.cpp build on Windows.python.yml: shared library on Linux and
Windows, pytest on Python 3.10 to 3.13.hardening.yml: ASan+UBSan and TSan
builds with Clang 18, and short libFuzzer runs
(docs/integration/hardening.md).Licensed under the Apache License, Version 2.0. Copyright 2026 Nate Witkowski. Third-party components (llama.cpp/GGML for the optional backend; doctest and cpp-httplib for tests only) are fetched at build time at pinned, hash-checked revisions and keep their own MIT licenses; see NOTICE and docs/LICENSE_REVIEW.md.