@@ -6,6 +6,7 @@ mod install_method;
6
6
7
7
use core:: ToolUseEventBuilder ;
8
8
use std:: str:: FromStr ;
9
+ use std:: sync:: { Arc , RwLock } ;
9
10
10
11
use amzn_codewhisperer_client:: types:: {
11
12
ChatAddMessageEvent ,
@@ -131,20 +132,24 @@ impl TelemetryStage {
131
132
pub struct TelemetryThread {
132
133
handle : Option < JoinHandle < ( ) > > ,
133
134
tx : mpsc:: UnboundedSender < Event > ,
135
+ current_model_id : Arc < RwLock < Option < String > > > ,
134
136
}
135
137
136
138
impl Clone for TelemetryThread {
137
139
fn clone ( & self ) -> Self {
138
140
Self {
139
141
handle : None ,
140
142
tx : self . tx . clone ( ) ,
143
+ current_model_id : Arc :: clone ( & self . current_model_id ) ,
141
144
}
142
145
}
143
146
}
144
147
145
148
impl TelemetryThread {
146
149
pub async fn new ( env : & Env , database : & mut Database ) -> Result < Self , TelemetryError > {
147
- let telemetry_client = TelemetryClient :: new ( env, database) . await ?;
150
+ //todo yifan change to last used modelid
151
+ let current_model_id = Arc :: new ( RwLock :: new ( None ) ) ;
152
+ let telemetry_client = TelemetryClient :: new ( env, database, current_model_id. clone ( ) ) . await ?;
148
153
let ( tx, mut rx) = mpsc:: unbounded_channel ( ) ;
149
154
let handle = tokio:: spawn ( async move {
150
155
while let Some ( event) = rx. recv ( ) . await {
@@ -156,9 +161,14 @@ impl TelemetryThread {
156
161
Ok ( Self {
157
162
handle : Some ( handle) ,
158
163
tx,
164
+ current_model_id,
159
165
} )
160
166
}
161
167
168
+ pub fn update_model_id ( & self , model_id : Option < String > ) {
169
+ * self . current_model_id . write ( ) . unwrap ( ) = model_id;
170
+ }
171
+
162
172
pub async fn finish ( self ) -> Result < ( ) , TelemetryError > {
163
173
drop ( self . tx ) ;
164
174
if let Some ( handle) = self . handle {
@@ -275,10 +285,11 @@ struct TelemetryClient {
275
285
telemetry_enabled : bool ,
276
286
codewhisperer_client : CodewhispererClient ,
277
287
toolkit_telemetry_client : Option < ToolkitTelemetryClient > ,
288
+ current_model_id : Arc < RwLock < Option < String > > > ,
278
289
}
279
290
280
291
impl TelemetryClient {
281
- async fn new ( env : & Env , database : & mut Database ) -> Result < Self , TelemetryError > {
292
+ async fn new ( env : & Env , database : & mut Database , current_model_id : Arc < RwLock < Option < String > > > ) -> Result < Self , TelemetryError > {
282
293
let telemetry_enabled = !cfg ! ( test)
283
294
&& env. get_os ( "Q_DISABLE_TELEMETRY" ) . is_none ( )
284
295
&& database. settings . get_bool ( Setting :: TelemetryEnabled ) . unwrap_or ( true ) ;
@@ -338,6 +349,7 @@ impl TelemetryClient {
338
349
telemetry_enabled,
339
350
toolkit_telemetry_client,
340
351
codewhisperer_client : CodewhispererClient :: new ( database, None ) . await ?,
352
+ current_model_id,
341
353
} )
342
354
}
343
355
@@ -356,6 +368,7 @@ impl TelemetryClient {
356
368
..
357
369
} = & event. ty
358
370
{
371
+ let model_id = self . current_model_id . read ( ) . unwrap ( ) . clone ( ) ;
359
372
let user_context = self . user_context ( ) . unwrap ( ) ;
360
373
361
374
let chat_add_message_event = match ChatAddMessageEvent :: builder ( )
@@ -376,6 +389,7 @@ impl TelemetryClient {
376
389
TelemetryEvent :: ChatAddMessageEvent ( chat_add_message_event) ,
377
390
user_context,
378
391
self . telemetry_enabled ,
392
+ model_id,
379
393
)
380
394
. await
381
395
{
@@ -451,7 +465,7 @@ mod test {
451
465
#[ tokio:: test]
452
466
async fn client_context ( ) {
453
467
let mut database = Database :: new ( ) . await . unwrap ( ) ;
454
- let client = TelemetryClient :: new ( & Env :: new ( ) , & mut database) . await . unwrap ( ) ;
468
+ let client = TelemetryClient :: new ( & Env :: new ( ) , & mut database, Arc :: new ( RwLock :: new ( Some ( "model" . to_owned ( ) ) ) ) ) . await . unwrap ( ) ;
455
469
let context = client. user_context ( ) . unwrap ( ) ;
456
470
457
471
assert_eq ! ( context. ide_category, IdeCategory :: Cli ) ;
@@ -511,7 +525,7 @@ mod test {
511
525
#[ ignore = "needs auth which is not in CI" ]
512
526
async fn test_without_optout ( ) {
513
527
let mut database = Database :: new ( ) . await . unwrap ( ) ;
514
- let client = TelemetryClient :: new ( & Env :: new ( ) , & mut database) . await . unwrap ( ) ;
528
+ let client = TelemetryClient :: new ( & Env :: new ( ) , & mut database, Arc :: new ( RwLock :: new ( Some ( "model" . to_owned ( ) ) ) ) ) . await . unwrap ( ) ;
515
529
client
516
530
. codewhisperer_client
517
531
. send_telemetry_event (
@@ -524,6 +538,7 @@ mod test {
524
538
) ,
525
539
client. user_context ( ) . unwrap ( ) ,
526
540
false ,
541
+ Some ( "model" . to_owned ( ) ) ,
527
542
)
528
543
. await
529
544
. unwrap ( ) ;
0 commit comments