mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 02:19:06 +00:00
Split out InvocationContext
This commit is contained in:
+5
-23
@@ -4,8 +4,8 @@ package com.microsoft.semantickernel.syntaxexamples;
|
||||
|
||||
import com.azure.ai.openai.OpenAIAsyncClient;
|
||||
import com.azure.ai.openai.OpenAIClientBuilder;
|
||||
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
|
||||
import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
|
||||
import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo;
|
||||
import com.github.tomakehurst.wiremock.junit5.WireMockTest;
|
||||
import com.microsoft.semantickernel.Kernel;
|
||||
import com.microsoft.semantickernel.orchestration.FunctionResult;
|
||||
import com.microsoft.semantickernel.orchestration.KernelFunctionArguments;
|
||||
@@ -18,32 +18,14 @@ import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
|
||||
/*
|
||||
Run this test with the following JVM arguments:
|
||||
-Djavax.net.ssl.trustStore=scripts/client.truststore
|
||||
-Djavax.net.ssl.trustStorePassword=password
|
||||
*/
|
||||
@WireMockTest
|
||||
public class Example05_InlineFunctionDefinitionTest {
|
||||
|
||||
@RegisterExtension
|
||||
static WireMockExtension wm1 = WireMockExtension.newInstance()
|
||||
.options(WireMockConfiguration.wireMockConfig()
|
||||
.httpsPort(8443)
|
||||
.trustStorePath("scripts/client.truststore")
|
||||
.trustStorePassword("password")
|
||||
.trustStoreType("jks")
|
||||
.keystorePath("scripts/server.keystore")
|
||||
.keystorePassword("password")
|
||||
.keystoreType("jks"))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
public void main() {
|
||||
public void main(WireMockRuntimeInfo wmRuntimeInfo) {
|
||||
final OpenAIAsyncClient client = new OpenAIClientBuilder()
|
||||
.endpoint("https://localhost:8443")
|
||||
.endpoint("http://localhost:" + wmRuntimeInfo.getHttpPort())
|
||||
.buildAsyncClient();
|
||||
|
||||
TextGenerationService textGenerationService = TextGenerationService.builder()
|
||||
|
||||
+54
-11
@@ -1,10 +1,15 @@
|
||||
package com.microsoft.semantickernel;
|
||||
|
||||
import com.microsoft.semantickernel.exceptions.SKException;
|
||||
import com.microsoft.semantickernel.hooks.KernelHooks;
|
||||
import com.microsoft.semantickernel.hooks.KernelHooks.UnmodifiableKernelHooks;
|
||||
import com.microsoft.semantickernel.orchestration.FunctionResult;
|
||||
import com.microsoft.semantickernel.orchestration.InvocationContext;
|
||||
import com.microsoft.semantickernel.orchestration.KernelFunction;
|
||||
import com.microsoft.semantickernel.orchestration.KernelFunctionArguments;
|
||||
import com.microsoft.semantickernel.orchestration.PromptExecutionSettings;
|
||||
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
|
||||
import com.microsoft.semantickernel.orchestration.ToolCallBehavior.UnmodifiableToolCallBehavior;
|
||||
import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariable;
|
||||
import com.microsoft.semantickernel.orchestration.contextvariables.ContextVariableType;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -26,7 +31,12 @@ public class FunctionInvocation<T> extends Mono<FunctionResult<T>> {
|
||||
@Nullable
|
||||
private ContextVariableType<T> resultType;
|
||||
@Nullable
|
||||
private InvocationContext context;
|
||||
private UnmodifiableKernelHooks hooks;
|
||||
@Nullable
|
||||
private PromptExecutionSettings promptExecutionSettings;
|
||||
@Nullable
|
||||
private UnmodifiableToolCallBehavior toolCallBehavior;
|
||||
|
||||
|
||||
public FunctionInvocation(
|
||||
Kernel kernel,
|
||||
@@ -62,20 +72,49 @@ public class FunctionInvocation<T> extends Mono<FunctionResult<T>> {
|
||||
function,
|
||||
resultType)
|
||||
.withArguments(arguments)
|
||||
.withContext(context);
|
||||
.withResultType(resultType)
|
||||
.withKernelHooks(hooks)
|
||||
.withPromptExecutionSettings(promptExecutionSettings)
|
||||
.withToolCallBehavior(toolCallBehavior);
|
||||
}
|
||||
|
||||
public FunctionInvocation<T> withContext(
|
||||
@Nullable
|
||||
InvocationContext context) {
|
||||
if (context == null) {
|
||||
this.context = null;
|
||||
} else {
|
||||
this.context = new InvocationContext(context);
|
||||
}
|
||||
public FunctionInvocation<T> withKernelHooks(KernelHooks hooks) {
|
||||
this.hooks = unmodifiableClone(hooks);
|
||||
return this;
|
||||
}
|
||||
|
||||
public FunctionInvocation<T> withPromptExecutionSettings(
|
||||
PromptExecutionSettings promptExecutionSettings) {
|
||||
this.promptExecutionSettings = promptExecutionSettings;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FunctionInvocation<T> withToolCallBehavior(ToolCallBehavior toolCallBehavior) {
|
||||
this.toolCallBehavior = unmodifiableClone(toolCallBehavior);
|
||||
return this;
|
||||
}
|
||||
|
||||
private static UnmodifiableToolCallBehavior unmodifiableClone(
|
||||
ToolCallBehavior toolCallBehavior) {
|
||||
if (toolCallBehavior instanceof UnmodifiableToolCallBehavior) {
|
||||
return (UnmodifiableToolCallBehavior) toolCallBehavior;
|
||||
} else if (toolCallBehavior != null) {
|
||||
return toolCallBehavior.unmodifiableClone();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static UnmodifiableKernelHooks unmodifiableClone(KernelHooks kernelHooks) {
|
||||
if (kernelHooks instanceof UnmodifiableKernelHooks) {
|
||||
return (UnmodifiableKernelHooks) kernelHooks;
|
||||
} else if (kernelHooks != null) {
|
||||
return kernelHooks.unmodifiableClone();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subscribe(CoreSubscriber<? super FunctionResult<T>> coreSubscriber) {
|
||||
performSubscribe(
|
||||
@@ -84,7 +123,11 @@ public class FunctionInvocation<T> extends Mono<FunctionResult<T>> {
|
||||
function,
|
||||
arguments,
|
||||
resultType,
|
||||
context);
|
||||
new InvocationContext(
|
||||
hooks,
|
||||
promptExecutionSettings,
|
||||
toolCallBehavior
|
||||
));
|
||||
}
|
||||
|
||||
// Extracted to static to ensure mutable state is not used
|
||||
|
||||
@@ -1,22 +1,8 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
package com.microsoft.semantickernel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.microsoft.semantickernel.builders.Buildable;
|
||||
import com.microsoft.semantickernel.builders.SemanticKernelBuilder;
|
||||
import com.microsoft.semantickernel.exceptions.SKException;
|
||||
import com.microsoft.semantickernel.hooks.KernelHooks;
|
||||
import com.microsoft.semantickernel.orchestration.FunctionResult;
|
||||
import com.microsoft.semantickernel.orchestration.InvocationContext;
|
||||
@@ -29,7 +15,6 @@ import com.microsoft.semantickernel.semanticfunctions.PromptTemplate;
|
||||
import com.microsoft.semantickernel.services.AIServiceSelection;
|
||||
import com.microsoft.semantickernel.services.AIServiceSelector;
|
||||
import com.microsoft.semantickernel.services.OrderedAIServiceSelector;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -69,46 +54,6 @@ public class Kernel implements Buildable {
|
||||
this.globalKernelHooks = new KernelHooks(globalKernelHooks);
|
||||
}
|
||||
|
||||
/*
|
||||
public <T> Mono<FunctionResult<T>> invokeAsync(
|
||||
KernelFunction<T> function,
|
||||
@Nullable KernelFunctionArguments arguments) {
|
||||
return invokeAsync(function, arguments, null);
|
||||
}
|
||||
|
||||
public <T> Mono<FunctionResult<T>> invokeAsync(
|
||||
KernelFunction<T> function,
|
||||
@Nullable KernelFunctionArguments arguments,
|
||||
@Nullable ContextVariableType<T> variableType) {
|
||||
return invokeAsync(function, arguments, variableType, null);
|
||||
}
|
||||
|
||||
public <T> Mono<FunctionResult<T>> invokeAsync(
|
||||
String pluginName,
|
||||
String functionName,
|
||||
@Nullable KernelFunctionArguments arguments) {
|
||||
return invokeAsync(pluginName, functionName, arguments, null);
|
||||
}
|
||||
|
||||
public <T> Mono<FunctionResult<T>> invokeAsync(
|
||||
String pluginName,
|
||||
String functionName,
|
||||
@Nullable KernelFunctionArguments arguments,
|
||||
@Nullable ContextVariableType<T> resultType) {
|
||||
return invokeAsync(pluginName, functionName, arguments, resultType, null);
|
||||
}
|
||||
|
||||
public <T> Mono<FunctionResult<T>> invokeAsync(
|
||||
String pluginName,
|
||||
String functionName,
|
||||
@Nullable KernelFunctionArguments arguments,
|
||||
@Nullable ContextVariableType<T> variableType,
|
||||
@Nullable InvocationContext invocationContext) {
|
||||
KernelFunction function = plugins.getFunction(pluginName, functionName);
|
||||
return invokeAsync(function, arguments, variableType, invocationContext);
|
||||
}
|
||||
*/
|
||||
|
||||
public <T> FunctionInvocation<T> invokeAsync(
|
||||
String pluginName,
|
||||
String functionName) {
|
||||
|
||||
Reference in New Issue
Block a user