{"slug": "let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them", "title": "let Jev score OpenTelemetry logs before a bigger LLM sees them", "summary": "An independent developer released Jev Logs, an MIT-licensed open-source layer that scores and routes OpenTelemetry logs with TypeSafe's Jev model before they reach a more expensive reasoning LLM. The tool assigns each record a 0–100 diagnostic-value score, priority, and actionable probability, then routes it to either deeper analysis or retention, with an annotation mode that preserves every log and attaches jev.* attributes. It ships as an npm package with a TypeScript API, an OpenTelemetry exporter wrapper, and a local OTLP receiver, requiring Node.js 22+.", "body_md": "Health checks. Cache hits. A payment failure hiding in the middle. If every OpenTelemetry log goes into a reasoning model, you pay for noise before the investigation starts.\n\n**Jev Logs** is a small open-source layer that puts [TypeSafe’s Jev](https://typesafe.ai/) in front of those logs. Jev makes the first decision: how useful is this record, how urgent is it, and does it deserve a more expensive model?\n\nI wrote it. MIT licensed. Independent not a TypeSafe, Vercel, or OpenTelemetry product.\n\n**A little intelligence between your logs and your LLM bill.**\n\n  Score, prioritize, and route OpenTelemetry logs with Jev. Keep the signal. Keep your stack\n\n[**Website**](https://jevlogs.com) ·\n  [**Guide**](https://jevlogs.com/guide/) ·\n  [**llms.txt**](https://jevlogs.com/llms.txt) ·\n  [**npm**](https://www.npmjs.com/package/jevlogs) ·\n  **Feedback**\n\nHealth checks. Cache hits. A payment failure hiding in the middle. Sending every event to a reasoning model adds cost before the investigation even starts.\n\n**Jev Logs makes the first decision:** how useful is this log, how urgent is it, and does it deserve deeper analysis? It uses [TypeSafe’s Jev](https://typesafe.ai/) through the Vercel AI SDK, with a small TypeScript API and an OpenTelemetry exporter wrapper.\n\n| A small layer | What you get | \n|---|---|\n| **Score the signal** | A 0–100 diagnostic-value score, priority, and actionable probability. | \n| **Keep your pipeline** | Wrap your existing exporter; preserve resource, scope, timestamps, and trace context. | \n| **Start with visibility** | Annotation mode keeps every record and attaches `jev.*` attributes. | \n| **Spend** |  | \n\nJev is built for structured choices, not paragraphs. For each log, Jev Logs asks it for:\n\n`critical`, `high`, `normal`, `low`)` analyze` or `retain`\nYour archive still gets every record. The analysis branch only needs the ones Jev (or a rule, or a conservative fallback) says are worth it.\n\nA log may skip deeper analysis only when **all three** are true: priority is `low`, value is 25 or below, and actionable probability is under `0.1`. Errors, `jev.protected` records, timeouts, and provider failures stay eligible. Nothing in the SDK deletes your logs.\n\nOffline demo. No key. No network.\n\n```\nnpx jevlogs\n0 / 100  low      RETAIN   GET /health returned 200 in 2ms\n  25 / 100  low      RETAIN   Cache hit for product:482\n 100 / 100  critical ANALYZE  Payment capture failed after three retries\n  75 / 100  high     ANALYZE  Database connection pool at 94% capacity\n```\n\nThat walkthrough uses fixed answers so you can see the shape. It does not call Jev.\n\nReal Jev, still on your machine:\n\n```\nexport AI_GATEWAY_API_KEY=your-vercel-ai-gateway-key\n\nnpx jevlogs --live --sample\nnpx jevlogs --live --file ./app.log --limit 20\n```\n\n`--live` alone starts a local OTLP HTTP/JSON receiver on `http://127.0.0.1:4318/v1/logs`. Point your app at it; Jev Logs prints one JSON decision per record and can forward annotated batches to the collector you already run. Node.js 22+.\n\n```\nnpm install jevlogs\njs\nimport { createJevLogs } from \"jevlogs\";\n\nconst jev = createJevLogs();\nconst decision = await jev.triage({\n  body: \"Database connection pool at 94% capacity\",\n  severityText: \"WARN\",\n});\n\nconsole.log(decision);\n// value · priority · route · actionableProbability · reason\n```\n\nSkip health checks without spending a Jev call:\n\n``` js\nconst jev = createJevLogs({\n  rules: [{ name: \"health\", match: \"^GET /health\", route: \"retain\" }],\n});\n```\n\nWrap the exporter you have. Annotation mode keeps every log and attaches `jev.*` attributes.\n\n``` js\nimport {\n  LoggerProvider,\n  BatchLogRecordProcessor,\n  ConsoleLogRecordExporter,\n} from \"@opentelemetry/sdk-logs\";\nimport { JevLogExporter } from \"jevlogs\";\n\nconst provider = new LoggerProvider({\n  processors: [\n    new BatchLogRecordProcessor({\n      exporter: new JevLogExporter({\n        exporter: new ConsoleLogRecordExporter(),\n        mode: \"annotate\",\n      }),\n      maxExportBatchSize: 16,\n    }),\n  ],\n});\n```\n\nKeep that archive processor. Add a second exporter with `mode: \"analysis-only\"` when you actually want to drop low-value records from the LLM path. **Annotation alone does not cut the bill** — the downstream pipeline has to honor `route`.\n\nA second giant completion per log is the thing this is trying to avoid. Jev’s published rate is cheap structured evaluation (TypeSafe lists **$0.042/M input**, free output). You pay Jev for a small decision, then pay GPT-class analysis only for the selected slice.\n\nThe README has an illustrative table: 1M logs/month, if 10% still need analysis, a **$1,000** GPT-4.1-style bill models down to about **$129** including Jev triage. That is **not** a measured production result. Measure incident recall on *your* logs before you filter.\n\nNo hosted dashboard. No log storage. No Collector plugin. No root-cause write-up. Preview software: `jevlogs` on npm, TypeScript first, CI on the repo. Jev itself is a hosted model via Vercel AI Gateway; this repo is the **integration**.\n\n`jevlogs`\nIf you try it, I want feedback on the Jev scoring/routing shape and whether wrapping an exporter is the right split vs the local receiver. Issues with sanitized examples are welcome.", "url": "https://wpnews.pro/news/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them", "canonical_source": "https://dev.to/reachjalil/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them-196d", "published_at": "2026-09-17 06:07:50+00:00", "updated_at": "2026-09-17 06:53:38.883273+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "mlops", "ai-agents", "ai-infrastructure"], "entities": ["Jev Logs", "TypeSafe", "Jev", "Vercel AI SDK", "OpenTelemetry", "npm", "Vercel", "Node.js"], "alternates": {"html": "https://wpnews.pro/news/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them", "markdown": "https://wpnews.pro/news/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them.md", "text": "https://wpnews.pro/news/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them.txt", "jsonld": "https://wpnews.pro/news/let-jev-score-opentelemetry-logs-before-a-bigger-llm-sees-them.jsonld"}}