11use color_eyre:: Result ;
22use r2d2_sqlite:: SqliteConnectionManager ;
3- use rig:: {
4- completion:: { Prompt , ToolDefinition } ,
5- prelude:: * ,
6- providers,
7- tool:: Tool ,
8- } ;
9- use rusqlite:: params;
10- use serde:: { Deserialize , Serialize } ;
11- use serde_json:: json;
3+ use rig:: { completion:: Prompt , prelude:: * , providers} ;
124use serde_rusqlite:: from_row;
135
14- use crate :: {
15- brave:: BraveApi ,
16- database:: { self , User } ,
17- } ;
6+ use crate :: { brave:: BraveApi , database:: User } ;
187
198use std:: collections:: HashMap ;
20- use std:: sync:: { Arc , Mutex } ;
21-
22- // Tool call logger to track which tools are called
23- type ToolCallLogger = Arc < Mutex < Vec < String > > > ;
24-
25- #[ derive( Debug , thiserror:: Error ) ]
26- #[ error( "Error" ) ]
27- pub enum ToolError {
28- Generic ( #[ from] color_eyre:: Report ) ,
29- Pool ( #[ from] r2d2:: Error ) ,
30- }
319
3210pub async fn main (
3311 database : r2d2:: Pool < SqliteConnectionManager > ,
3412 user_id : u64 ,
3513 message : & str ,
3614 context : & str ,
37- brave : BraveApi ,
15+ _brave : BraveApi ,
3816 user_mentions : HashMap < String , u64 > ,
3917) -> Result < String > {
4018 // Create OpenAI client
4119 let openai_client = providers:: openai:: Client :: from_env ( ) ;
4220
21+ // Replace user mentions with usernames in context
22+ let mut processed_context = context. to_string ( ) ;
23+ for ( mention, mentioned_user_id) in & user_mentions {
24+ let db = database. get ( ) ?;
25+ let mut statement = db. prepare ( "SELECT * FROM user WHERE id = ?" ) . unwrap ( ) ;
26+ if let Ok ( mentioned_user) = statement. query_one ( [ mentioned_user_id. to_string ( ) ] , |row| {
27+ from_row :: < User > ( row) . map_err ( |_| rusqlite:: Error :: QueryReturnedNoRows )
28+ } ) {
29+ processed_context = processed_context. replace ( mention, & mentioned_user. name ) ;
30+ }
31+ }
32+
4333 let user = {
4434 let db = database. get ( ) ?;
4535 let mut statement = db. prepare ( "SELECT * FROM user WHERE id = ?" ) . unwrap ( ) ;
@@ -59,12 +49,7 @@ pub async fn main(
5949 }
6050 } ;
6151
62- let User {
63- name,
64- level,
65- xp,
66- ..
67- } = user;
52+ let User { name, level, xp, .. } = user;
6853
6954 // Create agent - smarter and more annoying
7055 let smart_agent = openai_client
@@ -91,7 +76,7 @@ You are replying to {name}.
9176{name} is level: {level}, xp: {xp}.
9277
9378message context:
94- {context }" , ) . replace ( "\\ \n " , "" ) )
79+ {}" , processed_context ) . replace ( "\\ \n " , "" ) )
9580 . max_tokens ( 2048 )
9681 . build ( ) ;
9782
0 commit comments