Repository navigation
blazr 0.1.3
Added
- User config file —
~/.blazr/config.yamlholds theserver,
inferenceandgenerationsections beside the user keys.run,
serve,generate,chat,bench,list,info,pull,swarmand
disaggread it. Each value comes from the CLI flag, then the
environment variable, then the file, then the built-in default. - Config
inferencesection — the file'sinferencekeys apply over
every model's ownconfig.json. Forinference.*keys the model's
config.jsonsits between the file and the built-in default. - Config keys —
default_modelnames the model when a command names
none.devicetakescpu,cudaorcuda:N.model_dirsets the model
directory afterBLAZR_MODEL_DIR.num_ctxsets the initial KV cache
size,serveincluded. serverkeys —servereadsport,host,tls_cert,tls_key,
max_concurrent_requests,request_timeout_secs,cors_enabled,
cors_origins,request_logging,max_body_size,
max_inflight_tokens,sloandreasoning_formatfrom the file. These
values were fixed before. The swarm leader and the disaggregated router
read the same section.- Config hot reload —
serveswaps in each version of the file that
parses, as a whole. A file that fails to parse keeps the running config
and logs an error. A deleted file resets every key to its default. - Live keys —
generationkeys andserver.reasoning_formatapply to
the next request. Every other changed key logs a warning to restart
serve. - Data-parallel replicas —
serve --data-parallel <N>or
inference.data_parallelloadsNcopies of the start model. A CUDA
build puts copyion CUDA devicedevice + i. A CPU build loads CPU
copies. Each copy runs its own batching scheduler. - Data-parallel checks —
serverefuses0replicas. It refuses more
than one replica with no start model, or with tensor parallelism above 1.
A CUDA build refuses more replicas than the devices from thedevice
index up. - Cache-aware router — with replicas, a request goes to the replica
that holds its longest known prompt prefix. A request with no known
prefix goes to the least loaded replica. A warm replica more than 4
requests above the least loaded one gives up the request. - SLO batch-growth hold — while the rolling P95 TTFT or P95 ITL is over
itsserver.slotarget, the continuous-batching schedulers admit no
sequences beyond the running count. An idle scheduler still admits one.
Running sequences keep decoding. - SLO samples — ITL and end-to-end latency samples now feed the SLO
checker beside TTFT. - Metrics —
blazr_slo_batch_growth_heldis1while a breach holds
batch growth.blazr_data_parallel_replicasreports the replica count.
blazr_replica_active_requestsreports in-flight requests per
replica. - Recorded metrics —
blazr_queue_depthcounts queued sequences in
the batching schedulers plus requests waiting for an HTTP slot.
blazr_slo_violations_totalcounts breaches withmetricand
percentilelabels.serverecorded neither before. /health— the response carriesdata_parallel_replicas.- Flags —
swarm --hostanddisagg --hostset the HTTP API address.
swarm --api-keysets the leader's API key, withBLAZR_API_KEYas the
fallback.
Changed
- Dependencies — boostr 0.6, voxr and voxr-narrate 0.4, and through them numr 0.11.
- CLI sampling defaults — with no flag and no config,
--temperature
now falls back to1.0instead of0.7.--top-pfalls back to1.0
instead of0.9. This applies torun,generateandchat. The
sampling flags take thegenerationsection before the built-in value. chat --num-ctx— the flag falls back tonum_ctx, else2048
instead of4096.- Flag fallbacks —
--max-tokens,--top-k,--min-p,
--repeat-penalty,--repeat-last-n,--num-ctx,--host,--port,
--reasoning-format,--tls-certand--tls-keyfall back to the file
instead of fixed clap defaults.--paged-attentionand--graphsfall
back toinference.paged_attentionandinference.graphs. inference.graphs—runandgenerateread the key.servelogs
a warning when it is set, becauseservedoes not capture graphs.- Model argument —
run,generate,chat,bench,serve,
swarmanddisaggtakedefault_modelwhen no model is given. A
command that needs a model and finds neither exits with an error that
namesdefault_model. - Request defaults — a request field the request omits takes the live
generationsection.max_tokenson completions, chat and infill now
defaults to2048instead of256.max_output_tokenson
/v1/responsesdefaults to2048instead of4096. - Config file errors — a config file that does not read or parse exits
with an error that names the file and line. Before,servelogged a
warning and ran on defaults. An unknown key logs a warning that names
it. - Older keys — the top-level
port,temperatureandmax_tokens
still parse asserver.port,generation.temperatureand
generation.max_tokens. Setting an older key and its section key
together is an error. - Device —
runandgeneratewithout--cpurun on the CUDA index
fromdevice, else device 0. In a CUDA build,serve,chat,bench,
swarmanddisaggrefusedevice: cpu. - Model directory —
list,info,pull,serveand the cluster
roles resolve it fromBLAZR_MODEL_DIR, thenmodel_dir, then
./models. - TLS — the certificate and the key each come from a flag or from
server.tls_certandserver.tls_key. One without the other is an
error. - Concurrency limit — middleware replaces the tower layer for
server.max_concurrent_requests. A request over the limit waits for a
slot and counts inblazr_queue_depth./healthand/metricsskip
the limit, so probes and scrapes answer while the server is saturated. - Tensor parallelism — the degree comes from
BLAZR_TP_SIZE, then
inference.tensor_parallel_sizein the file, then the model's
config.json, then1.servechecks it before any model loads. A
degree of0, or aBLAZR_TP_SIZEthat is not a whole number, is an
error. The loader checks that the head counts divide by the degree
before weights load. - Model
config.json— blazr ignores itsserverandgeneration
sections. The loader always sets the dtype from the checkpoint. speak— the CUDA build runs Kokoro and VITS on the GPU, as it runs
Whisper and VoxCPM2.--device cpukeeps them on the CPU.speak— a Kokoro take follows--seed: one seed gives the same take
on one device.serve—--tts-modelloads Kokoro, VITS and VoxCPM2 on the server's
device, as--asr-modelloads Whisper. A CUDA build serves them from the
configured CUDA device instead of the CPU or device 0.
Removed
decodecommand — the hidden command had no implementation.- MoE expert offload — the subsystem never moved experts to host
memory, so it is gone with itsinference.moe_offloadand
inference.moe_gpu_expertskeys. A config that still sets either key
parses and ignores it. Inconfig.yamleach logs an unknown-key warning. - Unused
inferencekeys —weights_path,device,flash_attention
andkv_cachehad no reader and are gone.dtypeis no longer a config
key. A modelconfig.jsonthat sets them still parses and ignores them.
Inconfig.yamleach logs an unknown-key warning.
Fixed
- Image input — a raw base64
image_urlthat does not decode to a PNG,
JPEG, WebP or GIF image fails withInvalid image_url: expected a data: URI, an http(s) URL, or base64 of a PNG, JPEG, WebP, or GIF image.
Before, it passed on asapplication/octet-stream. A local file path
fails with anInvalid image_urlerror. serve—/v1/audio/transcriptionsand/v1/audio/speechmake the
server's CUDA device current on the worker thread before they run a
model. Transcription runs on a blocking worker instead of the request's
async task, and on the configured CUDA device instead of device 0.
Full diff: v0.1.2...v0.1.3