From ba610011371c8a667d0fe0ed9cd18aa4bd1ddba0 Mon Sep 17 00:00:00 2001 From: David Grieve Date: Mon, 22 May 2023 05:51:30 -0400 Subject: [PATCH] Exception classes in the API should extend SKException (#1112) ### Motivation and Context ### Description ### Contribution Checklist - [ ] The code builds clean without any errors or warnings - [ ] The PR follows SK Contribution Guidelines (https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) - [ ] The code follows the .NET coding conventions (https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions) verified with `dotnet format` - [ ] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone :smile: --- .../semantickernel/KernelException.java | 2 +- .../microsoft/semantickernel/SKException.java | 32 ++++++++++++++++- .../semantickernel/ai/AIException.java | 4 ++- .../diagnostics/SKException.java | 34 ------------------- .../exceptions/NotSupportedException.java | 4 ++- .../exceptions/SkillsNotFoundException.java | 4 ++- .../memory/MemoryException.java | 2 +- .../FunctionNotRegisteredException.java | 18 +++++----- .../skilldefinition/FunctionNotFound.java | 4 ++- .../templateengine/TemplateException.java | 2 +- 10 files changed, 56 insertions(+), 50 deletions(-) delete mode 100644 java/semantickernel-api/src/main/java/com/microsoft/semantickernel/diagnostics/SKException.java diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/KernelException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/KernelException.java index 751cd94530..12395fbf90 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/KernelException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/KernelException.java @@ -5,7 +5,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; /** Kernel logic exception */ -public class KernelException extends RuntimeException { +public class KernelException extends SKException { @Nonnull private final ErrorCodes errorCode; diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/SKException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/SKException.java index 2abb5aa0ac..446aa05c75 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/SKException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/SKException.java @@ -1,4 +1,34 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel; -public class SKException extends RuntimeException {} +import javax.annotation.Nullable; + +/** Provides the base exception from which all Semantic Kernel exceptions derive. */ +public class SKException extends RuntimeException { + + /** Initializes a new instance of the {@code SKException} class with a default message. */ + protected SKException() { + super(); + } + + /** + * Initializes a new instance of the {@code SKException} class with its message set to {@code + * message}. + * + * @param message A string that describes the error. + */ + protected SKException(@Nullable String message) { + super(message); + } + + /** + * Initializes a new instance of the {@code SKException} class with its message set to {@code + * message}. + * + * @param message A string that describes the error. + * @param cause The exception that is the cause of the current exception. + */ + protected SKException(@Nullable String message, @Nullable Throwable cause) { + super(message, cause); + } +} diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/ai/AIException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/ai/AIException.java index 1b3c19148b..59e43e9deb 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/ai/AIException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/ai/AIException.java @@ -1,11 +1,13 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.ai; // Copyright (c) Microsoft. All rights reserved. +import com.microsoft.semantickernel.SKException; + import javax.annotation.Nonnull; import javax.annotation.Nullable; /** AI logic exception */ -public class AIException extends RuntimeException { +public class AIException extends SKException { @Nonnull private final ErrorCodes errorCode; diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/diagnostics/SKException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/diagnostics/SKException.java deleted file mode 100644 index 6d4a46e28a..0000000000 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/diagnostics/SKException.java +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -package com.microsoft.semantickernel.diagnostics; - -import javax.annotation.Nullable; - -/** Provides the base exception from which all Semantic Kernel exceptions derive. */ -public class SKException extends RuntimeException { - - /** Initializes a new instance of the {@code SKException} class with a default message. */ - protected SKException() { - super(); - } - - /** - * Initializes a new instance of the {@code SKException} class with its message set to {@code - * message}. - * - * @param message A string that describes the error. - */ - protected SKException(@Nullable String message) { - super(message); - } - - /** - * Initializes a new instance of the {@code SKException} class with its message set to {@code - * message}. - * - * @param message A string that describes the error. - * @param cause The exception that is the cause of the current exception. - */ - protected SKException(@Nullable String message, @Nullable Throwable cause) { - super(message, cause); - } -} diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/NotSupportedException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/NotSupportedException.java index 1c3c537410..89fa622382 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/NotSupportedException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/NotSupportedException.java @@ -1,7 +1,9 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.exceptions; -public class NotSupportedException extends RuntimeException { +import com.microsoft.semantickernel.SKException; + +public class NotSupportedException extends SKException { public NotSupportedException(String s) { super(s); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/SkillsNotFoundException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/SkillsNotFoundException.java index c0b323db47..f1dbf8ff1e 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/SkillsNotFoundException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/exceptions/SkillsNotFoundException.java @@ -1,4 +1,6 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.exceptions; -public class SkillsNotFoundException extends RuntimeException {} +import com.microsoft.semantickernel.SKException; + +public class SkillsNotFoundException extends SKException {} diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/memory/MemoryException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/memory/MemoryException.java index 8951f0f992..9a85b18931 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/memory/MemoryException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/memory/MemoryException.java @@ -1,7 +1,7 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.memory; -import com.microsoft.semantickernel.diagnostics.SKException; +import com.microsoft.semantickernel.SKException; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionNotRegisteredException.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionNotRegisteredException.java index 9620742097..0fc8d2ef59 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionNotRegisteredException.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionNotRegisteredException.java @@ -1,15 +1,17 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.orchestration; -public class FunctionNotRegisteredException extends RuntimeException { +import com.microsoft.semantickernel.SKException; + +public class FunctionNotRegisteredException extends SKException { + + private static final String format = + "It does not appear this function(%s) has been registered on a kernel.%n" + + "Register it on a kernel either by passing it to " + + "KernelConfig.Builder().addSkill() when building the kernel, or%n" + + "passing it to Kernel.registerSemanticFunction"; public FunctionNotRegisteredException(String name) { - super( - "It does not appear this function(" - + name - + ") has been registered on a kernel.\n" - + "Register it on a kernel either by passing it to" - + " KernelConfig.Builder().addSkill() when building the kernel, or\n" - + "passing it to Kernel.registerSemanticFunction"); + super(String.format(format, name)); } } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/skilldefinition/FunctionNotFound.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/skilldefinition/FunctionNotFound.java index 3fdc147139..59b1b238b5 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/skilldefinition/FunctionNotFound.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/skilldefinition/FunctionNotFound.java @@ -1,7 +1,9 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.skilldefinition; -public class FunctionNotFound extends RuntimeException { +import com.microsoft.semantickernel.SKException; + +public class FunctionNotFound extends SKException { public FunctionNotFound(String functionName) { super("Could not find function: " + functionName); } diff --git a/java/semantickernel-core/src/main/java/com/microsoft/semantickernel/templateengine/TemplateException.java b/java/semantickernel-core/src/main/java/com/microsoft/semantickernel/templateengine/TemplateException.java index 084ea9bee7..e8eb93a579 100644 --- a/java/semantickernel-core/src/main/java/com/microsoft/semantickernel/templateengine/TemplateException.java +++ b/java/semantickernel-core/src/main/java/com/microsoft/semantickernel/templateengine/TemplateException.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft. All rights reserved. package com.microsoft.semantickernel.templateengine; -import com.microsoft.semantickernel.diagnostics.SKException; +import com.microsoft.semantickernel.SKException; public class TemplateException extends SKException {}