chore: backup before code cleanup

Backup commit before executing remove-unused-code proposal.
This includes all pending changes and new features.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
egg
2025-12-11 11:55:39 +08:00
parent eff9b0bcd5
commit 940a406dce
58 changed files with 8226 additions and 175 deletions

View File

@@ -41,6 +41,9 @@ from app.schemas.task import (
PreprocessingPreviewResponse,
ImageQualityMetrics,
TableDetectionConfig,
OCRPresetEnum,
OCRConfig,
OCR_PRESET_CONFIGS,
)
from app.services.task_service import task_service
from app.services.file_access_service import file_access_service
@@ -77,7 +80,9 @@ def process_task_ocr(
layout_model: Optional[str] = "chinese",
preprocessing_mode: Optional[str] = "auto",
preprocessing_config: Optional[dict] = None,
table_detection_config: Optional[dict] = None
table_detection_config: Optional[dict] = None,
ocr_preset: Optional[str] = None,
ocr_config: Optional[dict] = None
):
"""
Background task to process OCR for a task with dual-track support.
@@ -97,6 +102,8 @@ def process_task_ocr(
preprocessing_mode: Preprocessing mode ('auto', 'manual', 'disabled')
preprocessing_config: Manual preprocessing config dict (contrast, sharpen, binarize)
table_detection_config: Table detection config dict (enable_wired_table, enable_wireless_table, enable_region_detection)
ocr_preset: OCR processing preset (text_heavy, datasheet, table_heavy, form, mixed, custom)
ocr_config: Custom OCR config dict (overrides preset values)
"""
from app.core.database import SessionLocal
from app.models.task import Task
@@ -135,6 +142,26 @@ def process_task_ocr(
enable_region_detection=table_detection_config.get("enable_region_detection", True)
)
# Convert OCR preset and config to proper objects
from app.schemas.task import OCRPresetEnum, OCRConfig, OCR_PRESET_CONFIGS, TableParsingModeEnum
ocr_config_obj = None
if ocr_preset:
preset_enum = OCRPresetEnum(ocr_preset)
# Get preset config as base
if preset_enum in OCR_PRESET_CONFIGS:
ocr_config_obj = OCR_PRESET_CONFIGS[preset_enum].model_copy()
else:
# CUSTOM preset - use provided config or defaults
ocr_config_obj = OCRConfig()
# Override with custom config values if provided
if ocr_config:
for key, value in ocr_config.items():
if hasattr(ocr_config_obj, key) and value is not None:
setattr(ocr_config_obj, key, value)
logger.info(f"OCR config resolved: preset={ocr_preset}, config={ocr_config_obj.model_dump() if ocr_config_obj else None}")
# Get task directly by database ID (bypass user isolation for background task)
task = db.query(Task).filter(Task.id == task_db_id).first()
if not task:
@@ -184,7 +211,8 @@ def process_task_ocr(
layout_model=layout_model,
preprocessing_mode=preprocess_mode_enum,
preprocessing_config=preprocess_config_obj,
table_detection_config=table_det_config_obj
table_detection_config=table_det_config_obj,
ocr_config=ocr_config_obj
)
else:
# Fall back to traditional processing (no force_track support)
@@ -196,7 +224,8 @@ def process_task_ocr(
layout_model=layout_model,
preprocessing_mode=preprocess_mode_enum,
preprocessing_config=preprocess_config_obj,
table_detection_config=table_det_config_obj
table_detection_config=table_det_config_obj,
ocr_config=ocr_config_obj
)
# Calculate processing time
@@ -827,6 +856,13 @@ async def start_task(
}
logger.info(f"Table detection: {table_detection_config}")
# Extract OCR preset and config
ocr_preset = options.ocr_preset.value if options.ocr_preset else "datasheet"
ocr_config_dict = None
if options.ocr_config:
ocr_config_dict = options.ocr_config.model_dump()
logger.info(f"OCR preset: {ocr_preset}, config: {ocr_config_dict}")
# Get task details
task = task_service.get_task_by_id(
db=db,
@@ -876,11 +912,13 @@ async def start_task(
layout_model=layout_model,
preprocessing_mode=preprocessing_mode,
preprocessing_config=preprocessing_config,
table_detection_config=table_detection_config
table_detection_config=table_detection_config,
ocr_preset=ocr_preset,
ocr_config=ocr_config_dict
)
logger.info(f"Started OCR processing task {task_id} for user {current_user.email}")
logger.info(f"Options: dual_track={use_dual_track}, force_track={force_track}, lang={language}, layout_model={layout_model}, preprocessing={preprocessing_mode}, table_detection={table_detection_config}")
logger.info(f"Options: dual_track={use_dual_track}, force_track={force_track}, lang={language}, layout_model={layout_model}, preprocessing={preprocessing_mode}, table_detection={table_detection_config}, ocr_preset={ocr_preset}")
return task
except HTTPException: