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 9e5cfac9448..a4b0f1c186f 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 @@ -29,6 +29,7 @@ /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @AutoConfiguration(after = CassandraAutoConfiguration.class) @@ -50,8 +51,8 @@ public CassandraChatMemory chatMemory(CassandraChatMemoryProperties properties, 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 fc0f45e5ce3..57a1331c802 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 @@ -28,6 +28,7 @@ /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @ConfigurationProperties(CassandraChatMemoryProperties.CONFIG_PREFIX) @@ -45,7 +46,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; @@ -80,12 +81,12 @@ public void setUserColumn(String userColumn) { } @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 abc4b6c4317..c1eba20a815 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 @@ /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ @Testcontainers @@ -57,7 +59,7 @@ void addAndGet() { 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 @@ void addAndGet() { .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 @@ private String getContactPointPort() { 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 c3b47308968..ee44f27b49a 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 @@ /** * @author Mick Semb Wever + * @author Jihoon Kim * @since 1.0.0 */ class CassandraChatMemoryPropertiesTest { @@ -37,7 +38,7 @@ void defaultValues() { 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 @@ void customValues() { 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(); }