PicoBot/src/gateway/message_prepare.rs

44 lines
1.4 KiB
Rust

use crate::agent::AgentError;
pub(crate) fn enrich_user_content_with_media_refs(
content: &str,
media_refs: &[String],
) -> Result<String, AgentError> {
if media_refs.is_empty() {
return Ok(content.to_string());
}
let media_refs_json = serde_json::to_string(media_refs)
.map_err(|err| AgentError::Other(format!("serialize media refs error: {}", err)))?;
Ok(format!("{content}\n\nmedia_refs_json: {media_refs_json}"))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_enrich_user_content_with_media_refs_appends_tagged_json() {
// 使用临时目录确保跨平台兼容
let temp_dir = tempfile::tempdir().unwrap();
let media_a = temp_dir.path().join("a.png");
let media_b = temp_dir.path().join("b.pdf");
let media_refs = vec![media_a.display().to_string(), media_b.display().to_string()];
let enriched = enrich_user_content_with_media_refs("hello", &media_refs).unwrap();
// 验证 JSON 格式正确
assert!(enriched.starts_with("hello\n\nmedia_refs_json: "));
assert!(enriched.contains("a.png"));
assert!(enriched.contains("b.pdf"));
}
#[test]
fn test_enrich_user_content_with_media_refs_keeps_plain_text_without_media() {
let enriched = enrich_user_content_with_media_refs("hello", &[]).unwrap();
assert_eq!(enriched, "hello");
}
}