Skip to content

alvarezleonardo/SLIM

Repository files navigation

SLIM

Knowledge-Optimized Data Architecture

Formato de datos y toolkit completo para comunicacion eficiente con LLMs. Codifica, plantilla, parsea y valida datos estructurados usando 50%+ menos tokens que JSON.


Por que SLIM

Enviar datos a un LLM en JSON desperdicia tokens en llaves, comillas y redundancia. SLIM resuelve esto con un formato compacto + un pipeline completo:

Feature JSON YAML CSV SLIM
Token-efficient No Medio Si Si
Datos anidados Si Si No Si
Datos tabulares Verbose Verbose Si Si
Directivas (@context, @budget) No No No Si
Multi-tenant No No No Si
Streaming No No Si Si

Ejemplo

JSON (112 chars, ~28 tokens):

{"store":"Downtown Store","items":[{"id":1,"name":"Burger","price":1200},{"id":2,"name":"Salad","price":900}]}

SLIM (82 chars, ~21 tokens -- 25% menos):

store: Downtown Store
items[2]{id,name,price}:
  - 1, Burger, 1200
  - 2, Salad, 900

Con datasets reales de produccion, SLIM logra 52-64% de ahorro vs JSON formateado y 28-35% vs JSON compacto.

Instalacion

# Core library
npm install @slim-format/core

# CLI (opcional)
npm install -g @slim-format/cli

Uso Rapido

Encode / Decode

import { encode, decode } from '@slim-format/core'

const data = {
  products: [
    { id: 1, name: 'Burger', price: 8500 },
    { id: 2, name: 'Salad', price: 6200 },
  ],
  sales: { total: 1250000, tickets: 87 },
}

// JSON -> SLIM
const slim = encode(data)
// products[2]{id,name,price}:
//   - 1, Burger, 8500
//   - 2, Salad, 6200
// sales:
//   total: 1250000
//   tickets: 87

// SLIM -> JSON
const restored = decode(slim)
// Lossless round-trip: restored === data

Directivas

SLIM soporta directivas de metadata que ningun otro formato tiene:

const slim = encode(data, {
  directives: {
    context: { tenant: 'store_alpha', env: 'prod' },
    budget: { tokens: 2000 },
    priority: { high: 'sales', low: 'history' },
  },
})
// @context tenant=store_alpha env=prod
// @budget tokens=2000
// @priority high=sales low=history
//
// products[2]{id,name,price}:
//   - 1, Burger, 8500
//   ...

Templates

Compone prompts con datos SLIM, budget inteligente y multi-tenant:

import { SlimTemplate } from '@slim-format/core'

const template = SlimTemplate.define(`
@template sales-analysis
@model claude-sonnet
@budget tokens=4000

# Rol
Sos un analista de negocio retail.

# Datos de ventas
{{data:sales | priority=high}}

# Catalogo actual
{{data:products | priority=medium}}

# Pregunta
{{input:query}}
`)

const prompt = template.render({
  data: { sales: salesData, products: productsData },
  input: { query: 'Cual fue el producto mas rentable hoy?' },
})

prompt.text       // String listo para enviar al LLM
prompt.tokenCount // Tokens estimados
prompt.truncated  // Que se trunco por budget y por que

Si el prompt supera el @budget, SLIM trunca secciones de menor prioridad primero, sin cortar datos a mitad de fila.

Parse -- Validacion de Output

Parsea y valida respuestas del LLM con schemas tipados:

import { SlimSchema, slimParse, slimParseWithRetry } from '@slim-format/core'

const schema = SlimSchema.define({
  top_product: { type: 'string', required: true },
  amount: { type: 'number', required: true },
  recommendations: { type: 'array', items: { type: 'string' }, maxItems: 5 },
})

// Modo strict
const result = slimParse(llmResponse, schema, 'strict')
if (result.ok) {
  console.log(result.data) // Tipado
}

// Con retry automatico via LLM
const result = await slimParseWithRetry(llmResponse, schema, {
  llm: claudeClient,
  maxRetries: 2,
  strategy: 'correct', // Reenvia errores al LLM para que corrija
  includeErrors: true,
})

