in instrumentation/elastic-opentelemetry-instrumentation-openai/src/opentelemetry/instrumentation/openai/__init__.py [0:0]
def _instrument(self, **kwargs):
"""Instruments OpenAI Completions and AsyncCompletions
Args:
**kwargs: Optional arguments
``tracer_provider``: a TracerProvider, defaults to global
``meter_provider``: a MeterProvider, defaults to global
``event_logger_provider``: a EventLoggerProvider, defaults to global
``capture_message_content``: to enable content capturing, defaults to False
"""
capture_message_content = "true" if kwargs.get("capture_message_content") else "false"
self.capture_message_content = (
os.environ.get(OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT, capture_message_content).lower()
== "true"
)
tracer_provider = kwargs.get("tracer_provider")
self.tracer = get_tracer(
__name__,
__version__,
tracer_provider,
schema_url=Schemas.V1_31_0.value,
)
meter_provider = kwargs.get("meter_provider")
self.meter = get_meter(
__name__,
__version__,
meter_provider,
schema_url=Schemas.V1_31_0.value,
)
event_logger_provider = kwargs.get("event_logger_provider")
self.event_logger = get_event_logger(__name__, event_logger_provider)
self.token_usage_metric = self.meter.create_histogram(
name=GEN_AI_CLIENT_TOKEN_USAGE,
description="Measures number of input and output tokens used",
unit="{token}",
explicit_bucket_boundaries_advisory=_GEN_AI_CLIENT_TOKEN_USAGE_BUCKETS,
)
self.operation_duration_metric = self.meter.create_histogram(
name=GEN_AI_CLIENT_OPERATION_DURATION,
description="GenAI operation duration",
unit="s",
explicit_bucket_boundaries_advisory=_GEN_AI_CLIENT_OPERATION_DURATION_BUCKETS,
)
register_post_import_hook(self._patch, "openai")