agent_trace/llm/
backend.rs1use super::trace_insights::TraceDocument;
2
3pub trait TraceInsightsBackend: Send + Sync {
5 fn summarize_change(&self, path: &str, doc_type: &str, diff: &str) -> Result<String, String>;
6
7 fn synthesize_context(
8 &self,
9 documents: &[TraceDocument],
10 updates: &[String],
11 ) -> Result<String, String>;
12
13 fn summarize_session(&self, session_id: &str, events: &[String]) -> Result<String, String>;
14
15 fn summarize_event_history(&self, events: &str) -> Result<String, String>;
16
17 fn update_running_summary(
18 &self,
19 previous_summary: &str,
20 new_events: &str,
21 plan_snippet: &str,
22 ) -> Result<String, String>;
23}
24
25pub struct NoTraceBackend;
27
28impl TraceInsightsBackend for NoTraceBackend {
29 fn summarize_change(
30 &self,
31 _path: &str,
32 _doc_type: &str,
33 _diff: &str,
34 ) -> Result<String, String> {
35 Err("no trace insights backend available".into())
36 }
37
38 fn synthesize_context(
39 &self,
40 _documents: &[TraceDocument],
41 _updates: &[String],
42 ) -> Result<String, String> {
43 Err("no trace insights backend available".into())
44 }
45
46 fn summarize_session(&self, _session_id: &str, _events: &[String]) -> Result<String, String> {
47 Err("no trace insights backend available".into())
48 }
49
50 fn summarize_event_history(&self, _events: &str) -> Result<String, String> {
51 Err("no trace insights backend available".into())
52 }
53
54 fn update_running_summary(
55 &self,
56 _previous_summary: &str,
57 _new_events: &str,
58 _plan_snippet: &str,
59 ) -> Result<String, String> {
60 Err("no trace insights backend available".into())
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67
68 #[test]
69 fn no_trace_backend_returns_err() {
70 let b = NoTraceBackend;
71 assert!(b.summarize_change("a.md", "plan", "+1").is_err());
72 assert!(b.update_running_summary("", "", "").is_err());
73 }
74}