Format AI provenance information for display.
(&self, prov: &Provenance)
| 533 | |
| 534 | /// Format AI provenance information for display. |
| 535 | fn format_provenance(&self, prov: &Provenance) -> String { |
| 536 | let mut output = String::new(); |
| 537 | |
| 538 | output.push_str(&format!("{}\n", emphasis("AI Provenance:"))); |
| 539 | output.push_str(&format!( |
| 540 | " Vendor: {}\n", |
| 541 | info(&format!("{:?}", prov.vendor)) |
| 542 | )); |
| 543 | output.push_str(&format!(" Model: {}\n", info(&prov.model))); |
| 544 | |
| 545 | if let Some(version) = &prov.model_version { |
| 546 | output.push_str(&format!(" Version: {}\n", hint(version))); |
| 547 | } |
| 548 | |
| 549 | output.push_str(&format!( |
| 550 | " Tool: {}\n", |
| 551 | info(&format!("{:?}", prov.tool)) |
| 552 | )); |
| 553 | output.push_str(&format!( |
| 554 | " Type: {}\n", |
| 555 | hint(&format!("{:?}", prov.suggestion_type)) |
| 556 | )); |
| 557 | |
| 558 | // Token usage |
| 559 | if !prov.tokens.is_empty() { |
| 560 | output.push_str(" Tokens:\n"); |
| 561 | output.push_str(&format!(" Input: {}\n", prov.tokens.input_tokens)); |
| 562 | output.push_str(&format!(" Output: {}\n", prov.tokens.output_tokens)); |
| 563 | output.push_str(&format!(" Total: {}\n", prov.tokens.total_tokens)); |
| 564 | } |
| 565 | |
| 566 | // Cost |
| 567 | if !prov.cost.is_zero() { |
| 568 | output.push_str(&format!(" Cost: ${:.6} USD\n", prov.cost.usd)); |
| 569 | } |
| 570 | |
| 571 | // Temperature |
| 572 | if let Some(temp) = prov.temperature { |
| 573 | let temp_f = temp as f64 / 1000.0; |
| 574 | output.push_str(&format!(" Temp: {:.2}\n", temp_f)); |
| 575 | } |
| 576 | |
| 577 | // Request/Session IDs |
| 578 | if let Some(req_id) = &prov.request_id { |
| 579 | output.push_str(&format!(" Request: {}\n", hint(req_id))); |
| 580 | } |
| 581 | if let Some(sess_id) = &prov.session_id { |
| 582 | output.push_str(&format!(" Session: {}\n", hint(sess_id))); |
| 583 | } |
| 584 | |
| 585 | // Additional metadata (key-value pairs from agent recording) |
| 586 | if !prov.metadata.is_empty() { |
| 587 | output.push_str(" Metadata:\n"); |
| 588 | for (key, value) in &prov.metadata { |
| 589 | output.push_str(&format!(" {}: {}\n", hint(key), info(value))); |
| 590 | } |
| 591 | } |
| 592 |
no test coverage detected