kalibr 1.2.2__tar.gz → 1.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {kalibr-1.2.2 → kalibr-1.2.3}/PKG-INFO +1 -1
  2. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/PKG-INFO +1 -1
  3. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_crewai/instrumentor.py +32 -0
  4. {kalibr-1.2.2 → kalibr-1.2.3}/pyproject.toml +1 -1
  5. {kalibr-1.2.2 → kalibr-1.2.3}/LICENSE +0 -0
  6. {kalibr-1.2.2 → kalibr-1.2.3}/README.md +0 -0
  7. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/__init__.py +0 -0
  8. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/__main__.py +0 -0
  9. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/capsule_middleware.py +0 -0
  10. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/__init__.py +0 -0
  11. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/capsule_cmd.py +0 -0
  12. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/deploy_cmd.py +0 -0
  13. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/main.py +0 -0
  14. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/run.py +0 -0
  15. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cli/serve.py +0 -0
  16. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/client.py +0 -0
  17. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/collector.py +0 -0
  18. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/context.py +0 -0
  19. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/cost_adapter.py +0 -0
  20. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/decorators.py +0 -0
  21. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/__init__.py +0 -0
  22. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/anthropic_instr.py +0 -0
  23. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/base.py +0 -0
  24. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/google_instr.py +0 -0
  25. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/openai_instr.py +0 -0
  26. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/instrumentation/registry.py +0 -0
  27. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/intelligence.py +0 -0
  28. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/kalibr.py +0 -0
  29. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/kalibr_app.py +0 -0
  30. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/middleware/__init__.py +0 -0
  31. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/middleware/auto_tracer.py +0 -0
  32. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/models.py +0 -0
  33. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/redaction.py +0 -0
  34. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/schemas.py +0 -0
  35. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/simple_tracer.py +0 -0
  36. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/tokens.py +0 -0
  37. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/trace_capsule.py +0 -0
  38. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/trace_models.py +0 -0
  39. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/tracer.py +0 -0
  40. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/types.py +0 -0
  41. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr/utils.py +0 -0
  42. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/SOURCES.txt +0 -0
  43. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/dependency_links.txt +0 -0
  44. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/entry_points.txt +0 -0
  45. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/requires.txt +0 -0
  46. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr.egg-info/top_level.txt +0 -0
  47. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_crewai/__init__.py +0 -0
  48. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_crewai/callbacks.py +0 -0
  49. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_langchain/__init__.py +0 -0
  50. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_langchain/async_callback.py +0 -0
  51. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_langchain/callback.py +0 -0
  52. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_openai_agents/__init__.py +0 -0
  53. {kalibr-1.2.2 → kalibr-1.2.3}/kalibr_openai_agents/processor.py +0 -0
  54. {kalibr-1.2.2 → kalibr-1.2.3}/setup.cfg +0 -0
  55. {kalibr-1.2.2 → kalibr-1.2.3}/tests/test_capsule_builder.py +0 -0
  56. {kalibr-1.2.2 → kalibr-1.2.3}/tests/test_instrumentation.py +0 -0
  57. {kalibr-1.2.2 → kalibr-1.2.3}/tests/test_intelligence.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: kalibr
3
- Version: 1.2.2
3
+ Version: 1.2.3
4
4
  Summary: Unified LLM Observability & Multi-Model AI Integration Framework - Deploy to GPT, Claude, Gemini, Copilot with full telemetry.
5
5
  Author-email: Kalibr Team <support@kalibr.systems>
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: kalibr
3
- Version: 1.2.2
3
+ Version: 1.2.3
4
4
  Summary: Unified LLM Observability & Multi-Model AI Integration Framework - Deploy to GPT, Claude, Gemini, Copilot with full telemetry.
5
5
  Author-email: Kalibr Team <support@kalibr.systems>
6
6
  License: Apache-2.0
@@ -12,6 +12,8 @@ from datetime import datetime, timezone
12
12
  from functools import wraps
13
13
  from typing import Any, Callable, Dict, List, Optional
14
14
 
15
+ from opentelemetry import trace as otel_trace
16
+
15
17
  from .callbacks import EventBatcher, _count_tokens, _get_provider_from_model
16
18
 
17
19
  # Import Kalibr cost adapters
@@ -275,6 +277,21 @@ class KalibrCrewAIInstrumentor:
275
277
  duration_ms = int((time.time() - start_time) * 1000)
276
278
  ts_end = datetime.now(timezone.utc)
277
279
 
280
+ # Enrich CrewAI's OTel span with Kalibr telemetry
281
+ try:
282
+ current_span = otel_trace.get_current_span()
283
+ if current_span and current_span.is_recording():
284
+ current_span.set_attribute("kalibr.cost_usd", instrumentor._accumulated_cost)
285
+ current_span.set_attribute("kalibr.input_tokens", instrumentor._accumulated_tokens["input"])
286
+ current_span.set_attribute("kalibr.output_tokens", instrumentor._accumulated_tokens["output"])
287
+ current_span.set_attribute("kalibr.total_tokens", instrumentor._accumulated_tokens["input"] + instrumentor._accumulated_tokens["output"])
288
+ current_span.set_attribute("kalibr.model_id", model_name)
289
+ current_span.set_attribute("kalibr.provider", provider)
290
+ current_span.set_attribute("kalibr.duration_ms", duration_ms)
291
+ current_span.set_attribute("kalibr.tenant_id", instrumentor.tenant_id)
292
+ except Exception:
293
+ pass # Don't fail if span enrichment fails
294
+
278
295
  # Build output info
279
296
  output_preview = None
280
297
  if instrumentor.capture_output and result is not None:
@@ -376,6 +393,21 @@ class KalibrCrewAIInstrumentor:
376
393
  duration_ms = int((time.time() - start_time) * 1000)
377
394
  ts_end = datetime.now(timezone.utc)
378
395
 
396
+ # Enrich CrewAI's OTel span with Kalibr telemetry
397
+ try:
398
+ current_span = otel_trace.get_current_span()
399
+ if current_span and current_span.is_recording():
400
+ current_span.set_attribute("kalibr.cost_usd", instrumentor._accumulated_cost)
401
+ current_span.set_attribute("kalibr.input_tokens", instrumentor._accumulated_tokens["input"])
402
+ current_span.set_attribute("kalibr.output_tokens", instrumentor._accumulated_tokens["output"])
403
+ current_span.set_attribute("kalibr.total_tokens", instrumentor._accumulated_tokens["input"] + instrumentor._accumulated_tokens["output"])
404
+ current_span.set_attribute("kalibr.model_id", model_name)
405
+ current_span.set_attribute("kalibr.provider", provider)
406
+ current_span.set_attribute("kalibr.duration_ms", duration_ms)
407
+ current_span.set_attribute("kalibr.tenant_id", instrumentor.tenant_id)
408
+ except Exception:
409
+ pass # Don't fail if span enrichment fails
410
+
379
411
  output_preview = None
380
412
  if instrumentor.capture_output and result is not None:
381
413
  output_preview = str(result)[:500]
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "kalibr"
7
- version = "1.2.2"
7
+ version = "1.2.3"
8
8
  description = "Unified LLM Observability & Multi-Model AI Integration Framework - Deploy to GPT, Claude, Gemini, Copilot with full telemetry."
9
9
  authors = [{name = "Kalibr Team", email = "support@kalibr.systems"}]
10
10
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes