Fix Ollama Kotlin function callback integration tests
- Add default values to KotlinRequest data class to fix Jackson deserialization - Replace hardcoded model name with OllamaModel.LLAMA3_2 for consistency - Extract common test setup into companion objects for Ollama tests - Replace var with val using when expression in weather service - Clean up imports and remove unused annotations - Standardize property access using Kotlin conventions
This commit is contained in:
committed by
Mark Pollack
parent
634ac2019b
commit
5e1f681da2
@@ -14,43 +14,51 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.springframework.ai.autoconfigure.ollama.tool
|
||||
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.condition.DisabledIf
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
import org.springframework.ai.autoconfigure.ollama.BaseOllamaIT
|
||||
import org.springframework.ai.autoconfigure.ollama.OllamaAutoConfiguration
|
||||
import org.springframework.ai.chat.messages.UserMessage
|
||||
import org.springframework.ai.chat.prompt.Prompt
|
||||
import org.springframework.ai.model.function.FunctionCallingOptions
|
||||
import org.springframework.ai.ollama.OllamaChatModel
|
||||
import org.springframework.ai.ollama.api.OllamaModel
|
||||
import org.springframework.ai.ollama.api.OllamaOptions
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.context.annotation.Description
|
||||
import org.testcontainers.junit.jupiter.Testcontainers
|
||||
|
||||
class FunctionCallbackContextKotlinIT : BaseOllamaIT() {
|
||||
|
||||
companion object {
|
||||
|
||||
private val MODEL_NAME = OllamaModel.LLAMA3_2.getName();
|
||||
|
||||
@JvmStatic
|
||||
@BeforeAll
|
||||
fun beforeAll() {
|
||||
initializeOllama(MODEL_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
private val logger = LoggerFactory.getLogger(FunctionCallbackContextKotlinIT::class.java)
|
||||
|
||||
private val MODEL_NAME = "qwen2.5:3b"
|
||||
|
||||
val contextRunner = buildOllamaApiWithModel(MODEL_NAME).let { baseUrl ->
|
||||
ApplicationContextRunner().withPropertyValues(
|
||||
"spring.ai.ollama.baseUrl=$baseUrl",
|
||||
private val contextRunner = ApplicationContextRunner()
|
||||
.withPropertyValues(
|
||||
"spring.ai.ollama.baseUrl=${getBaseUrl()}",
|
||||
"spring.ai.ollama.chat.options.model=$MODEL_NAME",
|
||||
"spring.ai.ollama.chat.options.temperature=0.5",
|
||||
"spring.ai.ollama.chat.options.topK=10"
|
||||
)
|
||||
.withConfiguration(AutoConfigurations.of(OllamaAutoConfiguration::class.java))
|
||||
.withUserConfiguration(Config::class.java)
|
||||
}
|
||||
.withConfiguration(AutoConfigurations.of(OllamaAutoConfiguration::class.java))
|
||||
.withUserConfiguration(Config::class.java)
|
||||
|
||||
@Test
|
||||
fun functionCallTest() {
|
||||
@@ -98,18 +106,13 @@ class FunctionCallbackContextKotlinIT : BaseOllamaIT() {
|
||||
@Bean
|
||||
@Description("Find the weather conditions, forecasts, and temperatures for a location, like a city or state.")
|
||||
open fun weatherInfo(): (KotlinRequest) -> KotlinResponse = { request ->
|
||||
var temperature = 10.0
|
||||
if (request.location.contains("Paris")) {
|
||||
temperature = 15.0
|
||||
val temperature = when {
|
||||
request.location.contains("Paris") -> 15.0
|
||||
request.location.contains("Tokyo") -> 10.0
|
||||
request.location.contains("San Francisco") -> 30.0
|
||||
else -> 10.0
|
||||
}
|
||||
else if (request.location.contains("Tokyo")) {
|
||||
temperature = 10.0
|
||||
}
|
||||
else if (request.location.contains("San Francisco")) {
|
||||
temperature = 30.0
|
||||
}
|
||||
KotlinResponse(temperature, 15.0, 20.0, 2.0, 53, 45, Unit.C);
|
||||
KotlinResponse(temperature, 15.0, 20.0, 2.0, 53, 45, Unit.C)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.springframework.ai.autoconfigure.ollama.tool
|
||||
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.condition.DisabledIf
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
import org.springframework.ai.autoconfigure.ollama.BaseOllamaIT
|
||||
import org.springframework.ai.autoconfigure.ollama.OllamaAutoConfiguration
|
||||
import org.springframework.ai.chat.messages.UserMessage
|
||||
@@ -29,29 +29,37 @@ import org.springframework.ai.model.function.FunctionCallback
|
||||
import org.springframework.ai.model.function.FunctionCallbackWrapper
|
||||
import org.springframework.ai.model.function.FunctionCallingOptions
|
||||
import org.springframework.ai.ollama.OllamaChatModel
|
||||
import org.springframework.ai.ollama.api.OllamaModel
|
||||
import org.springframework.ai.ollama.api.OllamaOptions
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.testcontainers.junit.jupiter.Testcontainers
|
||||
|
||||
class FunctionCallbackWrapperKotlinIT : BaseOllamaIT() {
|
||||
|
||||
companion object {
|
||||
|
||||
private val MODEL_NAME = OllamaModel.LLAMA3_2.getName();
|
||||
|
||||
@JvmStatic
|
||||
@BeforeAll
|
||||
fun beforeAll() {
|
||||
initializeOllama(MODEL_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
private val logger = LoggerFactory.getLogger(FunctionCallbackWrapperKotlinIT::class.java)
|
||||
|
||||
private val MODEL_NAME = "qwen2.5:3b"
|
||||
|
||||
val contextRunner = buildOllamaApiWithModel(MODEL_NAME).let { baseUrl ->
|
||||
ApplicationContextRunner().withPropertyValues(
|
||||
"spring.ai.ollama.baseUrl=$baseUrl",
|
||||
private val contextRunner = ApplicationContextRunner()
|
||||
.withPropertyValues(
|
||||
"spring.ai.ollama.baseUrl=${getBaseUrl()}",
|
||||
"spring.ai.ollama.chat.options.model=$MODEL_NAME",
|
||||
"spring.ai.ollama.chat.options.temperature=0.5",
|
||||
"spring.ai.ollama.chat.options.topK=10"
|
||||
)
|
||||
.withConfiguration(AutoConfigurations.of(OllamaAutoConfiguration::class.java))
|
||||
.withUserConfiguration(Config::class.java)
|
||||
}
|
||||
.withConfiguration(AutoConfigurations.of(OllamaAutoConfiguration::class.java))
|
||||
.withUserConfiguration(Config::class.java)
|
||||
|
||||
@Test
|
||||
fun functionCallTest() {
|
||||
|
||||
@@ -60,12 +60,24 @@ enum class Unit(val unitName: String) {
|
||||
*/
|
||||
@JsonInclude(Include.NON_NULL)
|
||||
@JsonClassDescription("Weather API request")
|
||||
data class KotlinRequest(@get:JsonProperty(required = true, value = "location") @get:JsonPropertyDescription("The city and state e.g. San Francisco, CA") val location: String,
|
||||
@get:JsonProperty(required = true, value = "lat") @get:JsonPropertyDescription("The city latitude") val lat: Double,
|
||||
@get:JsonProperty(required = true, value = "lon") @get:JsonPropertyDescription("The city longitude") val lon: Double,
|
||||
@get:JsonProperty(required = true, value = "unit") @get:JsonPropertyDescription("Temperature unit") val unit: Unit) {
|
||||
data class KotlinRequest(
|
||||
@get:JsonProperty(required = true, value = "location")
|
||||
@get:JsonPropertyDescription("The city and state e.g. San Francisco, CA")
|
||||
val location: String = "",
|
||||
|
||||
@get:JsonProperty(required = true, value = "lat")
|
||||
@get:JsonPropertyDescription("The city latitude")
|
||||
val lat: Double = 0.0,
|
||||
|
||||
@get:JsonProperty(required = true, value = "lon")
|
||||
@get:JsonPropertyDescription("The city longitude")
|
||||
val lon: Double = 0.0,
|
||||
|
||||
@get:JsonProperty(required = true, value = "unit")
|
||||
@get:JsonPropertyDescription("Temperature unit")
|
||||
val unit: Unit = Unit.C
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Weather Function response.
|
||||
|
||||
Reference in New Issue
Block a user