@@ -16,17 +16,19 @@ import (
1616// TYPES
1717
1818type 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"`
2122}
2223
2324type Server struct {
2425 sync.RWMutex
2526 * telegram.Client
2627
2728 // Model and toolkit
28- toolkit llm.ToolKit
2929 model llm.Model
30+ toolkit llm.ToolKit
31+ opts []llm.Opt
3032
3133 // Map of active sessions
3234 sessions map [string ]llm.Context
@@ -35,11 +37,15 @@ type Server struct {
3537////////////////////////////////////////////////////////////////////////////////
3638// LIFECYCLE
3739
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 ) {
3941 server := new (Server )
4042 server .sessions = make (map [string ]llm.Context )
4143 server .model = model
4244 server .toolkit = toolkit
45+ server .opts = []llm.Opt {
46+ llm .WithToolKit (toolkit ),
47+ llm .WithSystemPrompt (system ),
48+ }
4349
4450 // Create a new telegram client
4551 opts = append (opts , telegram .WithCallback (server .receive ))
@@ -58,12 +64,12 @@ func NewTelegramServer(token string, model llm.Model, toolkit llm.ToolKit, opts
5864
5965func (cmd * Chat2Cmd ) Run (globals * Globals ) error {
6066 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 ))
6268 if err != nil {
6369 return err
6470 }
6571
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 ())
6773
6874 var result error
6975 var wg sync.WaitGroup
@@ -103,7 +109,7 @@ func (telegram *Server) Purge() {
103109 telegram .Lock ()
104110 defer telegram .Unlock ()
105111 for user , session := range telegram .sessions {
106- if session .SinceLast () > 10 * time .Minute {
112+ if session .SinceLast () > 5 * time .Minute {
107113 log .Printf ("Purging session for %q\n " , user )
108114 delete (telegram .sessions , user )
109115 }
@@ -116,10 +122,7 @@ func (telegram *Server) session(user string) llm.Context {
116122 if session , exists := telegram .sessions [user ]; exists {
117123 return session
118124 }
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 ... )
123126 telegram .sessions [user ] = session
124127 return session
125128}
@@ -130,7 +133,6 @@ func (telegram *Server) receive(ctx context.Context, msg telegram.Message) error
130133
131134 // Process the message
132135 text := msg .Text ()
133- text += "\n \n Please reply in markdown format."
134136 if err := session .FromUser (ctx , text ); err != nil {
135137 return err
136138 }
@@ -144,7 +146,7 @@ func (telegram *Server) receive(ctx context.Context, msg telegram.Message) error
144146 if text := session .Text (0 ); text != "" {
145147 msg .Reply (ctx , text , false )
146148 } else {
147- msg .Reply (ctx , "_Gathering information_ " , true )
149+ msg .Reply (ctx , "Gathering information " , true )
148150 }
149151
150152 results , err := telegram .toolkit .Run (ctx , calls ... )
0 commit comments