Upgrade/13 integration tests - #70
Merged
Merged
Conversation
Реализует DetectIntent и CreateContext из Google.Cloud.Dialogflow.V2 и читает обычную выгрузку агента Dialogflow ES с диска. Подбор интента: по имени события (регистронезависимо — бот шлёт Welcome, в выгрузке лежит WELCOME), затем по точному совпадению с обучающей фразой, иначе Default Fallback Intent. Разбора естественного языка нет; контексты принимаются, но нигде не хранятся и на подбор не влияют — слот-филлинг эмулятор не воспроизводит.
Если адрес задан, клиенты Sessions и Contexts идут в него по незашифрованному каналу и без учётных данных Google. Пустое значение — обычная работа с облаком, поведение прода не меняется.
Настоящий HTTP-запрос в приложение через WebApplicationFactory, настоящий Redis в контейнере и эмулятор Dialogflow, поднятый в том же процессе на свободном порту. Покрыты три ветки подбора интента, различимые по тексту ответа из выгрузки агента: событие Welcome, обучающая фраза интента Help и неизвестная фраза с уходом в Default Fallback Intent. Плюс проверка, что /metrics отдаёт кастомную метрику под прежним именем. Program в Api перестал быть статическим — иначе его нельзя передать параметром типа в WebApplicationFactory. Проверено мутацией: поломка резолва события и поломка поиска по обучающим фразам роняют соответствующие тесты.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Стенд loadtest/ поднимает приложение + эмулятор Dialogflow + Redis + k6 одной командой docker compose и гоняет happy path story-бота по кругу: пик 18 rps, плавный подъём/пик/спуск (1м/1м/1м), настраивается через env. Эмулятор — стаб без слот-филлинга и контекстов, поэтому сценарий гоняет достижимую последовательность реплик (Welcome → «что ты умеешь» → «покажи список историй» → «помоги мне» → «выйти»), каждая попадает в реальный интент. Пороги k6 гейтят прогон по ошибкам, задержке и проверкам. Отдельный workflow loadtest.yml — ручной запуск (workflow_dispatch). Api/Dockerfile: добавлено копирование Directory.Packages.props перед restore (Central Package Management — без него restore падал, ломая и docker-publish). Dialogflow.Emulator/Dockerfile: актуализирован комментарий про монтирование агента (ссылка на несуществующий на этой ветке docker-compose убрана).
Эмулятор Dialogflow научился слот-филлингу: для интентов с обязательными параметрами он спрашивает их по очереди (промпты), копит ответы в состоянии сессии и подставляет в шаблон ($param), а также отдаёт статические параметры (textKey) в QueryResult.Parameters. Этого хватает, чтобы пройти основной путь пользователя — сочинение истории — от выбора до собранного текста. Состояние сессий вынесено в singleton SlotFillingStore: gRPC-сервисы создаются на каждый запрос, поэтому в самом сервисе состояние не переживало бы вызов. Нагрузочный сценарий story-happy-path.js переведён на полный поток: выбор истории → 6 слов → готовая история, с отдельной проверкой «история собрана». Проверено на стенде: под нагрузкой (пик 18 rps) все пороги проходят, история собирается. Интеграционные тесты (Welcome/Help/Fallback/metrics) не затронуты — они не используют интенты со слотами.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.