mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 11:19:56 +00:00
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> We very recently added instrumentation to kernel functions: https://github.com/microsoft/semantic-kernel/pull/8280. That PR added logs and traces for observing a kernel function. This PR adds metrics and modifies the telemetry sample app to show how to export metric instruments to Application Insights. ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> 1. Kernel function now produces metrics data for observability. 2. Add code to export metric instruments to the telemetry sample. 3. Add Google AI as a second service to the telemetry sample to show case nested spans. 4. Mics optimizations.    ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [x] I didn't break anyone 😄
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
import logging
|
|
from logging import Logger
|
|
|
|
from semantic_kernel.functions.function_result import FunctionResult
|
|
from semantic_kernel.functions.kernel_arguments import KernelArguments
|
|
|
|
|
|
class KernelFunctionLogMessages:
|
|
"""Kernel function log messages.
|
|
|
|
This class contains static methods to log messages related to kernel functions.
|
|
"""
|
|
|
|
@staticmethod
|
|
def log_function_invoking(logger: Logger, kernel_function_name: str):
|
|
"""Log message when a kernel function is invoked."""
|
|
logger.info("Function %s invoking.", kernel_function_name)
|
|
|
|
@staticmethod
|
|
def log_function_arguments(logger: Logger, arguments: KernelArguments):
|
|
"""Log message when a kernel function is invoked."""
|
|
logger.debug("Function arguments: %s", arguments)
|
|
|
|
@staticmethod
|
|
def log_function_invoked_success(logger: Logger, kernel_function_name: str):
|
|
"""Log message when a kernel function is invoked successfully."""
|
|
logger.info("Function %s succeeded.", kernel_function_name)
|
|
|
|
@staticmethod
|
|
def log_function_result_value(logger: Logger, function_result: FunctionResult | None):
|
|
"""Log message when a kernel function result is returned."""
|
|
if not logger.isEnabledFor(logging.DEBUG):
|
|
return
|
|
|
|
if function_result is not None:
|
|
try:
|
|
logger.debug("Function result: %s", function_result)
|
|
except Exception:
|
|
logger.error("Function result: Failed to convert result value to string")
|
|
else:
|
|
logger.debug("Function result: None")
|
|
|
|
@staticmethod
|
|
def log_function_error(logger: Logger, error: Exception):
|
|
"""Log message when a kernel function fails."""
|
|
logger.error("Function failed. Error: %s", error)
|
|
|
|
@staticmethod
|
|
def log_function_completed(logger: Logger, duration: float):
|
|
"""Log message when a kernel function is completed."""
|
|
logger.info("Function completed. Duration: %fs", duration)
|
|
|
|
@staticmethod
|
|
def log_function_streaming_invoking(logger: Logger, kernel_function_name: str):
|
|
"""Log message when a kernel function is invoked via streaming."""
|
|
logger.info("Function %s streaming.", kernel_function_name)
|
|
|
|
@staticmethod
|
|
def log_function_streaming_completed(logger: Logger, duration: float):
|
|
"""Log message when a kernel function is completed via streaming."""
|
|
logger.info("Function streaming completed. Duration: %fs", duration)
|