use post_cortex_memory::content_vectorizer::SemanticSearchResult;
use serde_json::Value;
pub fn format_search_results(results: &[SemanticSearchResult]) -> Vec<Value> {
results
.iter()
.map(|r| {
serde_json::json!({
"content_id": r.content_id,
"session_id": r.session_id,
"content_type": format!("{:?}", r.content_type),
"text_content": r.text_content,
"similarity_score": r.similarity_score,
"importance_score": r.importance_score,
"timestamp": r.timestamp.to_rfc3339(),
"combined_score": r.combined_score
})
})
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
use post_cortex_memory::content_vectorizer::ContentType;
#[test]
fn workspace_results_use_the_session_and_global_field_names() {
let r = SemanticSearchResult {
content_id: "c1".into(),
session_id: uuid::Uuid::nil(),
content_type: ContentType::DecisionPoint,
text_content: "chose Rust".into(),
similarity_score: 0.8,
importance_score: 1.0,
timestamp: chrono::Utc::now(),
combined_score: 0.86,
};
let v = &format_search_results(&[r])[0];
for key in [
"content_id",
"session_id",
"content_type",
"text_content",
"similarity_score",
"importance_score",
"combined_score",
"timestamp",
] {
assert!(v.get(key).is_some(), "missing {key}");
}
assert!(v.get("content").is_none() && v.get("score").is_none());
}
}