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.0v0.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.1 retroactivos 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.tssafeArguments, sanitizeToolCall, toWireToolCall garantiza JSON válido
  • 400 por arguments roto → 1 retry sanitizado + fallback ( 401 fatal)
  • Fix double-encoding en openai-compat

SoW-OSS-004 — Quality + Demotion:

  • recommendToolsFirst() + quality ranking (gemma-4-31b antes que nemotron)
  • selectByStrategy + demotion in-memory 2× 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,
});

→ GitHub v0.6.0 · → npm 0.6.0


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 + ejemplo examples/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' },
]});

→ GitHub v0.5.0 · → npm 0.5.0


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, error
  • OpenAICompatProvider SSE via fetch, BedrockProvider ConverseStream, 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);
}

→ GitHub v0.4.0 · → npm 0.4.0


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_calls en Bedrock/HF + ejemplos pulidos

→ GitHub v0.3.1


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 systemOpenAICompat, Bedrock, HuggingFace auto-detection
const router = new StyrRouter({ apiKey, models: [
  { id: 'bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0' },
  { id: 'openai/gpt-4o-mini' },
]});

→ GitHub v0.3.0


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.tsMODEL_PRICING DB (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 });

→ GitHub v0.2.0


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_case para OpenRouter

→ GitHub v0.1.2


v0.1.1 — 2026-07-22 — ESM fix (retroactivo)

Tag: v0.1.1 @ 3e1e973efe8349 · npm: 0.1.1 @ 23:36 UTC · 4 files, 14,262

  • package.json: "type": "module" — tag retroactivo 2026-08-25

→ GitHub v0.1.1


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.ts 246 líneas — StyrRouter({ apiKey, models }) fallback chain 429/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' }]);

→ GitHub v0.1.0


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/sdkstream() mapeado a ModelStreamEvent, 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-llm dep ^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 styrrStyrRouter Python con httpx, extras styrr[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