diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java index c168669e7..9f98736ce 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfiguration.java @@ -31,6 +31,7 @@ import org.springframework.context.annotation.Bean; * {@link AutoConfiguration Auto-configuration} for {@link CassandraChatMemory}. * * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @AutoConfiguration(after = CassandraAutoConfiguration.class) @@ -52,8 +53,8 @@ public class CassandraChatMemoryAutoConfiguration { if (!properties.isInitializeSchema()) { builder = builder.disallowSchemaChanges(); } - if (null != properties.getTimeToLiveSeconds()) { - builder = builder.withTimeToLive(properties.getTimeToLiveSeconds()); + if (null != properties.getTimeToLive()) { + builder = builder.withTimeToLive(properties.getTimeToLive()); } return CassandraChatMemory.create(builder.build()); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java index 7c3bde2c8..c815131f3 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryProperties.java @@ -30,6 +30,7 @@ import org.springframework.lang.Nullable; * Configuration properties for Cassandra chat memory. * * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @ConfigurationProperties(CassandraChatMemoryProperties.CONFIG_PREFIX) @@ -47,7 +48,7 @@ public class CassandraChatMemoryProperties extends CommonChatMemoryProperties { private String userColumn = CassandraChatMemoryConfig.DEFAULT_USER_COLUMN_NAME; - private Duration timeToLiveSeconds = null; + private Duration timeToLive = null; public String getKeyspace() { return this.keyspace; @@ -82,12 +83,12 @@ public class CassandraChatMemoryProperties extends CommonChatMemoryProperties { } @Nullable - public Duration getTimeToLiveSeconds() { - return this.timeToLiveSeconds; + public Duration getTimeToLive() { + return this.timeToLive; } - public void setTimeToLiveSeconds(Duration timeToLiveSeconds) { - this.timeToLiveSeconds = timeToLiveSeconds; + public void setTimeToLive(Duration timeToLive) { + this.timeToLive = timeToLive; } } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java index abc4b6c43..c1eba20a8 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryAutoConfigurationIT.java @@ -16,6 +16,7 @@ package org.springframework.ai.autoconfigure.chat.memory.cassandra; +import java.time.Duration; import java.util.List; import com.datastax.driver.core.utils.UUIDs; @@ -37,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @Testcontainers @@ -57,7 +59,7 @@ class CassandraChatMemoryAutoConfigurationIT { this.contextRunner.withPropertyValues("spring.cassandra.contactPoints=" + getContactPointHost()) .withPropertyValues("spring.cassandra.port=" + getContactPointPort()) .withPropertyValues("spring.cassandra.localDatacenter=" + cassandraContainer.getLocalDatacenter()) - + .withPropertyValues("spring.ai.chat.memory.cassandra.time-to-live=" + getTimeToLive()) .run(context -> { CassandraChatMemory memory = context.getBean(CassandraChatMemory.class); @@ -84,6 +86,20 @@ class CassandraChatMemoryAutoConfigurationIT { .isEqualTo(MessageType.ASSISTANT); assertThat(memory.get(sessionId, Integer.MAX_VALUE).get(0).getContent()).isEqualTo("test answer"); + CassandraChatMemoryProperties properties = context.getBean(CassandraChatMemoryProperties.class); + assertThat(properties.getTimeToLive()).isEqualTo(getTimeToLive()); + }); + } + + @Test + void compareTimeToLive_ISO8601Format() { + this.contextRunner.withPropertyValues("spring.cassandra.contactPoints=" + getContactPointHost()) + .withPropertyValues("spring.cassandra.port=" + getContactPointPort()) + .withPropertyValues("spring.cassandra.localDatacenter=" + cassandraContainer.getLocalDatacenter()) + .withPropertyValues("spring.ai.chat.memory.cassandra.time-to-live=" + getTimeToLiveString()) + .run(context -> { + CassandraChatMemoryProperties properties = context.getBean(CassandraChatMemoryProperties.class); + assertThat(properties.getTimeToLive()).isEqualTo(Duration.parse(getTimeToLiveString())); }); } @@ -95,4 +111,12 @@ class CassandraChatMemoryAutoConfigurationIT { return String.valueOf(cassandraContainer.getContactPoint().getPort()); } + private Duration getTimeToLive() { + return Duration.ofSeconds(12000); + } + + private String getTimeToLiveString() { + return "PT1M"; + } + } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java index c3b473089..ee44f27b4 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/chat/memory/cassandra/CassandraChatMemoryPropertiesTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ class CassandraChatMemoryPropertiesTest { @@ -37,7 +38,7 @@ class CassandraChatMemoryPropertiesTest { assertThat(props.getTable()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_TABLE_NAME); assertThat(props.getAssistantColumn()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_ASSISTANT_COLUMN_NAME); assertThat(props.getUserColumn()).isEqualTo(CassandraChatMemoryConfig.DEFAULT_USER_COLUMN_NAME); - assertThat(props.getTimeToLiveSeconds()).isNull(); + assertThat(props.getTimeToLive()).isNull(); assertThat(props.isInitializeSchema()).isTrue(); } @@ -48,14 +49,14 @@ class CassandraChatMemoryPropertiesTest { props.setTable("my_table"); props.setAssistantColumn("my_assistant_column"); props.setUserColumn("my_user_column"); - props.setTimeToLiveSeconds(Duration.ofDays(1)); + props.setTimeToLive(Duration.ofDays(1)); props.setInitializeSchema(false); assertThat(props.getKeyspace()).isEqualTo("my_keyspace"); assertThat(props.getTable()).isEqualTo("my_table"); assertThat(props.getAssistantColumn()).isEqualTo("my_assistant_column"); assertThat(props.getUserColumn()).isEqualTo("my_user_column"); - assertThat(props.getTimeToLiveSeconds()).isEqualTo(Duration.ofDays(1)); + assertThat(props.getTimeToLive()).isEqualTo(Duration.ofDays(1)); assertThat(props.isInitializeSchema()).isFalse(); }