|
36 | 36 | UpdateGenerationBody, |
37 | 37 | ) |
38 | 38 | from langfuse.api.resources.ingestion.types.update_span_body import UpdateSpanBody |
| 39 | +from langfuse.api.resources.media import GetMediaResponse |
39 | 40 | from langfuse.api.resources.observations.types.observations_views import ( |
40 | 41 | ObservationsViews, |
41 | 42 | ) |
|
49 | 50 | from langfuse.api.resources.utils.resources.pagination.types.meta_response import ( |
50 | 51 | MetaResponse, |
51 | 52 | ) |
52 | | -from langfuse.api.resources.media import GetMediaResponse |
53 | 53 | from langfuse.model import ( |
54 | 54 | ChatMessageDict, |
55 | 55 | ChatPromptClient, |
|
74 | 74 | from langfuse.api.client import FernLangfuse |
75 | 75 | from langfuse.environment import get_common_release_envs |
76 | 76 | from langfuse.logging import clean_logger |
77 | | -from langfuse.model import Dataset, MapValue, Observation, TraceWithFullDetails |
78 | 77 | from langfuse.media import LangfuseMedia |
| 78 | +from langfuse.model import Dataset, MapValue, Observation, TraceWithFullDetails |
79 | 79 | from langfuse.request import LangfuseClient |
80 | 80 | from langfuse.types import MaskFunction, ScoreDataType, SpanLevel |
81 | 81 | from langfuse.utils import ( |
@@ -2018,6 +2018,14 @@ def shutdown(self): |
2018 | 2018 | As the SDK calls join() already on shutdown, refer to flush() to ensure all events arive at the Langfuse API. |
2019 | 2019 | """ |
2020 | 2020 | try: |
| 2021 | + self.prompt_cache._task_manager.shutdown() |
| 2022 | + |
| 2023 | + # In logging.py, a handler is attached to the httpx logger. |
| 2024 | + # To avoid a memory leak on singleton reset, remove all handlers |
| 2025 | + httpx_logger = logging.getLogger("httpx") |
| 2026 | + for handler in httpx_logger.handlers: |
| 2027 | + httpx_logger.removeHandler(handler) |
| 2028 | + |
2021 | 2029 | return self.task_manager.shutdown() |
2022 | 2030 | except Exception as e: |
2023 | 2031 | self.log.exception(e) |
|
0 commit comments