From 2e91405433ab46981191fe7054b3484a8ae7371a Mon Sep 17 00:00:00 2001 From: abhishek9sharma <17585931+abhishek9sharma@users.noreply.github.com> Date: Sat, 25 Jan 2025 21:11:46 +0800 Subject: [PATCH 01/24] - Add OpenInference span kind attribute to Guardrails telemetry spans. - Updated version to 0.6.3 in pyproject.toml. --- guardrails/telemetry/guard_tracing.py | 15 +++++++++++++-- guardrails/telemetry/open_inference.py | 3 ++- guardrails/telemetry/runner_tracing.py | 11 +++++++++++ guardrails/telemetry/validator_tracing.py | 9 +++++++++ pyproject.toml | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index 24062564f..68a3d8a0e 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -10,6 +10,7 @@ Union, ) +from openinference.semconv.trace import SpanAttributes from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Tracer, Span, Link, get_tracer @@ -153,6 +154,9 @@ def trace_stream_guard( guard_span = new_span add_guard_attributes(guard_span, history, res) add_user_attributes(guard_span) + new_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) yield res except StopIteration: next_exists = False @@ -179,7 +183,9 @@ def trace_guard_execution( guard_span.set_attribute("guardrails.version", GUARDRAILS_VERSION) guard_span.set_attribute("type", "guardrails/guard") guard_span.set_attribute("guard.name", guard_name) - + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: result = _execute_fn(*args, **kwargs) if isinstance(result, Iterator) and not isinstance( @@ -218,6 +224,9 @@ async def trace_async_stream_guard( add_guard_attributes(guard_span, history, res) add_user_attributes(guard_span) + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) yield res except StopIteration: next_exists = False @@ -259,7 +268,9 @@ async def trace_async_guard_execution( guard_span.set_attribute("guardrails.version", GUARDRAILS_VERSION) guard_span.set_attribute("type", "guardrails/guard") guard_span.set_attribute("guard.name", guard_name) - + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: result = await _execute_fn(*args, **kwargs) if isinstance(result, AsyncIterator): diff --git a/guardrails/telemetry/open_inference.py b/guardrails/telemetry/open_inference.py index 1fc33e08e..e2029b922 100644 --- a/guardrails/telemetry/open_inference.py +++ b/guardrails/telemetry/open_inference.py @@ -8,6 +8,7 @@ recursive_key_operation, redact, ) +from openinference.semconv.trace import SpanAttributes def trace_operation( @@ -82,7 +83,7 @@ def trace_llm_call( if current_span is None: return - + current_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") ser_function_call = serialize(function_call) if ser_function_call: current_span.set_attribute("llm.function_call", ser_function_call) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index cbf5b6ac2..8d09f31a6 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -7,6 +7,7 @@ Iterator, Optional, ) +from openinference.semconv.trace import SpanAttributes from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Span @@ -26,6 +27,7 @@ ) from guardrails.utils.safe_get import safe_get from guardrails.version import GUARDRAILS_VERSION +from openinference.semconv.trace import SpanAttributes import sys @@ -83,6 +85,9 @@ def trace_step_wrapper(*args, **kwargs) -> Iteration: name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: + step_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: response = fn(*args, **kwargs) add_step_attributes(step_span, response, *args, **kwargs) @@ -111,6 +116,7 @@ def trace_stream_step_generator( name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: + step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") try: gen = fn(*args, **kwargs) next_exists = True @@ -157,10 +163,14 @@ async def trace_async_step_wrapper(*args, **kwargs) -> Iteration: name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: + step_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: response = await fn(*args, **kwargs) add_user_attributes(step_span) add_step_attributes(step_span, response, *args, **kwargs) + return response except Exception as e: step_span.set_status(status=StatusCode.ERROR, description=str(e)) @@ -186,6 +196,7 @@ async def trace_async_stream_step_generator( name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: + step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") try: gen = fn(*args, **kwargs) next_exists = True diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index e9114b7be..41641e4c0 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -9,6 +9,7 @@ from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Tracer, Span +from openinference.semconv.trace import SpanAttributes from guardrails.settings import settings @@ -103,6 +104,10 @@ def trace_validator_wrapper(*args, **kwargs): name=validator_span_name, # type: ignore context=current_otel_context, # type: ignore ) as validator_span: + validator_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) + try: resp = fn(*args, **kwargs) add_user_attributes(validator_span) @@ -167,6 +172,10 @@ async def trace_validator_wrapper(*args, **kwargs): name=validator_span_name, # type: ignore context=current_otel_context, # type: ignore ) as validator_span: + validator_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) # see here for a list of span kinds: https://github.com/Arize-ai/openinference/blob/main/python/openinference-semantic-conventions/src/openinference/semconv/trace/__init__.py#L271 + try: resp = await fn(*args, **kwargs) add_user_attributes(validator_span) diff --git a/pyproject.toml b/pyproject.toml index c1a108152..809243d38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "guardrails-ai" -version = "0.6.2" +version = "0.6.3" description = "Adding guardrails to large language models." authors = ["Guardrails AI "] license = "Apache License 2.0" From d975a5c52abcd06a79bb4f1f65a6755cd24f9faf Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:30:59 -0600 Subject: [PATCH 02/24] Make openinference an optional dependency --- guardrails/telemetry/guard_tracing.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index 68a3d8a0e..0f8b84fe0 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -10,7 +10,10 @@ Union, ) -from openinference.semconv.trace import SpanAttributes +try: + from openinference.semconv.trace import SpanAttributes +except ImportError: + SpanAttributes = None from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Tracer, Span, Link, get_tracer From d5086c94f1ce2189452e64d8280c4f064dfb5d05 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:31:37 -0600 Subject: [PATCH 03/24] Make openinference an optional dependency --- guardrails/telemetry/guard_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index 0f8b84fe0..ca383a045 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -157,9 +157,10 @@ def trace_stream_guard( guard_span = new_span add_guard_attributes(guard_span, history, res) add_user_attributes(guard_span) - new_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + new_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) yield res except StopIteration: next_exists = False From 49fd872579f997a1151310adcec364392835ed0c Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:31:50 -0600 Subject: [PATCH 04/24] Make openinference an optional dependency --- guardrails/telemetry/guard_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index ca383a045..52611b7a1 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -187,9 +187,10 @@ def trace_guard_execution( guard_span.set_attribute("guardrails.version", GUARDRAILS_VERSION) guard_span.set_attribute("type", "guardrails/guard") guard_span.set_attribute("guard.name", guard_name) - guard_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: result = _execute_fn(*args, **kwargs) if isinstance(result, Iterator) and not isinstance( From 2e367af8c5399317627cdb85fa625b588f6ddbb8 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:32:00 -0600 Subject: [PATCH 05/24] Make openinference an optional dependency --- guardrails/telemetry/guard_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index 52611b7a1..a2e953502 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -229,9 +229,10 @@ async def trace_async_stream_guard( add_guard_attributes(guard_span, history, res) add_user_attributes(guard_span) - guard_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) yield res except StopIteration: next_exists = False From 8dcf880509913aa9da66015f71119f670f59cde5 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:32:10 -0600 Subject: [PATCH 06/24] Make openinference an optional dependency --- guardrails/telemetry/guard_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index a2e953502..36ceb79ed 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -274,9 +274,10 @@ async def trace_async_guard_execution( guard_span.set_attribute("guardrails.version", GUARDRAILS_VERSION) guard_span.set_attribute("type", "guardrails/guard") guard_span.set_attribute("guard.name", guard_name) - guard_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + guard_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: result = await _execute_fn(*args, **kwargs) if isinstance(result, AsyncIterator): From 09070d96ac4c2ad66e198b59000c9d84971da2a9 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:32:20 -0600 Subject: [PATCH 07/24] Make openinference an optional dependency --- guardrails/telemetry/open_inference.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/open_inference.py b/guardrails/telemetry/open_inference.py index e2029b922..029d1bb46 100644 --- a/guardrails/telemetry/open_inference.py +++ b/guardrails/telemetry/open_inference.py @@ -8,7 +8,10 @@ recursive_key_operation, redact, ) -from openinference.semconv.trace import SpanAttributes +try: + from openinference.semconv.trace import SpanAttributes +except ImportError: + SpanAttributes = None def trace_operation( From 527ef42b630ee21af465c3c4095578359b879714 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:32:32 -0600 Subject: [PATCH 08/24] Make openinference an optional dependency --- guardrails/telemetry/open_inference.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/open_inference.py b/guardrails/telemetry/open_inference.py index 029d1bb46..f9b30569a 100644 --- a/guardrails/telemetry/open_inference.py +++ b/guardrails/telemetry/open_inference.py @@ -86,7 +86,8 @@ def trace_llm_call( if current_span is None: return - current_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") + if SpanAttributes is not None: + current_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") ser_function_call = serialize(function_call) if ser_function_call: current_span.set_attribute("llm.function_call", ser_function_call) From cedbf2122dd5de8f4b1c999fcc6ca6ba8ee5921d Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:32:43 -0600 Subject: [PATCH 09/24] Make openinference an optional dependency --- guardrails/telemetry/runner_tracing.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index 8d09f31a6..60050745f 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -7,7 +7,10 @@ Iterator, Optional, ) -from openinference.semconv.trace import SpanAttributes +try: + from openinference.semconv.trace import SpanAttributes +except ImportError: + SpanAttributes = None from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Span From 32e71834d2016855033702bc0efde0a010711c4c Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:02 -0600 Subject: [PATCH 10/24] remove duplicate import --- guardrails/telemetry/runner_tracing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index 60050745f..be3ee93de 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -30,7 +30,6 @@ ) from guardrails.utils.safe_get import safe_get from guardrails.version import GUARDRAILS_VERSION -from openinference.semconv.trace import SpanAttributes import sys From 97f3abc6cafcbd03cd4a0d6a9865fe094e81bf94 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:11 -0600 Subject: [PATCH 11/24] Make openinference an optional dependency --- guardrails/telemetry/runner_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index be3ee93de..8f1aee3d7 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -87,9 +87,10 @@ def trace_step_wrapper(*args, **kwargs) -> Iteration: name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: - step_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + step_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: response = fn(*args, **kwargs) add_step_attributes(step_span, response, *args, **kwargs) From f86be8fe319d74dfb38a22b776614ee4f585e415 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:21 -0600 Subject: [PATCH 12/24] Make openinference an optional dependency --- guardrails/telemetry/runner_tracing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index 8f1aee3d7..1e602b066 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -119,7 +119,8 @@ def trace_stream_step_generator( name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: - step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") + if SpanAttributes is not None: + step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") try: gen = fn(*args, **kwargs) next_exists = True From db991018874dea1289f51417a5665ba32195b87e Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:39 -0600 Subject: [PATCH 13/24] Make openinference an optional dependency --- guardrails/telemetry/runner_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index 1e602b066..60ebf09a6 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -167,9 +167,10 @@ async def trace_async_step_wrapper(*args, **kwargs) -> Iteration: name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: - step_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + step_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: response = await fn(*args, **kwargs) add_user_attributes(step_span) From efa9d13c712f3d4d198ccb7fa2dcaed24a722108 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:48 -0600 Subject: [PATCH 14/24] Make openinference an optional dependency --- guardrails/telemetry/runner_tracing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index 60ebf09a6..e6838074f 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -201,7 +201,8 @@ async def trace_async_stream_step_generator( name="step", # type: ignore context=current_otel_context, # type: ignore ) as step_span: - step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") + if SpanAttributes is not None: + step_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL") try: gen = fn(*args, **kwargs) next_exists = True From 2d98002958b545b59dccd4a81568d146bdcd7cb1 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:33:56 -0600 Subject: [PATCH 15/24] Make openinference an optional dependency --- guardrails/telemetry/validator_tracing.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index 41641e4c0..d4fe8fe88 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -9,7 +9,10 @@ from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Tracer, Span -from openinference.semconv.trace import SpanAttributes +try: + from openinference.semconv.trace import SpanAttributes +except ImportError: + SpanAttributes = None from guardrails.settings import settings From 403176206c5d4bd61ac95dc0adbf8564c5d7ea97 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:34:04 -0600 Subject: [PATCH 16/24] Make openinference an optional dependency --- guardrails/telemetry/validator_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index d4fe8fe88..dfeac04b2 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -107,9 +107,10 @@ def trace_validator_wrapper(*args, **kwargs): name=validator_span_name, # type: ignore context=current_otel_context, # type: ignore ) as validator_span: - validator_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) + if SpanAttributes is not None: + validator_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) try: resp = fn(*args, **kwargs) From 824d584f1ea59452a088e80fd86b3a569fed297f Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:34:12 -0600 Subject: [PATCH 17/24] Make openinference an optional dependency --- guardrails/telemetry/validator_tracing.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index dfeac04b2..f89848ced 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -176,9 +176,10 @@ async def trace_validator_wrapper(*args, **kwargs): name=validator_span_name, # type: ignore context=current_otel_context, # type: ignore ) as validator_span: - validator_span.set_attribute( - SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" - ) # see here for a list of span kinds: https://github.com/Arize-ai/openinference/blob/main/python/openinference-semantic-conventions/src/openinference/semconv/trace/__init__.py#L271 + if SpanAttributes is not None: + validator_span.set_attribute( + SpanAttributes.OPENINFERENCE_SPAN_KIND, "GUARDRAIL" + ) # see here for a list of span kinds: https://github.com/Arize-ai/openinference/blob/main/python/openinference-semantic-conventions/src/openinference/semconv/trace/__init__.py#L271 try: resp = await fn(*args, **kwargs) From b8fd754b4ca1ba9244ea2614d9adf1d21a5fdde5 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:41:07 -0600 Subject: [PATCH 18/24] Formatting --- guardrails/telemetry/open_inference.py | 1 + 1 file changed, 1 insertion(+) diff --git a/guardrails/telemetry/open_inference.py b/guardrails/telemetry/open_inference.py index f9b30569a..2e9831050 100644 --- a/guardrails/telemetry/open_inference.py +++ b/guardrails/telemetry/open_inference.py @@ -8,6 +8,7 @@ recursive_key_operation, redact, ) + try: from openinference.semconv.trace import SpanAttributes except ImportError: From e8e4928b14f39dc0a648e97508f21c43bcedafe0 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:41:27 -0600 Subject: [PATCH 19/24] Formatting --- guardrails/telemetry/runner_tracing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index e6838074f..f8e7372de 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -7,6 +7,7 @@ Iterator, Optional, ) + try: from openinference.semconv.trace import SpanAttributes except ImportError: From e8077ed9c628043ff9085c9d48d78071ee238470 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:41:47 -0600 Subject: [PATCH 20/24] formatting --- guardrails/telemetry/validator_tracing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index f89848ced..e5f49f36e 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -9,6 +9,7 @@ from opentelemetry import context, trace from opentelemetry.trace import StatusCode, Tracer, Span + try: from openinference.semconv.trace import SpanAttributes except ImportError: From fa0e23466978274907bc4636725dd2c686a035cc Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:44:53 -0600 Subject: [PATCH 21/24] type ignore optional dep --- guardrails/telemetry/guard_tracing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guardrails/telemetry/guard_tracing.py b/guardrails/telemetry/guard_tracing.py index 36ceb79ed..5a63de4c3 100644 --- a/guardrails/telemetry/guard_tracing.py +++ b/guardrails/telemetry/guard_tracing.py @@ -11,7 +11,7 @@ ) try: - from openinference.semconv.trace import SpanAttributes + from openinference.semconv.trace import SpanAttributes # type: ignore except ImportError: SpanAttributes = None from opentelemetry import context, trace From d25ecd7559d3a00080c6205fc1e39ce79a176919 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:45:26 -0600 Subject: [PATCH 22/24] type ignore optional dep --- guardrails/telemetry/open_inference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guardrails/telemetry/open_inference.py b/guardrails/telemetry/open_inference.py index 2e9831050..2c838f66b 100644 --- a/guardrails/telemetry/open_inference.py +++ b/guardrails/telemetry/open_inference.py @@ -10,7 +10,7 @@ ) try: - from openinference.semconv.trace import SpanAttributes + from openinference.semconv.trace import SpanAttributes # type: ignore except ImportError: SpanAttributes = None From 1ca9ef7fc55802708454eec980446f3d5813a399 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:45:51 -0600 Subject: [PATCH 23/24] type ignore optional dep --- guardrails/telemetry/runner_tracing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guardrails/telemetry/runner_tracing.py b/guardrails/telemetry/runner_tracing.py index f8e7372de..6ba924819 100644 --- a/guardrails/telemetry/runner_tracing.py +++ b/guardrails/telemetry/runner_tracing.py @@ -9,7 +9,7 @@ ) try: - from openinference.semconv.trace import SpanAttributes + from openinference.semconv.trace import SpanAttributes # type: ignore except ImportError: SpanAttributes = None From 9ab41232da6843c7707794340138cb38487c53b1 Mon Sep 17 00:00:00 2001 From: Caleb Courier <13314870+CalebCourier@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:46:11 -0600 Subject: [PATCH 24/24] type ignore optional dep --- guardrails/telemetry/validator_tracing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guardrails/telemetry/validator_tracing.py b/guardrails/telemetry/validator_tracing.py index e5f49f36e..ad5bcff8e 100644 --- a/guardrails/telemetry/validator_tracing.py +++ b/guardrails/telemetry/validator_tracing.py @@ -11,7 +11,7 @@ from opentelemetry.trace import StatusCode, Tracer, Span try: - from openinference.semconv.trace import SpanAttributes + from openinference.semconv.trace import SpanAttributes # type: ignore except ImportError: SpanAttributes = None