cloudiful-docling-convert 0.3.0

Core Rust library for Docling-backed document conversion
Documentation
use reqwest::multipart;

use crate::error::Result;
use crate::models::vlm::{OpenRouterConfigBuilder, VlmConvertOptions};
use crate::models::{CodeFormulaVlmOptions, PictureDescriptionVlmEngineOptions};

use super::docling::DoclingClient;
use super::vlm_config::ResolvedVlmConfig;

impl DoclingClient {
    pub(super) fn apply_vlm_config(
        &self,
        mut form: multipart::Form,
        vlm_config: &ResolvedVlmConfig,
    ) -> Result<multipart::Form> {
        let picture_description_custom_config =
            PictureDescriptionVlmEngineOptions::for_openai_compatible(
                &vlm_config.openai_base_url,
                &vlm_config.api_key,
                &vlm_config.picture_description_model,
                "Describe this image in a few sentences.",
                300,
                60,
            );
        let code_formula_custom_config = CodeFormulaVlmOptions {
            scale: Some(2.0),
            max_size: None,
            extract_code: Some(true),
            extract_formulas: Some(true),
            engine_options: OpenRouterConfigBuilder::engine_options(
                &vlm_config.openai_base_url,
                &vlm_config.api_key,
                &vlm_config.code_formula_model,
                30,
                2,
            ),
            model_spec: OpenRouterConfigBuilder::model_spec(
                &vlm_config.code_formula_model,
                "Recognize code blocks and mathematical formulas in the image. For code, output the full code; for mathematical formulas, output in LaTeX format.",
                1000,
            ),
        };
        let vlm_pipeline_custom_config = VlmConvertOptions {
            engine_options: OpenRouterConfigBuilder::engine_options(
                &vlm_config.openai_base_url,
                &vlm_config.api_key,
                &vlm_config.vlm_pipeline_model,
                30,
                2,
            ),
            model_spec: OpenRouterConfigBuilder::model_spec(
                &vlm_config.vlm_pipeline_model,
                "",
                1000,
            ),
            scale: Some(1.0),
            max_size: None,
            batch_size: None,
            force_backend_text: true,
        };

        form = form.text(
            "vlm_pipeline_custom_config",
            serde_json::to_string(&vlm_pipeline_custom_config)?,
        );
        form = form.text(
            "picture_description_custom_config",
            serde_json::to_string(&picture_description_custom_config)?,
        );
        form = form.text(
            "code_formula_custom_config",
            serde_json::to_string(&code_formula_custom_config)?,
        );
        form = form.text("do_code_enrichment", "true");
        form = form.text("do_formula_enrichment", "true");
        form = form.text("do_picture_description", "true");
        form = form.text("ocr_engine", "rapidocr");
        form = form.text("image_export_mode", "placeholder");
        Ok(form)
    }
}