AI Architecture

Продвинутые операторы веб-поиска для AI-агентов и Agentic RAG

Быстрый ответ: Продвинутые поисковые операторы (site:, filetype:, inurl:, intitle:, булева логика) превращают автономных AI-агентов и RAG-пайплайны в детерминированные аналитические движки. Ограничивая доменные зоны, изолируя точные типы файлов, фильтруя токены путей URL и полностью отсекая рекламный спам, агенты устраняют веб-галлюцинации, обходят маркетинговый мусор и снижают затраты на контекстные токены модели на 82%.

1. Введение: Почему наивный веб-поиск приводит к сбоям автономных AI-агентов

В 2026 году автономные исследовательские AI-агенты — от инструментов глубокого анализа кода (Claude Code, Devin, Roo Code) до мультиагентных роевых систем (LangGraph, CrewAI, AutoGen) — ограничены не способностями языковых моделей к рассуждению, а качеством заземления (retrieval grounding) на внешние источники.

Когда агент пытается обосновать генерацию ответа с помощью наивных поисковых запросов на естественном языке (например, отправляя запрос "how to configure mutual TLS in Envoy proxy" напрямую в коммерческий поисковый API), он сталкивается с катастрофической проблемой соотношения сигнал/шум:

[Поисковый запрос агента на естественном языке]
         │
         ▼
[Стандартный SERP API (Google / Bing / Brave)]
         │
         ├─► Результат 1: Маркетинговый лендинг на 45 КБ без единого примера кода
         ├─► Результат 2: Платная статья на Medium/Substack за 2021 год (устаревший API)
         ├─► Результат 3: SEO-дорвей с галлюцинированными ответами со StackOverflow
         └─► Результат 4: Шаблонный README с GitHub без схем конфигурации
         │
         ▼
[Скрапинг через Headless-браузер + Конвертация DOM]
         │
         ▼
[35 000 токенов верстки, баннеров cookies и скриптов в контекстном окне LLM]
         │
         ▼
[Итог LLM: Критические галлюцинации, потеря фактов, перерасход $0.18 на запрос]

Обычные поисковые строки обеспечивают высокий охват (recall), но провальную точность (precision). Алгоритмы ранжирования классических поисковиков оптимизированы под кликабельность (CTR), авторитетность домена и поведенческие факторы людей, а не под структурированные технические факты для машин.

Использование нефильтрованного веб-поиска в автономных агентах приводит к трем системным дефектам:

  1. Загрязнение контекстного окна: Спарсенные веб-страницы содержат десятки тысяч токенов шаблонного HTML, навигационных панелей и баннеров cookies. Даже после парсинга через Readability рекламный текст вытесняет документацию.
  2. Временные и семантические галлюцинации: Модель принимает первые ссылки за истину, генерируя нерабочий синтаксис устаревших библиотек.
  3. Экономический перерасход токенов: Мультиагентные циклы, выполняющие 10–30 промежуточных поисковых запросов, сжигают более $3.00 на контекст LLM за одну задачу при задержках от 3 до 9 секунд на раунд.

Чтобы построить надежные RAG-конвейеры корпоративного уровня, поисковые системы необходимо использовать как структурированные реляционные базы данных. Используя поисковые операторы в веб-поиске (site:, filetype:, inurl:, intitle:, булеву логику и структурные паттерны вроде ext:asp inurl:search), агенты отсеивают 95% мусора еще до отправки первого HTTP-запроса на скрапинг.


2. Таксономия поисковых операторов для автономных AI-агентов

Поисковые движки поддерживают специализированные операторы, фильтрующие документы непосредственно на уровне инвертированного индекса. Понимание их синтаксиса в Google, Bing, Brave, а также в специализированных сервисах вроде Tavily и Exa — ключевой навык при проектировании компилятора запросов.

+---------------------------------------------------------------------------------------------------------+
|                                  МАТРИЦА ОПЕРАТОРОВ ПОИСКОВЫХ СИСТЕМ                                    |
+-------------------+-----------------------------+-----------------------------+-------------------------+
| Категория         | Пример синтаксиса           | Механизм фильтрации индекса | Польза для Agentic RAG  |
+-------------------+-----------------------------+-----------------------------+-------------------------+
| Доменная зона     | site:domain.com             | B-Tree структуры хостов     | Только оф. документация |
| Таргетинг TLD     | site:.gov, site:.edu        | Партиционирование TLD       | Стандарты и регуляторы  |
| Тип файлов / MIME | filetype:pdf, ext:json      | MIME/Content-Type индексы   | Чистые схемы и PDF      |
| Токены в URI      | inurl:api, inurl:v1         | Лексический индекс путей    | Поиск эндпоинтов и API  |
| Заголовок Title   | intitle:"Index of /"        | Индекс тегов <title>        | Спецификации и дампы    |
| Точная фраза      | "exact error string"        | Позиционные N-Gram индексы  | Воспроизведение багов   |
| Исключение        | -inurl:blog -site:pinterest | Вычитание posting list      | Удаление SEO-мусора     |
| Булева логика     | (A OR B) AND (C NOT D)      | Конъюнкция / Дизъюнкция     | Мультивариантный поиск  |
+-------------------+-----------------------------+-----------------------------+-------------------------+

Базовые примитивы

