Error handling is an essential aspect of application development. It ensures that applications can gracefully handle unexpected situations and provide meaningful feedback to users. In this blog post, we will explore the recent improvements made by the team to the error handling mechanism in the Semantic Kernel (SK) .net library.
SKException: Making Error Handling Easier
One of the key changes introduced by the team is greater coverage and use of the SKException class. The exception hierarchy has been carefully flattened and 17 custom exception classes have been removed. SK now only has two, SKException and HttpOperationException. For example, you may previously used the AzureSearchMemoryException for error handling, which has now been replaced by SKException. These updates provide a more intuitive and streamlined approach to error handling.
Streamlining Connectors
The team has made significant changes to various connectors used in SK, such as RedisMemoryStore, GrpcOperationRunner, ProtoDocumentParser, PineconeMemoryStore, QdrantMemoryStore, WeaviateMemoryStore and more. These connectors now throw SKException instead of their dedicated exceptions, resulting in a more consistent and unified error handling experience.
Enhancements to SK Components
To further improve error handling, the team has updated various SK components to throw SKException instead of KernelException and OpenAIInvalidResponseException. This change ensures that exceptions are handled uniformly across different parts of the SK library. Additionally, the template engine functionality has been updated to throw SKException instead of TemplateException, simplifying error handling for template-related issues. The SK planners functionality has been enhanced to throw SKException instead of PlanningException, resulting in a more cohesive error handling approach.
Introducing HttpOperationException
To handle HTTP-related exceptions more uniformly, we introduced the `HttpOperationException`. This exception class replaces the `AIException` class, which was previously used for both HTTP-related and unrelated cases, the `HttpRequestException` that was thrown by a few core skills, and the `RequestFailedException` that was used by the `AzureCognitiveSearchMemoryStore`. This replacement ensures consistent exception handling across SK consumer code.
Conclusion
The recent improvements in semantic kernel error handling have significantly enhanced the overall error handling experience for developers using the SK library. With streamlined exception classes, unified error handling across connectors and components, and useful extension methods, developers can now handle errors more effectively and build robust applications with ease.
Please note that this blog post is based on information available up until September 2023 and may not reflect any subsequent updates or changes.
Next Steps:
- Get the latest SDK version here to benefit from these changes.
- Join our community to contribute or if you have questions.
0 comments