Skip to content

Commit eb5abde

Browse files
committed
User propagation
1 parent b2c0d0e commit eb5abde

File tree

6 files changed

+40
-13
lines changed

6 files changed

+40
-13
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.embabel.agent.api.annotation.Export;
77
import com.embabel.agent.api.common.Ai;
88

9+
import java.util.Map;
10+
911
record GuideRequest(
1012
String question
1113
) {
@@ -32,7 +34,7 @@ GuideResponse answerQuestion(GuideRequest guideRequest, Ai ai) {
3234
.withReferences(guideData.references)
3335
.withRag(guideData.ragOptions())
3436
.withTemplate("guide_system")
35-
.createObject(GuideResponse.class, guideData.templateModel());
37+
.createObject(GuideResponse.class, guideData.templateModel(Map.of()));
3638
}
3739

3840
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.embabel.guide;
22

33
import com.embabel.agent.api.common.AiBuilder;
4+
import com.embabel.agent.identity.User;
5+
import com.embabel.agent.rag.pipeline.event.RagPipelineEvent;
46
import com.embabel.chat.*;
57
import org.jetbrains.annotations.NotNull;
8+
import org.springframework.lang.Nullable;
9+
10+
import java.util.Map;
611

712
/**
813
* GuideLoader will have loaded content
@@ -13,14 +18,24 @@ public class GuideChatSession implements ChatSession {
1318

1419
private final AiBuilder aiBuilder;
1520
private final GuideData guideData;
21+
@Nullable
22+
private final User user;
1623

1724
private final Conversation conversation = new InMemoryConversation();
1825

1926
public GuideChatSession(AiBuilder aiBuilder,
20-
GuideData guideData
27+
GuideData guideData,
28+
@Nullable User user
2129
) {
2230
this.guideData = guideData;
2331
this.aiBuilder = aiBuilder;
32+
this.user = user;
33+
}
34+
35+
@Nullable
36+
@Override
37+
public User getUser() {
38+
return user;
2439
}
2540

2641
@NotNull
@@ -38,11 +53,14 @@ public void respond(@NotNull UserMessage userMessage, @NotNull MessageListener m
3853
.withLlm(guideData.guideConfig.llm())
3954
.withReferences(guideData.references)
4055
.withRag(guideData.ragOptions().withListener(e -> {
41-
var am = new AssistantMessage(e.toString());
42-
messageListener.onMessage(am, conversation);
56+
if (e instanceof RagPipelineEvent rpe) {
57+
var am = new AssistantMessage(rpe.getDescription());
58+
messageListener.onMessage(am, conversation);
59+
}
4360
}))
4461
.withTemplate("guide_system")
45-
.respondWithSystemPrompt(conversation, guideData.templateModel());
62+
.respondWithSystemPrompt(conversation,
63+
guideData.templateModel(Map.of("user", user)));
4664

4765
conversation.addMessage(assistantMessage);
4866
messageListener.onMessage(assistantMessage, conversation);

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.embabel.agent.api.common.AiBuilder;
44
import com.embabel.agent.api.common.LlmReference;
5+
import com.embabel.agent.identity.User;
56
import com.embabel.chat.ChatSession;
67
import com.embabel.chat.InMemoryChatbot;
78
import org.jetbrains.annotations.NotNull;
@@ -31,8 +32,8 @@ public GuideChatbot(
3132

3233
@NotNull
3334
@Override
34-
protected ChatSession doCreateSession(@Nullable String systemMessage) {
35-
return new GuideChatSession(aiBuilder, guideData);
35+
protected ChatSession doCreateSession(@Nullable User user, @Nullable String systemMessage) {
36+
return new GuideChatSession(aiBuilder, guideData, user);
3637
}
3738

3839
}

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@
1515
import org.springframework.transaction.PlatformTransactionManager;
1616
import org.springframework.transaction.support.TransactionTemplate;
1717

18-
import java.util.LinkedList;
19-
import java.util.List;
20-
import java.util.Map;
21-
import java.util.Set;
18+
import java.util.*;
2219

2320
/**
2421
* Exposes the guide configuration and the loaded references
@@ -85,7 +82,9 @@ public RagOptions ragOptions() {
8582
.withTopK(guideConfig.topK());
8683
}
8784

88-
public Map<String, Object> templateModel() {
89-
return Map.of("persona", guideConfig.persona());
85+
public Map<String, Object> templateModel(Map<String, Object> extras) {
86+
var n = new HashMap<>(extras);
87+
n.put("persona", guideConfig.persona());
88+
return n;
9089
}
9190
}

src/main/resources/prompts/coding_style.jinja

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Coding Style
22

3+
Refer to this if you generate any code.
4+
TRY NOT TO GENERATE CODE BUT PULL FROM EXAMPLES.
5+
36
- Use modern Java features like var, records, and switch expressions.
47
- Use multiline strings rather than concatenation.
58
- Use Mockito for tests.

src/main/resources/prompts/guide_system.jinja

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{% set persona_template = "persona/" + persona %}
22
{% include persona_template %}
33

4+
{% if user.displayName is defined and user.displayName %}
5+
The user's name is {{ user.displayName }}. Address them by name.
6+
{% endif %}
7+
48
References:
59

610
- embabel-agent-examples: Excellent source of API examples

0 commit comments

Comments
 (0)