@@ -16,17 +16,19 @@ import (
16
16
// TYPES
17
17
18
18
type Chat2Cmd struct {
19
- Model string `arg:"" help:"Model name"`
20
- Token string `env:"TELEGRAM_TOKEN" help:"Telegram token" required:""`
19
+ Model string `arg:"" help:"Model name"`
20
+ TelegramToken string `env:"TELEGRAM_TOKEN" help:"Telegram token" required:""`
21
+ System string `flag:"system" help:"Set the system prompt"`
21
22
}
22
23
23
24
type Server struct {
24
25
sync.RWMutex
25
26
* telegram.Client
26
27
27
28
// Model and toolkit
28
- toolkit llm.ToolKit
29
29
model llm.Model
30
+ toolkit llm.ToolKit
31
+ opts []llm.Opt
30
32
31
33
// Map of active sessions
32
34
sessions map [string ]llm.Context
@@ -35,11 +37,15 @@ type Server struct {
35
37
////////////////////////////////////////////////////////////////////////////////
36
38
// LIFECYCLE
37
39
38
- func NewTelegramServer (token string , model llm.Model , toolkit llm.ToolKit , opts ... telegram.Opt ) (* Server , error ) {
40
+ func NewTelegramServer (token string , model llm.Model , system string , toolkit llm.ToolKit , opts ... telegram.Opt ) (* Server , error ) {
39
41
server := new (Server )
40
42
server .sessions = make (map [string ]llm.Context )
41
43
server .model = model
42
44
server .toolkit = toolkit
45
+ server .opts = []llm.Opt {
46
+ llm .WithToolKit (toolkit ),
47
+ llm .WithSystemPrompt (system ),
48
+ }
43
49
44
50
// Create a new telegram client
45
51
opts = append (opts , telegram .WithCallback (server .receive ))
@@ -58,12 +64,12 @@ func NewTelegramServer(token string, model llm.Model, toolkit llm.ToolKit, opts
58
64
59
65
func (cmd * Chat2Cmd ) Run (globals * Globals ) error {
60
66
return run (globals , cmd .Model , func (ctx context.Context , model llm.Model ) error {
61
- server , err := NewTelegramServer (cmd .Token , model , globals .toolkit , telegram .WithDebug (globals .Debug ))
67
+ server , err := NewTelegramServer (cmd .TelegramToken , model , cmd . System , globals .toolkit , telegram .WithDebug (globals .Debug ))
62
68
if err != nil {
63
69
return err
64
70
}
65
71
66
- log .Printf ("Running Telegram bot %q\n " , server .Client .Name ())
72
+ log .Printf ("Running Telegram bot %q with model %q \n " , server .Client . Name (), model .Name ())
67
73
68
74
var result error
69
75
var wg sync.WaitGroup
@@ -103,7 +109,7 @@ func (telegram *Server) Purge() {
103
109
telegram .Lock ()
104
110
defer telegram .Unlock ()
105
111
for user , session := range telegram .sessions {
106
- if session .SinceLast () > 10 * time .Minute {
112
+ if session .SinceLast () > 5 * time .Minute {
107
113
log .Printf ("Purging session for %q\n " , user )
108
114
delete (telegram .sessions , user )
109
115
}
@@ -116,10 +122,7 @@ func (telegram *Server) session(user string) llm.Context {
116
122
if session , exists := telegram .sessions [user ]; exists {
117
123
return session
118
124
}
119
- session := telegram .model .Context (
120
- llm .WithToolKit (telegram .toolkit ),
121
- llm .WithSystemPrompt ("Please reply to messages in markdown format." ),
122
- )
125
+ session := telegram .model .Context (telegram .opts ... )
123
126
telegram .sessions [user ] = session
124
127
return session
125
128
}
@@ -130,7 +133,6 @@ func (telegram *Server) receive(ctx context.Context, msg telegram.Message) error
130
133
131
134
// Process the message
132
135
text := msg .Text ()
133
- text += "\n \n Please reply in markdown format."
134
136
if err := session .FromUser (ctx , text ); err != nil {
135
137
return err
136
138
}
@@ -144,7 +146,7 @@ func (telegram *Server) receive(ctx context.Context, msg telegram.Message) error
144
146
if text := session .Text (0 ); text != "" {
145
147
msg .Reply (ctx , text , false )
146
148
} else {
147
- msg .Reply (ctx , "_Gathering information_ " , true )
149
+ msg .Reply (ctx , "Gathering information " , true )
148
150
}
149
151
150
152
results , err := telegram .toolkit .Run (ctx , calls ... )
0 commit comments