Skip to content

Commit 439c972

Browse files
mariofuscojmartisk
authored andcommitted
bump to LangChain4j 1.3.0
1 parent 0a54e2e commit 439c972

File tree

15 files changed

+89
-21
lines changed

15 files changed

+89
-21
lines changed

core/deployment/src/test/java/io/quarkiverse/langchain4j/test/ChatMessageSerializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ void should_serialize_and_deserialize_list_with_all_types_of_messages() {
111111
"{\"text\":\"Hello from system\",\"type\":\"SYSTEM\"}," +
112112
"{\"contents\":[{\"text\":\"Hello from user\",\"type\":\"TEXT\"}],\"type\":\"USER\"}," +
113113
"{\"name\":\"Klaus\",\"contents\":[{\"text\":\"Hello from Klaus\",\"type\":\"TEXT\"}],\"type\":\"USER\"}," +
114-
"{\"toolExecutionRequests\":[{\"name\":\"calculator\",\"arguments\":\"{}\"}],\"text\":\"Hello from AI\",\"type\":\"AI\"},"
114+
"{\"toolExecutionRequests\":[{\"name\":\"calculator\",\"arguments\":\"{}\"}],\"text\":\"Hello from AI\",\"attributes\":{},\"type\":\"AI\"},"
115115
+
116116
"{\"text\":\"4\",\"id\":\"12345\",\"toolName\":\"calculator\",\"type\":\"TOOL_EXECUTION_RESULT\"}" +
117117
"]");
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
<<<<<<< HEAD
12
:project-version: 1.1.1
2-
:langchain4j-version: 1.1.0
3-
:langchain4j-embeddings-version: 1.1.0-beta7
3+
:langchain4j-version: 1.3.0
4+
:langchain4j-embeddings-version: 1.3.0-beta9
45
:examples-dir: ./../examples/

embedding-stores/neo4j/deployment/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<dependency>
2222
<groupId>dev.langchain4j</groupId>
2323
<artifactId>langchain4j-community-neo4j</artifactId>
24-
<version>${langchain4j-beta.version}</version>
24+
<version>${langchain4j-community.version}</version>
2525
</dependency>
2626
<dependency>
2727
<groupId>io.quarkiverse.langchain4j</groupId>

embedding-stores/neo4j/runtime/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<dependency>
2222
<groupId>dev.langchain4j</groupId>
2323
<artifactId>langchain4j-community-neo4j</artifactId>
24-
<version>${langchain4j-beta.version}</version>
24+
<version>${langchain4j-community.version}</version>
2525
</dependency>
2626
<dependency>
2727
<groupId>io.quarkiverse.langchain4j</groupId>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.quarkiverse.langchain4j.mcp.test;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.assertThatIterable;
5+
6+
import java.util.Set;
7+
import java.util.stream.Collectors;
8+
9+
import jakarta.inject.Inject;
10+
11+
import org.jboss.shrinkwrap.api.ShrinkWrap;
12+
import org.jboss.shrinkwrap.api.asset.StringAsset;
13+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
14+
import org.junit.jupiter.api.Test;
15+
import org.junit.jupiter.api.extension.RegisterExtension;
16+
17+
import dev.langchain4j.agent.tool.ToolSpecification;
18+
import dev.langchain4j.service.tool.ToolProvider;
19+
import dev.langchain4j.service.tool.ToolProviderResult;
20+
import io.quarkus.test.QuarkusUnitTest;
21+
22+
public class McpWithResourcesAsToolsTest {
23+
24+
@RegisterExtension
25+
static QuarkusUnitTest unitTest = new QuarkusUnitTest()
26+
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
27+
.addClasses(AbstractMockHttpMcpServer.class, MockHttpMcpServer.class)
28+
.addAsResource(new StringAsset("""
29+
quarkus.langchain4j.mcp.expose-resources-as-tools=true
30+
quarkus.langchain4j.mcp.client1.transport-type=http
31+
quarkus.langchain4j.mcp.client1.url=http://localhost:8081/mock-mcp/sse
32+
quarkus.langchain4j.mcp.client1.log-requests=true
33+
quarkus.langchain4j.mcp.client1.log-responses=true
34+
quarkus.log.category."dev.langchain4j".level=DEBUG
35+
quarkus.log.category."io.quarkiverse".level=DEBUG
36+
quarkus.langchain4j.mcp.client1.tool-execution-timeout=1s
37+
"""),
38+
"application.properties"));
39+
40+
@Inject
41+
ToolProvider toolProvider;
42+
43+
@Test
44+
public void providingTools() {
45+
// obtain a list of tools from the MCP server
46+
ToolProviderResult toolProviderResult = toolProvider.provideTools(null);
47+
48+
// verify the list of tools
49+
assertThat(toolProviderResult.tools().size()).isEqualTo(5);
50+
Set<String> toolNames = toolProviderResult.tools().keySet().stream()
51+
.map(ToolSpecification::name)
52+
.collect(Collectors.toSet());
53+
assertThatIterable(toolNames)
54+
.containsExactlyInAnyOrder("add", "longRunningOperation", "logging", "get_resource", "list_resources");
55+
}
56+
}

