fix(ocr): normalize DeepSeek document content

This commit is contained in:
Yujong Lee 2026-09-12 10:16:42 -07:00
parent c7f0c46029
commit 5cd67f38d6
3 changed files with 28 additions and 2 deletions

View file

@ -14,11 +14,15 @@ pub(crate) fn transform_ocr_request(
if document.source().is_empty() { if document.source().is_empty() {
return Err(OcrRequestError::MissingField("document URL")); return Err(OcrRequestError::MissingField("document URL"));
} }
let content = OcrDocument::ImageUrl {
image_url: document.source().to_string(),
extra_fields: serde_json::Map::new(),
};
Ok(DeepSeekOcrRequest { Ok(DeepSeekOcrRequest {
model: provider_model.to_string(), model: provider_model.to_string(),
messages: vec![DeepSeekOcrMessage { messages: vec![DeepSeekOcrMessage {
role: UserRole::User, role: UserRole::User,
content: vec![document], content: vec![content],
}], }],
params: params.clone(), params: params.clone(),
}) })

View file

@ -34,6 +34,28 @@ fn request_mapping_matches_python(#[case] name: &str, #[case] value: Value) {
assert!(result.get("ignored").is_none()); assert!(result.get("ignored").is_none());
} }
#[rstest]
#[case(json!({"type":"image_url","image_url":"data:image/png;base64,AA=="}))]
#[case(json!({"type":"document_url","document_url":"data:application/pdf;base64,AA=="}))]
fn request_maps_both_document_types_to_image_content(#[case] document: Value) {
let source = document
.get("image_url")
.or_else(|| document.get("document_url"))
.unwrap()
.clone();
let request = transform_ocr_request(
"deepseek-ai/deepseek-ocr-maas",
serde_json::from_value(document).unwrap(),
&DeepSeekOcrParams::default(),
)
.unwrap();
let result = serde_json::to_value(request).unwrap();
assert_eq!(
result["messages"][0]["content"][0],
json!({"type":"image_url","image_url":source})
);
}
#[rstest] #[rstest]
#[case(json!("# hello"), "# hello")] #[case(json!("# hello"), "# hello")]
#[case(json!("{broken"), "{broken")] #[case(json!("{broken"), "{broken")]

View file

@ -49,7 +49,7 @@ async fn facade_executes_vertex_deepseek_at_the_openai_endpoint() {
assert!(body.get("extra_body").is_none()); assert!(body.get("extra_body").is_none());
assert_eq!( assert_eq!(
body["messages"][0]["content"][0], body["messages"][0]["content"][0],
json!({"type":"document_url","document_url":"gs://bucket/document.pdf"}) json!({"type":"image_url","image_url":"gs://bucket/document.pdf"})
); );
} }