{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/antismi-media/json-schema/antismi-media-topic-timeline-request-schema.json",
  "title": "TopicTimelineRequest",
  "description": "Запрос хронологии темы: как менялось внимание к теме по периодам (годам или месяцам).",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/antismi-media-openapi.json#/components/schemas/TopicTimelineRequest",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "title": "Query",
      "description": "Тема на естественном языке"
    },
    "date_from": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Date From",
      "description": "Начало периода (по умолчанию 1999-01-01)"
    },
    "date_to": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Date To",
      "description": "Конец периода (по умолчанию сейчас)"
    },
    "step": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "year",
            "month"
          ]
        },
        {
          "type": "null"
        }
      ],
      "title": "Step",
      "description": "Шаг периода; по умолчанию year при окне > 3 лет, иначе month"
    },
    "candidates": {
      "type": "integer",
      "maximum": 2000.0,
      "minimum": 100.0,
      "title": "Candidates",
      "description": "Сколько ближайших новостей распределять по периодам",
      "default": 2000
    },
    "per_period": {
      "type": "integer",
      "maximum": 10.0,
      "minimum": 1.0,
      "title": "Per Period",
      "description": "Сколько заголовков отдавать на период",
      "default": 5
    },
    "min_similarity": {
      "type": "number",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Min Similarity",
      "description": "Порог косинусной похожести для заголовков",
      "default": 0.5
    },
    "telegram_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Telegram Id",
      "description": "Telegram user ID для логирования"
    },
    "lang": {
      "type": "string",
      "enum": [
        "ru",
        "en"
      ],
      "title": "Lang",
      "description": "Язык заголовков и понятий в ответе (en — из *_en с fallback на русский)",
      "default": "ru"
    }
  },
  "type": "object",
  "required": [
    "query"
  ]
}