mcp/runtime/src/main/java/io/quarkiverse/langchain4j/mcp/runtime/McpRecorder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ public ToolProvider apply(SyntheticCreationalContext<ToolProvider> context) {
112112
McpClientName.Literal qualifier = McpClientName.Literal.of(mcpClientName);
113113
clients.add(context.getInjectedReference(McpClient.class, qualifier));
114114
}
115-
return new QuarkusMcpToolProvider(clients, context.getInjectedReference(TRACER_TYPE_LITERAL));
115+
boolean exposeResourcesAsTools = mcpRuntimeConfiguration.getValue().exposeResourcesAsTools().orElse(false);
116+
return new QuarkusMcpToolProvider(clients, context.getInjectedReference(TRACER_TYPE_LITERAL),
117+
exposeResourcesAsTools);
116118
}
117119
};
118120
}

mcp/runtime/src/main/java/io/quarkiverse/langchain4j/mcp/runtime/QuarkusMcpToolProvider.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import dev.langchain4j.agent.tool.ToolSpecification;
1111
import dev.langchain4j.mcp.McpToolProvider;
1212
import dev.langchain4j.mcp.client.McpClient;
13+
import dev.langchain4j.mcp.resourcesastools.DefaultMcpResourcesAsToolsPresenter;
1314
import dev.langchain4j.service.tool.ToolExecutor;
1415
import dev.langchain4j.service.tool.ToolProviderRequest;
1516
import dev.langchain4j.service.tool.ToolProviderResult;
@@ -20,9 +21,11 @@
2021

2122
public class QuarkusMcpToolProvider extends McpToolProvider {
2223

23-
QuarkusMcpToolProvider(List<McpClient> mcpClients, Instance<Tracer> tracerInstance) {
24-
super(mcpClients, false, AlwaysTrueMcpClientToolSpecificationBiPredicate.INSTANCE,
25-
determineToolWrapper(tracerInstance));
24+
QuarkusMcpToolProvider(List<McpClient> mcpClients, Instance<Tracer> tracerInstance, boolean exposeResourcesAsTools) {
25+
super(mcpClients, false,
26+
AlwaysTrueMcpClientToolSpecificationBiPredicate.INSTANCE,
27+
determineToolWrapper(tracerInstance),
28+
exposeResourcesAsTools ? DefaultMcpResourcesAsToolsPresenter.builder().build() : null);
2629
}
2730

2831
private static Function<ToolExecutor, ToolExecutor> determineToolWrapper(Instance<Tracer> tracerInstance) {

mcp/runtime/src/main/java/io/quarkiverse/langchain4j/mcp/runtime/config/McpClientRuntimeConfig.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,4 @@ public interface McpClientRuntimeConfig {
6666
*/
6767
@WithDefault("10s")
6868
Duration pingTimeout();
69-
7069
}

mcp/runtime/src/main/java/io/quarkiverse/langchain4j/mcp/runtime/config/McpRuntimeConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package io.quarkiverse.langchain4j.mcp.runtime.config;
22

33
import java.util.Map;
4+
import java.util.Optional;
45

56
import io.quarkus.runtime.annotations.ConfigDocMapKey;
67
import io.quarkus.runtime.annotations.ConfigDocSection;
78
import io.quarkus.runtime.annotations.ConfigPhase;
89
import io.quarkus.runtime.annotations.ConfigRoot;
910
import io.smallrye.config.ConfigMapping;
11+
import io.smallrye.config.WithDefault;
1012
import io.smallrye.config.WithParentName;
1113

1214
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
@@ -21,4 +23,9 @@ public interface McpRuntimeConfiguration {
2123
@WithParentName
2224
Map<String, McpClientRuntimeConfig> clients();
2325

26+
/**
27+
* Whether resources should be exposed as MCP tools.
28+
*/
29+
@WithDefault("false")
30+
Optional<Boolean> exposeResourcesAsTools();
2431
}

mcp/runtime/src/main/java/io/quarkiverse/langchain4j/mcp/runtime/http/QuarkusHttpMcpTransport.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
import com.fasterxml.jackson.databind.JsonNode;
1717

18-
import dev.langchain4j.mcp.client.protocol.InitializationNotification;
1918
import dev.langchain4j.mcp.client.protocol.McpClientMessage;
19+
import dev.langchain4j.mcp.client.protocol.McpInitializationNotification;
2020
import dev.langchain4j.mcp.client.protocol.McpInitializeRequest;
2121
import dev.langchain4j.mcp.client.transport.McpOperationHandler;
2222
import dev.langchain4j.mcp.client.transport.McpTransport;
@@ -93,7 +93,7 @@ public void start(McpOperationHandler messageHandler) {
9393
public CompletableFuture<JsonNode> initialize(McpInitializeRequest request) {
9494
return execute(request, request.getId()).onItem()
9595
.transformToUni(
96-
response -> execute(new InitializationNotification(), null).onItem().transform(ignored -> response))
96+
response -> execute(new McpInitializationNotification(), null).onItem().transform(ignored -> response))
9797
.subscribeAsCompletionStage();
9898
}
9999

0 commit comments

Comments
 (0)