1515 */
1616package com.embabel.chat.store.autoconfigure
1717
18+ import com.embabel.agent.api.common.Ai
1819import com.embabel.chat.ConversationFactory
1920import com.embabel.chat.ConversationFactoryProvider
2021import com.embabel.chat.MapConversationFactoryProvider
22+ import com.embabel.chat.store.adapter.LlmTitleGenerator
2123import com.embabel.chat.store.adapter.StoredConversationFactory
2224import com.embabel.chat.store.adapter.TitleGenerator
2325import com.embabel.chat.store.event.SessionEventAwaiter
@@ -26,6 +28,7 @@ import com.embabel.chat.support.InMemoryConversationFactory
2628import org.slf4j.LoggerFactory
2729import org.springframework.beans.factory.annotation.Autowired
2830import org.springframework.boot.autoconfigure.AutoConfiguration
31+ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
2932import org.springframework.boot.autoconfigure.condition.ConditionalOnClass
3033import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
3134import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
@@ -65,6 +68,22 @@ open class ChatStoreAutoConfiguration {
6568
6669 private val logger = LoggerFactory .getLogger(ChatStoreAutoConfiguration ::class .java)
6770
71+ /* *
72+ * Creates an [LlmTitleGenerator] that uses [Ai] to generate session titles.
73+ *
74+ * Only created if:
75+ * - No existing [TitleGenerator] bean
76+ * - An [Ai] bean is available (from embabel-agent)
77+ *
78+ * Apps can override by defining their own [TitleGenerator] bean.
79+ */
80+ @Bean
81+ @ConditionalOnMissingBean(TitleGenerator ::class )
82+ @ConditionalOnBean(Ai ::class )
83+ open fun titleGenerator (ai : Ai ): TitleGenerator = LlmTitleGenerator { prompt ->
84+ ai.withDefaultLlm().generateText(prompt)
85+ }
86+
6887 /* *
6988 * Creates a [StoredConversationFactory] for persistent conversations.
7089 *
0 commit comments