4 modos de parsing:

Modo Descripcion
strict Rechaza si no matchea el schema exacto
coerce Intenta castear tipos ("42" -> 42)
partial Acepta respuestas incompletas
correct Retry automatico con correccion via LLM

Integracion con LLMs

Claude (Anthropic)

import Anthropic from '@anthropic-ai/sdk'
import { encode } from '@slim-format/core'

const client = new Anthropic()

const sales = await fetchSales() // Tu data
const slimPayload = encode(sales, {
  directives: { context: { tenant: 'store_alpha', date: '2026-04-07' } },
})

const response = await client.messages.create({
  model: 'claude-sonnet-4-20250514',
  max_tokens: 1024,
  messages: [
    {
      role: 'user',
      content: `Analiza estas ventas y dame el producto mas rentable:\n\n${slimPayload}`,
    },
  ],
})

Gemini (Google AI)

import { GoogleGenerativeAI } from '@google/generative-ai'
import { encode, decode } from '@slim-format/core'

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!)
const model = genAI.getGenerativeModel({ model: 'gemini-2.5-flash' })

// Encodear data de inventario a SLIM antes de enviarla
const inventory = [
  { sku: 'WDG-001', product: 'Widget Standard', quantity: 45, minimum: 20 },
  { sku: 'GAD-003', product: 'Gadget Pro', quantity: 12, minimum: 15 },
  { sku: 'ACC-002', product: 'Accessory Pack', quantity: 8, minimum: 25 },
]

const slimData = encode({ inventory })
// inventory[3]{sku,product,quantity,minimum}:
//   - WDG-001, Widget Standard, 45, 20
//   - GAD-003, Gadget Pro, 12, 15
//   - ACC-002, Accessory Pack, 8, 25

const result = await model.generateContent(
  `Dado este inventario, que productos necesitan reposicion urgente?\n\n${slimData}`
)
console.log(result.response.text())
// "Accessory Pack (8 unidades, minimo 25) necesita reposicion urgente.
//  Gadget Pro (12 unidades, minimo 15) esta proximo al limite."

Por que SLIM con Gemini? Gemini cobra por token de input. Enviando inventory como JSON pretty-printed serian ~85 tokens. Con SLIM son ~40. En un pipeline que hace 10,000 llamadas/dia, eso son 450,000 tokens menos por dia.

Gemini + Templates con Budget

import { SlimTemplate } from '@slim-format/core'

const template = SlimTemplate.define(`
@template inventory-restock
@model gemini-2.5-flash
@budget tokens=2000

# Rol
Sos un gestor de inventario para una tienda retail.

# Stock actual
{{data:inventory | priority=high}}

# Historial de consumo
{{data:history | priority=low}}

# Instruccion
{{input:query}}
`)

const prompt = template.render({
  data: { inventory: inventoryData, history: historyData },
  input: { query: 'Genera una orden de compra para los proximos 3 dias' },
})

// Si el prompt excede 2000 tokens, SLIM trunca "history" (priority=low) primero
const result = await model.generateContent(prompt.text)

OpenAI

import OpenAI from 'openai'
import { encode } from '@slim-format/core'

const openai = new OpenAI()
const slimData = encode(orders) // Cualquier data estructurada

const completion = await openai.chat.completions.create({
  model: 'gpt-4o',
  messages: [
    { role: 'system', content: 'Responde en espanol. Los datos vienen en formato SLIM.' },
    { role: 'user', content: `Resumi los pedidos del dia:\n\n${slimData}` },
  ],
})

CLI

# Encode JSON a SLIM
echo '{"name":"Leo","age":30}' | slim
# name: Leo
# age: 30

# Decode SLIM a JSON
echo 'name: Leo\nage: 30' | slim --decode

# Con estadisticas de tokens
slim encode data.json --stats

# Con directivas
slim encode data.json --context tenant=store_alpha --budget 2000

# Pipe desde curl -- comprimi una API response antes de pasarla a un LLM
curl -s https://api.example.com/products | slim --stats

