Skip to content

Commit 57e4d39

Browse files
authored
Upgrade LangChain4j to 1.0.0-beta3. Fix tests, remove redundant classes and tests (#125)
This pull request includes updates to the build process, removal of unused code, modernization of test cases, and upgrades of dependencies. The most significant changes involve improving the build configuration, removing the `Metadata.merge` method and its associated tests, refactoring test cases to use a new approach for mocking `ChatLanguageModel`, and upgrading the `langchain4j` dependency. ### Dependency updates: * Upgraded the `langchain4j` dependency from version `1.0.0-beta1` to `1.0.0-beta3` in `pom.xml`. (`pom.xml`, [pom.xmlL61-R61](diffhunk://#diff-9c5fb3d1b7e3b0f54bc5c4182965c4fe1f9023d449017cece3005d3f90e8e4d8L61-R61)) ### Test case modernization: * Refactored `ServiceWithPromptTemplatesTest` to replace Mockito-based mocking with a custom implementation of `ChatLanguageModel` and added assertions using Kotest matchers. (`ServiceWithPromptTemplatesTest.kt`, [langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/service/ServiceWithPromptTemplatesTest.ktL5-L38](diffhunk://#diff-947134b2579e5523e6e2d14fe06faabb496febaedbf4ad4b3c5c8f7a7b41ed85L5-L38)) * Refactored `ServiceWithSystemMessageProviderTest` to use a similar custom implementation approach for `ChatLanguageModel` and Kotest matchers, replacing Mockito-based mocking. (`ServiceWithSystemMessageProviderTest.kt`, [langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/service/ServiceWithSystemMessageProviderTest.ktL8-R31](diffhunk://#diff-55dec856bd4fc94e4c24ff6a6f4c4525e225f6bff48e19aa1d656f67c423d991L8-R31)) ### Code removal: * Removed the `Metadata.merge` extension function and its associated documentation, which merged two `Metadata` objects while ensuring no key conflicts. (`MetadataExtensions.kt`, [langchain4j-kotlin/src/main/kotlin/me/kpavlov/langchain4j/kotlin/data/document/MetadataExtensions.ktL1-L21](diffhunk://#diff-049e3aeea4dc17a740a66338ba7c761d6733ac1da8945ba1e896c5780cf7f358L1-L21)) * Deleted the `MetadataExtensionsTest` file, which contained tests for the removed `Metadata.merge` function. (`MetadataExtensionsTest.kt`, [langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/data/document/MetadataExtensionsTest.ktL1-L54](diffhunk://#diff-7069d7fe6ae3519b489cf7316b75bf9557d81948832b8c74a3469d410ff8bbf9L1-L54)) ### Build process updates: * Updated the `Makefile` to include the `-Prelease` profile and skip GPG signing during the build process. (`Makefile`, [MakefileL2-R2](diffhunk://#diff-76ed074a9305c04054cdebb9e9aad2d818052b07091de1f20cad0bbac34ffb52L2-R2))
1 parent 5b37f04 commit 57e4d39

File tree

6 files changed

+56
-116
lines changed

6 files changed

+56
-116
lines changed

Makefile

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
build:
2-
mvn clean verify site
2+
mvn clean verify site -Prelease -Dgpg.skip
33

44
apidocs:
5-
mvn clean dokka:dokka -pl !reports && \
6-
mkdir -p target/docs && \
5+
mvn clean dokka:dokka -pl !reports && \
6+
mkdir -p target/docs && \
77
cp -R langchain4j-kotlin/target/dokka target/docs/api
88

99
lint:prepare
10-
ktlint && \
11-
mvn spotless:check
10+
ktlint && \
11+
mvn spotless:check
1212

1313
# https://docs.openrewrite.org/recipes/maven/bestpractices
1414
format:prepare
1515
ktlint --format && \
16-
mvn spotless:apply && \
16+
mvn spotless:apply && \
1717
mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
1818
-Drewrite.activeRecipes=org.openrewrite.maven.BestPractices \
1919
-Drewrite.exportDatatables=true

langchain4j-kotlin/src/main/kotlin/me/kpavlov/langchain4j/kotlin/data/document/MetadataExtensions.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/data/document/MetadataExtensionsTest.kt

Lines changed: 0 additions & 54 deletions
This file was deleted.

langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/service/ServiceWithPromptTemplatesTest.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,45 @@ package me.kpavlov.langchain4j.kotlin.service
22

33
import assertk.assertThat
44
import assertk.assertions.isEqualTo
5-
import assertk.assertions.isInstanceOf
65
import dev.langchain4j.data.message.AiMessage
76
import dev.langchain4j.data.message.SystemMessage
87
import dev.langchain4j.data.message.UserMessage
98
import dev.langchain4j.model.chat.ChatLanguageModel
10-
import dev.langchain4j.model.output.Response
9+
import dev.langchain4j.model.chat.request.ChatRequest
10+
import dev.langchain4j.model.chat.response.ChatResponse
1111
import dev.langchain4j.service.AiServices
1212
import dev.langchain4j.service.UserName
1313
import dev.langchain4j.service.V
14+
import io.kotest.matchers.collections.shouldHaveSize
15+
import io.kotest.matchers.shouldBe
1416
import org.junit.jupiter.api.Test
15-
import org.junit.jupiter.api.extension.ExtendWith
16-
import org.mockito.junit.jupiter.MockitoExtension
1717

18-
@ExtendWith(MockitoExtension::class)
1918
internal class ServiceWithPromptTemplatesTest {
20-
private lateinit var model: ChatLanguageModel
21-
2219
@Test
2320
fun `Should use System and User Prompt Templates`() {
24-
model =
25-
ChatLanguageModel {
26-
assertThat(
27-
it[0],
28-
).isEqualTo(
29-
SystemMessage.from("You are helpful assistant using chatMemoryID=default"),
30-
)
31-
assertThat(it[1])
32-
.isInstanceOf(UserMessage::class.java)
33-
.given { userPrompt ->
34-
assertThat(
35-
userPrompt.singleText(),
36-
).isEqualTo("Hello, My friend! How are you?")
37-
}
38-
Response.from(AiMessage.from("I'm fine, thanks"))
21+
val chatResponse =
22+
ChatResponse
23+
.builder()
24+
.aiMessage(AiMessage("I'm fine, thanks"))
25+
.build()
26+
27+
val model =
28+
object : ChatLanguageModel {
29+
override fun chat(chatRequest: ChatRequest): ChatResponse {
30+
chatRequest.messages() shouldHaveSize 2
31+
val systemMessage =
32+
chatRequest.messages().first { it is SystemMessage } as SystemMessage
33+
val userMessage =
34+
chatRequest.messages().first {
35+
it is UserMessage
36+
} as UserMessage
37+
38+
systemMessage.text() shouldBe
39+
"You are helpful assistant using chatMemoryID=default"
40+
userMessage.singleText() shouldBe "Hello, My friend! How are you?"
41+
42+
return chatResponse
43+
}
3944
}
4045

4146
val assistant =

langchain4j-kotlin/src/test/kotlin/me/kpavlov/langchain4j/kotlin/service/ServiceWithSystemMessageProviderTest.kt

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,35 @@ import assertk.assertions.isEqualTo
55
import dev.langchain4j.data.message.AiMessage
66
import dev.langchain4j.data.message.SystemMessage
77
import dev.langchain4j.model.chat.ChatLanguageModel
8-
import dev.langchain4j.model.output.Response
8+
import dev.langchain4j.model.chat.request.ChatRequest
9+
import dev.langchain4j.model.chat.response.ChatResponse
910
import dev.langchain4j.service.AiServices
1011
import dev.langchain4j.service.UserMessage
12+
import io.kotest.matchers.collections.shouldHaveSize
13+
import io.kotest.matchers.shouldBe
1114
import org.junit.jupiter.api.Test
12-
import org.junit.jupiter.api.extension.ExtendWith
13-
import org.mockito.Mock
14-
import org.mockito.junit.jupiter.MockitoExtension
1515

16-
@ExtendWith(MockitoExtension::class)
1716
internal class ServiceWithSystemMessageProviderTest {
18-
@Mock
19-
lateinit var model: ChatLanguageModel
20-
2117
@Test
2218
fun `Should use SystemMessageProvider`() {
23-
model =
24-
ChatLanguageModel {
25-
assertThat(it.first()).isEqualTo(SystemMessage.from("You are helpful assistant"))
26-
Response.from(AiMessage.from("I'm fine, thanks"))
19+
val chatResponse = ChatResponse.builder().aiMessage(AiMessage("I'm fine, thanks")).build()
20+
21+
val model =
22+
object : ChatLanguageModel {
23+
override fun chat(chatRequest: ChatRequest): ChatResponse {
24+
chatRequest.messages() shouldHaveSize 2
25+
val systemMessage =
26+
chatRequest.messages().first {
27+
it is SystemMessage
28+
} as SystemMessage
29+
val userMessage =
30+
chatRequest.messages().first {
31+
it is dev.langchain4j.data.message.UserMessage
32+
} as dev.langchain4j.data.message.UserMessage
33+
systemMessage.text() shouldBe "You are helpful assistant"
34+
userMessage.singleText() shouldBe "How are you"
35+
return chatResponse
36+
}
2737
}
2838

2939
val assistant =

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<finchly.version>0.1.1</finchly.version>
5959
<junit.version>5.12.2</junit.version>
6060
<kotlinx-coroutines.version>1.8.1</kotlinx-coroutines.version>
61-
<langchain4j.version>1.0.0-beta1</langchain4j.version>
61+
<langchain4j.version>1.0.0-beta3</langchain4j.version>
6262
<mockito-kotlin.version>5.4.0</mockito-kotlin.version>
6363
<mockito.version>5.17.0</mockito.version>
6464
<slf4j.version>2.0.17</slf4j.version>

0 commit comments

Comments
 (0)