<mxfile host="app.diagrams.net" agent="Codex">
  <diagram id="meeting-intelligence-saas" name="SaaS / on-prem — модульная архитектура">
    <mxGraphModel dx="1893" dy="1088" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="t-systems" parent="1" style="swimlane;html=1;startSize=30;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontStyle=1;fontSize=14;collapsible=0;" value="Системы Т" vertex="1">
          <mxGeometry height="150" width="1740" x="30" y="20" as="geometry" />
        </mxCell>
        <mxCell id="vks" parent="t-systems" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=13;" value="ВКС Т + внешние ВКС&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;Толк · Телемост · МТС Линк · Zoom&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="30" y="45" as="geometry" />
        </mxCell>
        <mxCell id="source-storage" parent="t-systems" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#ffffff;strokeColor=#666666;fontSize=13;" value="Хранилище записей Т&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;готовые отдельные дорожки участников&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="380" y="45" as="geometry" />
        </mxCell>
        <mxCell id="time" parent="t-systems" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=13;" value="Мессенджер Time&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;список · транскрипт · отчеты · AI-чат&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="730" y="45" as="geometry" />
        </mxCell>
        <mxCell id="identity" parent="t-systems" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=13;" value="Пользователи и права Time&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;компания · пользователь · права на встречу&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="1080" y="45" as="geometry" />
        </mxCell>
        <mxCell id="external-llm" parent="t-systems" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=13;" value="Подключенная LLM&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;LLM Т · облачная · в контуре клиента&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="280" x="1430" y="45" as="geometry" />
        </mxCell>
        <mxCell id="saas" parent="1" style="swimlane;html=1;startSize=34;rounded=0;dashed=1;dashPattern=8 4;fillColor=#fafafa;strokeColor=#333333;fontStyle=1;fontSize=14;collapsible=0;" value="Одинаковый состав компонентов для SaaS и контура клиента" vertex="1">
          <mxGeometry height="850" width="1740" x="30" y="195" as="geometry" />
        </mxCell>
        <mxCell id="control-plane" parent="saas" style="swimlane;html=1;startSize=30;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontStyle=1;fontSize=13;collapsible=0;" value="Интеграция и управление обработкой" vertex="1">
          <mxGeometry height="155" width="1690" x="25" y="50" as="geometry" />
        </mxCell>
        <mxCell id="vks-adapter" parent="control-plane" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=12;" value="Адаптер ВКС и записи&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;событие · дорожки · копирование · проверка&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="30" y="45" as="geometry" />
        </mxCell>
        <mxCell id="orchestrator" parent="control-plane" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=12;fontStyle=1;" value="Оркестратор встречи&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;статусы · дубли · повторы · маршруты&lt;br&gt;не содержит ML-логики&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="310" x="380" y="45" as="geometry" />
        </mxCell>
        <mxCell id="time-api" parent="control-plane" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=12;" value="API результатов Time&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;статусы · материалы · публикация&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="740" y="45" as="geometry" />
        </mxCell>
        <mxCell id="acl-adapter" parent="control-plane" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=12;" value="Адаптер прав доступа&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;токен · права · аудит&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="300" x="1090" y="45" as="geometry" />
        </mxCell>
        <mxCell id="ops-api" parent="control-plane" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#666666;fontSize=12;" value="API эксплуатации&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;повторы · ошибки · версии · диагностика&lt;/font&gt;" vertex="1">
          <mxGeometry height="75" width="220" x="1440" y="45" as="geometry" />
        </mxCell>
        <mxCell id="e-adapter-orchestrator" edge="1" parent="control-plane" source="vks-adapter" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="orchestrator" value="recording ready">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e-orchestrator-time" edge="1" parent="control-plane" source="orchestrator" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;exitX=0.648;exitY=0.998;exitDx=0;exitDy=0;exitPerimeter=0;" target="time-api" value="status / artifacts">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="580.9" y="135" />
              <mxPoint x="835.03" y="135" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-acl-time" edge="1" parent="control-plane" source="acl-adapter" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="time-api" value="enforce">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="modules" parent="saas" style="swimlane;html=1;startSize=30;rounded=0;fillColor=#ffffff;strokeColor=#333333;fontStyle=1;fontSize=13;collapsible=0;" value="Независимо разворачиваемые и масштабируемые продуктовые модули" vertex="1">
          <mxGeometry height="255" width="1690" x="25" y="230" as="geometry" />
        </mxCell>
        <mxCell id="transcriber" parent="modules" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;fontSize=14;fontStyle=1;" value="1 · Транскрибатор&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;МЕСЯЦ 1 · АСИНХРОННАЯ ОБРАБОТКА&lt;br&gt;&lt;br&gt;дорожка → фрагменты текста + таймкоды&lt;br&gt;без диаризации&lt;br&gt;масштабируется независимо&lt;/font&gt;" vertex="1">
          <mxGeometry height="170" width="370" x="30" y="50" as="geometry" />
        </mxCell>
        <mxCell id="processor" parent="modules" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;fontSize=14;fontStyle=1;" value="2 · Обработчик встречи&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;МЕСЯЦ 1 · САММАРИ / МЕСЯЦ 2 · AI-ПРОТОКОЛ&lt;br&gt;&lt;br&gt;саммари · решения · задачи · риски&lt;br&gt;отчеты · ссылки на запись&lt;br&gt;версии схем и промптов&lt;/font&gt;" vertex="1">
          <mxGeometry height="170" width="370" x="450" y="50" as="geometry" />
        </mxCell>
        <mxCell id="chat-bot" parent="modules" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;dashed=1;dashPattern=7 4;fontSize=14;fontStyle=1;" value="3 · Чат-бот&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;МЕСЯЦ 3 · ЧАТ В TIME&lt;br&gt;&lt;br&gt;диалог и сессия в Time&lt;br&gt;выбранные встречи · права пользователя&lt;br&gt;получает данные из RAG и показывает ответ&lt;/font&gt;" vertex="1">
          <mxGeometry height="170" width="370" x="870" y="50" as="geometry" />
        </mxCell>
        <mxCell id="rag-bot" parent="modules" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;dashed=1;dashPattern=7 4;fontSize=14;fontStyle=1;" value="4 · RAG-бот&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;МЕСЯЦ 3 · ПОИСК ПО ВСТРЕЧАМ&lt;br&gt;&lt;br&gt;индексация · поиск · ссылки на источники&lt;br&gt;проверка прав до генерации&lt;br&gt;одна или несколько встреч&lt;/font&gt;" vertex="1">
          <mxGeometry height="170" width="370" x="1290" y="50" as="geometry" />
        </mxCell>
        <mxCell id="e-chat-rag" edge="1" parent="modules" source="chat-bot" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="rag-bot" value="sync / streaming query">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1255" y="95" />
              <mxPoint x="1255" y="95" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="platform" parent="saas" style="swimlane;html=1;startSize=30;rounded=0;fillColor=#fffaf0;strokeColor=#d79b00;fontStyle=1;fontSize=13;collapsible=0;" value="Общая инфраструктура — продуктовые модули остаются независимыми" vertex="1">
          <mxGeometry height="200" width="1690" x="25" y="510" as="geometry" />
        </mxCell>
        <mxCell id="rabbit" parent="platform" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#ffffff;strokeColor=#d79b00;fontSize=12;" value="RabbitMQ&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;transcription.jobs/results&lt;br&gt;meeting-processing.jobs/results&lt;br&gt;rag.index.jobs/results&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="245" x="25" y="55" as="geometry" />
        </mxCell>
        <mxCell id="object-store" parent="platform" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#ffffff;strokeColor=#d79b00;fontSize=12;" value="S3-compatible storage&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;staging audio TTL 24–72h&lt;br&gt;transcript + report artifacts&lt;br&gt;immutable inputs/results&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="245" x="300" y="55" as="geometry" />
        </mxCell>
        <mxCell id="postgres" parent="platform" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#ffffff;strokeColor=#d79b00;fontSize=12;" value="PostgreSQL&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;meeting state · jobs · metadata&lt;br&gt;ACL refs · chat sessions · provenance&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="245" x="575" y="55" as="geometry" />
        </mxCell>
        <mxCell id="opensearch" parent="platform" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;dashed=1;dashPattern=7 4;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" value="Поисковый и векторный индекс&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;МЕСЯЦ 3&lt;br&gt;фрагменты · эмбеддинги · права&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="245" x="850" y="55" as="geometry" />
        </mxCell>
        <mxCell id="model-gateway" parent="platform" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d79b00;fontSize=12;" value="Шлюз моделей&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;единый внутренний контракт&lt;br&gt;выбор доступной LLM&lt;br&gt;версия модели и учет использования&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="245" x="1125" y="55" as="geometry" />
        </mxCell>
        <mxCell id="observability" parent="platform" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d79b00;fontSize=12;" value="Запуск и мониторинг&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;логи · метрики · трассировка · уведомления&lt;br&gt;OCI · секреты · CI/CD&lt;br&gt;on-premise-версия — в месяце 2&lt;/font&gt;" vertex="1">
          <mxGeometry height="105" width="260" x="1400" y="55" as="geometry" />
        </mxCell>
        <mxCell id="e-orchestrator-rabbit" edge="1" parent="saas" source="orchestrator" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="rabbit" value="route async jobs">
          <mxGeometry relative="1" x="-0.7518" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="500" y="185" />
              <mxPoint x="460" y="185" />
              <mxPoint x="460" y="525" />
              <mxPoint x="210" y="525" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-adapter-s3" edge="1" parent="saas" source="vks-adapter" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="object-store" value="audio tracks">
          <mxGeometry relative="1" x="-0.2471" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="205" y="245" />
              <mxPoint x="447.5" y="245" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-orchestrator-db" edge="1" parent="saas" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="postgres" value="state / idempotency">
          <mxGeometry relative="1" x="-0.7193" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="560" y="245" />
              <mxPoint x="470" y="245" />
              <mxPoint x="470" y="555" />
              <mxPoint x="722.5" y="555" />
            </Array>
            <mxPoint x="560" y="175" as="sourcePoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e-rabbit-transcriber" edge="1" parent="saas" source="rabbit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;strokeColor=#6c8ebf;" target="transcriber" value="transcription jobs/results">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="172.5" y="495" />
              <mxPoint x="240" y="495" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-s3-transcriber" edge="1" parent="saas" source="object-store" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;strokeColor=#6c8ebf;" target="transcriber" value="audio / segments">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="420" y="495" />
              <mxPoint x="300" y="495" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-rabbit-processor" edge="1" parent="saas" source="rabbit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;strokeColor=#6c8ebf;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="processor" value="processing jobs/results">
          <mxGeometry relative="1" x="-0.2135" as="geometry">
            <mxPoint x="1" as="offset" />
            <Array as="points">
              <mxPoint x="310" y="617.5" />
              <mxPoint x="310" y="685" />
              <mxPoint x="590" y="685" />
              <mxPoint x="590" y="525" />
              <mxPoint x="660" y="525" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-s3-processor" edge="1" parent="saas" source="object-store" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;strokeColor=#6c8ebf;" target="processor" value="transcript / reports">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="490" y="495" />
              <mxPoint x="640" y="495" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-processor-model" edge="1" parent="saas" source="processor" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;strokeColor=#6c8ebf;" target="model-gateway" value="LLM inference">
          <mxGeometry relative="1" x="-0.4501" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="660" y="265" />
              <mxPoint x="1272.5" y="265" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-time-chat" edge="1" parent="saas" source="time-api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="chat-bot" value="online dialog">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="915" y="215" />
              <mxPoint x="1100" y="215" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-acl-chat" edge="1" parent="saas" source="acl-adapter" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="chat-bot" value="user + allowed scope">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1240" y="215" />
              <mxPoint x="1160" y="215" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-rabbit-rag" edge="1" parent="saas" source="rabbit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" value="rag.index jobs/results">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="172.5" y="695" />
              <mxPoint x="1410" y="695" />
              <mxPoint x="1410" y="525" />
              <mxPoint x="1510" y="525" />
              <mxPoint x="1510" y="446.4" />
            </Array>
            <mxPoint x="1510" y="455" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e-rag-search" edge="1" parent="saas" source="rag-bot" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="opensearch" value="index / retrieve with ACL">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1500" y="465" />
              <mxPoint x="997.5" y="465" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-rag-model" edge="1" parent="saas" source="rag-bot" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="model-gateway" value="answer generation">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1480" y="505" />
              <mxPoint x="1272.5" y="505" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-acl-rag" edge="1" parent="saas" source="acl-adapter" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;" target="rag-bot" value="ACL context">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1280" y="215" />
              <mxPoint x="1500" y="215" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="legend-m1" parent="saas" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;fontStyle=1;" value="МЕСЯЦЫ 1–2 — обязательные компоненты" vertex="1">
          <mxGeometry height="45" width="300" x="470" y="745" as="geometry" />
        </mxCell>
        <mxCell id="legend-m2" parent="saas" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;dashed=1;dashPattern=7 4;fontSize=11;fontStyle=1;" value="МЕСЯЦ 3 — чат и RAG" vertex="1">
          <mxGeometry height="45" width="390" x="890" y="745" as="geometry" />
        </mxCell>
        <mxCell id="e-s3-rag" edge="1" parent="saas" source="object-store" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;dashed=1;strokeColor=#82b366;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" value="source artifacts">
          <mxGeometry relative="1" x="0.2643" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="580" y="617.5" />
              <mxPoint x="580" y="545" />
              <mxPoint x="1330" y="545" />
              <mxPoint x="1330" y="465" />
              <mxPoint x="1450" y="465" />
              <mxPoint x="1450" y="449.5" />
            </Array>
            <mxPoint x="570" y="642.5" as="sourcePoint" />
            <mxPoint x="1450" y="449.49" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="e-vks-adapter" edge="1" parent="1" source="vks" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="vks-adapter" value="событие + дорожки">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e-storage-adapter" edge="1" parent="1" source="source-storage" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=10;" target="vks-adapter" value="доступ к записи">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="560" y="160" />
              <mxPoint x="280" y="160" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-time-api" edge="1" parent="1" source="time" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" target="time-api" value="results / chat">
          <mxGeometry relative="1" x="-0.4493" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="910.03" y="160" />
              <mxPoint x="610.03" y="160" />
              <mxPoint x="610.03" y="280" />
              <mxPoint x="770.03" y="280" />
              <mxPoint x="770.03" y="308.83" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e-identity-acl" edge="1" parent="1" source="identity" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;" target="acl-adapter" value="identity + ACL">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e-llm-external" edge="1" parent="1" source="external-llm" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=block;startFill=1;endArrow=block;endFill=1;fontSize=10;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="model-gateway" value="согласованная LLM">
          <mxGeometry relative="1" x="-0.8251" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="1600" y="180" />
              <mxPoint x="1760" y="180" />
              <mxPoint x="1760" y="880" />
              <mxPoint x="1302.5" y="880" />
            </Array>
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
