Как собрать десктопный бенчмарк для LLM на Gemini 3.5 Flash за два промпта

Задача: написать десктопное приложение для тестирования скорости локальных LLM с графиками и сравнением моделей. Это нетривиально, потому что кроссплатформенная разработка требует связки фронтенда на Vue 3 и бэкенда на Rust через Tauri. Мы соберем этот инструмент с нуля всего за два запроса, протестировав в реальном бою новую модель Gemini 3.5 Flash в обновленной среде разработки Antigravity IDE.

Что понадобится:

Разделение Antigravity и подготовка проекта

Компания Google обновила свою платформу, разделив её на два инструмента: автономный менеджер агентов Antigravity 2.0 и привычный редактор кода Antigravity IDE. Для нашей задачи нужен именно редактор, так как он поддерживает полноценную работу с файловой системой и терминалом напрямую.

Сначала создаем пустую директорию и файл LLM_Speedometer.md с текстовым описанием будущего приложения. Нам нужен инструмент бенчмаркинга, который стучится к локальным моделям через OpenAI-совместимый API, замеряет скорость генерации и выводит графики.

Шаг 1: генерация плана и архитектуры

Открываем файл LLM_Speedometer.md в редакторе Antigravity IDE. В селекторе моделей в правом сайдбаре выбираем Gemini 3.5 Flash (High).

В поле ввода промпта пишем команду для составления плана реализации:

StoDum
Создай план реализации для такого приложения и запиши его в файл формата Markdown

Модель быстро изучит исходное описание, создаст подробный план разработки и распишет архитектурные решения. Проект будет разбит на несколько фаз: от инициализации окружения до оптимизации и валидации. Архитектура предполагает бэкенд на Rust (Tauri) и фронтенд на Vue 3 с использованием Chart.js для отрисовки графиков в реальном времени.

Шаг 2: запуск агентной кодогенерации

Жмем кнопку Accept Changes на панели изменений, чтобы зафиксировать созданный план. Теперь заставим агента сделать всю рутинную работу. Пишем в чат промпт:

StoDum
Хорошо, приступай к реализации этого плана

Запускается автоматическая сборка проекта. Среда разработки параллельно генерирует два артефакта: интерактивный чеклист задач «LLM Speedometer Tasks» и сам план реализации. На ваших глазах агент выполнит следующие действия:

  1. Инициализирует Tauri-проект через команду create-tauri-app.
  2. Настроит зависимости в package.json и Cargo.toml.
  3. Создаст структуру директорий фронтенда на Vue 3 и бэкенда на Rust.
  4. Напишет код для работы с потоковым API, подсчета метрик скорости и построения интерфейса.

В процессе работы агент сам отмечает галочками выполненные задачи в чеклисте.

Шаг 3: компиляция и запуск бенчмарка

После того как агент завершит генерацию кода и отметит все пункты чеклиста выполненными, переходим в терминал для сборки и запуска десктопного приложения. Перейдите в корень проекта и выполните команду:

StoDum
bun run tauri dev

Начнется компиляция бэкенда на Rust и сборка веб-части. Если все зависимости установлены корректно, откроется готовое окно программы в темной теме.

Интерфейс приложения разделен на логические блоки:

  • левый сайдбар: выбор профилей API (Ollama, LM Studio или кастомный локальный движок)
  • центральная область: интерактивная песочница для отправки промптов, окно вывода стриминга и блок метрик с графиком генерации токенов в секунду
  • правый сайдбар: настройки подключения к API, выбор модели, регулировка температуры и лимита токенов

Тестирование локальных и облачных моделей

Проверим приложение в действии. Сначала проведем локальный тест. Нам понадобится запущенный инстанс Ollama.

  1. Убедитесь, что в правом сайдбаре выбран профиль Ollama (Default).
  2. В поле Model Name укажите имя локальной модели, например: gemma:2b.
  3. Выберите один из предустановленных промптов, например: с описанием квантовых вычислений.
  4. Нажмите синюю кнопку Run Speedometer.

Приложение начнет стриминг ответа и параллельно отобразит метрики скорости на графике: время до первого токена (TTFT), скорость генерации в токенах в секунду и время декодирования.

