mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 18:54:30 +00:00
71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
import litellm
|
|
from .types.services import ServiceTypes, ServiceLoggerPayload
|
|
from .integrations.prometheus_services import PrometheusServicesLogger
|
|
|
|
|
|
class ServiceLogging:
|
|
"""
|
|
Separate class used for monitoring health of litellm-adjacent services (redis/postgres).
|
|
"""
|
|
|
|
def __init__(self, mock_testing: bool = False) -> None:
|
|
self.mock_testing = mock_testing
|
|
self.mock_testing_sync_success_hook = 0
|
|
self.mock_testing_async_success_hook = 0
|
|
self.mock_testing_sync_failure_hook = 0
|
|
self.mock_testing_async_failure_hook = 0
|
|
|
|
if "prometheus_system" in litellm.service_callback:
|
|
self.prometheusServicesLogger = PrometheusServicesLogger()
|
|
|
|
def service_success_hook(self, service: ServiceTypes, duration: float):
|
|
"""
|
|
[TODO] Not implemented for sync calls yet. V0 is focused on async monitoring (used by proxy).
|
|
"""
|
|
if self.mock_testing:
|
|
self.mock_testing_sync_success_hook += 1
|
|
|
|
def service_failure_hook(
|
|
self, service: ServiceTypes, duration: float, error: Exception
|
|
):
|
|
"""
|
|
[TODO] Not implemented for sync calls yet. V0 is focused on async monitoring (used by proxy).
|
|
"""
|
|
if self.mock_testing:
|
|
self.mock_testing_sync_failure_hook += 1
|
|
|
|
async def async_service_success_hook(self, service: ServiceTypes, duration: float):
|
|
"""
|
|
- For counting if the redis, postgres call is successful
|
|
"""
|
|
if self.mock_testing:
|
|
self.mock_testing_async_success_hook += 1
|
|
|
|
payload = ServiceLoggerPayload(
|
|
is_error=False, error=None, service=service, duration=duration
|
|
)
|
|
for callback in litellm.service_callback:
|
|
if callback == "prometheus_system":
|
|
await self.prometheusServicesLogger.async_service_success_hook(
|
|
payload=payload
|
|
)
|
|
|
|
async def async_service_failure_hook(
|
|
self, service: ServiceTypes, duration: float, error: Exception
|
|
):
|
|
"""
|
|
- For counting if the redis, postgres call is unsuccessful
|
|
"""
|
|
if self.mock_testing:
|
|
self.mock_testing_async_failure_hook += 1
|
|
|
|
payload = ServiceLoggerPayload(
|
|
is_error=True, error=str(error), service=service, duration=duration
|
|
)
|
|
for callback in litellm.service_callback:
|
|
if callback == "prometheus_system":
|
|
if self.prometheusServicesLogger is None:
|
|
self.prometheusServicesLogger = self.prometheusServicesLogger()
|
|
await self.prometheusServicesLogger.async_service_failure_hook(
|
|
payload=payload
|
|
)
|