BBramaDocs
Browse documentation

Download

Anyone can download Brama. Every release is a set of signed, immutable objects per platform, and this site serves them under /download. Brama is released for darwin-arm64 (Apple silicon macOS) and linux-amd64. Downloading Brama gives you the program; the models it routes to are the ones you configure it with, through your own provider credentials or subscriptions (quick start).

Two kinds of URL

https://brama.wisent.com/download/<platform>/<file>
https://brama.wisent.com/download/<version>/<platform>/<file>

The first is the release of the version these pages document: the version the repository's Cargo.toml declares in the source this site was deployed from. It is a label for one immutable release, so read its release.json to learn which version it is, and pin that version when you install or roll back (release channels). The second is one exact release. Its bytes never change: a release is published once and never rewritten.

Each platform of a release holds four files:

FileWhat it is
release.tar.gzThe archive: bin/brama, its launcher and support files (release artifacts).
release.jsonThe signed manifest. It names the product, version, platform, source_revision, the archive's artifact_sha256 and artifact_bytes, and the key_id that signed it.
release.sigA base64 Ed25519 signature over the exact bytes of release.json.
qualification.jsonThe qualification receipt the release passed before it was published.

Download and verify

Read the manifest of the release these pages document, then download that exact version, so every file comes from one release:

platform=darwin-arm64   # or linux-amd64
site=https://brama.wisent.com/download
curl --fail --location --proto '=https' --tlsv1.2 -o release.json "$site/$platform/release.json"
version=$(sed -n 's/.*"version":"\([^"]*\)".*/\1/p' release.json)
curl --fail --location --proto '=https' --tlsv1.2 --remote-name-all \
  "$site/$version/$platform/release.sig" "$site/$version/$platform/release.tar.gz"

Verify the signature over the manifest with the public key the manifest names. The site serves each signing key at /download/keys/<key_id>.pem. This needs OpenSSL 3; the LibreSSL that macOS ships as /usr/bin/openssl cannot verify Ed25519.

key_id=$(sed -n 's/.*"key_id":"\([^"]*\)".*/\1/p' release.json)
curl --fail --location --proto '=https' --tlsv1.2 -o release-key.pem "$site/keys/$key_id.pem"
openssl base64 -d -A -in release.sig -out release.sig.bin
openssl pkeyutl -verify -pubin -inkey release-key.pem -rawin -in release.json -sigfile release.sig.bin

OpenSSL prints Signature Verified Successfully. Then check the archive against the digest the signed manifest binds, and unpack it:

sha256=$(sed -n 's/.*"artifact_sha256":"\([0-9a-f]*\)".*/\1/p' release.json)
printf '%s  release.tar.gz\n' "$sha256" | shasum -a 256 --check
tar -xzf release.tar.gz
./bin/brama version

shasum prints release.tar.gz: OK; on Linux sha256sum --check reads the same line. brama version prints the version and source_revision the manifest names. Continue with the quick start.

Install with Stado

A machine that runs Stado installs the same release, verified against the release keys its deployment trusts:

stado product install brama --surface cli \
  --release-version <version> --source-commit <source_revision>

Both values are read from release.json. --surface service installs the gateway service instead of the command line.

Refusals

A download that cannot be served answers JSON {"error":{"message":…,"type":…,"code":…,"retryable":…}}. The sentences, with the parts that vary in angle brackets:

Status and codeSentenceRepair
404 platform_unknownbrama is released for darwin-arm64 and linux-amd64, not "<platform>". See /docs/downloadUse one of the platforms it names.
404 file_unknowna release holds release.tar.gz, qualification.json, release.sig, release.json, not "<file>". See /docs/downloadAsk for one of those four files.
400 version_invalid"<version>" is not a release version: a version is ASCII letters, digits, '.', '_' and '-', such as <documented version>. See /docs/downloadName a version such as the one release.json reports.
404 release_not_publishedstado://releases/brama/<version>/<platform>/<file> is not published: the release channel answered {"state":"absent",…}. followed, for the documented release, by These pages document brama <version>, and its <platform> release is not published yet; an earlier release is read at /download/<version>/<platform>/<file>. and, for an exact version, by Read release.json of the version these pages document at /download/<platform>/release.json.The release channel says that object does not exist. Download a version that is published.
405 method_not_allowed<METHOD> is not served for a release download: the release channel answers GET only. See /docs/downloadUse GET.
500 release_origin_undeclaredthis site's deployment sets no BRAMA_RELEASE_ORIGIN, so it cannot read the release channel; set it to the HTTPS origin that serves /api/release/object. See /docs/download#refusalsThe site's deployment sets BRAMA_RELEASE_ORIGIN to the HTTPS origin of the Stado release channel; with Stado, stado web origin url /api/release/object prints that origin's route.
500 release_origin_invalidBRAMA_RELEASE_ORIGIN must be one credential-free HTTPS origin, not "<value>", so it cannot read the release channel; … (or BRAMA_RELEASE_ORIGIN is not a URL: …)Set the variable to the origin alone: scheme and host, no path, query or credentials.
500 release_declaration_unreadable<cause>, so this site cannot say which release it offers. See /docs/download#refusalsThe deployed source lacks a readable .wisent-release.json or Cargo.toml version; the cause names which. Deploy the site from a complete checkout.
502 release_origin_refusedthe release channel answered <status> for <uri>: <body>. See /docs/download#refusalsThe origin answered something other than the object or its absence; its own status and body say why.
502 release_origin_unreachable (retryable)the release channel did not answer for <uri>: <transport error>. See /docs/download#refusalsThe release channel's origin did not answer; retry once it answers.

This site serves downloads and documentation. It serves no model API: a model call sent here is refused as described in Startup and readiness.