Paquetes:
@carloscortezcloud/styrr-llm·@carloscortezcloud/styrr-strands·styrr(PyPI) — https://pypi.org/project/styrr/ · Repos: breakingthecloud/styrr + breakingthecloud/styrr-py
Última actualización: 2026-08-25 · v0.1.0 → v0.6.0 (+ styrr-strands@0.1.0/0.1.1 + styrr PyPI 0.1.0) · Verificado git tag + npm view + PyPI.
Overview
| Versión | Git tag | Fecha (git) | Fecha (npm/PyPI) | Resumen |
|---|---|---|---|---|
| 0.6.0 | v0.6.0 |
2026-08-08 | 2026-08-08 14:12 UTC | Sanitización tool_call + quality routing + demotion |
| 0.5.0 | v0.5.0 |
2026-08-02 | 2026-08-02 21:38 UTC | Bedrock AgentCore cross-provider fallback |
| 0.4.0 | v0.4.0 |
2026-07-28 | 2026-07-29 01:25 UTC | Streaming router.stream() + SSE |
| 0.3.1 | v0.3.1 |
2026-07-28 | 2026-07-29 01:09 UTC | Provider adapters fix |
| 0.3.0 | v0.3.0 |
2026-07-28 | 2026-07-29 00:36 UTC | Provider adapters + auto-detection |
| 0.2.0 | v0.2.0 |
2026-07-24 | 2026-07-24 22:03 UTC | Cost estimation + routing |
| 0.1.2 | v0.1.2 |
2026-07-22 | 2026-07-22 23:44 UTC | Normalize camelCase → snake_case |
| 0.1.1 | v0.1.1 |
2026-07-22 | 2026-07-22 23:36 UTC | Fix ESM type: module (retroactivo) |
| 0.1.0 | v0.1.0 |
2026-07-22 | 2026-07-22 23:29 UTC | Initial: 246 líneas, zero deps |
| strands 0.1.0 | styrr-strands@0.1.0 |
2026-07-28 | 2026-07-29 01:41 UTC | Strands adapter StyrModelProvider |
| strands 0.1.1 | styrr-strands@0.1.1 |
2026-08-02 | 2026-08-02 21:40 UTC | Bump styrr-llm ^0.5.0 (retroactivo) |
| py 0.1.0 | v0.1.0 (py) |
2026-07-29 | 2026-07-29 (PyPI) | Python styrr 0.1.0 · httpx |
Notas:
v0.1.1,v0.5.0,styrr-strands@0.1.1retroactivos 2026-08-25.
v0.6.0 — 2026-08-08 — Sanitización + Quality routing + Demotion
Tag: v0.6.0 @ 880c95f · npm: 0.6.0 @ 14:12 UTC · 22 files, 71,545
SoW-OSS-003 — Sanitización:
src/sanitize.ts—safeArguments,sanitizeToolCall,toWireToolCallgarantiza JSON válido400porargumentsroto → 1 retry sanitizado + fallback (401fatal)- Fix double-encoding en
openai-compat
SoW-OSS-004 — Quality + Demotion:
recommendToolsFirst()+ quality ranking (gemma-4-31bantes quenemotron)selectByStrategy+ demotion in-memory2× 429/404/5xx→ al final por 30s- 47 tests
const router = new StyrRouter({
apiKey, models: [{ id: 'nvidia/nemotron-3-ultra-550b:free' }, { id: 'google/gemma-4-31b-it:free' }],
strategy: 'quality', demotionPenaltyMs: 30_000,
});
v0.5.0 — 2026-08-02 — Bedrock AgentCore cross-provider fallback
Tag: v0.5.0 @ 0b3aab0 · npm: 0.5.0 @ 21:38 UTC · 20 files, 55,806
- Patrón
Bedrock AgentCore → OpenRouter— doc + ejemploexamples/agentcore-fallback/
const router = new StyrRouter({ apiKey: process.env.OPENROUTER_API_KEY!, models: [
{ id: 'bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0' },
{ id: 'openai/gpt-4o-mini' },
]});
v0.4.0 — 2026-07-28 — Streaming router.stream() + SSE
Tag: v0.4.0 @ c54424b · npm: 0.4.0 @ 01:25 UTC · 20 files, 55,108
router.stream() → AsyncGenerator<StyrStreamEvent>—text_delta,tool_call_start/done,done,errorOpenAICompatProviderSSE viafetch,BedrockProviderConverseStream,parseSSEStream()+examples/stream-cli/
for await (const evt of router.stream([{ role: 'user', content: 'Hi' }], tools)) {
if (evt.type === 'text_delta') process.stdout.write(evt.delta);
}
v0.3.1 — 2026-07-28 — Provider adapters fix
Tag: v0.3.1 @ 901ea8d · npm: 0.3.1 @ 01:09 UTC · 18 files, 39,277
- Fix mapeo
tool_callsen Bedrock/HF + ejemplos pulidos
v0.3.0 — 2026-07-28 — Provider adapters + auto-detection
Tag: v0.3.0 @ 906e314 · npm: 0.3.0 @ 00:36 UTC · 16 files, 35,383
feat(styrr-002): provider adapter system—OpenAICompat,Bedrock,HuggingFaceauto-detection
const router = new StyrRouter({ apiKey, models: [
{ id: 'bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0' },
{ id: 'openai/gpt-4o-mini' },
]});
v0.2.0 — 2026-07-24 — Cost estimation + Routing strategies
Tag: v0.2.0 @ 87d7316 · npm: 0.2.0 @ 22:03 UTC · 6 files, 24,112
src/pricing.ts—MODEL_PRICINGDB (16 modelos),estimateCost(),selectByStrategy(),cheapest/fastest/quality/fallback,~4 chars/token
import { selectByStrategy, estimateCost } from '@carloscortezcloud/styrr-llm';
const cheapest = selectByStrategy('cheapest', models, { maxTokens: 4000 });
v0.1.2 — 2026-07-22 — Normalize camelCase → snake_case
Tag: v0.1.2 @ e266812 · npm: 0.1.2 @ 23:44 UTC · 4 files, 15,279
fix: normalize messages — camelCase toolCallId → snake_casepara OpenRouter
v0.1.1 — 2026-07-22 — ESM fix (retroactivo)
Tag: v0.1.1 @ 3e1e973 → efe8349 · npm: 0.1.1 @ 23:36 UTC · 4 files, 14,262
package.json: "type": "module"— tag retroactivo 2026-08-25
v0.1.0 — 2026-07-22 — Initial
Tag: v0.1.0 @ efe8349 (commit c141e58 feat) · npm: 0.1.0 @ 23:29 UTC · 4 files, 14,242
src/index.ts246 líneas —StyrRouter({ apiKey, models })fallback chain429/404/402→ siguiente, zero deps
const router = new StyrRouter({ apiKey: process.env.OPENROUTER_API_KEY!, models: [{ id: 'anthropic/claude-3.5-sonnet' }, { id: 'meta-llama/llama-3.3-70b:free' }] });
await router.call([{ role: 'user', content: 'Hello' }]);
Extra: styrr-strands@0.1.0 — 2026-07-28 — Strands adapter
Tag: styrr-strands@0.1.0 @ e07c642 · npm: 0.1.0 @ 2026-07-29T01:41:03.644Z
StyrModelProvider extends Model<T>de@strands-agents/sdk—stream()mapeado aModelStreamEvent,mappers.ts, fallback chain
Extra: styrr-strands@0.1.1 — 2026-08-02 — Bump
Tag: styrr-strands@0.1.1 @ 552bfa3 · npm: 0.1.1 @ 2026-08-02T21:40:57.026Z
- Bump
styrr-llmdep^0.5.0— retroactivo 2026-08-25 (npm sin tag)
Extra: styrr 0.1.0 (PyPI) — Python SDK
Tag: v0.1.0 (styrr-py) @ d8d1ffe · PyPI: styrr 0.1.0 @ 2026-07-29
styrr(PyPI) —pip install styrr—StyrRouterPython conhttpx, extrasstyrr[bedrock](boto3),styrr[huggingface]
from styrr import StyrRouter
router = StyrRouter(models=[{"id": "meta-llama/llama-3.3-70b:free"}])
Verificación
git tag --list | sort -V
npm view @carloscortezcloud/styrr-llm versions --json