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:
| File | What it is |
|---|---|
release.tar.gz | The archive: bin/brama, its launcher and support files (release artifacts). |
release.json | The 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.sig | A base64 Ed25519 signature over the exact bytes of release.json. |
qualification.json | The 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 code | Sentence | Repair |
|---|---|---|
404 platform_unknown | brama is released for darwin-arm64 and linux-amd64, not "<platform>". See /docs/download | Use one of the platforms it names. |
404 file_unknown | a release holds release.tar.gz, qualification.json, release.sig, release.json, not "<file>". See /docs/download | Ask 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/download | Name a version such as the one release.json reports. |
404 release_not_published | stado://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/download | Use GET. |
500 release_origin_undeclared | this 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#refusals | The 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_invalid | BRAMA_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#refusals | The 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_refused | the release channel answered <status> for <uri>: <body>. See /docs/download#refusals | The 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#refusals | The 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.