mirror of
https://github.com/garrytan/gbrain.git
synced 2026-07-29 19:01:39 +00:00
Four embedding-throughput/correctness fixes: - #970: google recipe now declares max_batch_tokens (204,800 — derived from Gemini's real limits: 100 inputs per batchEmbedContents × 2048 tokens per input) + max_batch_count 100 + chars_per_token, silencing the missing-cap startup warning and enabling the gateway pre-split. Deliberately NOT the 2048 per-input limit, which would over-split 50x. - #1199: new optional EmbeddingTouchpoint.max_batch_count enforced in splitByTokenBudget (flush at N inputs even when the token budget has room); dashscope sets 10 (provider hard-caps embeddings at 10 inputs per request). isTokenLimitError also learns DashScope's "batch size is invalid" message so recursive halving backstops it. - #1207: gbrain import without --workers now resolves through the shared autoConcurrency policy (PGLite → 1, >100 files on Postgres → 4) instead of hardcoding serial; explicit --workers still wins. - #1818: embedBatch dispatches its 100-input sub-batches through a bounded worker pool (default 4; EmbedBatchOptions.concurrency / GBRAIN_EMBED_BATCH_CONCURRENCY override) with index-addressed results so output order is preserved; single-batch fast path unchanged. Also: listRecipes() now reads the exported RECIPES map instead of the private ALL array (one source of truth; lets tests inject a synthetic capless recipe to keep the startup-warning path covered now that every real recipe declares a cap). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>