# Comparar tamanos: JSON vs SLIM
slim encode data.json --stats
# Characters: 380 (vs 860 JSON) — 55.8% reduction
# Est. tokens: 95 (vs 215 JSON) — 55.8% reduction

Ejemplos

Casos de uso reales organizados por dominio. Cada ejemplo muestra el output SLIM, la comparativa de tokens contra JSON y validacion del schema de respuesta del LLM.

# TypeScript
npx tsx examples/<archivo>.ts

# Python
python examples/<archivo>.py

Tecnico / Dev

Archivo Descripcion Ahorro estimado
server-monitoring.ts 8 servidores en produccion → deteccion de anomalias, correlacion con deploys, plan de accion ~58%
code-review.ts Diff de PR + reglas del equipo → review automatico con veredicto APROBADO / CAMBIOS / RECHAZADO ~52%

Profesionales

Archivo Descripcion Ahorro estimado
hr-screening.py 5 CVs + requisitos del puesto → ranking con puntaje y justificacion por candidato ~61%
medical-assistant.py Historia clinica completa → alertas de interaccion medicamentosa y chequeos preventivos ~54%
legal-assistant.ts 5 expedientes + plazos procesales → agenda legal con alertas de vencimiento y cruce con feriados ~57%

Atencion al cliente y operaciones

Archivo Descripcion Ahorro estimado
secretary-assistant.ts Agenda del dia + tareas + perfil del jefe → briefing ejecutivo de inicio de jornada ~55%
telecom-support.py Perfil del cliente + consumo + historial de tickets → asistente en tiempo real para agente de call center ~56%
logistics-fleet.ts 7 repartidores + 7 pedidos en tiempo real → dispatch inteligente con reasignaciones y alertas de SLA ~59%

Otros

Archivo Descripcion Ahorro estimado
real-estate.ts 5 propiedades + perfil del comprador → match con puntaje y justificacion para cada opcion ~58%
school-report.py Notas + asistencia + observaciones docentes → reporte trimestral personalizado para padres ~59%
ecommerce-recommendations.py Historial de compras + catalogo de 10 productos → recomendaciones personalizadas con razon de cada una ~60%

Basicos

Archivo Descripcion
basic-encode.ts Encode y decode de un objeto simple con comparativa de caracteres
template-budget.ts Sistema de templates con presupuesto de tokens y truncado automatico
schema-validate.py Validacion de schema en modos strict y coerce

Benchmarks

SLIM incluye un suite de benchmarks con datasets reales:

cd benchmarks
pnpm benchmark:tokens

Resultados tipicos:

Dataset JSON (pretty) JSON (compact) YAML SLIM Ahorro vs JSON
retail/products 215 tok 155 tok 145 tok 95 tok 56%
retail/sales 275 tok 195 tok 180 tok 123 tok 55%
retail/inventory 230 tok 163 tok 150 tok 100 tok 57%
generic/ecommerce 288 tok 205 tok 190 tok 130 tok 55%
generic/server-logs 245 tok 175 tok 163 tok 108 tok 56%

Dashboard

El dashboard (dashboard/index.html) es una pagina interactiva con Chart.js que permite visualizar los resultados de los benchmarks de un vistazo. Incluye:

  • Summary cards -- Metricas clave: cantidad de datasets, ahorro promedio vs JSON pretty (55%), ahorro vs JSON compact (35%), y formatos comparados.
  • Graficos de barras por dataset -- Cada dataset tiene su propio chart comparando tokens estimados entre JSON (pretty), JSON (compact), YAML, SLIM y SLIM (folded). Las barras SLIM se destacan en azul.
  • Tabla detallada -- Todos los resultados con caracteres, tokens estimados, lineas y porcentaje de ahorro vs JSON pretty.

Para abrirlo:

open dashboard/index.html        # macOS
xdg-open dashboard/index.html    # Linux
start dashboard/index.html       # Windows

