(
&self,
turn: usize,
effective_prompt: &str,
response: &LlmResponse,
llm_start: std::time::Instant,
event_tx: &Option<mpsc::Sender<AgentEvent>>,
| 216 | } |
| 217 | |
| 218 | async fn complete_llm_turn( |
| 219 | &self, |
| 220 | turn: usize, |
| 221 | effective_prompt: &str, |
| 222 | response: &LlmResponse, |
| 223 | llm_start: std::time::Instant, |
| 224 | event_tx: &Option<mpsc::Sender<AgentEvent>>, |
| 225 | session_id: Option<&str>, |
| 226 | ) { |
| 227 | let llm_duration = llm_start.elapsed(); |
| 228 | tracing::info!( |
| 229 | turn = turn, |
| 230 | streaming = event_tx.is_some(), |
| 231 | prompt_tokens = response.usage.prompt_tokens, |
| 232 | completion_tokens = response.usage.completion_tokens, |
| 233 | total_tokens = response.usage.total_tokens, |
| 234 | stop_reason = response.stop_reason.as_deref().unwrap_or("unknown"), |
| 235 | duration_ms = llm_duration.as_millis() as u64, |
| 236 | "LLM completion finished" |
| 237 | ); |
| 238 | |
| 239 | self.fire_generate_end( |
| 240 | session_id.unwrap_or(""), |
| 241 | effective_prompt, |
| 242 | response, |
| 243 | llm_duration.as_millis() as u64, |
| 244 | ) |
| 245 | .await; |
| 246 | |
| 247 | crate::telemetry::record_llm_usage( |
| 248 | response.usage.prompt_tokens, |
| 249 | response.usage.completion_tokens, |
| 250 | response.usage.total_tokens, |
| 251 | response.stop_reason.as_deref(), |
| 252 | ); |
| 253 | tracing::info!( |
| 254 | turn = turn, |
| 255 | a3s.llm.total_tokens = response.usage.total_tokens, |
| 256 | "Turn token usage" |
| 257 | ); |
| 258 | } |
| 259 | |
| 260 | async fn emit_turn_end( |
| 261 | &self, |
no test coverage detected