← بازگشت به فهرست ATP
استخراج زمینه اختراع

استخراج زمینه اختراع از فایل متنی (POST /api/v1/extract)

POST /api/v1/extract مشاهده در Swagger

ATP - استخراج زمینه اختراع از فایل متنی (POST /api/v1/extract)

Endpoint

POST /api/v1/extract

هدف آزمون

استخراج ساخت‌یافته InventionContext از افشای اختراع به‌صورت فایل .txt.

شرایط آزمون

فرآیند آزمون

  1. آماده‌سازی فایل disclosure.txt
  2. ارسال POST multipart با فیلد file
  3. دریافت ExtractResponse
  4. بررسی context، missing_questions و metrics

معرفی ویژگی

endpoint HTTP برای استخراج موازی بخش‌های A–F و تبدیل به InventionContext. ورودی فقط متن ساده است؛ پردازش PDF/DOCX در سرویس info-extraction انجام می‌شود.

سناریوی آزمون

سناریو 1: استخراج موفق فایل txt

  1. آماده‌سازی فایل disclosure.txt با متن فارسی/انگلیسی
  2. ارسال POST به /api/v1/extract با multipart file
  3. دریافت کد 200
  4. بررسی وجود فیلد context و profile

سناریو 2: خطا — پسوند نامعتبر

  1. آپلود فایل با پسوند .pdf
  2. ارسال POST
  3. دریافت کد 415 با پیام Only .txt files are supported

سناریو 3: Worker — کلید artifact نامعتبر

  1. انتشار ContextExtractionRequested با input_artifact_keys حاوی ../evil.txt
  2. عدم فراخوانی storage.get_object_text
  3. دریافت context.extraction.failed با error_code=INVALID_ARTIFACT_KEY
  4. error_category=validation و retryable=false

سناریو 4: Worker — کلید artifact خارج از workspace

  1. انتشار رویداد با workspace_id=W و کلید زیر workspaces/{other}/...
  2. دریافت failed با error_code=INVALID_ARTIFACT_KEY
  3. عدم دسترسی به object خارج از tenancy

سناریو 5: Worker — questions_required برای gap با severity=HIGH

  1. اجرای extraction با missing_questions شامل فقط gap با severity=HIGH
  2. انتشار context.extraction.questions_required (نه completed)
  3. بررسی snapshot.readiness_state برابر questions_required
  4. بررسی completeness_summary.outstanding_gap_count >= 1 و blocking_gap_count=0
  5. بررسی question_round.questions[].severity برابر recommended

سناریو 6: Worker — تکمیل اجباری پس از حداکثر دور سؤال

  1. وجود outstanding gaps پس از رسیدن به max question rounds
  2. انتشار context.extraction.completed با force_ready
  3. بررسی completeness_summary.forced_complete_after_max_rounds=true
  4. بررسی unresolved_gap_count برابر تعداد outstanding باقی‌مانده

سناریو 7: استخراج موفق همراه case_id

  1. آماده‌سازی فایل UTF-8 معتبر
  2. ارسال درخواست با query برابر case_id=case-001
  3. دریافت کد 200
  4. بررسی انتساب شناسه پرونده در خروجی context یا case_record

سناریو 8: خطا — فایل خالی

  1. ساخت فایل empty.txt با محتوای خالی یا فقط whitespace
  2. ارسال فایل به endpoint
  3. دریافت کد 400
  4. بررسی پیام Uploaded file is empty.

سناریو 9: خطا — متن UTF-8 نامعتبر

  1. ساخت فایل .txt شامل بایت‌های نامعتبر UTF-8
  2. ارسال فایل به endpoint
  3. دریافت کد 400
  4. بررسی پیام File must be valid UTF-8 text.

سناریو 10: خطا — حجم بیش از حد مجاز

  1. تنظیم مقدار مشخص برای API_MAX_UPLOAD_MB
  2. ساخت فایل بزرگ‌تر از محدودیت
  3. ارسال فایل به endpoint
  4. دریافت کد 413 و اشاره پیام به محدودیت حجم

سناریو 11: خطا — فایل ارسال نشده

  1. ارسال POST بدون بخش multipart با نام file
  2. دریافت کد 422
  3. بررسی خطای validation مربوط به فیلد file

سناریو 12: خطا — کلید LLM تنظیم نشده

  1. حذف کلید فعال متناسب با LLM_PROVIDER
  2. ارسال فایل txt معتبر
  3. دریافت کد 503
  4. بررسی اشاره پیام به AVALAI_API_KEY یا OPENAI_API_KEY

سناریو 13: خطا — شکست pipeline استخراج

  1. شبیه‌سازی خطای داخلی ExtractionError در pipeline
  2. ارسال فایل txt معتبر
  3. دریافت کد 500
  4. بررسی ثبت خطا و عدم بازگشت context ناقص

قالب API

مولفه نوع نوع داده اجباری توضیحات
file Body file بله فایل افشا؛ multipart/form-data؛ فقط .txt
case_id Query string خیر شناسه اختیاری پرونده

Swagger

post:
  summary: Extract invention context from a .txt disclosure file
  responses:
    200:
      description: Extraction completed
    400:
      description: Invalid or empty file
    413:
      description: File too large
    415:
      description: Unsupported media type
    422:
      description: Validation error
    503:
      description: LLM API key not configured
    500:
      description: Extraction failed

نمونه ورودی

curl -X POST "http://127.0.0.1:8000/api/v1/extract" \
  -F "file=@disclosure.txt;type=text/plain" \
  --get --data-urlencode "case_id=case-001"

نمونه خروجی

{
  "context": { "schema_version": "...", "meta": {} },
  "profile": "sectioned-device-parallel-fulltext",
  "missing_questions": [],
  "warnings": [],
  "metrics": { "duration_seconds": 12.5 }
}

Status Codes

نتیجه مورد انتظار

در محیط پیکربندی‌شده، پاسخ JSON با context کامل و کد 200.

روال صحت‌سنجی

  1. بررسی کد 200 برای فایل txt معتبر
  2. بررسی وجود فیلد context در پاسخ
  3. بررسی 415 برای پسوند غیر txt
  4. بررسی 503 بدون کلید API

توضیحات