Теперь протестируем удаленную модель в облаке. Для этого используем DeepSeek v4 Flash Cloud, доступный через облачный шлюз Ollama Cloud.

  1. В поле Model Name укажите адрес модели: deepseek-v4-flash:cloud.
  2. Нажмите кнопку Run Speedometer.

Приложение успешно справится с бенчмаркингом удаленной модели, рассчитав все метрики задержки сетевого запроса и скорости генерации.

В качестве бонуса Gemini 3.5 Flash без прямого указания в требованиях сгенерировала вкладку Run Comparison. В этом разделе вы можете сопоставить результаты тестов разных моделей на удобной столбчатой диаграмме, сравнивая их TTFT и среднюю скорость работы.

Что делать, если сборка упала

⚙️ Если на этапе bun run tauri dev терминал сыплет ошибками, проверьте базовые вещи:

  • версия Node.js: убедитесь, что у вас установлена стабильная LTS-версия
  • компилятор Rust: проверьте его работоспособность через rustc --version
  • сетевые доступы: если локальный Ollama запущен, но приложение его не видит, проверьте, открыт ли порт 11434

Пример файла LLM_Speedometer.md

StoDum
# LLM Speedometer: Local LLM Performance Benchmarking Tool

**LLM Speedometer** is a lightweight, high-performance desktop application designed for developers, AI enthusiasts, and researchers to benchmark and analyze the speed and efficiency of locally running Large Language Models (LLMs). Built with a modern, resource-efficient stack using **Tauri** and **Vue.js**, the application interfaces directly with any local inference engine that supports the OpenAI-compatible API protocol (such as *Ollama, vLLM, llama.cpp, LM Studio, or SGLang*).

The tool acts as a dedicated testing playground that extracts, calculates, and visualizes real-time performance metrics directly from the API's JSON responses, without needing heavy server-side monitoring infrastructure.

---

## 🚀 Key Features

### 1. Real-Time API Performance Metrics

The application tracks and visualizes critical performance indicators (KPIs) pulled directly from the stream chunks and final JSON response payloads:

* **TTFT (Time to First Token):** Measures the exact latency of the *prefill phase*—how long it takes the local GPU/CPU to process the prompt and start generating text.
* **TPOT (Time Per Output Token):** Tracks the average time taken to generate each subsequent token during the *decoding phase*.
* **Tokens Per Second (TPS / Generation Throughput):** Displays the raw generation speed, calculated dynamically during streaming or extracted from custom engine usage extensions.
* **Token Count Auditing:** Displays precise breakdowns of `prompt_tokens`, `completion_tokens`, and `total_tokens`.

### 2. Stream-Based Analytical Charting

* **Live Speed Graphs:** Real-time visual rendering of token generation speed as the response streams in, highlighting spikes or "stuttering" in performance.
* **Engine Comparison Profiles:** Save benchmarking runs to compare how different backends (e.g., Ollama vs. vLLM) or quantization levels (e.g., Q4_K_M vs. Q8_0) handle identical prompts.

### 3. Engine-Agnostic OpenAI API Integration

* Fully customizable API Endpoint URL and API Key inputs to seamlessly switch between different local servers.
* Automatic parsing of proprietary backend metadata extensions (such as Ollama's `eval_duration` and `prompt_eval_count` properties).

---

## 🛠️ Architecture & Tech Stack

By pairing Tauri with Vue.js, the application guarantees an exceptionally low memory footprint on the host system, ensuring that the benchmarking tool itself does not steal valuable VRAM or CPU cycles from the local LLM being tested.

* **Frontend:** Vue.js (Composition API) + Vite — Powers a highly responsive, reactive, and clean user interface.
* **Desktop Runtime:** Tauri (Rust) — Provides a secure, native desktop window wrapper using the system's webview, resulting in a tiny application bundle size (typically under 10MB) and near-zero idle RAM usage.
* **Data Visualization:** Chart.js / ECharts — Handles high-frequency updates for real-time streaming metrics without UI lag.

---

## 📊 Use Cases

* **Hardware Optimization:** Test how changing GPU layers (`ngl`), context windows, or batch sizes affects your actual generation speed.
* **Quantization Benchmarking:** Visually evaluate the exact speed trade-offs when stepping down a model from 16-bit to 4-bit quantization.
* **Prompt Engineering Impact:** Measure how adding massive system prompts or long chat histories degrades the Time to First Token (TTFT).

---