A document extraction and processing server using FastAPI that handles PDF, DOCX, and image files with OCR, text extraction, and embedding generation capabilities
Server has 6 tools with basic descriptions and input schemas, but significant quality gaps. Tool names lack clear verb-noun structure (extract_data_v4 vs extract_data is confusing). Descriptions are present but generic (194-char baseline; these average ~150 chars, acceptable but lack WHEN/WHY guidance). Parameters have types and descriptions, but lack constraints (no enums for embedding_provider despite fixed options). Output schemas are not documented. Error handling is minimal, no recovery guidance or categorization. No tool annotations (readOnlyHint, destructiveHint). Duplicate tool sets (v1 and v4 variants) suggest incomplete refactoring. Overall: functional but below production baseline.
Submit a document for extraction. This endpoint accepts a file upload and creates a job for extracting text and generating embeddings. The job will be processed asynchronously, and the client can poll for status updates.
Submit a document for extraction (in-memory version). This endpoint accepts a file upload and creates a job for extracting text and generating embeddings. The job will be processed asynchronously, and the client can poll for status updates.
Get the status of a document extraction job. This endpoint allows clients to poll for status updates on an extraction job.
Get the status of a document extraction job (in-memory version). This endpoint allows clients to poll for status updates on an extraction job.
Get the result of a completed document extraction job. This endpoint returns the full extraction results for a completed job.
Get the result of a completed document extraction job (in-memory version). This endpoint returns the full extraction results for a completed job.
Duplicate tool sets (v1 and v4 variants) create confusion. LLMs cannot distinguish when to use extract_data vs extract_data_v4. Violates single-responsibility principle.
embedding_provider parameter accepts 'openai' or 'modal' but is defined as free-form string, not enum. LLMs may hallucinate invalid values like 'anthropic' or 'gpt4'.
No output schemas documented. LLMs cannot predict response structure for downstream tool chaining. Violates pattern:tool requirement.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). extract_data is destructive (creates job) but not marked. get_* tools are read-only but not annotated.
Error handling lacks recovery guidance. Code shows HTTPException(500) with generic messages. No categorization (retryable vs fatal) or actionable next steps for LLM.