El dashboard usa tema dark (#0f172a) y es util para presentar el caso de negocio de SLIM: cuantos tokens (y dinero) se ahorran al migrar de JSON a SLIM en pipelines de LLM.

Python SDK

SLIM incluye un SDK Python (slim-format) pensado para MCP servers y cualquier pipeline Python que envie datos a LLMs. Zero dependencies, Python 3.10+.

Instalacion

cd slim-python
pip install .

# O en modo desarrollo
pip install ".[dev]"

Uso basico

from slim import encode, decode

data = {
    "inventory": [
        {"sku": "WDG-001", "product": "Widget Standard", "quantity": 45, "minimum": 20},
        {"sku": "GAD-003", "product": "Gadget Pro", "quantity": 12, "minimum": 15},
    ]
}

# Python dict -> SLIM (50%+ menos tokens que JSON)
slim_text = encode(data)
# inventory[2]{sku,product,quantity,minimum}:
#   - WDG-001, Widget Standard, 45, 20
#   - GAD-003, Gadget Pro, 12, 15

# SLIM -> Python dict (lossless round-trip)
restored = decode(slim_text)
assert restored == data

Uso en MCP Server

from slim import encode
from mcp.server import Server

server = Server("my-mcp")

@server.tool()
async def get_inventory(ctx):
    """Devuelve inventario en formato SLIM -- 50%+ menos tokens que JSON."""
    inventory = await db.query("SELECT sku, product, quantity, minimum FROM inventory")
    return encode(
        {"inventory": inventory},
        directives={"context": {"tenant": "store_alpha", "date": "2026-04-07"}},
    )
    # @context tenant=store_alpha date=2026-04-07
    #
    # inventory[N]{sku,product,quantity,minimum}:
    #   - WDG-001, Widget Standard, 45, 20
    #   - ...

Validacion de respuestas del LLM

from slim import SlimSchema

schema = SlimSchema.define({
    "top_product": {"type": "string", "required": True},
    "amount": {"type": "number", "required": True},
    "recommendations": {"type": "array", "items": {"type": "string"}, "maxItems": 5},
})

# Modo strict -- rechaza si no matchea
result = schema.validate(llm_response)
if result.ok:
    print(result.data)

# Modo coerce -- castea tipos ("42" -> 42)
result = schema.validate(llm_response, mode="coerce")

# Modo partial -- acepta respuestas incompletas
result = schema.validate(llm_response, mode="partial")

Opciones del encoder

from slim import encode

# Key folding: aplana objetos de una sola key
encode({"sales": {"today": {"total": 100}}}, key_folding="safe")
# sales.today.total: 100

# Delimitador alternativo
encode({"ids": [1, 2, 3]}, delimiter="|")
# ids[3]: 1|2|3

# Indent personalizado
encode({"a": {"b": 1}}, indent=4)
# a:
#     b: 1

Tests

cd slim-python
pip install ".[dev]"
pytest tests/ -v     # 82 tests

Arquitectura

slim/
├── packages/
│   ├── core/              # @slim-format/core (TypeScript)
│   │   └── src/
│   │       ├── format/    # Encode/Decode (Phase 1)
│   │       ├── template/  # Templates con budget (Phase 2)
│   │       └── parse/     # Schema validation + retry (Phase 3)
│   └── cli/               # @slim-format/cli
├── slim-python/           # Python SDK (slim-format)
│   ├── slim/              # encode, decode, schema
│   └── tests/             # 82 tests
├── benchmarks/            # Token efficiency suite
└── dashboard/             # Visualizacion de resultados

Tech stack:

  • TypeScript: pnpm workspaces, tsdown, Vitest, Chart.js
  • Python: setuptools, pytest, zero runtime dependencies

Desarrollo

git clone https://github.com/alvarezleonardo/SLIM.git
cd SLIM

# TypeScript
pnpm install
pnpm run build
pnpm run test        # 175 tests

# Python
cd slim-python
pip install ".[dev]"
pytest tests/ -v     # 82 tests

Licencia

MIT


Desarrollado por Leonardo AlvarezGitHub

About

Token-efficient data format for LLMs. 50%+ fewer tokens than JSON, with TypeScript & Python SDKs.

Resources

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors