Skip to content

Commit 8f0249a

Browse files
committed
fix: resolve mypy errors in otel and pydantic_ai exporters
1 parent 0a77c15 commit 8f0249a

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

posthog/ai/otel/exporter.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,25 @@
88

99
import json
1010
import logging
11-
from typing import Any, Dict, Optional, Sequence, Union
11+
from typing import TYPE_CHECKING, Any, Dict, Optional, Sequence, Union
1212

1313
from posthog.client import Client as PostHogClient
1414

15+
if TYPE_CHECKING:
16+
from opentelemetry.sdk.trace import ReadableSpan
17+
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
18+
from opentelemetry.trace import StatusCode
19+
1520
try:
1621
from opentelemetry.sdk.trace import ReadableSpan
1722
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
1823
from opentelemetry.trace import StatusCode
1924

2025
OTEL_AVAILABLE = True
26+
_BASE_CLASS = SpanExporter
2127
except ImportError:
2228
OTEL_AVAILABLE = False
23-
# Define stub types for type hints when OTel is not installed
24-
ReadableSpan = Any # type: ignore
25-
SpanExporter = object # type: ignore
26-
SpanExportResult = Any # type: ignore
27-
StatusCode = Any # type: ignore
29+
_BASE_CLASS = object
2830

2931
logger = logging.getLogger(__name__)
3032

@@ -77,7 +79,7 @@ class GenAIAttributes:
7779
SERVER_PORT = "server.port"
7880

7981

80-
class PostHogSpanExporter(SpanExporter if OTEL_AVAILABLE else object):
82+
class PostHogSpanExporter(_BASE_CLASS): # type: ignore[valid-type,misc]
8183
"""
8284
OpenTelemetry SpanExporter that sends AI/LLM spans to PostHog.
8385
@@ -284,7 +286,7 @@ def _is_agent_span(self, span_name: str, attrs: Dict[str, Any]) -> bool:
284286
"""Check if span represents an agent run."""
285287
return span_name in ("agent run", "invoke_agent") or attrs.get(
286288
GenAIAttributes.AGENT_NAME
287-
)
289+
) is not None
288290

289291
def _is_tool_span(self, span_name: str, attrs: Dict[str, Any]) -> bool:
290292
"""Check if span represents a tool/function execution."""

posthog/ai/pydantic_ai/exporter.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@
55
Pydantic AI-specific transformations like message format normalization.
66
"""
77

8-
from typing import Any, Dict, List, Optional, Sequence
8+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence
9+
10+
if TYPE_CHECKING:
11+
from opentelemetry.sdk.trace import ReadableSpan
12+
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
913

1014
try:
1115
from opentelemetry.sdk.trace import ReadableSpan
1216
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
1317

1418
OTEL_AVAILABLE = True
19+
_BASE_CLASS = SpanExporter
1520
except ImportError:
1621
OTEL_AVAILABLE = False
17-
ReadableSpan = Any # type: ignore
18-
SpanExporter = object # type: ignore
19-
SpanExportResult = Any # type: ignore
22+
_BASE_CLASS = object
2023

2124
from posthog.ai.otel import PostHogSpanExporter
2225
from posthog.client import Client as PostHogClient
2326

2427

25-
class PydanticAISpanExporter(SpanExporter if OTEL_AVAILABLE else object):
28+
class PydanticAISpanExporter(_BASE_CLASS): # type: ignore[valid-type,misc]
2629
"""
2730
SpanExporter for Pydantic AI that normalizes messages to OpenAI format.
2831

0 commit comments

Comments
 (0)