{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/3gppscout-com/json-schema/3gppscout-com-combined-search-request-schema.json",
  "title": "CombinedSearchRequest",
  "description": "Request body for combined text + image search.",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/3gppscout-com-openapi.json#/components/schemas/CombinedSearchRequest",
  "properties": {
    "query": {
      "type": "string",
      "title": "Query",
      "description": "Natural language search query. Searches both text and images simultaneously."
    },
    "text_match_count": {
      "type": "integer",
      "maximum": 200.0,
      "minimum": 1.0,
      "title": "Text Match Count",
      "description": "Text candidates before reranking. Default 30 balances speed and quality.",
      "default": 30
    },
    "text_match_threshold": {
      "type": "number",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Text Match Threshold",
      "description": "Text similarity threshold. Leave at 0 (default) and rely on reranking.",
      "default": 0.0
    },
    "rerank": {
      "type": "boolean",
      "title": "Rerank",
      "description": "Rerank text results for better precision. Always leave true.",
      "default": true
    },
    "rerank_top_k": {
      "type": "integer",
      "maximum": 50.0,
      "minimum": 1.0,
      "title": "Rerank Top K",
      "description": "Number of text results after reranking. Use 3–5 for focused lookups, 10–20 for research.",
      "default": 10
    },
    "include_section_text": {
      "type": "boolean",
      "title": "Include Section Text",
      "description": "Include full parent section text for each text chunk.",
      "default": true
    },
    "image_match_count": {
      "type": "integer",
      "maximum": 50.0,
      "minimum": 1.0,
      "title": "Image Match Count",
      "description": "Number of image/diagram results to return alongside text results.",
      "default": 5
    },
    "image_match_threshold": {
      "type": "number",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Image Match Threshold",
      "description": "Image similarity threshold. Default 0 returns best matches.",
      "default": 0.0
    },
    "deduplicate": {
      "type": "boolean",
      "title": "Deduplicate",
      "description": "Collapse near-duplicate text and image results from different releases/versions; collapsed matches appear in each winner's 'also_in' with release, version, and scores. Ignored when filter_release is set.",
      "default": true
    },
    "filter_release": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Filter Release",
      "description": "Restrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20)."
    },
    "filter_doc_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Filter Doc Type",
      "description": "Restrict by document type: 'TS' (Technical Specification) or 'TR' (Technical Report)."
    },
    "filter_doc_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Filter Doc Number",
      "description": "Restrict to a specific document, e.g. '38.331', '23.501'. Numeric format only."
    },
    "filter_series": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Filter Series",
      "description": "Restrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security."
    },
    "filter_section_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Filter Section Number",
      "description": "Restrict to a section, e.g. '5.3.5'. Only useful with filter_doc_number."
    },
    "available_before": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Available Before",
      "description": "Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here."
    }
  },
  "type": "object",
  "required": [
    "query"
  ]
}