Skip to content

Commit a13523b

Browse files
committed
Integrate chat-store on agent
1 parent d5495e2 commit a13523b

7 files changed

Lines changed: 32 additions & 36 deletions

File tree

pom.xml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,13 @@
4949
<version>0.0.22</version>
5050
</dependency>
5151

52-
<!-- Chat session storage library -->
52+
<!-- Chat session storage with autoconfiguration -->
5353
<dependency>
5454
<groupId>com.embabel.agent</groupId>
55-
<artifactId>embabel-chat-store</artifactId>
55+
<artifactId>embabel-agent-starter-chat-store</artifactId>
5656
<version>0.2.0-SNAPSHOT</version>
5757
</dependency>
5858

59-
<!-- Chat store autoconfigure - provides ConversationFactoryProvider -->
60-
<dependency>
61-
<groupId>com.embabel.agent</groupId>
62-
<artifactId>embabel-agent-chatstore-autoconfigure</artifactId>
63-
<version>${embabel-agent.version}</version>
64-
</dependency>
65-
66-
6759
<dependency>
6860
<groupId>com.embabel.agent</groupId>
6961
<artifactId>embabel-agent-starter-openai</artifactId>

src/main/java/com/embabel/guide/ChatActions.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ private GuideUser getGuideUser(@Nullable User user) {
6161
var guideUserData = new GuideUserData(
6262
java.util.UUID.randomUUID().toString(),
6363
displayName != null ? displayName : "",
64-
null,
65-
null
64+
discordInfo.getUsername() != null ? discordInfo.getUsername() : "",
65+
null, // email
66+
null, // persona
67+
null // customPrompt
6668
);
6769
var discordUserInfo = new DiscordUserInfoData(
6870
discordInfo.getId(),

src/main/kotlin/com/embabel/guide/chat/model/DeliveredMessage.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.embabel.guide.chat.model
22

3-
import com.embabel.chat.store.model.StoredMessage
3+
import com.embabel.chat.store.model.SimpleStoredMessage
44
import java.time.Instant
55

66
/**
@@ -16,13 +16,13 @@ data class DeliveredMessage(
1616
val title: String? = null
1717
) {
1818
companion object {
19-
fun createFrom(msg: StoredMessage, sessionId: String, title: String? = null): DeliveredMessage {
19+
fun createFrom(msg: SimpleStoredMessage, sessionId: String, title: String? = null): DeliveredMessage {
2020
return DeliveredMessage(
2121
id = msg.messageId,
2222
sessionId = sessionId,
2323
role = msg.role.name.lowercase(),
2424
body = msg.content,
25-
ts = msg.createdAt,
25+
ts = msg.message.createdAt,
2626
authorId = msg.author?.id,
2727
title = title
2828
)

src/main/kotlin/com/embabel/guide/chat/service/ChatSessionService.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ import com.embabel.chat.ConversationFactoryProvider
55
import com.embabel.chat.ConversationStoreType
66
import com.embabel.chat.Role
77
import com.embabel.chat.UserMessage
8-
import com.embabel.chat.store.adapter.StoredConversationFactory
8+
import com.embabel.chat.event.MessageEvent
99
import com.embabel.chat.store.model.MessageData
10-
import com.embabel.chat.store.model.SessionUser
11-
import com.embabel.chat.store.model.StoredMessage
10+
import com.embabel.chat.store.model.SimpleStoredMessage
1211
import com.embabel.chat.store.model.StoredSession
12+
import com.embabel.chat.store.model.StoredUser
1313
import com.embabel.chat.store.repository.ChatSessionRepository
1414
import com.embabel.guide.domain.GuideUserRepository
1515
import com.embabel.guide.util.UUIDv7
1616
import kotlinx.coroutines.Dispatchers
1717
import kotlinx.coroutines.withContext
18+
import org.springframework.context.ApplicationEventPublisher
1819
import org.springframework.stereotype.Service
1920
import java.time.Instant
2021
import java.util.Optional
@@ -24,7 +25,8 @@ class ChatSessionService(
2425
private val chatSessionRepository: ChatSessionRepository,
2526
private val conversationFactoryProvider: ConversationFactoryProvider,
2627
private val ragAdapter: RagServiceAdapter,
27-
private val guideUserRepository: GuideUserRepository
28+
private val guideUserRepository: GuideUserRepository,
29+
private val eventPublisher: ApplicationEventPublisher
2830
) {
2931

3032
companion object {
@@ -251,13 +253,11 @@ class ChatSessionService(
251253
sessionId: String,
252254
text: String,
253255
role: Role,
254-
user: SessionUser,
255-
agent: SessionUser?,
256+
user: StoredUser,
257+
agent: StoredUser?,
256258
title: String? = null
257259
) {
258260
val factory = conversationFactoryProvider.getFactory(ConversationStoreType.STORED)
259-
as StoredConversationFactory
260-
261261
val conversation = factory.createForParticipants(sessionId, user, agent, title)
262262

263263
val message = when (role) {
@@ -285,7 +285,7 @@ class ChatSessionService(
285285
text: String,
286286
role: Role,
287287
authorId: String? = null
288-
): StoredMessage {
288+
): SimpleStoredMessage {
289289
val messageData = MessageData(
290290
messageId = UUIDv7.generateString(),
291291
role = role,

src/main/kotlin/com/embabel/guide/chat/service/JesseService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.embabel.guide.chat.service
22

33
import com.embabel.chat.Role
4-
import com.embabel.chat.store.model.SessionUser
4+
import com.embabel.chat.store.model.StoredUser
55
import com.embabel.guide.chat.model.StatusMessage
66
import com.embabel.guide.domain.GuideUserData
77
import com.embabel.guide.domain.GuideUserRepository
@@ -67,9 +67,9 @@ class JesseService(
6767
}
6868

6969
/**
70-
* Get Jesse's SessionUser for use as agent in conversations.
70+
* Get Jesse's StoredUser for use as agent in conversations.
7171
*/
72-
fun getJesseUser(): SessionUser = jesseUser
72+
fun getJesseUser(): StoredUser = jesseUser
7373

7474
private fun sendStatusToUser(toUserId: String, status: String) {
7575
logger.debug("Jesse sending status to user {}: {}", toUserId, status)

src/main/kotlin/com/embabel/guide/config/ChatStoreConfig.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.embabel.guide.config
22

3-
import com.embabel.chat.store.model.SessionUser
3+
import com.embabel.chat.store.model.StoredUser
44
import com.embabel.chat.store.repository.ChatSessionRepository
55
import com.embabel.chat.store.repository.ChatSessionRepositoryImpl
66
import com.embabel.guide.domain.GuideUserData
@@ -14,7 +14,7 @@ import org.springframework.context.annotation.Primary
1414

1515
/**
1616
* Configuration for embabel-chat-store integration.
17-
* Registers GuideUserData as the SessionUser implementation for polymorphic deserialization,
17+
* Registers GuideUserData as the StoredUser implementation for polymorphic deserialization,
1818
* and wires up the ChatSessionRepository bean.
1919
*/
2020
@Configuration
@@ -24,11 +24,11 @@ class ChatStoreConfig {
2424
@Primary
2525
fun persistenceManager(factory: PersistenceManagerFactory): PersistenceManager {
2626
val pm = factory.get("neo")
27-
// Register GuideUserData as implementation of SessionUser interface.
27+
// Register GuideUserData as implementation of StoredUser interface.
2828
// Composite label key is sorted alphabetically with pipe separator.
2929
pm.registerSubtype(
30-
SessionUser::class.java,
31-
"GuideUser|SessionUser",
30+
StoredUser::class.java,
31+
"GuideUser|User",
3232
GuideUserData::class.java
3333
)
3434
return pm
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
package com.embabel.guide.domain
22

3-
import com.embabel.chat.store.model.SessionUser
3+
import com.embabel.chat.store.model.StoredUser
44
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
55
import org.drivine.annotation.NodeFragment
66
import org.drivine.annotation.NodeId
77

88
/**
99
* Node fragment representing a GuideUser in the graph.
10-
* Implements SessionUser to enable integration with embabel-chat-store library.
10+
* Implements StoredUser to enable integration with embabel-chat-store library.
1111
*/
12-
@NodeFragment(labels = ["GuideUser", "SessionUser"])
12+
@NodeFragment(labels = ["GuideUser", "User"])
1313
@JsonIgnoreProperties(ignoreUnknown = true)
1414
data class GuideUserData(
1515
@NodeId
1616
override var id: String,
1717
override var displayName: String = "",
18+
override var username: String = displayName,
19+
override var email: String? = null,
1820
var persona: String? = null,
1921
var customPrompt: String? = null
20-
) : HasGuideUserData, SessionUser {
22+
) : HasGuideUserData, StoredUser {
2123

2224
override fun guideUserData(): GuideUserData = this
2325
}

0 commit comments

Comments
 (0)