Spaces:
Configuration error
Configuration error
| import platform | |
| import re | |
| import socket | |
| import time | |
| import uuid | |
| from inference.core.cache import cache | |
| from inference.core.logger import logger | |
| from inference.core.version import __version__ | |
| def get_model_metrics( | |
| inference_server_id: str, model_id: str, min: float = -1, max: float = float("inf") | |
| ) -> dict: | |
| """ | |
| Gets the metrics for a given model between a specified time range. | |
| Args: | |
| device_id (str): The identifier of the device. | |
| model_id (str): The identifier of the model. | |
| start (float, optional): The starting timestamp of the time range. Defaults to -1. | |
| stop (float, optional): The ending timestamp of the time range. Defaults to float("inf"). | |
| Returns: | |
| dict: A dictionary containing the metrics of the model: | |
| - num_inferences (int): The number of inferences made. | |
| - avg_inference_time (float): The average inference time. | |
| - num_errors (int): The number of errors occurred. | |
| """ | |
| now = time.time() | |
| inferences_with_times = cache.zrangebyscore( | |
| f"inference:{inference_server_id}:{model_id}", min=min, max=max, withscores=True | |
| ) | |
| num_inferences = len(inferences_with_times) | |
| inference_times = [] | |
| for inference, t in inferences_with_times: | |
| response = inference["response"] | |
| if isinstance(response, list): | |
| times = [r["time"] for r in response if "time" in r] | |
| inference_times.extend(times) | |
| else: | |
| if "time" in response: | |
| inference_times.append(response["time"]) | |
| avg_inference_time = ( | |
| sum(inference_times) / len(inference_times) if len(inference_times) > 0 else 0 | |
| ) | |
| errors_with_times = cache.zrangebyscore( | |
| f"error:{inference_server_id}:{model_id}", min=min, max=max, withscores=True | |
| ) | |
| num_errors = len(errors_with_times) | |
| return { | |
| "num_inferences": num_inferences, | |
| "avg_inference_time": avg_inference_time, | |
| "num_errors": num_errors, | |
| } | |
| def get_system_info() -> dict: | |
| """Collects system information such as platform, architecture, hostname, IP address, MAC address, and processor details. | |
| Returns: | |
| dict: A dictionary containing detailed system information. | |
| """ | |
| info = {} | |
| try: | |
| info["platform"] = platform.system() | |
| info["platform_release"] = platform.release() | |
| info["platform_version"] = platform.version() | |
| info["architecture"] = platform.machine() | |
| info["hostname"] = socket.gethostname() | |
| info["ip_address"] = socket.gethostbyname(socket.gethostname()) | |
| info["mac_address"] = ":".join(re.findall("..", "%012x" % uuid.getnode())) | |
| info["processor"] = platform.processor() | |
| return info | |
| except Exception as e: | |
| logger.exception(e) | |
| finally: | |
| return info | |
| def get_inference_results_for_model( | |
| inference_server_id: str, model_id: str, min: float = -1, max: float = float("inf") | |
| ): | |
| inferences_with_times = cache.zrangebyscore( | |
| f"inference:{inference_server_id}:{model_id}", min=min, max=max, withscores=True | |
| ) | |
| inference_results = [] | |
| for result, score in inferences_with_times: | |
| # Don't send large image files | |
| if result.get("request", {}).get("image"): | |
| del result["request"]["image"] | |
| responses = result.get("response") | |
| if responses: | |
| if not isinstance(responses, list): | |
| responses = [responses] | |
| for resp in responses: | |
| if resp.get("image"): | |
| del resp["image"] | |
| inference_results.append({"request_time": score, "inference": result}) | |
| return inference_results | |