#### 1. Доменное ограничение (site:) Оператор site: жестко фиксирует префиксы доменных имен:

  • site:docs.aws.amazon.com: Ограничивает выдачу исключительно документацией AWS, отсекая форумы.
  • site:github.com/torvalds/linux: Направляет агента в конкретный репозиторий.
  • site:*.org -site:wikipedia.org: Позволяет искать по академическим фондам без вики-компиляций.

#### 2. Фильтрация типов файлов (filetype: и ext:) Позволяет агенту запрашивать непосредственно структурированные бинарные или текстовые файлы:

  • filetype:pdf: Загружает белые книги, спецификации и финансовые отчеты.
  • filetype:json или filetype:yaml: Находит открытые спецификации OpenAPI и манифесты развертывания.
  • ext:asp inurl:search или ext:php inurl:api: Обнаруживает легаси-эндпоинты корпоративных систем и каталогов.

#### 3. Лексический анализ путей (inurl: и allinurl:) Оператор inurl: фильтрует токены в структуре URL:

  • inurl:swagger-ui.html или inurl:/v2/api-docs: Моментально находит интерфейсы API.
  • inurl:changelog или inurl:releases: Направляет агента на историю версий вместо маркетинговых анонсов.

#### 4. Фильтрация заголовков страниц (intitle: и allintitle:) Тег </code> содержит самые релевантные ключевые слова: </p> <ul> <li><code>intitle:"RFC "</code> и <code>site:ietf.org</code>: Извлекает эталонные спецификации стандартов Интернета.</li> <li><code>intitle:"Index of /" inurl:artifacts</code>: Находит открытые файловые хранилища и репозитории артефактов.</li> </ul> <p>#### 5. Булева логика и вычитание (<code>AND</code>, <code>OR</code>, <code>|</code>, <code>-</code>, <code>"..."</code>) Формирование сложных дизъюнктивных нормальных форм: </p> <ul> <li><code>"fatal error: out of memory" (site:github.com/issues OR site:stackoverflow.com)</code>: Точный поиск решений ошибок компиляции.</li> <li><code>site:kubernetes.io -inurl:blog -inurl:v1.22</code>: Сбор актуальной архитектурной документации без устаревших версий.</li> </ul> <hr /> <h2>3. Сравнение совместимости: Google vs Bing vs Brave vs Tavily</h2> <p>Разные поисковые движки по-разному интерпретируют операторы. При проектировании мультипровайдерного <strong>поискового API для AI</strong> агенты должны адаптировать синтаксис под конкретный бэкенд. </p> <pre><code>+-----------------------------------------------------------------------------------------------------------------+ | МАТРИЦА СОВМЕСТИМОСТИ И ВОЗМОЖНОСТЕЙ БЭКЕНДОВ | +--------------------+----------------------+----------------------+---------------------+------------------------+ | Оператор / Параметр| Google Search API | Bing Web Search API | Brave Search API | Tavily / Exa (AI Nat) | +--------------------+----------------------+----------------------+---------------------+------------------------+ | site: / -site: | Полная (Поддомены) | Полная (Поддомены) | Полная (Поддомены) | Нативный REST-параметр | | filetype: / ext: | Полная (20+ типов) | Полная (12+ типов) | Базовая (PDF/Doc) | include_domains param | | inurl: / allinurl: | Полная | Частичная | Полная | Семантический фильтр | | intitle: / allin: | Полная | Полная | Полная | Семантический фильтр | | Отрицание (-) | Полная | Полная | Полная | exclude_domains param | | Булево OR / | | Полная | Только в ВЕРХНЕМ рег.| Полная | Неявная семантика | | Подстановочный * | В середине фразы | Ограниченная | Регулярные выраж. | Векторное пространство | | Лимит длины строки | 32 слова / 2048 симв | 1000 символов | 500 симв / 25 токенов| 400 токенов (NL промпт)| | P50 задержка (REST)| 650–1200 мс | 450–800 мс | 180–350 мс | 450–750 мс | | Размер индекса | > 100 млрд страниц | > 40 млрд страниц | > 30 млрд страниц | Кеш / Агрегированный | | Цена / 1k запросов | $5.00 (SerpAPI) | $3.00 – $7.00 | $3.00 – $5.00 | $8.00 (Tavily Advanced)| +--------------------+----------------------+----------------------+---------------------+------------------------+</code></pre> <hr /> <h2>4. Архитектура компилятора запросов в агентных системах</h2> <p>Агент никогда не должен передавать промпт пользователя в поисковый API напрямую. Вместо этого конвейер использует <strong>многоступенчатый компилятор запросов</strong>: </p> <pre><code>[Пользовательский промпт / Подзадача агента] │ ▼ [Этап 1: Извлечение сущностей и классификация намерения] │ ▼ [Этап 2: Синтез детерминированных операторов (site:, inurl:)] │ ▼ [Этап 3: Адаптация под API (Brave, Google, Tavily)] │ ▼ [Этап 4: Выполнение и машина состояний релаксации ограничений]</code></pre> <p>Если агент задает слишком строгие условия и получает 0 результатов, запускается <strong>автоматическая релаксация</strong>: </p> <ol> <li>Снятие фильтров <code>filetype:</code> и <code>inurl:</code>.</li> <li>Удаление кавычек точного совпадения при сохранении <code>site:</code>.</li> <li>Переход на гибридный семантический поиск.</li> </ol> <hr /> <h2>5. Программная реализация на Python</h2> <p>Полнофункциональный класс на Python для автоматической компиляции и выполнения структурированных поисковых запросов агента: </p> <pre><code class="language-python">import httpx from pydantic import BaseModel, Field from typing import List, Dict, Any from enum import Enum class SearchEngineBackend(str, Enum): BRAVE = "brave" TAVILY = "tavily" class SearchConstraint(BaseModel): query: str = Field(..., description="Базовый текстовый запрос") target_domains: List[str] = Field(default_factory=list, description="Включение доменов через site:") excluded_domains: List[str] = Field(default_factory=list, description="Исключение доменов через -site:") file_extensions: List[str] = Field(default_factory=list, description="Расширения через filetype: или ext:") url_keywords: List[str] = Field(default_factory=list, description="Ключевые слова URL через inurl:") excluded_url_keywords: List[str] = Field(default_factory=list, description="Исключения URL через -inurl:") exact_phrases: List[str] = Field(default_factory=list, description="Точные фразы в кавычках") title_keywords: List[str] = Field(default_factory=list, description="Ключевые слова в теге title") class AgentQueryCompiler: """Компилирует структурированные ограничения в синтаксис операторов поисковых систем.""" @staticmethod def compile_lexical_query(constraint: SearchConstraint) -> str: tokens: List[str] = [] for phrase in constraint.exact_phrases: cleaned = phrase.replace('"', '').strip() if cleaned: tokens.append(f'"{cleaned}"') if constraint.query.strip(): tokens.append(constraint.query.strip()) if constraint.target_domains: if len(constraint.target_domains) == 1: tokens.append(f"site:{constraint.target_domains[0]}") else: sites = " OR ".join([f"site:{d}" for d in constraint.target_domains]) tokens.append(f"({sites})") for ex_domain in constraint.excluded_domains: tokens.append(f"-site:{ex_domain}") if constraint.file_extensions: if len(constraint.file_extensions) == 1: tokens.append(f"filetype:{constraint.file_extensions[0]}") else: exts = " OR ".join([f"filetype:{ext}" for ext in constraint.file_extensions]) tokens.append(f"({exts})") for kw in constraint.url_keywords: tokens.append(f"inurl:{kw}") for ex_kw in constraint.excluded_url_keywords: tokens.append(f"-inurl:{ex_kw}") for t_kw in constraint.title_keywords: tokens.append(f"intitle:{t_kw}") return " ".join(tokens) class AgentSearchOrchestrator: """Диспетчер выполнения запросов с адаптацией под бэкенды.""" def __init__(self, api_keys: Dict[str, str]): self.api_keys = api_keys self.client = httpx.Client(timeout=10.0) def search_brave(self, query: str) -> Dict[str, Any]: url = "https://api.search.brave.com/res/v1/web/search" headers = { "Accept": "application/json", "X-Subscription-Token": self.api_keys["brave"], } response = self.client.get(url, headers=headers, params={"q": query, "count": 10}) response.raise_for_status() return response.json()</code></pre> <hr /> <h2>6. Бенчмарки и практические кейсы в продакшене</h2> <p>Сравнение эффективности наивного поиска и структурированного поиска с операторами на выборке из 500 агентных задач: </p> <pre><code>+-------------------------------------------------------------------------------------------------------------+ | БЕНЧМАРК: НАИВНЫЙ ПОИСК ПРОТИВ ПОИСКА С ОПЕРАТОРАМИ | +------------------------------+--------------------+------------------------+------------------+-------------+ | Категория задачи | Метод поиска | Расход токенов (конт.) | Precision@5 Hits | P95 Latency | +------------------------------+--------------------+------------------------+------------------+-------------+ | Отладка распределенных систем| Наивный текст | 48 200 токенов ($0.24) | 18.4% | 8 420 мс | | Отладка распределенных систем| С операторами | 8 600 токенов ($0.04) | 94.2% | 1 480 мс | | Финансовый аудит SEC 10-K | Наивный текст | 64 100 токенов ($0.32) | 24.1% | 9 800 мс | | Финансовый аудит SEC 10-K | С операторами | 11 200 токенов ($0.05) | 98.6% | 2 100 мс | | Поиск недокументированных API| Наивный текст | 39 500 токенов ($0.19) | 12.0% | 7 200 мс | | Поиск недокументированных API| С операторами | 5 400 токенов ($0.02) | 91.5% | 1 120 мс | +------------------------------+--------------------+------------------------+------------------+-------------+</code></pre> <hr /> <h2>7. Защита от блокировок и обход антифрод-систем</h2> <p>При масштабировании поисковых вызовов агентные системы сталкиваются с защитными системами (Cloudflare Turnstile, DataDome). Использование прямых управляемых API (Brave Search API, Tavily) вместо прямого скрапинга через браузер устраняет проблемы капч и блокировок по отпечаткам TLS. </p> <hr /> <h2>8. Экономический анализ затрат и ROI</h2> <p>Годовой расчет затрат на 100 000 автономных исследовательских сессий демонстрирует 95.7% экономии бюджета: </p> <pre><code>+------------------------------------------------------------------------------------------------------------+ | ГОДОВАЯ СТОИМОСТЬ: 100 000 ИССЛЕДОВАТЕЛЬСКИХ ЗАДАЧ АГЕНТОВ | +------------------------------------+-----------------------------------+-----------------------------------+ | Статья расходов | Архитектура наивного поиска | Архитектура с операторами поиска | +------------------------------------+-----------------------------------+-----------------------------------+ | Среднее число запросов на задачу | 8.4 запроса (метод проб и ошибок) | 2.1 запроса (детерминированный) | | Расходы на Search API (@$4.00/1k) | $3 360 | $840 | | Объем входных токенов LLM | 29.4 млрд токенов | 882 млн токенов | | Стоимость токенов LLM (@$3.00/1M) | $88 200 | $2 646 | | Затраты на прокси и парсинг | $4 500 | $650 | +------------------------------------+-----------------------------------+-----------------------------------+ | ИТОГОВЫЕ ЗАТРАТЫ | $96 060 | $4 136 | | Экономия | Базовый уровень | $91 924 (Снижение на 95.7%) | +------------------------------------+-----------------------------------+-----------------------------------+</code></pre> <hr /> <h2>9. Заключение</h2> <p>Будущее автономных агентов зависит от точности извлечения первичных фактов. Применение структурированных операторов (<code>site:</code>, <code>filetype:</code>, <code>inurl:</code>, <code>intitle:</code>, булевой логики и <code>ext:asp inurl:search</code>) гарантирует отсутствие галлюцинаций, радикально снижает затраты на инференс и обеспечивает надежность работы агентных RAG-систем в продакшене. </p></div><!-- Related Models & Benchmarks Engine for SEO Deep Linking --><div class="related-models-section" style="margin-top: 64px;padding: 32px;background:rgba(255,255,255,0.02);border:1px solid rgba(255,255,255,0.08);border-radius:12px;" data-reveal><h3 class="h4" style="margin-bottom: 12px;">Модели и живые бенчмарки</h3><p style="color:var(--color-w-70);font-size: 14px;margin-bottom: 24px;">Сравните лучшие фронтир-модели из этого исследования по задержке, рассуждениям и ценам на токены:</p><div style="display:flex;flex-wrap:wrap;gap: 12px;"><a href="/ru/leaderboard" class="badge" style="padding: 8px 16px;background:rgba(99,102,241,0.15);color:#818cf8;border:1px solid rgba(99,102,241,0.3);border-radius:6px;text-decoration:none;font-size: 14px;font-weight:500;">📊 Живой лидерборд</a><a href="/ru/leaderboard/coding-agents" class="badge" style="padding: 8px 16px;background:rgba(16,185,129,0.15);color:#34d399;border:1px solid rgba(16,185,129,0.3);border-radius:6px;text-decoration:none;font-size: 14px;font-weight:500;">💻 Матрица кодовых агентов</a><a href="/ru/best/coding" class="badge" style="padding: 8px 16px;background:rgba(245,158,11,0.15);color:#fbbf24;border:1px solid rgba(245,158,11,0.3);border-radius:6px;text-decoration:none;font-size: 14px;font-weight:500;">⚡ Лучшие модели для кода</a><a href="/ru/models/claude-sonnet-4-6" class="badge" style="padding: 8px 16px;background:rgba(255,255,255,0.05);color:var(--color-w-90);border:1px solid rgba(255,255,255,0.15);border-radius:6px;text-decoration:none;font-size: 14px;">Claude Sonnet 4.6</a><a href="/ru/models/gpt-6-astra" class="badge" style="padding: 8px 16px;background:rgba(255,255,255,0.05);color:var(--color-w-90);border:1px solid rgba(255,255,255,0.15);border-radius:6px;text-decoration:none;font-size: 14px;">GPT-6 Astra</a><a href="/ru/models/deepseek-v4-1-flash" class="badge" style="padding: 8px 16px;background:rgba(255,255,255,0.05);color:var(--color-w-90);border:1px solid rgba(255,255,255,0.15);border-radius:6px;text-decoration:none;font-size: 14px;">DeepSeek V4.1 Flash</a><a href="/vs/claude-mythos-preview-vs-gpt-6-astra" class="badge" style="padding: 8px 16px;background:rgba(255,255,255,0.05);color:var(--color-w-90);border:1px solid rgba(255,255,255,0.15);border-radius:6px;text-decoration:none;font-size: 14px;">Claude Mythos vs GPT-6 Astra</a></div></div><div class="blog-article-nav" style="margin-top: 48px"><a href="/ru/blog" class="btn btn-ghost">← Все статьи</a></div></div></article></main><footer class="site-footer" data-astro-cid-jo6i4kqk><div class="container" data-astro-cid-jo6i4kqk><div class="foot-cta" data-astro-cid-jo6i4kqk><div data-astro-cid-jo6i4kqk><h2 data-astro-cid-jo6i4kqk>Узнавайте о новых рейтингах</h2><p data-astro-cid-jo6i4kqk>Обновления индекса, релизы моделей и независимая аналитика — через RSS или ленту новостей.</p></div><div class="sub" data-astro-cid-jo6i4kqk><a href="/ru/news" class="btn btn-primary" data-astro-cid-jo6i4kqk>Открыть ленту новостей</a><a href="/rss.xml" class="btn btn-ghost-light" data-astro-cid-jo6i4kqk>RSS</a></div></div><div class="footer-grid" data-astro-cid-jo6i4kqk><div class="footer-brand-col" data-astro-cid-jo6i4kqk><a href="/ru" class="footer-brand" data-astro-cid-jo6i4kqk><span class="logo-mark-grid" aria-hidden="true" data-astro-cid-jo6i4kqk><i data-astro-cid-jo6i4kqk></i><i data-astro-cid-jo6i4kqk></i><i data-astro-cid-jo6i4kqk></i><i data-astro-cid-jo6i4kqk></i></span>LLMPodium</a><p class="footer-blurb" data-astro-cid-jo6i4kqk>Независимые рейтинги LLM. Непрерывные оценки 767+ моделей по 25+ бенчмаркам.</p><div class="footer-live" data-astro-cid-jo6i4kqk><span class="live-dot" aria-hidden="true" data-astro-cid-jo6i4kqk></span><span data-astro-cid-jo6i4kqk>Рейтинги синхронизируются ежедневно</span></div></div><div class="footer-col" data-astro-cid-jo6i4kqk><div class="footer-col-title" data-astro-cid-jo6i4kqk>Рейтинги</div><ul class="footer-links" data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard" data-astro-cid-jo6i4kqk>Рейтинг</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/coding" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg> <span data-astro-cid-jo6i4kqk>Код</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/reasoning" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><path d="M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-2.04zM14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-2.04z"/></svg> <span data-astro-cid-jo6i4kqk>Рассуждения</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/math" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><line x1="19" y1="5" x2="5" y2="19"/><circle cx="6.5" cy="6.5" r="1.5"/><circle cx="17.5" cy="17.5" r="1.5"/><line x1="5" y1="12" x2="19" y2="12"/><line x1="12" y1="5" x2="12" y2="19"/></svg> <span data-astro-cid-jo6i4kqk>Математика</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/agentic" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><rect x="3" y="11" width="18" height="10" rx="2"/><circle cx="12" cy="5" r="2"/><path d="M12 7v4M8 15h.01M16 15h.01M9 18h6"/></svg> <span data-astro-cid-jo6i4kqk>Агентность</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/open" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 9.9-1"/></svg> <span data-astro-cid-jo6i4kqk>Открытые веса</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/speed" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> <span data-astro-cid-jo6i4kqk>Скорость</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/value" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg> <span data-astro-cid-jo6i4kqk>Цена/качество</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/leaderboard/coding-agents" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg> <span data-astro-cid-jo6i4kqk>Рейтинг кодинг-агентов</span></a></li></ul></div><div class="footer-col" data-astro-cid-jo6i4kqk><div class="footer-col-title" data-astro-cid-jo6i4kqk>Инструменты</div><ul class="footer-links" data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/ru/agents" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><rect x="3" y="11" width="18" height="10" rx="2"/><circle cx="12" cy="5" r="2"/><path d="M12 7v4M8 15h.01M16 15h.01M9 18h6"/></svg> <span data-astro-cid-jo6i4kqk>ИИ-Агенты</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/arena" data-astro-cid-jo6i4kqk>Арена</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/compare" data-astro-cid-jo6i4kqk>Сравнить</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/benchmarks" data-astro-cid-jo6i4kqk>Бенчмарки</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/recommender" data-astro-cid-jo6i4kqk>Подобрать</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/models" data-astro-cid-jo6i4kqk>Модели</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/providers" data-astro-cid-jo6i4kqk>Провайдеры ИИ</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/cost-per-task" data-astro-cid-jo6i4kqk>Стоимость задачи</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/token-calculator" data-astro-cid-jo6i4kqk><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg> <span data-astro-cid-jo6i4kqk>Калькулятор токенов</span></a></li><li data-astro-cid-jo6i4kqk><a href="/ru/models/claude-mythos-preview" data-astro-cid-jo6i4kqk>Модель №1</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/favorites" data-astro-cid-jo6i4kqk>Избранные модели</a></li></ul></div><div class="footer-col" data-astro-cid-jo6i4kqk><div class="footer-col-title" data-astro-cid-jo6i4kqk>Ресурсы</div><ul class="footer-links" data-astro-cid-jo6i4kqk><li data-astro-cid-jo6i4kqk><a href="/ru/news" data-astro-cid-jo6i4kqk>Новости</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/blog" data-astro-cid-jo6i4kqk>Блог</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/best" data-astro-cid-jo6i4kqk>Лучшие ИИ-модели 2026</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/use-cases" data-astro-cid-jo6i4kqk>Корпоративные сценарии</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/methodology" data-astro-cid-jo6i4kqk>Методология</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/glossary" data-astro-cid-jo6i4kqk>Глоссарий</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/faq" data-astro-cid-jo6i4kqk>FAQ</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/about" data-astro-cid-jo6i4kqk>О нас</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/contact" data-astro-cid-jo6i4kqk>Контакты и правила</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/privacy" data-astro-cid-jo6i4kqk>Конфиденциальность</a></li><li data-astro-cid-jo6i4kqk><a href="/ru/terms" data-astro-cid-jo6i4kqk>Условия использования</a></li></ul></div></div><div class="footer-bottom" data-astro-cid-jo6i4kqk><div class="footer-bottom-left" data-astro-cid-jo6i4kqk><span data-astro-cid-jo6i4kqk>© 2026 LLMPodium. Все права защищены.</span><span class="sep" data-astro-cid-jo6i4kqk>·</span><a href="/ru/privacy" data-astro-cid-jo6i4kqk>Конфиденциальность</a><span class="sep" data-astro-cid-jo6i4kqk>·</span><a href="/ru/terms" data-astro-cid-jo6i4kqk>Условия использования</a><span class="sep" data-astro-cid-jo6i4kqk>·</span><button type="button" class="footer-link-btn" id="cookie-settings-btn" data-label="Настройки cookie" data-astro-cid-jo6i4kqk>Настройки cookie</button><span class="sep" data-astro-cid-jo6i4kqk>·</span><a href="mailto:hello@llmpodium.com" data-astro-cid-jo6i4kqk>hello@llmpodium.com</a></div><div class="footer-bottom-right" data-astro-cid-jo6i4kqk><a href="/ru/contact" data-astro-cid-jo6i4kqk>Контакты и правила</a><a href="/llms.txt" data-astro-cid-jo6i4kqk>llms.txt</a><a href="/rss.xml" data-astro-cid-jo6i4kqk>RSS</a><a href="/api/data/compare.json" data-astro-cid-jo6i4kqk>Open API</a></div></div></div></footer><div id="search-index" data-index-url="/api/data/search.json" data-models-base="/ru/models" data-agents-base="/ru/agents" data-providers-base="/ru/providers" data-benchmarks-base="/ru/benchmarks" data-no-results="Ничего не найдено по запросу" data-label-model="Модель" data-label-agent="Агент" data-label-provider="Провайдер" data-label-benchmark="Бенчмарк" style="display:none" data-astro-cid-fdy5zvyj></div><div class="search-overlay" id="search-overlay" role="dialog" aria-modal="true" aria-label="Поиск моделей..." data-astro-cid-fdy5zvyj><div class="search-box aa-cmd-palette" data-astro-cid-fdy5zvyj><div class="aa-cmd-header" data-astro-cid-fdy5zvyj><svg class="search-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-fdy5zvyj><circle cx="11" cy="11" r="8" data-astro-cid-fdy5zvyj></circle><line x1="21" y1="21" x2="16.65" y2="16.65" data-astro-cid-fdy5zvyj></line></svg><input type="text" class="search-input" id="search-input" placeholder="Введите модель, провайдера, агента или бенчмарк…" aria-label="Введите модель, провайдера, агента или бенчмарк…" autocomplete="off" spellcheck="false" data-astro-cid-fdy5zvyj><button type="button" class="cmd-badge cmd-close-btn" id="search-close-btn" aria-label="Закрыть поиск" data-astro-cid-fdy5zvyj><span class="cmd-badge-esc" data-astro-cid-fdy5zvyj>ESC</span><span class="cmd-badge-close" data-astro-cid-fdy5zvyj>✕</span></button></div><div class="aa-cmd-quick-links" data-astro-cid-fdy5zvyj><span class="quick-title" data-astro-cid-fdy5zvyj>Быстрый переход:</span><a href="/ru/agents" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><rect x="3" y="11" width="18" height="10" rx="2"/><circle cx="12" cy="5" r="2"/><path d="M12 7v4M8 15h.01M16 15h.01M9 18h6"/></svg> ИИ-Агенты</a><a href="/ru/leaderboard" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><path d="M6 9H4.5a2.5 2.5 0 0 1 0-5H6M18 9h1.5a2.5 2.5 0 0 0 0-5H18M4 22h16M10 14.66V17c0 .55-.45 1-1 1H7M14 14.66V17c0 .55.45 1 1 1h2M18 2H6v7a6 6 0 0 0 12 0V2z"/></svg> Рейтинг</a><a href="/ru/leaderboard/coding" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg> Кодинг и SWE-Bench</a><a href="/ru/leaderboard/reasoning" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><path d="M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-2.04zM14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-2.04z"/></svg> Глубокие рассуждения и математика</a><a href="/ru/models" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><line x1="16.5" y1="9.4" x2="7.5" y2="4.21"/><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg> Модели</a><a href="/ru/recommender" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg> Подобрать</a><a href="/ru/cost-per-task" class="quick-tag" data-astro-cid-fdy5zvyj><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="ui-icon" aria-hidden="true" data-astro-cid-72t3zrz5><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg> Стоимость задачи</a></div><div class="search-results" id="search-results" data-astro-cid-fdy5zvyj></div></div></div><nav class="mobile-tabbar" id="mobile-tabbar" aria-label="Мобильная навигация" data-astro-cid-k5hk6fbd><a href="/ru" class="mobile-tab" data-tab="home" data-astro-cid-k5hk6fbd><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-k5hk6fbd><path d="M3 10.5 12 3l9 7.5"/><path d="M5 9.5V21h14V9.5"/></svg><span data-astro-cid-k5hk6fbd>Главная</span></a><a href="/ru/leaderboard" class="mobile-tab" data-tab="leaderboard" data-astro-cid-k5hk6fbd><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-k5hk6fbd><path d="M4 20V10M10 20V4M16 20v-8M22 20H2"/></svg><span data-astro-cid-k5hk6fbd>Рейтинг</span></a><a href="/ru/compare" class="mobile-tab" data-tab="compare" data-astro-cid-k5hk6fbd><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-k5hk6fbd><path d="M16 3h5v5M4 20 21 3m0 13v5h-5m-5 5-7-7"/></svg><span data-astro-cid-k5hk6fbd>Сравнить</span></a><a href="/ru/models" class="mobile-tab" data-tab="models" data-astro-cid-k5hk6fbd><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-k5hk6fbd><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg><span data-astro-cid-k5hk6fbd>Модели</span></a><button type="button" class="mobile-tab" id="tabbar-search" aria-label="Поиск моделей..." data-astro-cid-k5hk6fbd><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-k5hk6fbd><circle cx="11" cy="11" r="7" data-astro-cid-k5hk6fbd></circle><path d="M20 20l-3.5-3.5" data-astro-cid-k5hk6fbd></path></svg><span data-astro-cid-k5hk6fbd>Поиск</span></button></nav><script type="module">document.addEventListener(`astro:page-load`,()=>{let e=document.getElementById(`mobile-tabbar`);if(!e)return;let t=window.location.pathname;e.querySelectorAll(`.mobile-tab`).forEach(e=>{let n=e.dataset.tab,r=n===`home`&&/^\/([a-z]{2})?$/.test(t)||n===`leaderboard`&&/leaderboard|arena|best|cost-per-task|for\/|use-cases/.test(t)||n===`compare`&&/compare|\/vs/.test(t)||n===`models`&&/\/models|providers|agents/.test(t);e.classList.toggle(`active`,!!r)});let n=document.getElementById(`tabbar-search`);n?.addEventListener(`click`,()=>{window.dispatchEvent(new CustomEvent(`open-search-overlay`,{detail:{trigger:n}}))})});</script><div id="aa-compare-dock" class="aa-compare-dock" aria-live="polite" inert data-compare-base="/ru/compare" data-tpl-add="{name} добавлена к сравнению." data-tpl-remove="{name} убрана из сравнения." data-tpl-limit="Можно сравнивать не более 4 моделей одновременно." data-tpl-clear="Список сравнения очищен." data-count-label="моделей" data-tpl-remove-label="Убрать {name} из сравнения" data-astro-cid-zoo3qkdf><div class="dock-inner" data-astro-cid-zoo3qkdf><div class="dock-info" data-astro-cid-zoo3qkdf><div class="dock-badge" data-astro-cid-zoo3qkdf><span class="pulse-dot" data-astro-cid-zoo3qkdf></span><span id="dock-count" data-astro-cid-zoo3qkdf>0</span> / 4 <span class="dock-count-word" data-astro-cid-zoo3qkdf></span></div><div id="dock-chips" class="dock-chips" data-astro-cid-zoo3qkdf></div></div><div class="dock-actions" data-astro-cid-zoo3qkdf><button id="dock-clear-btn" class="dock-btn-clear" data-astro-cid-zoo3qkdf>Очистить</button><a id="dock-launch-btn" href="/ru/compare" class="dock-btn-launch" data-astro-cid-zoo3qkdf>Сравнить →</a></div></div><div id="dock-toast" class="dock-toast" role="status" data-astro-cid-zoo3qkdf></div></div><script> (function () { const STORAGE_KEY = 'llmpodium_compare_models'; function loadSavedModels() { try { const raw = localStorage.getItem(STORAGE_KEY); return raw ? JSON.parse(raw) : []; } catch { return []; } } function persistModels(models) { try { localStorage.setItem(STORAGE_KEY, JSON.stringify(models)); } catch {} } let selectedModels = loadSavedModels(); let toastTimer = null; let lastCount = null; function tpl(name, key) { const dock = document.getElementById('aa-compare-dock'); const raw = dock ? dock.getAttribute(key) : ''; return raw ? raw.replace('{name}', name) : ''; } function showToast(msg) { const toast = document.getElementById('dock-toast'); if (!toast || !msg) return; toast.textContent = msg; toast.classList.add('visible'); clearTimeout(toastTimer); toastTimer = setTimeout(function () { toast.classList.remove('visible'); }, 2600); } function updateDock() { const dock = document.getElementById('aa-compare-dock'); const countEl = document.getElementById('dock-count'); const chipsEl = document.getElementById('dock-chips'); const launchBtn = document.getElementById('dock-launch-btn'); if (!dock || !countEl || !chipsEl || !launchBtn) return; countEl.textContent = String(selectedModels.length); const headerCountEl = document.getElementById('nav-compare-count'); if (headerCountEl) { headerCountEl.textContent = String(selectedModels.length); headerCountEl.setAttribute('data-count', String(selectedModels.length)); /* subtle bump animation whenever the selection grows */ if (lastCount !== null && selectedModels.length > lastCount) { headerCountEl.classList.remove('bump'); void headerCountEl.offsetWidth; /* restart the animation */ headerCountEl.classList.add('bump'); } } lastCount = selectedModels.length; const countWord = dock.querySelector('.dock-count-word'); if (countWord) countWord.textContent = dock.getAttribute('data-count-label') || 'Models Selected'; if (selectedModels.length > 0) { dock.classList.add('visible'); dock.removeAttribute('inert'); } else { dock.classList.remove('visible'); dock.setAttribute('inert', ''); } chipsEl.innerHTML = selectedModels .map(function (m) { return '<div class="dock-chip" data-slug="' + m.slug + '">' + '<span>' + m.name + '</span>' + '<button type="button" class="dock-chip-remove" data-remove="' + m.slug + '" aria-label="' + (dock.getAttribute('data-tpl-remove-label') || 'Remove {name} from comparison').replace('{name}', m.name.replace(/"/g, '"')) + '">×</button>' + '</div>'; }) .join(''); const baseHref = dock.dataset.compareBase || '/compare'; launchBtn.setAttribute('href', baseHref + '?models=' + selectedModels.map(function (m) { return m.slug; }).join(',')); /* Update checkboxes state in table/cards */ document.querySelectorAll('[data-compare-slug]').forEach(function (btn) { const slug = btn.getAttribute('data-compare-slug'); const isSel = selectedModels.some(function (m) { return m.slug === slug; }); btn.classList.toggle('selected', isSel); }); /* Bind remove handlers */ chipsEl.querySelectorAll('.dock-chip-remove').forEach(function (btn) { btn.addEventListener('click', function (e) { e.stopPropagation(); const slug = btn.getAttribute('data-remove'); selectedModels = selectedModels.filter(function (m) { return m.slug !== slug; }); persistModels(selectedModels); updateDock(); }); }); } /* the inline script re-executes after every client-side navigation — bind the delegated click handler exactly once to avoid duplicated toasts */ if (!window.__compareDockBound) { window.__compareDockBound = true; document.addEventListener('click', function (e) { const btn = e.target.closest('[data-compare-slug]'); if (!btn) return; e.preventDefault(); const slug = btn.getAttribute('data-compare-slug'); const name = btn.getAttribute('data-compare-name') || slug; const exists = selectedModels.some(function (m) { return m.slug === slug; }); if (exists) { selectedModels = selectedModels.filter(function (m) { return m.slug !== slug; }); showToast(tpl(name, 'data-tpl-remove')); } else { if (selectedModels.length >= 4) { showToast(tpl('', 'data-tpl-limit')); return; } selectedModels.push({ slug: slug, name: name }); showToast(tpl(name, 'data-tpl-add')); } persistModels(selectedModels); updateDock(); }); } document.addEventListener('astro:page-load', function () { selectedModels = loadSavedModels(); lastCount = null; const clearBtn = document.getElementById('dock-clear-btn'); if (clearBtn && !clearBtn.dataset.bound) { clearBtn.dataset.bound = '1'; clearBtn.addEventListener('click', function () { selectedModels = []; persistModels(selectedModels); updateDock(); showToast(tpl('', 'data-tpl-clear')); }); } updateDock(); }); })(); </script><div id="consent-banner" class="consent-banner" role="region" aria-label="Мы уважаем вашу приватность" hidden data-astro-cid-u6s5b3h2><div class="consent-inner" data-astro-cid-u6s5b3h2><div class="consent-copy" data-astro-cid-u6s5b3h2><strong data-astro-cid-u6s5b3h2>Мы уважаем вашу приватность</strong><p data-astro-cid-u6s5b3h2>Мы используем аналитические cookie, чтобы понимать, как пользуются рейтингами. Можно принять или отклонить — сайт в любом случае работает полностью. <a class="consent-more" href="/privacy" data-astro-cid-u6s5b3h2>Конфиденциальность</a></p></div><div class="consent-actions" data-astro-cid-u6s5b3h2><button type="button" class="consent-btn primary" id="consent-accept" data-astro-cid-u6s5b3h2>Принять все</button><button type="button" class="consent-btn ghost" id="consent-decline" data-astro-cid-u6s5b3h2>Отклонить</button></div></div></div><script> (function () { const CONSENT_KEY = 'llmpodium-consent'; function readConsent() { try { return localStorage.getItem(CONSENT_KEY); } catch { return null; } } function showBanner() { const banner = document.getElementById('consent-banner'); if (banner) banner.hidden = false; } function hideBanner() { const banner = document.getElementById('consent-banner'); if (banner) banner.hidden = true; } function choose(value) { try { localStorage.setItem(CONSENT_KEY, value); } catch {} window.llmpodiumConsent = value; hideBanner(); if (value === 'granted' && typeof window.llmpodiumLoadAnalytics === 'function') { window.llmpodiumLoadAnalytics(); } } /* inline scripts re-run after every client-side navigation — guard against stacking duplicate document-level listeners */ if (!window.__llmpodiumConsentBound) { window.__llmpodiumConsentBound = true; document.addEventListener('click', function (e) { const t = e.target.closest('#consent-accept, #consent-decline, #cookie-settings-btn'); if (!t) return; if (t.id === 'consent-accept') choose('granted'); else if (t.id === 'consent-decline') choose('denied'); else showBanner(); }); document.addEventListener('astro:page-load', function () { if (!readConsent()) showBanner(); }); if (!readConsent()) showBanner(); } /* expose for footer "Cookie settings" re-open */ window.llmpodiumOpenConsent = showBanner; })(); </script><div id="route-announcer" class="sr-only" role="status" aria-live="polite" aria-atomic="true"></div><script type="module" src="/_astro/Base.astro_astro_type_script_index_0_lang.Cp0i9fME.js"></script></body></html>