relay_knowledge/domain/graph/retrieval/
context_pack.rs1use serde::{Deserialize, Serialize};
2
3use super::super::{EvidenceSpan, GraphVersion};
4use super::{
5 CodeGraphArtifact, ContextEntity, ContextGraphFact, ContextGraphPath, FreshnessPolicy,
6 RankingSignal, RerankSignal, RetrievalBackendStatus, RetrieverSource, TraversalProvenanceTrace,
7};
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct RetrievedContextPack {
12 pub graph_version: GraphVersion,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub source_scope: Option<String>,
15 pub freshness: FreshnessPolicy,
16 pub truncated: bool,
17 #[serde(default, skip_serializing_if = "Vec::is_empty")]
18 pub backend_statuses: Vec<RetrievalBackendStatus>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub provenance_trace: Option<TraversalProvenanceTrace>,
21 pub items: Vec<ContextPackItem>,
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub struct ContextPackItem {
27 pub result_id: String,
28 pub source_scope: String,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub source_path: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub source_span: Option<EvidenceSpan>,
33 #[serde(default, skip_serializing_if = "Vec::is_empty")]
34 pub entities: Vec<ContextEntity>,
35 #[serde(default, skip_serializing_if = "Vec::is_empty")]
36 pub graph_facts: Vec<ContextGraphFact>,
37 #[serde(default, skip_serializing_if = "Vec::is_empty")]
38 pub graph_paths: Vec<ContextGraphPath>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub code_artifact: Option<CodeGraphArtifact>,
41 pub retriever_sources: Vec<RetrieverSource>,
42 pub ranking: Vec<RankingSignal>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub rerank: Option<RerankSignal>,
45}