|
7 | 7 | import httpx |
8 | 8 | from opentelemetry import trace |
9 | 9 | from opentelemetry import trace as otel_trace_api |
| 10 | +from opentelemetry.sdk.trace import TracerProvider |
10 | 11 | from opentelemetry.sdk.trace.id_generator import RandomIdGenerator |
11 | 12 |
|
12 | 13 | from langfuse.api.client import AsyncFernLangfuse, FernLangfuse |
@@ -43,15 +44,15 @@ def __init__( |
43 | 44 | httpx_client: Optional[httpx.Client] = None, |
44 | 45 | debug: bool = False, |
45 | 46 | tracing_enabled: Optional[bool] = True, |
46 | | - # threads: Optional[int] = None, |
47 | | - # flush_at: Optional[int] = None, |
48 | | - # flush_interval: Optional[float] = None, |
49 | | - # max_retries: Optional[int] = None, |
50 | | - # sample_rate: Optional[float] = None, |
51 | | - # mask: Optional[MaskFunction] = None, |
52 | | - # sdk_integration: Optional[str] = "default", |
| 47 | + flush_at: Optional[int] = None, |
| 48 | + flush_interval: Optional[float] = None, |
53 | 49 | environment: Optional[str] = None, |
54 | 50 | release: Optional[str] = None, |
| 51 | + # sample_rate: Optional[float] = None, # TODO: Implement sampling |
| 52 | + # mask: Optional[MaskFunction] = None, # TODO: implement masking |
| 53 | + # sdk_integration: Optional[str] = "default", -> TO BE DEPRECATED |
| 54 | + # threads: Optional[int] = None, -> TO BE DEPRECATED |
| 55 | + # max_retries: Optional[int] = None, -> TO BE DEPRECATED |
55 | 56 | ): |
56 | 57 | debug = debug if debug else (os.getenv(LANGFUSE_DEBUG, "False") == "True") |
57 | 58 |
|
@@ -115,6 +116,8 @@ def __init__( |
115 | 116 | timeout=timeout, |
116 | 117 | environment=environment, |
117 | 118 | release=release, |
| 119 | + flush_at=flush_at, |
| 120 | + flush_interval=flush_interval, |
118 | 121 | ).tracer |
119 | 122 | if self.tracing_enabled |
120 | 123 | else otel_trace_api.NoOpTracer() |
@@ -271,7 +274,7 @@ def _create_span_with_parent_context( |
271 | 274 | ) as span: |
272 | 275 | yield span |
273 | 276 |
|
274 | | - @staticmethod |
| 277 | + @staticmethod # TODO: reconsider marking methods as static as changing object method later is breaking change |
275 | 278 | def get_current_span(): |
276 | 279 | return otel_trace_api.get_current_span() |
277 | 280 |
|
@@ -496,8 +499,16 @@ def update_finished_span(): |
496 | 499 |
|
497 | 500 | @staticmethod |
498 | 501 | def flush(): |
499 | | - pass |
| 502 | + tracer_provider = cast(TracerProvider, otel_trace_api.get_tracer_provider()) |
| 503 | + if isinstance(tracer_provider, otel_trace_api.ProxyTracerProvider): |
| 504 | + return |
| 505 | + |
| 506 | + tracer_provider.force_flush() |
500 | 507 |
|
501 | 508 | @staticmethod |
502 | 509 | def shutdown(): |
503 | | - pass |
| 510 | + tracer_provider = cast(TracerProvider, otel_trace_api.get_tracer_provider()) |
| 511 | + if isinstance(tracer_provider, otel_trace_api.ProxyTracerProvider): |
| 512 | + return |
| 513 | + |
| 514 | + tracer_provider.force_flush() |
0 commit comments