Skip to content

Commit c476bb6

Browse files
committed
feat: add user handle to prompt
1 parent cd61272 commit c476bb6

File tree

5 files changed

+27
-6
lines changed

5 files changed

+27
-6
lines changed

config.sample.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ bot_token = "4242:telegram-bot-token"
1919
api_key = "sk-api-key"
2020
system_prompt = '''
2121
You are HSBot, a helpful assistant.
22+
There might be multiple persons in a single conversation interacting with you.
23+
The username of the person is at the beginning of the prompt, starting with an @.
24+
If there is no @, it's just the first name of the user. You can directly address a person if you got provided with an @ handle.
2225
'''
2326

2427
[fal]

internal/adapters/handler/command.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,13 @@ func (h *CommandHandler) Handle(ctx context.Context, b *bot.Bot, update *models.
4848
}
4949
if update.Message.ReplyToMessage.From.ID == botUser.ID {
5050
isReplyToBot = true
51+
quotedText = update.Message.ReplyToMessage.Text
52+
} else {
53+
quotedText = getUserNameFromMessage(update.Message.ReplyToMessage.From) + ": " +
54+
update.Message.ReplyToMessage.Text
5155
}
56+
5257
*replyToMessageID = update.Message.ReplyToMessage.ID
53-
quotedText = update.Message.ReplyToMessage.Text
5458
}
5559

5660
imageURL := make(chan string)
@@ -64,6 +68,7 @@ func (h *CommandHandler) Handle(ctx context.Context, b *bot.Bot, update *models.
6468
ID: update.Message.ID,
6569
ChatID: update.Message.Chat.ID,
6670
Text: update.Message.Text,
71+
Username: getUserNameFromMessage(update.Message.From),
6772
ReplyToMessageID: replyToMessageID,
6873
IsReplyToBot: isReplyToBot,
6974
QuotedText: quotedText,
@@ -147,3 +152,11 @@ func findLargestImage(photos []models.PhotoSize) string {
147152

148153
return maxID
149154
}
155+
156+
func getUserNameFromMessage(user *models.User) string {
157+
if user.Username == "" {
158+
return user.FirstName
159+
}
160+
161+
return "@" + user.Username
162+
}

internal/core/domain/commands/chat.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ func (h *ChatHandler) Respond(ctx context.Context, timeout time.Duration, messag
7878
promptText += ": " + transcript
7979
}
8080

81+
promptText = message.Username + ": " + promptText
82+
8183
h.mutex.Lock()
8284
defer h.mutex.Unlock()
8385

@@ -99,7 +101,7 @@ func (h *ChatHandler) Respond(ctx context.Context, timeout time.Duration, messag
99101
}
100102

101103
conversation.messages = append(conversation.messages, domain.Prompt{Author: domain.User,
102-
Prompt: message.Text})
104+
Prompt: promptText})
103105
} else {
104106
conversation.messages = append(conversation.messages, domain.Prompt{Author: domain.User,
105107
Prompt: promptText, ImageURL: message.ImageURL})

internal/core/domain/commands/chat_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,23 @@ func TestChatHandlerCache(t *testing.T) {
6464

6565
assert.NotNil(t, chatHandler)
6666

67-
err := chatHandler.Respond(context.Background(), time.Minute, &domain.Message{ChatID: 1, ID: 1, Text: "/chat prompt"})
67+
err := chatHandler.Respond(context.Background(), time.Minute, &domain.Message{
68+
ChatID: 1, ID: 1, Username: "@unit", Text: "/chat prompt"})
6869

6970
require.NoError(t, err)
7071
assert.Equal(t, "mock response", ms.Message)
7172
assert.Len(t, chatHandler.cache, 1)
7273

73-
err = chatHandler.Respond(context.Background(), time.Minute, &domain.Message{ChatID: 1, ID: 2, Text: "/chat prompt2"})
74+
err = chatHandler.Respond(context.Background(), time.Minute, &domain.Message{
75+
ChatID: 1, ID: 2, Username: "@unit", Text: "/chat prompt2"})
7476
require.NoError(t, err)
7577
assert.Len(t, chatHandler.cache, 1)
7678

7779
assert.Len(t, chatHandler.cache[1].messages, 4)
7880

79-
assert.Equal(t, "prompt", chatHandler.cache[1].messages[0].Prompt)
81+
assert.Equal(t, "@unit: prompt", chatHandler.cache[1].messages[0].Prompt)
8082
assert.Equal(t, "mock response", chatHandler.cache[1].messages[1].Prompt)
81-
assert.Equal(t, "prompt2", chatHandler.cache[1].messages[2].Prompt)
83+
assert.Equal(t, "@unit: prompt2", chatHandler.cache[1].messages[2].Prompt)
8284
assert.Equal(t, "mock response", chatHandler.cache[1].messages[3].Prompt)
8385
}
8486

internal/core/domain/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type Prompt struct {
1616
type Message struct {
1717
ID int
1818
ChatID int64
19+
Username string
1920
ReplyToMessageID *int
2021
IsReplyToBot bool
2122
QuotedText string

0 commit comments

Comments
 (0)