From b2bfff2073cb0502830c1996512a277c29234e0e Mon Sep 17 00:00:00 2001 From: John Oliver <1615532+johnoliver@users.noreply.github.com> Date: Mon, 12 Feb 2024 21:17:39 +0000 Subject: [PATCH 1/4] Java: Complete rename from skill to plugin (#4971) Closes #1576 --- .../chatcompletion/OpenAIChatCompletion.java | 2 +- .../Example01NativeFunctionsTest.java | 2 +- .../Example03_ArgumentsTest.java | 2 +- .../plugins/text/TextPlugin.java | 2 +- .../samples/plugins/TimePlugin.java | 43 ------------------- .../Example01_NativeFunctions.java | 2 +- .../syntaxexamples/Example03_Arguments.java | 2 +- .../Example13_ConversationSummaryPlugin.java | 2 +- .../semantickernel/DefaultKernel.java | 4 +- .../orchestration/FunctionInvocation.java | 5 ++- .../orchestration/KernelFunction.java | 4 +- .../orchestration/ToolCallBehavior.java | 6 +-- .../plugin/KernelPluginFactory.java | 2 +- .../KernelFunctionFromMethod.java | 4 +- .../KernelFunctionFromPrompt.java | 2 +- .../handlebars/HandlebarsPromptTemplate.java | 9 ++-- .../blocks/FunctionIdBlock.java | 2 +- 17 files changed, 26 insertions(+), 69 deletions(-) diff --git a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java index dfd67543b6..9d42a0212b 100644 --- a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java +++ b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java @@ -438,7 +438,7 @@ public class OpenAIChatCompletion implements ChatCompletionService { } private static FunctionDefinition toFunctionDefinition(KernelFunction function) { - String name = String.format("%s-%s", function.getSkillName(), function.getName()); + String name = String.format("%s-%s", function.getPluginName(), function.getName()); FunctionDefinition functionDefinition = new FunctionDefinition(name); functionDefinition.setDescription(function.getDescription()); // Example JSON Schema: diff --git a/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example01NativeFunctionsTest.java b/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example01NativeFunctionsTest.java index 917e8ee9bf..16b82e7e8a 100644 --- a/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example01NativeFunctionsTest.java +++ b/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example01NativeFunctionsTest.java @@ -10,7 +10,7 @@ public class Example01NativeFunctionsTest { @Test public void run() { - // Load native skill + // Load native plugin TextPlugin text = new TextPlugin(); // Use function without kernel diff --git a/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example03_ArgumentsTest.java b/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example03_ArgumentsTest.java index 9773890be4..5b084e913d 100644 --- a/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example03_ArgumentsTest.java +++ b/java/api-test/integration-tests/src/test/java/com/microsoft/semantickernel/syntaxexamples/Example03_ArgumentsTest.java @@ -20,7 +20,7 @@ public class Example03_ArgumentsTest { public void main() { Kernel kernel = Kernel.builder().build(); - // Load native skill + // Load native plugin KernelPlugin functionCollection = KernelPluginFactory.createFromObject(new StaticTextPlugin(), "text"); diff --git a/java/plugins/semantickernel-plugin-core/src/main/java/com/microsoft/semantickernel/plugins/text/TextPlugin.java b/java/plugins/semantickernel-plugin-core/src/main/java/com/microsoft/semantickernel/plugins/text/TextPlugin.java index 7844a67e59..31b7965a28 100644 --- a/java/plugins/semantickernel-plugin-core/src/main/java/com/microsoft/semantickernel/plugins/text/TextPlugin.java +++ b/java/plugins/semantickernel-plugin-core/src/main/java/com/microsoft/semantickernel/plugins/text/TextPlugin.java @@ -6,7 +6,7 @@ import com.microsoft.semantickernel.plugin.annotations.KernelFunctionParameter; import java.util.Locale; /** - * TextSkill provides a set of functions to manipulate strings. + * TextPlugin provides a set of functions to manipulate strings. */ public class TextPlugin { diff --git a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/plugins/TimePlugin.java b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/plugins/TimePlugin.java index 28155fa248..20cd62a6c8 100644 --- a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/plugins/TimePlugin.java +++ b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/plugins/TimePlugin.java @@ -11,49 +11,6 @@ import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; import java.util.Locale; -/** - * Description: TimeSkill provides a set of functions to get the current time and date. - * - *

Usage: kernel.importSkill(new TimeSkill(), "time"); - * - *

Examples: - * - *

{{time.date}} => Sunday, 12 January, 2031 - * - *

{{time.today}} => Sunday, 12 January, 2031 - * - *

{{time.now}} => Sunday, January 12, 2031 9:15 PM - * - *

{{time.utcNow}} => Sunday, January 13, 2031 5:15 AM - * - *

{{time.time}} => 09:15:07 PM - * - *

{{time.year}} => 2031 - * - *

{{time.month}} => January - * - *

{{time.monthNumber}} => 01 - * - *

{{time.day}} => 12 - * - *

{{time.dayOfWeek}} => Sunday - * - *

{{time.hour}} => 9 PM - * - *

{{time.hourNumber}} => 21 - * - *

{{time.days_ago $days}} => Sunday, 7 May, 2023 - * - *

{{time.last_matching_day $dayName}} => Sunday, 7 May, 2023 - * - *

{{time.minute}} => 15 - * - *

{{time.second}} => 7 - * - *

{{time.timeZoneOffset}} => -08:00 - * - *

{{time.timeZoneName}} => Pacific Time - */ public class TimePlugin { public static final String DAY_MONTH_DAY_YEAR = "EEEE, MMMM d, yyyy"; diff --git a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example01_NativeFunctions.java b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example01_NativeFunctions.java index 2b9d61d919..0bc76d4739 100644 --- a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example01_NativeFunctions.java +++ b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example01_NativeFunctions.java @@ -3,7 +3,7 @@ package com.microsoft.semantickernel.samples.syntaxexamples; import com.microsoft.semantickernel.plugins.text.TextPlugin; /** - * Demonstrates a native function from the {@code com.microsoft.semantickernel.coreskills} package. + * Demonstrates a native function. */ public class Example01_NativeFunctions { diff --git a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example03_Arguments.java b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example03_Arguments.java index a437468b44..db20a93063 100644 --- a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example03_Arguments.java +++ b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example03_Arguments.java @@ -48,7 +48,7 @@ public class Example03_Arguments { public static void main(String[] args) { Kernel kernel = Kernel.builder().build(); - // Load native skill + // Load native plugin KernelPlugin functionCollection = KernelPluginFactory.createFromObject(new StaticTextPlugin(), "text"); diff --git a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example13_ConversationSummaryPlugin.java b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example13_ConversationSummaryPlugin.java index cf056ffec4..03e0050522 100644 --- a/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example13_ConversationSummaryPlugin.java +++ b/java/samples/sample-code/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/Example13_ConversationSummaryPlugin.java @@ -19,7 +19,7 @@ import com.sun.jna.StringArray; import reactor.core.publisher.Mono; /** - * Demonstrate the {@code com.microsoft.semantickernel.coreskills.ConversationSummarySkill} + * Demonstrate the {@see com.microsoft.semantickernel.samples.plugins.ConversationSummaryPlugin} plugin. *

* Refer to the diff --git a/java/semantickernel-api/src/main/ignore/java/com/microsoft/semantickernel/DefaultKernel.java b/java/semantickernel-api/src/main/ignore/java/com/microsoft/semantickernel/DefaultKernel.java index c796cc9258..76fcb99466 100644 --- a/java/semantickernel-api/src/main/ignore/java/com/microsoft/semantickernel/DefaultKernel.java +++ b/java/semantickernel-api/src/main/ignore/java/com/microsoft/semantickernel/DefaultKernel.java @@ -109,7 +109,7 @@ public class DefaultKernel implements Kernel { @Override public CompletionKernelFunction registerSemanticFunction( - String skillName, String functionName, SemanticFunctionConfig functionConfig) { + String pluginName, String functionName, SemanticFunctionConfig functionConfig) { // Future-proofing the name not to contain special chars // Verify.ValidSkillName(skillName); // Verify.ValidFunctionName(functionName); @@ -117,7 +117,7 @@ public class DefaultKernel implements Kernel { return SKBuilders.completionFunctions() .withSemanticFunctionConfig(functionConfig) .withFunctionName(functionName) - .withSkillName(skillName) + .withPluginName(pluginName) .withKernel(this) .build(); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java index 2061d348cd..811578e3fe 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java @@ -9,6 +9,7 @@ import com.microsoft.semantickernel.orchestration.ToolCallBehavior.UnmodifiableT import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariable; import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariableType; import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariableTypes; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.function.BiConsumer; import javax.annotation.Nullable; import org.slf4j.Logger; @@ -38,6 +39,7 @@ public class FunctionInvocation extends Mono> { protected final ContextVariableTypes contextVariableTypes = new ContextVariableTypes(); + @SuppressFBWarnings("EI_EXPOSE_REP2") public FunctionInvocation( Kernel kernel, KernelFunction function) { @@ -47,6 +49,7 @@ public class FunctionInvocation extends Mono> { this.addKernelHooks(kernel.getGlobalKernelHooks()); } + @SuppressFBWarnings("EI_EXPOSE_REP2") public FunctionInvocation( Kernel kernel, KernelFunction function, @@ -170,7 +173,7 @@ public class FunctionInvocation extends Mono> { if (variableType == null) { LOGGER.debug( "No variable type explicitly specified by calling 'withResultType' for function invocation: " - + function.getSkillName() + "." + function.getName() + "." + + function.getPluginName() + "." + function.getName() + "." + " This may cause a runtime error (probably a ClassCastException) if the result type is not compatible with the expected type."); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/KernelFunction.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/KernelFunction.java index 052a876376..fc0a814607 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/KernelFunction.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/KernelFunction.java @@ -53,9 +53,9 @@ public abstract class KernelFunction implements Buildable { } /** - * @return The name of the skill that this function is within + * @return The name of the plugin that this function is within */ - public String getSkillName() { + public String getPluginName() { return metadata.getName(); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/ToolCallBehavior.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/ToolCallBehavior.java index 326443688a..7b54ed206c 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/ToolCallBehavior.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/ToolCallBehavior.java @@ -29,7 +29,7 @@ public class ToolCallBehavior { } static String getKey(KernelFunction function) { - return getKey(function.getSkillName(), function.getName()); + return getKey(function.getPluginName(), function.getName()); } static String getKey(String skillName, String functionName) { @@ -113,7 +113,7 @@ public class ToolCallBehavior { public boolean functionRequired(KernelFunction function) { if (function != null) { - return functionRequired(function.getSkillName(), function.getName()); + return functionRequired(function.getPluginName(), function.getName()); } return false; } @@ -129,7 +129,7 @@ public class ToolCallBehavior { public boolean functionEnabled(KernelFunction function) { if (function != null) { - return functionEnabled(function.getSkillName(), function.getName()); + return functionEnabled(function.getPluginName(), function.getName()); } return functionSettings.isEmpty(); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/plugin/KernelPluginFactory.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/plugin/KernelPluginFactory.java index fd19f354f7..5e6104f22d 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/plugin/KernelPluginFactory.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/plugin/KernelPluginFactory.java @@ -299,7 +299,7 @@ public class KernelPluginFactory { } catch (IOException e) { LOGGER.error("Failed to read file " + promptFileName, e); - throw new SKException("No Skills found in directory " + promptFileName); + throw new SKException("No plugins found in directory " + promptFileName); } } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromMethod.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromMethod.java index 024cf7aea6..f322daf25e 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromMethod.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromMethod.java @@ -212,7 +212,7 @@ public class KernelFunctionFromMethod extends KernelFunction { if (!variableType.getClazz().isAssignableFrom(it.getClass())) { throw new SKException(String.format( "Return parameter type from %s.%s does not match the expected type %s", - function.getSkillName(), function.getName(), + function.getPluginName(), function.getName(), it.getClass().getName())); } return new FunctionResult<>( @@ -244,7 +244,7 @@ public class KernelFunctionFromMethod extends KernelFunction { // If we get here, then either the returnParameterType doesn't match T throw new SKException(String.format( "Return parameter type from %s.%s does not match the expected type %s", - function.getSkillName(), function.getName(), it.getClass().getName())); + function.getPluginName(), function.getName(), it.getClass().getName())); }) .map(it -> { diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromPrompt.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromPrompt.java index 51e8831b51..e9657be9b7 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromPrompt.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromPrompt.java @@ -265,7 +265,7 @@ public class KernelFunctionFromPrompt extends KernelFunction { "Something went wrong while rendering the semantic" + " function or while executing the text" + " completion. Function: {}.{}. Error: {}", - getSkillName(), + getPluginName(), getName(), ex.getMessage()); diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/handlebars/HandlebarsPromptTemplate.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/handlebars/HandlebarsPromptTemplate.java index 1babdd8466..e80877fe2d 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/handlebars/HandlebarsPromptTemplate.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/handlebars/HandlebarsPromptTemplate.java @@ -16,7 +16,7 @@ import com.microsoft.semantickernel.plugin.KernelParameterMetadata; import com.microsoft.semantickernel.plugin.KernelPlugin; import com.microsoft.semantickernel.semanticfunctions.PromptTemplate; import com.microsoft.semantickernel.semanticfunctions.PromptTemplateConfig; - +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -27,11 +27,8 @@ import java.util.Locale; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; - import javax.annotation.Nonnull; import javax.annotation.Nullable; - -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import reactor.core.publisher.Mono; public class HandlebarsPromptTemplate implements PromptTemplate { @@ -101,7 +98,7 @@ public class HandlebarsPromptTemplate implements PromptTemplate { if (context instanceof KernelFunction) { KernelFunction function = (KernelFunction) context; if ("pluginname".equalsIgnoreCase(name)) { - return function.getSkillName(); + return function.getPluginName(); } else if ("name".equalsIgnoreCase(name)) { return function.getName(); } @@ -184,7 +181,7 @@ public class HandlebarsPromptTemplate implements PromptTemplate { private static Handlebars.SafeString handleFunction(KernelFunction context) { KernelFunction function = context; - String pluginName = function.getSkillName(); + String pluginName = function.getPluginName(); String functionName = function.getName(); String description = function.getDescription(); StringBuilder sb = new StringBuilder( diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/semantickernel/blocks/FunctionIdBlock.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/semantickernel/blocks/FunctionIdBlock.java index 81be9ad3a0..d58d8bf30e 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/semantickernel/blocks/FunctionIdBlock.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/templateengine/semantickernel/blocks/FunctionIdBlock.java @@ -16,7 +16,7 @@ public final class FunctionIdBlock extends Block implements TextRendering { String[] functionNameParts = this.getContent().split("\\.", -1); if (functionNameParts.length > 2) { throw new RuntimeException( - "A function name can contain at most one dot separating the skill name from the" + "A function name can contain at most one dot separating the plugin name from the" + " function name"); } From 7e5c36f06ad178a417413f30941d7e77da0371cf Mon Sep 17 00:00:00 2001 From: John Oliver <1615532+johnoliver@users.noreply.github.com> Date: Tue, 13 Feb 2024 12:07:48 +0000 Subject: [PATCH 2/4] Java: Add header to Java openai call (#4972) ### Motivation and Context ### Description ### Contribution Checklist - [ ] The code builds clean without any errors or warnings - [ ] 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 - [ ] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone :smile: --- java/aiservices/openai/pom.xml | 10 +++- .../openai/OpenAIRequestSettings.java | 50 +++++++++++++++++++ .../chatcompletion/OpenAIChatCompletion.java | 12 ++++- .../OpenAITextGenerationService.java | 13 ++++- .../openai/semantic-kernel-version.properties | 1 + 5 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/OpenAIRequestSettings.java create mode 100644 java/aiservices/openai/src/main/resources/com/microsoft/semantickernel/aiservices/openai/semantic-kernel-version.properties diff --git a/java/aiservices/openai/pom.xml b/java/aiservices/openai/pom.xml index e73f63d790..3aa692f4aa 100644 --- a/java/aiservices/openai/pom.xml +++ b/java/aiservices/openai/pom.xml @@ -42,7 +42,15 @@ 1.0-2 provided - + + + + src/main/resources + true + + + + diff --git a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/OpenAIRequestSettings.java b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/OpenAIRequestSettings.java new file mode 100644 index 0000000000..a1666fddc4 --- /dev/null +++ b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/OpenAIRequestSettings.java @@ -0,0 +1,50 @@ +package com.microsoft.semantickernel.aiservices.openai; + +import com.azure.core.http.HttpHeaderName; +import com.azure.core.http.rest.RequestOptions; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import org.slf4j.Logger; + +public final class OpenAIRequestSettings { + + private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger( + OpenAIRequestSettings.class); + + private static final String SEMANTIC_KERNEL_VERSION_PROPERTY_NAME = "semantic-kernel.version"; + private static final String SEMANTIC_KERNEL_VERSION_PROPERTIES_FILE = "semantic-kernel-version.properties"; + private static final String version; + + + static { + version = loadVersion(); + } + + private static String loadVersion() { + + String version = "Java/unknown"; + + try (InputStream settingsFile = OpenAIRequestSettings.class.getResourceAsStream( + SEMANTIC_KERNEL_VERSION_PROPERTIES_FILE)) { + + Properties props = new Properties(); + props.load(settingsFile); + if (props.containsKey(SEMANTIC_KERNEL_VERSION_PROPERTY_NAME)) { + String skVersion = props.getProperty(SEMANTIC_KERNEL_VERSION_PROPERTY_NAME); + if (skVersion != null && !skVersion.isEmpty()) { + return "Java/" + skVersion; + } + } + } catch (IOException e) { + //Ignore + LOGGER.trace("Failed to load Semantic Kernel version from properties file", e); + } + return version; + } + + public static RequestOptions getRequestOptions() { + return new RequestOptions() + .setHeader(HttpHeaderName.fromString("Semantic-Kernel-Version"), version); + } +} diff --git a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java index 9d42a0212b..150e44084e 100644 --- a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java +++ b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIChatCompletion.java @@ -21,12 +21,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.microsoft.semantickernel.Kernel; +import com.microsoft.semantickernel.aiservices.openai.OpenAIRequestSettings; import com.microsoft.semantickernel.chatcompletion.AuthorRole; import com.microsoft.semantickernel.chatcompletion.ChatCompletionService; import com.microsoft.semantickernel.chatcompletion.ChatHistory; import com.microsoft.semantickernel.chatcompletion.ChatMessageContent; import com.microsoft.semantickernel.chatcompletion.StreamingChatMessageContent; import com.microsoft.semantickernel.exceptions.AIException; +import com.microsoft.semantickernel.exceptions.AIException.ErrorCodes; import com.microsoft.semantickernel.exceptions.SKException; import com.microsoft.semantickernel.hooks.KernelHooks; import com.microsoft.semantickernel.hooks.PreChatCompletionEvent; @@ -165,7 +167,15 @@ public class OpenAIChatCompletion implements ChatCompletionService { .getOptions(); return client - .getChatCompletions(getModelId(), options) + .getChatCompletionsWithResponse(getModelId(), options, + OpenAIRequestSettings.getRequestOptions()) + .flatMap(completionsResult -> { + if (completionsResult.getStatusCode() >= 400) { + return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR, + "Request failed: " + completionsResult.getStatusCode())); + } + return Mono.just(completionsResult.getValue()); + }) .filter(choices -> choices.getChoices() != null && !choices.getChoices().isEmpty()) .map(this::accumulateResponses) .map(responses -> diff --git a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/textcompletion/OpenAITextGenerationService.java b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/textcompletion/OpenAITextGenerationService.java index c0db75c824..96dedce0fb 100644 --- a/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/textcompletion/OpenAITextGenerationService.java +++ b/java/aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/textcompletion/OpenAITextGenerationService.java @@ -4,7 +4,9 @@ import com.azure.ai.openai.OpenAIAsyncClient; import com.azure.ai.openai.models.CompletionsOptions; import com.azure.ai.openai.models.CompletionsUsage; import com.microsoft.semantickernel.Kernel; +import com.microsoft.semantickernel.aiservices.openai.OpenAIRequestSettings; import com.microsoft.semantickernel.exceptions.AIException; +import com.microsoft.semantickernel.exceptions.AIException.ErrorCodes; import com.microsoft.semantickernel.orchestration.FunctionResultMetadata; import com.microsoft.semantickernel.orchestration.PromptExecutionSettings; import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariable; @@ -90,9 +92,16 @@ public class OpenAITextGenerationService implements TextGenerationService { CompletionsOptions completionsOptions = getCompletionsOptions(text, requestSettings); return client - .getCompletions(getModelId(), completionsOptions) + .getCompletionsWithResponse(getModelId(), completionsOptions, + OpenAIRequestSettings.getRequestOptions()) + .flatMap(completionsResult -> { + if (completionsResult.getStatusCode() >= 400) { + return Mono.error(new AIException(ErrorCodes.SERVICE_ERROR, + "Request failed: " + completionsResult.getStatusCode())); + } + return Mono.just(completionsResult.getValue()); + }) .map(completions -> { - FunctionResultMetadata metadata = FunctionResultMetadata.build( completions.getId(), completions.getUsage(), diff --git a/java/aiservices/openai/src/main/resources/com/microsoft/semantickernel/aiservices/openai/semantic-kernel-version.properties b/java/aiservices/openai/src/main/resources/com/microsoft/semantickernel/aiservices/openai/semantic-kernel-version.properties new file mode 100644 index 0000000000..73220f4f85 --- /dev/null +++ b/java/aiservices/openai/src/main/resources/com/microsoft/semantickernel/aiservices/openai/semantic-kernel-version.properties @@ -0,0 +1 @@ +semantic-kernel.version=${project.version} \ No newline at end of file From 7d374d12a59567a814d16cd846b2bac87a8d2026 Mon Sep 17 00:00:00 2001 From: John Oliver <1615532+johnoliver@users.noreply.github.com> Date: Tue, 13 Feb 2024 12:08:48 +0000 Subject: [PATCH 3/4] Java: Tidy poms (#4989) ### Motivation and Context ### Description ### Contribution Checklist - [ ] The code builds clean without any errors or warnings - [ ] 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 - [ ] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone :smile: --- java/aiservices/openai/pom.xml | 7 +- java/api-test/integration-tests/pom.xml | 10 +-- java/api-test/pom.xml | 10 ++- .../pom.xml | 12 ++-- .../semantickernel-plugin-core/pom.xml | 2 +- java/pom.xml | 45 ++----------- java/samples/pom.xml | 15 +++-- java/samples/sample-code/pom.xml | 8 +-- java/samples/sk-v1/01-SimpleChat/pom.xml | 4 +- java/samples/sk-v1/02-PersonaChat/pom.xml | 4 +- java/samples/sk-v1/03-SimpleRag/pom.xml | 4 +- java/samples/sk-v1/04-DynamicRag/pom.xml | 2 +- java/samples/sk-v1/05-MultiModal/pom.xml | 6 +- java/samples/sk-v1/06-Assistants/pom.xml | 2 +- java/samples/sk-v1/pom.xml | 15 +++-- java/semantickernel-api/pom.xml | 13 ++-- java/semantickernel-bom/pom.xml | 66 +++---------------- 17 files changed, 76 insertions(+), 149 deletions(-) diff --git a/java/aiservices/openai/pom.xml b/java/aiservices/openai/pom.xml index 3aa692f4aa..0dd5a6b547 100644 --- a/java/aiservices/openai/pom.xml +++ b/java/aiservices/openai/pom.xml @@ -7,12 +7,12 @@ com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../../pom.xml - aiservices-openai - OpenAI Services + semantickernel-aiservices-openai + Semantic Kernel OpenAI Services OpenAI services for Semantic Kernel @@ -39,7 +39,6 @@ javax.xml.stream stax-api - 1.0-2 provided diff --git a/java/api-test/integration-tests/pom.xml b/java/api-test/integration-tests/pom.xml index 443aaf6769..2de167c173 100644 --- a/java/api-test/integration-tests/pom.xml +++ b/java/api-test/integration-tests/pom.xml @@ -7,17 +7,18 @@ com.microsoft.semantic-kernel api-test - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../pom.xml + Semantic Kernel Integration Tests integration-tests jar com.microsoft.semantic-kernel - sample-code + semantickernel-sample-code ${project.version} test @@ -56,11 +57,6 @@ semantickernel-api test - - com.microsoft.semantic-kernel - sample-code - ${project.version} - org.xerial diff --git a/java/api-test/pom.xml b/java/api-test/pom.xml index d58fb677fd..e0ec35b229 100644 --- a/java/api-test/pom.xml +++ b/java/api-test/pom.xml @@ -7,10 +7,11 @@ com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../pom.xml + Semantic Kernel Api Tests api-test pom @@ -50,6 +51,13 @@ ${maven.compiler.release} + + org.apache.maven.plugins + maven-deploy-plugin + + true + + diff --git a/java/connectors/semantickernel-connectors-web-bing/pom.xml b/java/connectors/semantickernel-connectors-web-bing/pom.xml index cd586071c2..4a9a76e4a9 100644 --- a/java/connectors/semantickernel-connectors-web-bing/pom.xml +++ b/java/connectors/semantickernel-connectors-web-bing/pom.xml @@ -1,12 +1,13 @@ - + 4.0.0 com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../../pom.xml @@ -19,13 +20,8 @@ com.microsoft.semantic-kernel semantickernel-api - compile - com.microsoft.semantic-kernel - semantickernel-api - - com.fasterxml.jackson.core jackson-databind compile @@ -34,7 +30,7 @@ com.fasterxml.jackson.core jackson-core compile - + diff --git a/java/plugins/semantickernel-plugin-core/pom.xml b/java/plugins/semantickernel-plugin-core/pom.xml index d3ba36e213..2775027140 100644 --- a/java/plugins/semantickernel-plugin-core/pom.xml +++ b/java/plugins/semantickernel-plugin-core/pom.xml @@ -6,7 +6,7 @@ com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../../pom.xml diff --git a/java/pom.xml b/java/pom.xml index 28c20ae658..8604e256ea 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -7,8 +7,9 @@ com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT pom + https://www.github.com/microsoft/semantic-kernel Semantic Kernel Parent Parent pom for the Semantic Kernel Project @@ -65,25 +66,14 @@ + semantickernel-bom + connectors/semantickernel-connectors-web-bing - - - - - - - - aiservices/openai - - - - plugins/semantickernel-plugin-core - semantickernel-bom semantickernel-api @@ -403,17 +393,6 @@ - - - @@ -619,9 +587,6 @@ 17 17 - bug-check @@ -819,6 +784,6 @@ https://github.com/microsoft/semantic-kernel scm:git:https://github.com/microsoft/semantic-kernel.git scm:git:https://github.com/microsoft/semantic-kernel.git - java-0.2.11-alpha + HEAD diff --git a/java/samples/pom.xml b/java/samples/pom.xml index ae72b8025c..7bc8da3587 100644 --- a/java/samples/pom.xml +++ b/java/samples/pom.xml @@ -5,19 +5,17 @@ com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../pom.xml - com.microsoft.semantic-kernel - samples - 1.0.0-alpha.1-SNAPSHOT + semantickernel-samples-parent + 1.0.0-alpha.2-SNAPSHOT pom Semantic Kernel Samples Parent Parent pom for sample code for using the Semantic Kernel project - sk-v1 sample-code @@ -104,6 +102,13 @@ true + + org.apache.maven.plugins + maven-deploy-plugin + + true + + diff --git a/java/samples/sample-code/pom.xml b/java/samples/sample-code/pom.xml index 6ccf417079..b8e182987b 100644 --- a/java/samples/sample-code/pom.xml +++ b/java/samples/sample-code/pom.xml @@ -4,12 +4,12 @@ 4.0.0 com.microsoft.semantic-kernel - samples - 1.0.0-alpha.1-SNAPSHOT + semantickernel-samples-parent + 1.0.0-alpha.2-SNAPSHOT ../pom.xml - sample-code + semantickernel-sample-code Semantic Kernel Samples Sample code for using the Semantic Kernel project jar @@ -71,7 +71,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai diff --git a/java/samples/sk-v1/01-SimpleChat/pom.xml b/java/samples/sk-v1/01-SimpleChat/pom.xml index 5ec59bb19f..ac11a5bd0b 100644 --- a/java/samples/sk-v1/01-SimpleChat/pom.xml +++ b/java/samples/sk-v1/01-SimpleChat/pom.xml @@ -6,8 +6,8 @@ com.microsoft.semantic-kernel - sk-v1-samples - 1.0.0-alpha.1-SNAPSHOT + semantickernel-v1-samples + 1.0.0-alpha.2-SNAPSHOT ../pom.xml diff --git a/java/samples/sk-v1/02-PersonaChat/pom.xml b/java/samples/sk-v1/02-PersonaChat/pom.xml index fa1ec8ff3b..d94076f072 100644 --- a/java/samples/sk-v1/02-PersonaChat/pom.xml +++ b/java/samples/sk-v1/02-PersonaChat/pom.xml @@ -7,8 +7,8 @@ com.microsoft.semantic-kernel - sk-v1-samples - 1.0.0-alpha.1-SNAPSHOT + semantickernel-v1-samples + 1.0.0-alpha.2-SNAPSHOT ../pom.xml diff --git a/java/samples/sk-v1/03-SimpleRag/pom.xml b/java/samples/sk-v1/03-SimpleRag/pom.xml index 1a47d2bd3c..0403c77869 100644 --- a/java/samples/sk-v1/03-SimpleRag/pom.xml +++ b/java/samples/sk-v1/03-SimpleRag/pom.xml @@ -7,8 +7,8 @@ com.microsoft.semantic-kernel - sk-v1-samples - 1.0.0-alpha.1-SNAPSHOT + semantickernel-v1-samples + 1.0.0-alpha.2-SNAPSHOT ../pom.xml diff --git a/java/samples/sk-v1/04-DynamicRag/pom.xml b/java/samples/sk-v1/04-DynamicRag/pom.xml index a6cc1e8fc1..433b40cc33 100644 --- a/java/samples/sk-v1/04-DynamicRag/pom.xml +++ b/java/samples/sk-v1/04-DynamicRag/pom.xml @@ -7,7 +7,7 @@ com.microsoft.semantic-kernel - sk-v1-samples + semantickernel-v1-samples 1.0.0-alpha.1-SNAPSHOT ../pom.xml diff --git a/java/samples/sk-v1/05-MultiModal/pom.xml b/java/samples/sk-v1/05-MultiModal/pom.xml index 2b8ad559a2..afcd106a10 100644 --- a/java/samples/sk-v1/05-MultiModal/pom.xml +++ b/java/samples/sk-v1/05-MultiModal/pom.xml @@ -7,7 +7,7 @@ com.microsoft.semantic-kernel - sk-v1-samples + semantickernel-v1-samples 1.0.0-alpha.1-SNAPSHOT ../pom.xml @@ -18,7 +18,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai com.microsoft.semantic-kernel @@ -30,7 +30,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai com.microsoft.semantic-kernel diff --git a/java/samples/sk-v1/06-Assistants/pom.xml b/java/samples/sk-v1/06-Assistants/pom.xml index 1fed7623bf..e80ebd518a 100644 --- a/java/samples/sk-v1/06-Assistants/pom.xml +++ b/java/samples/sk-v1/06-Assistants/pom.xml @@ -7,7 +7,7 @@ com.microsoft.semantic-kernel - sk-v1-samples + semantickernel-v1-samples 1.0.0-alpha.1-SNAPSHOT ../pom.xml diff --git a/java/samples/sk-v1/pom.xml b/java/samples/sk-v1/pom.xml index 6ba4918d4d..3ee6f22211 100644 --- a/java/samples/sk-v1/pom.xml +++ b/java/samples/sk-v1/pom.xml @@ -3,9 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.microsoft.semantic-kernel - sk-v1-samples - 1.0.0-alpha.1-SNAPSHOT + + com.microsoft.semantic-kernel + semantickernel-samples-parent + 1.0.0-alpha.2-SNAPSHOT + ../pom.xml + + + semantickernel-v1-samples Semantic Kernel version 1 Samples Sample code for using the Semantic Kernel version 1 API @@ -47,7 +52,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai com.microsoft.semantic-kernel @@ -59,7 +64,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai com.azure diff --git a/java/semantickernel-api/pom.xml b/java/semantickernel-api/pom.xml index 456c7305a9..53476d750d 100644 --- a/java/semantickernel-api/pom.xml +++ b/java/semantickernel-api/pom.xml @@ -1,12 +1,13 @@ - + 4.0.0 com.microsoft.semantic-kernel semantickernel-parent - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT ../pom.xml @@ -50,6 +51,10 @@ jackson-dataformat-yaml compile + + com.github.spotbugs + spotbugs-annotations + org.mockito @@ -66,9 +71,5 @@ junit-jupiter-api test - - com.github.spotbugs - spotbugs-annotations - \ No newline at end of file diff --git a/java/semantickernel-bom/pom.xml b/java/semantickernel-bom/pom.xml index 4961916361..20b0793855 100644 --- a/java/semantickernel-bom/pom.xml +++ b/java/semantickernel-bom/pom.xml @@ -1,11 +1,12 @@ - + 4.0.0 com.microsoft.semantic-kernel semantickernel-bom - 1.0.0-alpha.1-SNAPSHOT + 1.0.0-alpha.2-SNAPSHOT pom Semantic Kernel Java BOM @@ -48,19 +49,6 @@ semantickernel-api ${project.version} - - com.microsoft.semantic-kernel semantickernel-gpt3-tokenizer @@ -76,28 +64,6 @@ semantickernel-connectors-web-bing ${project.version} - com.microsoft.semantic-kernel aiservices-azureopenai @@ -115,7 +81,7 @@ com.microsoft.semantic-kernel - aiservices-openai + semantickernel-aiservices-openai ${project.version} @@ -134,13 +100,6 @@ azure-identity 1.11.2 - com.fasterxml.jackson.core jackson-annotations @@ -190,20 +149,13 @@ 3.0.2 - - org.xerial - sqlite-jdbc - 3.42.0.0 + javax.xml.stream + stax-api + 1.0-2 + provided - - - org.postgresql - postgresql - 42.6.0 - ---> - From 6df0f5517c8aad681dd5e16b4c4bb5e5ba1147d0 Mon Sep 17 00:00:00 2001 From: John Oliver <1615532+johnoliver@users.noreply.github.com> Date: Tue, 13 Feb 2024 21:21:48 +0000 Subject: [PATCH 4/4] Java: add a priority order to hook invocations. Remove withInvocationContext (#5004) ### Motivation and Context ### Description ### Contribution Checklist - [ ] The code builds clean without any errors or warnings - [ ] 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 - [ ] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone :smile: --- .../semantickernel/hooks/KernelHook.java | 14 ++++++- .../semantickernel/hooks/KernelHooks.java | 42 ++++++++++++------- .../orchestration/FunctionInvocation.java | 13 ------ 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHook.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHook.java index 535727e391..be649fa47b 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHook.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHook.java @@ -6,7 +6,19 @@ import java.util.List; import java.util.function.Function; import java.util.function.Predicate; -public interface KernelHook extends Predicate, Function { +public interface KernelHook extends Predicate, + Function { + + /** + * The priority of the hook. The default priority is 50. The priority is used to determine the + * order in which hooks that accept the same event type are executed, lower priorities are executed first. No ordering is + * guaranteed for hooks with the same priority. + * + * @return the priority of the hook + */ + default int getPriority() { + return 50; + } interface FunctionInvokingHook extends KernelHook { diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHooks.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHooks.java index e7cd3f931e..f47bb7fbcd 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHooks.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/hooks/KernelHooks.java @@ -1,18 +1,19 @@ package com.microsoft.semantickernel.hooks; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.function.Function; - -import javax.annotation.Nullable; - import com.microsoft.semantickernel.hooks.KernelHook.FunctionInvokedHook; import com.microsoft.semantickernel.hooks.KernelHook.FunctionInvokingHook; import com.microsoft.semantickernel.hooks.KernelHook.PreChatCompletionHook; import com.microsoft.semantickernel.hooks.KernelHook.PromptRenderedHook; import com.microsoft.semantickernel.hooks.KernelHook.PromptRenderingHook; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.UUID; +import java.util.function.Function; +import javax.annotation.Nullable; public class KernelHooks { @@ -37,7 +38,7 @@ public class KernelHooks { public UnmodifiableKernelHooks unmodifiableClone() { return new UnmodifiableKernelHooks(this); } - + private Map> getHooks() { return Collections.unmodifiableMap(hooks); } @@ -69,7 +70,11 @@ public class KernelHooks { @SuppressWarnings("unchecked") public T executeHooks(T event) { - for (KernelHook hook : hooks.values()) { + SortedSet> hooks = new TreeSet<>(Comparator.comparingInt(KernelHook::getPriority)); + + hooks.addAll(this.hooks.values()); + + for (KernelHook hook : hooks) { if (hook.test(event)) { // unchecked cast event = ((KernelHook) hook).apply(event); @@ -110,33 +115,38 @@ public class KernelHooks { } public static class UnmodifiableKernelHooks extends KernelHooks { - + private UnmodifiableKernelHooks(KernelHooks kernelHooks) { super(kernelHooks); } @Override - public String addFunctionInvokingHook(Function function) { + public String addFunctionInvokingHook( + Function function) { throw new UnsupportedOperationException("unmodifiable instance of KernelHooks"); } @Override - public String addFunctionInvokedHook(Function, FunctionInvokedEvent> function) { + public String addFunctionInvokedHook( + Function, FunctionInvokedEvent> function) { throw new UnsupportedOperationException("unmodifiable instance of KernelHooks"); } @Override - public String addPreChatCompletionHook(Function function) { + public String addPreChatCompletionHook( + Function function) { throw new UnsupportedOperationException("unmodifiable instance of KernelHooks"); } @Override - public String addPromptRenderedHook(Function function) { + public String addPromptRenderedHook( + Function function) { throw new UnsupportedOperationException("unmodifiable instance of KernelHooks"); } @Override - public String addPromptRenderingHook(Function function) { + public String addPromptRenderingHook( + Function function) { throw new UnsupportedOperationException("unmodifiable instance of KernelHooks"); } diff --git a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java index 811578e3fe..d52b50840f 100644 --- a/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java +++ b/java/semantickernel-api/src/main/java/com/microsoft/semantickernel/orchestration/FunctionInvocation.java @@ -129,19 +129,6 @@ public class FunctionInvocation extends Mono> { return this; } - public FunctionInvocation withInvocationContext( - @Nullable InvocationContext invocationContext) { - if (invocationContext == null) { - return this; - } - withTypes(invocationContext.getContextVariableTypes()); - withToolCallBehavior(invocationContext.getToolCallBehavior()); - withPromptExecutionSettings(invocationContext.getPromptExecutionSettings()); - addKernelHooks(invocationContext.getKernelHooks()); - return this; - } - - @Override public void subscribe(CoreSubscriber> coreSubscriber) { performSubscribe(