karrrr123456 commited on
Commit
13cb79c
·
verified ·
1 Parent(s): 21611b2

Delete AI

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. AI/.coveragerc +0 -12
  2. AI/.deepsource.toml +0 -12
  3. AI/.devcontainer/Dockerfile +0 -27
  4. AI/.devcontainer/devcontacener.json +0 -50
  5. AI/.devcontainer/docker-compose.yml +0 -57
  6. AI/.dockerignore +0 -11
  7. AI/.env +0 -1
  8. AI/.gitattributes +0 -35
  9. AI/.github/ISSUE_TEMPLATE.md +0 -2
  10. AI/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
  11. AI/.github/ISSUE_TEMPLATE/config.yml +0 -11
  12. AI/.github/PULL_REQUEST_AUTOMATIC_TEMPLATE.md +0 -10
  13. AI/.github/PULL_REQUEST_TEMPLATE.md +0 -8
  14. AI/.github/change_filters.yml +0 -28
  15. AI/.github/configs/mr-test-example.yaml +0 -49
  16. AI/.github/configs/mr-test-schedule.json +0 -3
  17. AI/.github/configs/tf-cuda.json +0 -25
  18. AI/.github/dependabot.yml +0 -34
  19. AI/.github/matchers/flake8-error-matcher.json +0 -17
  20. AI/.github/no-response.yml +0 -12
  21. AI/.github/poetry_version.txt +0 -2
  22. AI/.github/runner/github-runner-deployment.yaml.tmpl +0 -74
  23. AI/.github/scripts/download_pretrained.py +0 -120
  24. AI/.github/scripts/mr_generate_summary.py +0 -55
  25. AI/.github/scripts/mr_publish_results.py +0 -293
  26. AI/.github/scripts/start_dd_agent.sh +0 -79
  27. AI/.github/scripts/validate_cpu.py +0 -14
  28. AI/.github/scripts/validate_gpus.py +0 -14
  29. AI/.github/stale.yml +0 -18
  30. AI/.github/templates/README.md +0 -63
  31. AI/.github/templates/configuration_variables.tmpl +0 -43
  32. AI/.github/templates/model_regression_test_config_comment.tmpl +0 -45
  33. AI/.github/templates/model_regression_test_config_to_json.tmpl +0 -71
  34. AI/.github/templates/model_regression_test_read_dataset_branch.tmpl +0 -13
  35. AI/.github/templates/model_regression_test_results.tmpl +0 -159
  36. AI/.github/tests/test_data/bert_diet_response2t.yml +0 -23
  37. AI/.github/tests/test_data/comment_body.json +0 -3
  38. AI/.github/tests/test_data/comment_body_no_dataset_branch.json +0 -3
  39. AI/.github/tests/test_data/intent_report.json +0 -120
  40. AI/.github/tests/test_data/report-on-schedule-2022-02-02.json +0 -303
  41. AI/.github/tests/test_data/report_listformat_core.json +0 -70
  42. AI/.github/tests/test_data/report_listformat_nlu.json +0 -98
  43. AI/.github/tests/test_download_pretrained.py +0 -111
  44. AI/.github/tests/test_model_regression_test_read_dataset_branch_tmpl.py +0 -27
  45. AI/.github/tests/test_model_regression_test_results_tmpl.py +0 -50
  46. AI/.github/tests/test_mr_generate_summary.py +0 -208
  47. AI/.github/tests/test_mr_publish_results.py +0 -132
  48. AI/.github/tests/test_validate_gpus.py +0 -27
  49. AI/.github/workflows/automatic-pr-update.yml +0 -22
  50. AI/.github/workflows/ci-docs-tests.yml +0 -164
AI/.coveragerc DELETED
@@ -1,12 +0,0 @@
1
- [report]
2
- exclude_lines =
3
- pragma: no cover
4
- def __repr__
5
- raise NotImplementedError
6
- if __name__ == .__main__.:
7
- def create_argument_parser
8
- if typing.TYPE_CHECKING
9
- # Ellipsis are used as placeholders in python 3 that will be overridden
10
- \.\.\.
11
- [run]
12
- source = rasa
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.deepsource.toml DELETED
@@ -1,12 +0,0 @@
1
- version = 1
2
-
3
- test_patterns = ["tests/**"]
4
-
5
- exclude_patterns = ["docs/**"]
6
-
7
- [[analyzers]]
8
- name = "python"
9
- enabled = true
10
-
11
- [analyzers.meta]
12
- runtime_version = "3.x.x"
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.devcontainer/Dockerfile DELETED
@@ -1,27 +0,0 @@
1
- # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
2
- ARG VARIANT=3-bullseye
3
- FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
4
-
5
- ENV PYTHONFAULTHANDLER=1 \
6
- PYTHONUNBUFFERED=1 \
7
- PYTHONHASHSEED=random \
8
- PIP_NO_CACHE_DIR=off \
9
- PIP_DISABLE_PIP_VERSION_CHECK=on \
10
- PIP_DEFAULT_TIMEOUT=100
11
-
12
- # [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
13
- ARG NODE_VERSION="none"
14
- RUN if [ "${NODE_VERSION}" != "nne" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
15
-
16
- # [Optional] If your requirements rarely change, uncomment this section to add them to the image.
17
- # COPY requirements.txt /tmp/pip-tmp/
18
- # RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
19
- # && rm -rf /tmp/pip-tmp
20
- RUN pip install poetry==1.1.10 pre-commit
21
- COPY ../poetry.lock ../pyproject.toml /tmp/pip-tmp/rasa/
22
- RUN cd /tmp/pip-tmp/rasa && poetry config virtualenvs.create false \
23
- && poetry install --no-interaction --no-ansi --no-root
24
-
25
- # [Optional] Uncomment this section to install additional OS packages.
26
- # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
27
- # && apt-get -y install --no-install-recommends <your-package-list-here>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.devcontainer/devcontacener.json DELETED
@@ -1,50 +0,0 @@
1
- // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
- // https://github.com/microsoft/vscode-dev-containers/tree/v0.233.0/containers/python-3-postgres
3
- // Update the VARIANT arg in docker-compose.yml to pick a Python version
4
- {
5
- "name": "Rasa Open Source",
6
- "dockerComposeFile": "docker-compose.yml",
7
- "service": "app",
8
- "workspaceFolder": "/workspaces/rasa",
9
- // Set *default* container specific settings.json values on container create.
10
- "settings": {
11
- "python.defaultInterpreterPath": "/usr/local/bin/python",
12
- "python.linting.enabled": true,
13
- "python.linting.pylintEnabled": true,
14
- "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
15
- "python.formatting.blackPath": "/usr/local/py-utils/bin/black",
16
- "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
17
- "python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
18
- "python.linting.ruffPath": "/usr/local/py-utils/bin/ruff",
19
- "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
20
- "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
21
- "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
22
- "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint",
23
- "python.testing.pytestPath": "/usr/local/py-utils/bin/pytest"
24
- },
25
- // Add the IDs of extensions you want installed when the container is created.
26
- "extensions": [
27
- "ms-python.python",
28
- "ms-python.vscode-pylance"
29
- ],
30
- // memory is required for frontend build...fails for machines with less than 10g
31
- // "hostRequirements": {
32
- // "memory": "12gb"
33
- // },
34
- // Use 'forwardPorts' to make a list of ports inside the container available locally.
35
- // This can be used to network with other containers or the host.
36
- "forwardPorts": [
37
- 5005
38
- ],
39
- // Use 'postCreateCommand' to run commands after the container is created.
40
- "updateContentCommand": "make install && make install-docs && cd / && mkdir example && rasa init --no-prompt --init-dir example",
41
- // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
42
- //"remoteUser": "vscode",
43
- "features": {
44
- "docker-in-docker": "20.10",
45
- "docker-from-docker": "20.10",
46
- "git": "os-provided",
47
- "github-cli": "latest",
48
- "sshd": "latest"
49
- }
50
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.devcontainer/docker-compose.yml DELETED
@@ -1,57 +0,0 @@
1
- version: '3.8'
2
-
3
- services:
4
- app:
5
- build:
6
- context: ..
7
- dockerfile: .devcontainer/Dockerfile
8
- args:
9
- # Update 'VARIANT' to pick a version of Python: 3, 3.10, 3.9, 3.8, 3.7, 3.6
10
- # Append -bullseye or -buster to pin to an OS version.
11
- # Use -bullseye variants on local arm64/Apple Silicon.
12
- VARIANT: "3.8"
13
- # Optional Node.js version to install
14
- NODE_VERSION: "16"
15
- environment:
16
- DB_DRIVER: "postgresql"
17
- DB_USER: "admin"
18
- DB_PASSWORD: "postgres"
19
-
20
- volumes:
21
- - ..:/workspaces/rasa:cached
22
-
23
- # Overrides default command so things don't shut down after the process ends.
24
- command: sleep infinity
25
-
26
- # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
27
- network_mode: service:db
28
- # Uncomment the next line to use a non-root user for all processes.
29
- # user: vscode
30
-
31
- db:
32
- image: "bitnami/postgresql:11.15.0"
33
- restart: unless-stopped
34
- volumes:
35
- - postgres-data:/bitnami/postgresql
36
- environment:
37
- POSTGRESQL_USERNAME: admin
38
- POSTGRESQL_DATABASE: rasa
39
- POSTGRESQL_PASSWORD: postgres
40
-
41
- duckling:
42
- restart: unless-stopped
43
- image: "rasa/duckling:0.2.0.2"
44
- expose:
45
- - "8000"
46
- command: ["duckling-example-exe", "--no-access-log", "--no-error-log"]
47
-
48
- redis:
49
- restart: unless-stopped
50
- image: "bitnami/redis:6.2.7"
51
- environment:
52
- REDIS_PASSWORD: "redis"
53
- expose:
54
- - "6379"
55
-
56
- volumes:
57
- postgres-data: null
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.dockerignore DELETED
@@ -1,11 +0,0 @@
1
- docker*
2
- docs
3
- .git*
4
- **/*.pyc
5
- **/__pycache__
6
- !docker/configs
7
- rasa/tests
8
- rasa/scripts
9
- data/
10
- examples/
11
- docker-data/*
 
 
 
 
 
 
 
 
 
 
 
 
AI/.env DELETED
@@ -1 +0,0 @@
1
- TIMES=2
 
 
AI/.gitattributes DELETED
@@ -1,35 +0,0 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/ISSUE_TEMPLATE.md DELETED
@@ -1,2 +0,0 @@
1
- <!-- IF YOU ARE ASKING A USAGE QUESTION (E.G. "HOW DO I DO XYZ") PLEASE POST
2
- YOUR QUESTION ON https://forum.rasa.com INSTEAD -->
 
 
 
AI/.github/ISSUE_TEMPLATE/bug_report.md DELETED
@@ -1,34 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us reproduce and fix the issue
4
- ---
5
-
6
- **Before submitting a bug, please make sure the issue hasn't been already addressed by searching through the [FAQs](https://ai.meta.com/llama/faq/) and [existing/past issues](https://github.com/facebookresearch/llama/issues)**
7
-
8
- ## Describe the bug
9
- <Please provide a clear and concise description of what the bug is. If relevant, please include a _minimal_ (least lines of code necessary) _reproducible_ (running this will give us the same result as you get) code snippet. Make sure to include the relevant imports.>
10
-
11
- ### Minimal reproducible example
12
- <Remember to wrap the code in ```` ```triple-quotes blocks``` ````>
13
-
14
- ```python
15
- # sample code to repro the bug
16
- ```
17
-
18
- ### Output
19
- <Remember to wrap the output in ```` ```triple-quotes blocks``` ````>
20
-
21
- ```
22
- <paste stacktrace and other outputs here>
23
- ```
24
-
25
- ## Runtime Environment
26
- - Model: [eg: `meta-llama-3-8b-instruct`]
27
- - Using via huggingface?: [yes/no]
28
- - OS: [eg. Linux/Ubuntu, Windows]
29
- - GPU VRAM:
30
- - Number of GPUs:
31
- - GPU Make: [eg: Nvidia, AMD, Intel]
32
-
33
- **Additional context**
34
- Add any other context about the problem or environment here.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/ISSUE_TEMPLATE/config.yml DELETED
@@ -1,11 +0,0 @@
1
- blank_issues_enabled: false
2
- contact_links:
3
- - name: Bug Report
4
- url: https://rasa-open-source.atlassian.net/browse/OSS
5
- about: Create a report to help us improve https://rasa-open-source.atlassian.net/browse/OSS
6
- - name: Feature request
7
- url: https://rasa-open-source.atlassian.net/browse/OSS
8
- about: Suggest an idea on how to improve Rasa https://rasa-open-source.atlassian.net/browse/OSS
9
- - name: Ask a question
10
- url: https://forum.rasa.com/
11
- about: If you have a "How do I?" question please ask in the forum https://forum.rasa.com
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/PULL_REQUEST_AUTOMATIC_TEMPLATE.md DELETED
@@ -1,10 +0,0 @@
1
- :bulb: This pull request was created automatically to merge a release branch back into the `main` branch.
2
-
3
- The changes you see here should have already been reviewed by someone, and shouldn't need an extra
4
- review. Nonetheless, if you notice something that needs to be addressed, please reach out to the person
5
- responsible for the original changes. In case additional changes need to be made, they need to target the release branch
6
- (not this pull request nor `main`).
7
-
8
- :auto_rickshaw: This PR should be merged automatically once it has been approved. If it doesn't happen:
9
- - [ ] Handle merge conflicts
10
- - [ ] Fix build errors
 
 
 
 
 
 
 
 
 
 
 
AI/.github/PULL_REQUEST_TEMPLATE.md DELETED
@@ -1,8 +0,0 @@
1
- **Proposed changes**:
2
- - ...
3
-
4
- **Status (please check what you already did)**:
5
- - [ ] added some tests for the functionality
6
- - [ ] updated the documentation
7
- - [ ] updated the changelog (please check [changelog](https://github.com/RasaHQ/rasa/tree/main/changelog) for instructions)
8
- - [ ] reformat files using `black` (please check [Readme](https://github.com/RasaHQ/rasa#code-style) for instructions)
 
 
 
 
 
 
 
 
 
AI/.github/change_filters.yml DELETED
@@ -1,28 +0,0 @@
1
- backend:
2
- - 'pyproject.toml'
3
- - 'poetry.lock'
4
- - 'rasa/**/*'
5
- - 'tests/**/*'
6
- - 'data/**/*'
7
- - 'examples/**/*'
8
- - 'Makefile'
9
- - '.github/workflows/continous-integration.yml'
10
- - '.github/workflows/security-scans.yml'
11
-
12
- docker:
13
- - 'pyproject.toml'
14
- - 'poetry.lock'
15
- - 'rasa/**/*'
16
- - 'docker/**/*'
17
- - 'Makefile'
18
-
19
- docs:
20
- - 'docs/**/*'
21
- - 'changelog/*'
22
- - 'CHANGELOG.mdx'
23
- - 'tests/docs/*'
24
- - 'data/**/*'
25
- - 'examples/**/*'
26
- - 'Makefile'
27
- - '.github/workflows/documentation.yml'
28
- - '.github/workflows/ci-docs-tests.yml'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/configs/mr-test-example.yaml DELETED
@@ -1,49 +0,0 @@
1
- ## Example configuration
2
- #################### syntax #################
3
- ## include:
4
- ## - dataset: ["<dataset_name>"]
5
- ## config: ["<configuration_name>"]
6
- #
7
- ## Example:
8
- ## include:
9
- ## - dataset: ["Carbon Bot"]
10
- ## config: ["Sparse + DIET(bow) + ResponseSelector(bow)"]
11
- #
12
- ## Shortcut:
13
- ## You can use the "all" shortcut to include all available configurations or datasets
14
- #
15
- ## Example: Use the "Sparse + EmbeddingIntent + ResponseSelector(bow)" configuration
16
- ## for all available datasets
17
- ## include:
18
- ## - dataset: ["all"]
19
- ## config: ["Sparse + DIET(bow) + ResponseSelector(bow)"]
20
- #
21
- ## Example: Use all available configurations for the "Carbon Bot" and "Sara" datasets
22
- ## and for the "Hermit" dataset use the "Sparse + DIET + ResponseSelector(T2T)" and
23
- ## "BERT + DIET + ResponseSelector(T2T)" configurations:
24
- ## include:
25
- ## - dataset: ["Carbon Bot", "Sara"]
26
- ## config: ["all"]
27
- ## - dataset: ["Hermit"]
28
- ## config: ["Sparse + DIET(seq) + ResponseSelector(t2t)", "BERT + DIET(seq) + ResponseSelector(t2t)"]
29
- #
30
- ## Example: Define a branch name to check-out for a dataset repository. Default branch is 'main'
31
- ## dataset_branch: "test-branch"
32
- ## include:
33
- ## - dataset: ["Carbon Bot", "Sara"]
34
- ## config: ["all"]
35
- #
36
- ## Example: Define number of repetitions. This will inform how often to repeat all runs defined in the include section. Default is 1
37
- ## num_repetitions: 2
38
- ## include:
39
- ## - dataset: ["Carbon Bot", "Sara"]
40
- ## config: ["Sparse + DIET(seq) + ResponseSelector(t2t)"]
41
- ##
42
- ## Shortcuts:
43
- ## You can use the "all" shortcut to include all available configurations or datasets.
44
- ## You can use the "all-nlu" shortcut to include all available NLU configurations or datasets.
45
- ## You can use the "all-core" shortcut to include all available core configurations or datasets.
46
-
47
- include:
48
- - dataset: ["Carbon Bot"]
49
- config: ["Sparse + DIET(bow) + ResponseSelector(bow)"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/configs/mr-test-schedule.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "body": "```yml\r\ninclude:\r\n - dataset: [\"all\"]\r\n config: [\"all\"]\r\n```"
3
- }
 
 
 
 
AI/.github/configs/tf-cuda.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "default_image_tag": "latest",
3
- "config": [
4
- {
5
- "TF": "2.3",
6
- "IMAGE_TAG": "cuda-10.1-cudnn7"
7
- },
8
- {
9
- "TF": "2.5",
10
- "IMAGE_TAG": "cuda-11.2.0-cudnn8"
11
- },
12
- {
13
- "TF": "2.6",
14
- "IMAGE_TAG": "cuda-11.2.0-cudnn8"
15
- },
16
- {
17
- "TF": "2.7",
18
- "IMAGE_TAG": "cuda-11.2.0-cudnn8"
19
- },
20
- {
21
- "TF": "2.11",
22
- "IMAGE_TAG": "cuda-11.2.0-cudnn8"
23
- }
24
- ]
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/dependabot.yml DELETED
@@ -1,34 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: pip
4
- directory: "/"
5
- schedule:
6
- interval: weekly
7
- time: "13:00"
8
- pull-request-branch-name:
9
- separator: "-"
10
- open-pull-requests-limit: 10
11
- labels:
12
- - type:dependencies
13
- - release:main
14
- ignore:
15
- - dependency-name: prompt-toolkit
16
- versions:
17
- - "> 2.0.10"
18
- - dependency-name: pytest-asyncio
19
- versions:
20
- - "> 0.10.0"
21
-
22
- - package-ecosystem: github-actions
23
- directory: "/"
24
- schedule:
25
- interval: weekly
26
- day: monday
27
- time: "12:00"
28
- pull-request-branch-name:
29
- separator: "-"
30
- open-pull-requests-limit: 10
31
- reviewers:
32
- - RasaHQ/infrastructure-squad
33
- labels:
34
- - type:dependencies
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/matchers/flake8-error-matcher.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "problemMatcher": [
3
- {
4
- "owner": "flake8-error",
5
- "severity": "error",
6
- "pattern": [
7
- {
8
- "regexp": "^([^:]+):(\\d+):(\\d+):\\s+([DCFNWE]\\d+\\s+.+)$",
9
- "file": 1,
10
- "line": 2,
11
- "column": 3,
12
- "message": 4
13
- }
14
- ]
15
- }
16
- ]
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/no-response.yml DELETED
@@ -1,12 +0,0 @@
1
- # Configuration for probot-no-response - https://github.com/probot/no-response
2
-
3
- # Number of days of inactivity before an Issue is closed for lack of response
4
- daysUntilClose: 14
5
- # Label requiring a response
6
- responseRequiredLabel: status:more-details-needed
7
- # Comment to post when closing an Issue for lack of response. Set to `false` to disable
8
- closeComment: >
9
- This issue has been automatically closed because there has been no response
10
- to our request for more information from the original author. Without this,
11
- we don't have enough information to help you. Please comment below with the
12
- requested information if you still need help.
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/poetry_version.txt DELETED
@@ -1,2 +0,0 @@
1
- # The poetry version is stored in a separate file due to the https://github.com/python-poetry/poetry/issues/3316
2
- poetry-version=1.4.2
 
 
 
AI/.github/runner/github-runner-deployment.yaml.tmpl DELETED
@@ -1,74 +0,0 @@
1
- # GitHub Runner deployment - uses to deploy a github runner
2
- # which is used by the CI for model regression tests
3
- apiVersion: apps/v1
4
- kind: Deployment
5
- metadata:
6
- name: github-runner-{{getenv "GITHUB_RUN_ID"}}
7
- namespace: github-runner
8
- labels:
9
- app: github-runner
10
- pod: github-runner-{{getenv "GITHUB_RUN_ID"}}
11
- spec:
12
- replicas: {{getenv "NUM_REPLICAS" "1"}}
13
- selector:
14
- matchLabels:
15
- app: github-runner
16
- pod: github-runner-{{getenv "GITHUB_RUN_ID"}}
17
- template:
18
- metadata:
19
- labels:
20
- app: github-runner
21
- pod: github-runner-{{getenv "GITHUB_RUN_ID"}}
22
- spec:
23
- priorityClassName: high-priority
24
- automountServiceAccountToken: false
25
- terminationGracePeriodSeconds: 720
26
- containers:
27
- - name: github-runner
28
- image: {{getenv "GH_RUNNER_IMAGE"}}:{{getenv "GH_RUNNER_IMAGE_TAG" "latest"}}
29
- imagePullPolicy: Always
30
- livenessProbe:
31
- initialDelaySeconds: 30
32
- periodSeconds: 15
33
- failureThreshold: 3
34
- exec:
35
- command:
36
- - /bin/bash
37
- - -c
38
- - "if [[ `curl -sX GET -H \"Authorization: token ${GITHUB_PAT}\" \
39
- https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPOSITORY}/actions/runners | \
40
- jq -r '.runners[] | select(.name == \"'${POD_NAME}'\") | .status'` == \"offline\" ]]; then \
41
- echo \"The GitHub API returns offline status for the ${POD_NAME} runner\" && exit 1; fi"
42
- resources:
43
- limits:
44
- nvidia.com/gpu: 1
45
- requests:
46
- nvidia.com/gpu: 1
47
- memory: 10G
48
- env:
49
- - name: POD_NAME
50
- valueFrom:
51
- fieldRef:
52
- fieldPath: metadata.name
53
- # RUNNER_LABELS - defines labels
54
- # with which a github-runner will be registered
55
- - name: RUNNER_LABELS
56
- value: "self-hosted,gpu,kubernetes,{{getenv "GITHUB_RUN_ID"}}"
57
- # GITHUB_OWNER - a name of the repository owner
58
- - name: GITHUB_OWNER
59
- valueFrom:
60
- secretKeyRef:
61
- name: github-rasa
62
- key: owner
63
- # GITHUB_REPOSITORY - a name of the repository
64
- - name: GITHUB_REPOSITORY
65
- valueFrom:
66
- secretKeyRef:
67
- name: github-rasa
68
- key: repository
69
- # GITHUB_PAT - Personal Access Token
70
- - name: GITHUB_PAT
71
- valueFrom:
72
- secretKeyRef:
73
- name: github-rasa
74
- key: pat
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/download_pretrained.py DELETED
@@ -1,120 +0,0 @@
1
- import argparse
2
- import logging
3
- import time
4
- from typing import List, NamedTuple, Optional, Text
5
-
6
- from transformers import AutoTokenizer, TFAutoModel
7
-
8
- import rasa.shared.utils.io
9
- from rasa.nlu.utils.hugging_face.registry import (
10
- model_weights_defaults,
11
- model_class_dict,
12
- )
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
- COMP_NAME = "LanguageModelFeaturizer"
17
- DEFAULT_MODEL_NAME = "bert"
18
-
19
-
20
- class LmfSpec(NamedTuple):
21
- """Holds information about the LanguageModelFeaturizer."""
22
-
23
- model_name: Text
24
- model_weights: Text
25
- cache_dir: Optional[Text] = None
26
-
27
-
28
- def get_model_name_and_weights_from_config(
29
- config_path: str,
30
- ) -> List[LmfSpec]:
31
- config = rasa.shared.utils.io.read_config_file(config_path)
32
- logger.info(config)
33
- steps = config.get("pipeline", [])
34
-
35
- # Look for LanguageModelFeaturizer steps
36
- steps = list(filter(lambda x: x["name"] == COMP_NAME, steps))
37
-
38
- lmf_specs = []
39
- for lmfeat_step in steps:
40
- if "model_name" not in lmfeat_step:
41
- if "model_weights" in lmfeat_step:
42
- model_weights = lmfeat_step["model_weights"]
43
- raise KeyError(
44
- "When model_name is not given, then model_weights cannot be set. "
45
- f"Here, model_weigths is set to {model_weights}"
46
- )
47
- model_name = DEFAULT_MODEL_NAME
48
- model_weights = model_weights_defaults[DEFAULT_MODEL_NAME]
49
- else:
50
- model_name = lmfeat_step["model_name"]
51
-
52
- if model_name not in model_class_dict:
53
- raise KeyError(
54
- f"'{model_name}' not a valid model name. Choose from "
55
- f"{list(model_class_dict.keys())!s} or create"
56
- f"a new class inheriting from this class to support your model."
57
- )
58
-
59
- model_weights = lmfeat_step.get("model_weights")
60
- if not model_weights:
61
- logger.info(
62
- f"Model weights not specified. Will choose default model "
63
- f"weights: {model_weights_defaults[model_name]}"
64
- )
65
- model_weights = model_weights_defaults[model_name]
66
- cache_dir = lmfeat_step.get("cache_dir", None)
67
- lmf_specs.append(LmfSpec(model_name, model_weights, cache_dir))
68
-
69
- return lmf_specs
70
-
71
-
72
- def instantiate_to_download(comp: LmfSpec) -> None:
73
- """Instantiates Auto class instances, but only to download."""
74
-
75
- _ = AutoTokenizer.from_pretrained(comp.model_weights, cache_dir=comp.cache_dir)
76
- logger.info("Done with AutoTokenizer, now doing TFAutoModel")
77
- _ = TFAutoModel.from_pretrained(comp.model_weights, cache_dir=comp.cache_dir)
78
-
79
-
80
- def download(config_path: str):
81
- lmf_specs = get_model_name_and_weights_from_config(config_path)
82
-
83
- if not lmf_specs:
84
- logger.info(f"No {COMP_NAME} found, therefore, skipping download")
85
- return
86
-
87
- for lmf_spec in lmf_specs:
88
- logger.info(
89
- f"model_name: {lmf_spec.model_name}, "
90
- f"model_weights: {lmf_spec.model_weights}, "
91
- f"cache_dir: {lmf_spec.cache_dir}"
92
- )
93
- start = time.time()
94
-
95
- instantiate_to_download(lmf_spec)
96
-
97
- duration_in_sec = time.time() - start
98
- logger.info(f"Instantiating Auto classes takes {duration_in_sec:.2f}seconds")
99
-
100
-
101
- def create_argument_parser() -> argparse.ArgumentParser:
102
- """Downloads pretrained models, i.e., Huggingface weights."""
103
- parser = argparse.ArgumentParser(
104
- description="Downloads pretrained models, i.e., Huggingface weights, "
105
- "e.g. path to bert_diet_responset2t.yml"
106
- )
107
- parser.add_argument(
108
- "-c",
109
- "--config",
110
- type=str,
111
- required=True,
112
- help="The path to the config yaml file.",
113
- )
114
- return parser
115
-
116
-
117
- if __name__ == "__main__":
118
- arg_parser = create_argument_parser()
119
- cmdline_args = arg_parser.parse_args()
120
- download(cmdline_args.config)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/mr_generate_summary.py DELETED
@@ -1,55 +0,0 @@
1
- # Collect the results of the various model test runs which are done as part of
2
- # the model regression CI pipeline and dump them as a single file artifact.
3
- # This artifact will the then be published at the end of the tests.
4
- from collections import defaultdict
5
- import json
6
- import os
7
- from pathlib import Path
8
- from typing import Dict, List
9
-
10
-
11
- def combine_result(
12
- result1: Dict[str, dict], result2: Dict[str, Dict[str, Dict]]
13
- ) -> Dict[str, Dict[str, List]]:
14
- """Combines 2 result dicts to accumulated dict of the same format.
15
-
16
- Args:
17
- result1: dict of key: dataset, value: (dict of key: config, value: list of res)
18
- Example: {
19
- "Carbon Bot": {
20
- "Sparse + DIET(bow) + ResponseSelector(bow)": [{
21
- "Entity Prediction": {
22
- "macro avg": {
23
- "f1-score": 0.88,
24
- }
25
- },
26
- "test_run_time": "47s",
27
- }]
28
- }
29
- }
30
- result2: dict of key: dataset, value: (dict of key: config, value: list of res)
31
-
32
- Returns:
33
- dict of key: dataset, and value: (dict of key: config value: list of results)
34
- """
35
- combined_dict = defaultdict(lambda: defaultdict(list))
36
- for new_dict in [result1, result2]:
37
- for dataset, results_for_dataset in new_dict.items():
38
- for config, res in results_for_dataset.items():
39
- for res_dict in res:
40
- combined_dict[dataset][config].append(res_dict)
41
- return combined_dict
42
-
43
-
44
- if __name__ == "__main__":
45
- data = {}
46
- reports_dir = Path(os.environ["REPORTS_DIR"])
47
- reports_paths = list(reports_dir.glob("*/report.json"))
48
-
49
- for report_path in reports_paths:
50
- report_dict = json.load(open(report_path))
51
- data = combine_result(data, report_dict)
52
-
53
- summary_file = os.environ["SUMMARY_FILE"]
54
- with open(summary_file, "w") as f:
55
- json.dump(data, f, sort_keys=True, indent=2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/mr_publish_results.py DELETED
@@ -1,293 +0,0 @@
1
- # Send model regression test results to Datadog
2
- # with a summary of all test results.
3
- # Also write them into a report file.
4
- import copy
5
- import datetime
6
- import json
7
- import os
8
- from typing import Any, Dict, List, Text, Tuple
9
-
10
- from datadog_api_client.v1 import ApiClient, Configuration
11
- from datadog_api_client.v1.api.metrics_api import MetricsApi
12
- from datadog_api_client.v1.model.metrics_payload import MetricsPayload
13
- from datadog_api_client.v1.model.point import Point
14
- from datadog_api_client.v1.model.series import Series
15
-
16
- DD_ENV = "rasa-regression-tests"
17
- DD_SERVICE = "rasa"
18
- METRIC_RUNTIME_PREFIX = "rasa.perf.benchmark."
19
- METRIC_ML_PREFIX = "rasa.perf.ml."
20
- CONFIG_REPOSITORY = "training-data"
21
-
22
- TASK_MAPPING = {
23
- "intent_report.json": "intent_classification",
24
- "CRFEntityExtractor_report.json": "entity_prediction",
25
- "DIETClassifier_report.json": "entity_prediction",
26
- "response_selection_report.json": "response_selection",
27
- "story_report.json": "story_prediction",
28
- }
29
-
30
- METRICS = {
31
- "test_run_time": "TEST_RUN_TIME",
32
- "train_run_time": "TRAIN_RUN_TIME",
33
- "total_run_time": "TOTAL_RUN_TIME",
34
- }
35
-
36
- MAIN_TAGS = {
37
- "config": "CONFIG",
38
- "dataset": "DATASET_NAME",
39
- }
40
-
41
- OTHER_TAGS = {
42
- "config_repository_branch": "DATASET_REPOSITORY_BRANCH",
43
- "dataset_commit": "DATASET_COMMIT",
44
- "accelerator_type": "ACCELERATOR_TYPE",
45
- "type": "TYPE",
46
- "index_repetition": "INDEX_REPETITION",
47
- "host_name": "HOST_NAME",
48
- }
49
-
50
- GIT_RELATED_TAGS = {
51
- "pr_id": "PR_ID",
52
- "pr_url": "PR_URL",
53
- "github_event": "GITHUB_EVENT_NAME",
54
- "github_run_id": "GITHUB_RUN_ID",
55
- "github_sha": "GITHUB_SHA",
56
- "workflow": "GITHUB_WORKFLOW",
57
- }
58
-
59
-
60
- def create_dict_of_env(name_to_env: Dict[Text, Text]) -> Dict[Text, Text]:
61
- return {name: os.environ[env_var] for name, env_var in name_to_env.items()}
62
-
63
-
64
- def _get_is_external_and_dataset_repository_branch() -> Tuple[bool, Text]:
65
- is_external = os.environ["IS_EXTERNAL"]
66
- dataset_repository_branch = os.environ["DATASET_REPOSITORY_BRANCH"]
67
- if is_external.lower() in ("yes", "true", "t", "1"):
68
- is_external_flag = True
69
- dataset_repository_branch = os.environ["EXTERNAL_DATASET_REPOSITORY_BRANCH"]
70
- else:
71
- is_external_flag = False
72
- return is_external_flag, dataset_repository_branch
73
-
74
-
75
- def prepare_datasetrepo_and_external_tags() -> Dict[Text, Any]:
76
- is_external, dataset_repo_branch = _get_is_external_and_dataset_repository_branch()
77
- return {
78
- "dataset_repository_branch": dataset_repo_branch,
79
- "external_dataset_repository": is_external,
80
- }
81
-
82
-
83
- def prepare_dsrepo_and_external_tags_as_str() -> Dict[Text, Text]:
84
- return {
85
- "dataset_repository_branch": os.environ["DATASET_REPOSITORY_BRANCH"],
86
- "external_dataset_repository": os.environ["IS_EXTERNAL"],
87
- }
88
-
89
-
90
- def transform_to_seconds(duration: Text) -> float:
91
- """Transform string (with hours, minutes, and seconds) to seconds.
92
-
93
- Args:
94
- duration: Examples: '1m27s', '1m27.3s', '27s', '1h27s', '1h1m27s'
95
-
96
- Raises:
97
- Exception: If the input is not supported.
98
-
99
- Returns:
100
- Duration converted in seconds.
101
- """
102
- h_split = duration.split("h")
103
- if len(h_split) == 1:
104
- rest = h_split[0]
105
- hours = 0
106
- else:
107
- hours = int(h_split[0])
108
- rest = h_split[1]
109
- m_split = rest.split("m")
110
- if len(m_split) == 2:
111
- minutes = int(m_split[0])
112
- seconds = float(m_split[1].rstrip("s"))
113
- elif len(m_split) == 1:
114
- minutes = 0
115
- seconds = float(m_split[0].rstrip("s"))
116
- else:
117
- raise Exception(f"Unsupported duration: {duration}")
118
- overall_seconds = hours * 60 * 60 + minutes * 60 + seconds
119
- return overall_seconds
120
-
121
-
122
- def prepare_ml_metric(result: Dict[Text, Any]) -> Dict[Text, float]:
123
- """Converts a nested result dict into a list of metrics.
124
-
125
- Args:
126
- result: Example
127
- {'accuracy': 1.0,
128
- 'weighted avg': {
129
- 'precision': 1.0, 'recall': 1.0, 'f1-score': 1.0, 'support': 28
130
- }
131
- }
132
-
133
- Returns:
134
- Dict of metric name and metric value
135
- """
136
- metrics_ml = {}
137
- result = copy.deepcopy(result)
138
- result.pop("file_name", None)
139
- task = result.pop("task", None)
140
-
141
- for metric_name, metric_value in result.items():
142
- if isinstance(metric_value, float):
143
- metric_full_name = f"{task}.{metric_name}"
144
- metrics_ml[metric_full_name] = float(metric_value)
145
- elif isinstance(metric_value, dict):
146
- for mname, mval in metric_value.items():
147
- metric_full_name = f"{task}.{metric_name}.{mname}"
148
- metrics_ml[metric_full_name] = float(mval)
149
- else:
150
- raise Exception(
151
- f"metric_value {metric_value} has",
152
- f"unexpected type {type(metric_value)}",
153
- )
154
- return metrics_ml
155
-
156
-
157
- def prepare_ml_metrics(results: List[Dict[Text, Any]]) -> Dict[Text, float]:
158
- metrics_ml = {}
159
- for result in results:
160
- new_metrics_ml = prepare_ml_metric(result)
161
- metrics_ml.update(new_metrics_ml)
162
-
163
- return metrics_ml
164
-
165
-
166
- def prepare_datadog_tags() -> List[Text]:
167
- tags = {
168
- "env": DD_ENV,
169
- "service": DD_SERVICE,
170
- "branch": os.environ["BRANCH"],
171
- "config_repository": CONFIG_REPOSITORY,
172
- **prepare_dsrepo_and_external_tags_as_str(),
173
- **create_dict_of_env(MAIN_TAGS),
174
- **create_dict_of_env(OTHER_TAGS),
175
- **create_dict_of_env(GIT_RELATED_TAGS),
176
- }
177
- tags_list = [f"{k}:{v}" for k, v in tags.items()]
178
- return tags_list
179
-
180
-
181
- def send_to_datadog(results: List[Dict[Text, Any]]) -> None:
182
- """Sends metrics to datadog."""
183
- # Prepare
184
- tags_list = prepare_datadog_tags()
185
- timestamp = datetime.datetime.now().timestamp()
186
- series = []
187
-
188
- # Send metrics about runtime
189
- metrics_runtime = create_dict_of_env(METRICS)
190
- for metric_name, metric_value in metrics_runtime.items():
191
- overall_seconds = transform_to_seconds(metric_value)
192
- series.append(
193
- Series(
194
- metric=f"{METRIC_RUNTIME_PREFIX}{metric_name}.gauge",
195
- type="gauge",
196
- points=[Point([timestamp, overall_seconds])],
197
- tags=tags_list,
198
- )
199
- )
200
-
201
- # Send metrics about ML model performance
202
- metrics_ml = prepare_ml_metrics(results)
203
- for metric_name, metric_value in metrics_ml.items():
204
- series.append(
205
- Series(
206
- metric=f"{METRIC_ML_PREFIX}{metric_name}.gauge",
207
- type="gauge",
208
- points=[Point([timestamp, float(metric_value)])],
209
- tags=tags_list,
210
- )
211
- )
212
-
213
- body = MetricsPayload(series=series)
214
- with ApiClient(Configuration()) as api_client:
215
- api_instance = MetricsApi(api_client)
216
- response = api_instance.submit_metrics(body=body)
217
- if response.get("status") != "ok":
218
- print(response)
219
-
220
-
221
- def read_results(file: Text) -> Dict[Text, Any]:
222
- with open(file) as json_file:
223
- data = json.load(json_file)
224
-
225
- keys = [
226
- "accuracy",
227
- "weighted avg",
228
- "macro avg",
229
- "micro avg",
230
- "conversation_accuracy",
231
- ]
232
- result = {key: data[key] for key in keys if key in data}
233
-
234
- return result
235
-
236
-
237
- def get_result(file_name: Text, file: Text) -> Dict[Text, Any]:
238
- result = read_results(file)
239
- result["file_name"] = file_name
240
- result["task"] = TASK_MAPPING[file_name]
241
- return result
242
-
243
-
244
- def send_all_to_datadog() -> None:
245
- results = []
246
- for dirpath, dirnames, files in os.walk(os.environ["RESULT_DIR"]):
247
- for f in files:
248
- if any(f.endswith(valid_name) for valid_name in TASK_MAPPING.keys()):
249
- result = get_result(f, os.path.join(dirpath, f))
250
- results.append(result)
251
- send_to_datadog(results)
252
-
253
-
254
- def generate_json(file: Text, task: Text, data: dict) -> dict:
255
- config = os.environ["CONFIG"]
256
- dataset = os.environ["DATASET_NAME"]
257
-
258
- if dataset not in data:
259
- data = {dataset: {config: []}, **data}
260
- elif config not in data[dataset]:
261
- data[dataset] = {config: [], **data[dataset]}
262
-
263
- assert len(data[dataset][config]) <= 1
264
-
265
- data[dataset][config] = [
266
- {
267
- "config_repository": CONFIG_REPOSITORY,
268
- **prepare_datasetrepo_and_external_tags(),
269
- **create_dict_of_env(METRICS),
270
- **create_dict_of_env(OTHER_TAGS),
271
- **(data[dataset][config][0] if data[dataset][config] else {}),
272
- task: read_results(file),
273
- }
274
- ]
275
- return data
276
-
277
-
278
- def create_report_file() -> None:
279
- data = {}
280
- for dirpath, dirnames, files in os.walk(os.environ["RESULT_DIR"]):
281
- for f in files:
282
- if f not in TASK_MAPPING.keys():
283
- continue
284
-
285
- data = generate_json(os.path.join(dirpath, f), TASK_MAPPING[f], data)
286
-
287
- with open(os.environ["SUMMARY_FILE"], "w") as f:
288
- json.dump(data, f, sort_keys=True, indent=2)
289
-
290
-
291
- if __name__ == "__main__":
292
- send_all_to_datadog()
293
- create_report_file()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/start_dd_agent.sh DELETED
@@ -1,79 +0,0 @@
1
- #!/bin/bash
2
-
3
- DD_API_KEY=$1
4
- ACCELERATOR_TYPE=$2
5
- NVML_INTERVAL_IN_SEC=${3:-15} # 15 seconds are the default interval
6
-
7
- # Install Datadog system agent
8
- DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=$DD_API_KEY DD_SITE="datadoghq.eu" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"
9
- DATADOG_YAML_PATH=/etc/datadog-agent/datadog.yaml
10
- sudo chmod 666 $DATADOG_YAML_PATH
11
-
12
- # Associate metrics with tags and env
13
- {
14
- echo "env: rasa-regression-tests"
15
- echo "tags:"
16
- echo "- service:rasa"
17
- echo "- accelerator_type:${ACCELERATOR_TYPE}"
18
- echo "- dataset:${DATASET_NAME}"
19
- echo "- config:${CONFIG}"
20
- echo "- dataset_commit:${DATASET_COMMIT}"
21
- echo "- branch:${BRANCH}"
22
- echo "- github_sha:${GITHUB_SHA}"
23
- echo "- pr_id:${PR_ID:-schedule}"
24
- echo "- pr_url:${PR_URL:-schedule}"
25
- echo "- type:${TYPE}"
26
- echo "- dataset_repository_branch:${DATASET_REPOSITORY_BRANCH}"
27
- echo "- external_dataset_repository:${IS_EXTERNAL:-none}"
28
- echo "- config_repository:training-data"
29
- echo "- config_repository_branch:${DATASET_REPOSITORY_BRANCH}"
30
- echo "- workflow:${GITHUB_WORKFLOW:-none}"
31
- echo "- github_run_id:${GITHUB_RUN_ID:-none}"
32
- echo "- github_event:${GITHUB_EVENT_NAME:-none}"
33
- echo "- index_repetition:${INDEX_REPETITION}"
34
- echo "- host_name:${HOST_NAME}"
35
- echo ""
36
- echo "apm_config:"
37
- echo " enabled: true"
38
- echo "process_config:"
39
- echo " enabled: false"
40
- echo "use_dogstatsd: true"
41
- } >> $DATADOG_YAML_PATH
42
-
43
- # Enable system_core integration
44
- sudo mv /etc/datadog-agent/conf.d/system_core.d/conf.yaml.example /etc/datadog-agent/conf.d/system_core.d/conf.yaml
45
-
46
- if [[ "${ACCELERATOR_TYPE}" == "GPU" ]]; then
47
- # Install and enable NVML integration
48
- sudo datadog-agent integration --allow-root install -t datadog-nvml==1.0.1
49
- sudo -u dd-agent -H /opt/datadog-agent/embedded/bin/pip3 install grpcio pynvml
50
- NVML_CONF_FPATH="/etc/datadog-agent/conf.d/nvml.d/conf.yaml"
51
- sudo mv "${NVML_CONF_FPATH}.example" ${NVML_CONF_FPATH}
52
- if [[ "${NVML_INTERVAL_IN_SEC}" != 15 ]]; then
53
- # Append a line to the NVML config file
54
- sudo echo " min_collection_interval: ${NVML_INTERVAL_IN_SEC}" | sudo tee -a ${NVML_CONF_FPATH} > /dev/null
55
- fi
56
- fi
57
-
58
- # Apply changes
59
- sudo service datadog-agent stop
60
-
61
- # Restart agent (such that GPU/NVML metrics are collected)
62
- # Adusted code from /etc/init/datadog-agent.conf
63
- INSTALL_DIR="/opt/datadog-agent"
64
- AGENTPATH="$INSTALL_DIR/bin/agent/agent"
65
- PIDFILE="$INSTALL_DIR/run/agent.pid"
66
- AGENT_USER="dd-agent"
67
- LD_LIBRARY_PATH="/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64"
68
- sudo -E start-stop-daemon --start --background --quiet --chuid $AGENT_USER --pidfile $PIDFILE --user $AGENT_USER --startas /bin/bash -- -c "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $AGENTPATH run -p $PIDFILE"
69
-
70
- # Adusted code from /etc/init/datadog-agent-process.conf
71
- TRACE_AGENTPATH="$INSTALL_DIR/embedded/bin/trace-agent"
72
- TRACE_PIDFILE="$INSTALL_DIR/run/trace-agent.pid"
73
- sudo -E start-stop-daemon --start --background --quiet --chuid $AGENT_USER --pidfile $TRACE_PIDFILE --user $AGENT_USER --startas /bin/bash -- -c "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $TRACE_AGENTPATH --config $DATADOG_YAML_PATH --pid $TRACE_PIDFILE"
74
-
75
- # Adusted code from /etc/init/datadog-agent-trace.conf
76
- PROCESS_AGENTPATH="$INSTALL_DIR/embedded/bin/process-agent"
77
- PROCESS_PIDFILE="$INSTALL_DIR/run/process-agent.pid"
78
- SYSTEM_PROBE_YAML="/etc/datadog-agent/system-probe.yaml"
79
- sudo -E start-stop-daemon --start --background --quiet --chuid $AGENT_USER --pidfile $PROCESS_PIDFILE --user $AGENT_USER --startas /bin/bash -- -c "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $PROCESS_AGENTPATH --config=$DATADOG_YAML_PATH --sysprobe-config=$SYSTEM_PROBE_YAML --pid=$PROCESS_PIDFILE"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/validate_cpu.py DELETED
@@ -1,14 +0,0 @@
1
- import sys
2
-
3
- import tensorflow as tf
4
-
5
-
6
- def check_gpu_not_available():
7
- num_gpus = len(tf.config.list_physical_devices("GPU"))
8
- print(f"Num GPUs Available: {num_gpus}")
9
- if num_gpus > 0:
10
- sys.exit(1)
11
-
12
-
13
- if __name__ == "__main__":
14
- check_gpu_not_available()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/scripts/validate_gpus.py DELETED
@@ -1,14 +0,0 @@
1
- import sys
2
-
3
- import tensorflow as tf
4
-
5
-
6
- def check_gpu_available():
7
- num_gpus = len(tf.config.list_physical_devices("GPU"))
8
- print(f"Num GPUs Available: {num_gpus}")
9
- if num_gpus <= 0:
10
- sys.exit(1)
11
-
12
-
13
- if __name__ == "__main__":
14
- check_gpu_available()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/stale.yml DELETED
@@ -1,18 +0,0 @@
1
- # Number of days of inactivity before an issue becomes stale
2
- daysUntilStale: 90
3
- # Label to use when marking an issue as stale
4
- staleLabel: stale
5
-
6
- pulls:
7
- # Give more time before closing PRs
8
- daysUntilClose: 21
9
- # Comment to post when marking a PR as stale. Set to `false` to disable
10
- markComment: >
11
- This PR has been automatically marked as stale because it has not had
12
- recent activity. It will be closed if no further activity occurs. Thank you
13
- for your contributions.
14
- # Comment to post when closing a stale PR. Set to `false` to disable
15
- closeComment: >
16
- This PR has been automatically closed due to inactivity. Please reopen
17
- this PR or a new one if you plan to follow-up on it. Thank you for your
18
- contributions.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/README.md DELETED
@@ -1,63 +0,0 @@
1
- # gomplate templates for GitHub Actions
2
-
3
- This document describes gomplate templates use for GitHub Actions.
4
-
5
- ## Requirements
6
-
7
- You have to have installed [gomplate](https://docs.gomplate.ca/installing/) tool in order to render a template file.
8
-
9
- > gomplate is a template renderer which supports a growing list of datastores, such as: JSON (including EJSON - encrypted JSON), YAML, AWS EC2 metadata, BoltDB, Hashicorp Consul and Hashicorp Vault secrets.
10
-
11
- ## Templates
12
-
13
- Below you can find a list of templates with their description and the commands to render them.
14
-
15
- ### `configuration_variables.tmpl`
16
-
17
- The template maps dataset name and configuration name for the model regression tests into paths where files are located. As a result, the template returns two environment variables `DATASET` and `CONFIG` which contain paths to file/directory.
18
-
19
- #### How to run locally
20
-
21
- ```shell
22
- gomplate -d mapping=<path_to_json_file_with_mapping> -f .github/templates/configuration_variables.tmpl
23
- ```
24
-
25
- ### `model_regression_test_config_comment.tmpl`
26
-
27
- The template returns a comment message which is used as a help description in a PR. The template reads the `.github/configs/mr-test-example.yaml` file and include it as example content.
28
-
29
- The help message is triggered by adding `status:model-regression-tests` label.
30
- Comment with a help message is added if a PR doesn't contain a comment with a configuration for the model regression tests.
31
-
32
- #### How to run locally
33
-
34
- ```shell
35
- gomplate -f .github/templates/model_regression_test_config_comment.tmpl
36
- ```
37
-
38
- The template uses the `GITHUB_ACTOR` environment variable, you have to export the variable before executing the command.
39
-
40
- ### `model_regression_test_config_to_json.tmpl`
41
-
42
- The template reads an issue/a PR comment and transforms a YAML code block into JSON.
43
-
44
- #### How to run locally
45
-
46
- ```shell
47
- gomplate -d github=https://api.github.com/repos/${{ github.repository }}/issues/comments/${{ comment-id }} -H 'github=Authorization:token ${{ secrets.GITHUB_TOKEN }}' -f .github/templates/model_regression_test_config_to_json.tmpl
48
- ```
49
-
50
- ### `model_regression_test_results.tmpl`
51
-
52
- The template reads a file with a report (the report file is available as an artifact in the model regression tests workflow) and returns markdown table with a summary of tests.
53
-
54
- #### How to run locally
55
-
56
- ```shell
57
- gomplate -d data=report.json -d results_main=report_main.json -f .github/templates/model_regression_test_results.tmpl
58
- ```
59
-
60
- In order to be able to use the `.github/templates/model_regression_test_results.tmpl` template you need the following files:
61
-
62
- - `report.json` - the file with a report generated by the `CI - Model Regression` workflow run in a PR. The report is available to download as an artifact in the workflow related to the PR.
63
- - `report_main.json` - the file with a report generated by the `CI - Model Regression` workflow that is triggered on schedule event. A list of the workflows that you can download an artifact from, can be found [here](https://github.com/RasaHQ/rasa/actions?query=workflow%3A%22CI+-+Model+Regression%22+event%3Aschedule).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/configuration_variables.tmpl DELETED
@@ -1,43 +0,0 @@
1
- {{- /*
2
-
3
- The template maps dataset name and configuration name for the model
4
- regression tests into paths where files are located. As a result,
5
- the template returns two environment variables `DATASET` and `CONFIG`
6
- which contain paths to file/directory.
7
-
8
- */ -}}
9
- {{- $mapping := (datasource "mapping") -}}
10
- {{- $dataset := (index $mapping.datasets (getenv "DATASET_NAME")) -}}
11
- {{- $config := $mapping.configurations -}}
12
- {{- if has $dataset "repository" }}
13
- export DATASET="{{ $dataset.repository }}"
14
- export IS_EXTERNAL="true"
15
- echo "::add-mask::{{ $dataset.repository }}"
16
- {{ if has $dataset "repository_branch" }}
17
- export EXTERNAL_DATASET_REPOSITORY_BRANCH="{{ $dataset.repository_branch }}"
18
- {{ else }}
19
- export EXTERNAL_DATASET_REPOSITORY_BRANCH="main"
20
- {{ end }}
21
- {{- else if has $dataset "path" }}
22
- export DATASET="{{ $dataset.path }}"
23
- export IS_EXTERNAL="false"
24
- echo "::add-mask::{{ $dataset.path }}"
25
- {{ end }}
26
-
27
- {{- if has $dataset "train" }}
28
- export TRAIN_DIR="{{ $dataset.train }}"
29
- {{ end }}
30
- {{- if has $dataset "test" }}
31
- export TEST_DIR="{{ $dataset.test }}"
32
- {{ end }}
33
- {{- if has $dataset "domain" }}
34
- export DOMAIN_FILE="{{ $dataset.domain }}"
35
- {{ end }}
36
-
37
- {{- if (has $config.nlu (getenv "CONFIG_NAME")) }}
38
- export CONFIG="{{ $dataset.language }}/nlu/{{ index $config.nlu (getenv "CONFIG_NAME") }}"
39
- echo "::add-mask::{{ $dataset.language }}/nlu/{{ index $config.nlu (getenv "CONFIG_NAME") }}"
40
- {{ else if (has $config.core (getenv "CONFIG_NAME")) }}
41
- export CONFIG="{{ $dataset.language }}/core/{{ index $config.core (getenv "CONFIG_NAME") }}"
42
- echo "::add-mask::{{ $dataset.language }}/core/{{ index $config.core (getenv "CONFIG_NAME") }}"
43
- {{ end -}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/model_regression_test_config_comment.tmpl DELETED
@@ -1,45 +0,0 @@
1
- {{- /*
2
-
3
- The template returns a comment message which is used as a help description
4
- in a PR. The template reads the `.github/configs/mr-test-example.yaml` file
5
- and include it as example content.
6
-
7
- The help message is triggered by adding `status:model-regression-tests` label.
8
- Comment with a help message is added if a PR doesn't contain a comment
9
- with a configuration for the model regression tests.
10
-
11
- */ -}}
12
- {{ define "check_available_configuration" -}}
13
- NLU
14
- {{- if has .dataset "domain" -}}
15
- , Core
16
- {{- end -}}
17
- {{- end -}}
18
- Hey @{{ .Env.GITHUB_ACTOR }}! :wave: To run model regression tests, comment with the `/modeltest` command and a configuration.
19
-
20
- _Tips :bulb:: The model regression test will be run on `push` events. You can re-run the tests by re-add `status:model-regression-tests` label or use a `Re-run jobs` button in Github Actions workflow._
21
-
22
- _Tips :bulb:: Every time when you want to change a configuration you should edit the comment with the previous configuration._
23
-
24
- You can copy this in your comment and customize:
25
-
26
- > /modeltest
27
- > ~~~yml
28
- >```yml
29
- >##########
30
- >## Available datasets
31
- >##########
32
- {{range (coll.Keys (datasource "mapping").datasets)}}># - "{{ . }}" ({{ template "check_available_configuration" (dict "dataset" (index (datasource "mapping").datasets .)) }}){{"\n"}}{{ end -}}
33
- >
34
- >##########
35
- >## Available NLU configurations
36
- >##########
37
- {{range (coll.Keys (datasource "mapping").configurations.nlu)}}># - "{{.}}"{{"\n"}}{{ end -}}
38
- >
39
- >##########
40
- >## Available Core configurations
41
- >##########
42
- {{range (coll.Keys (datasource "mapping").configurations.core)}}># - "{{.}}"{{"\n"}}{{ end -}}
43
- >
44
- {{range split (file.Read ".github/configs/mr-test-example.yaml") "\n"}}>{{.}}{{"\n"}}{{ end -}}
45
- >```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/model_regression_test_config_to_json.tmpl DELETED
@@ -1,71 +0,0 @@
1
- {{- /*
2
-
3
- The template reads an issue/a PR comment and transforms a YAML code block into JSON.
4
-
5
- */ -}}
6
- {{ define "check_config_type" -}}
7
- {{- if has (datasource "mapping").configurations.nlu . -}}
8
- nlu
9
- {{- else if has (datasource "mapping").configurations.core . -}}
10
- core
11
- {{- end -}}
12
- {{- end -}}
13
- {{- $config := ((datasource "github").body | regexp.Find "```(?s)(.*)```" | regexp.ReplaceLiteral "```.*|\r" "" | yaml | toJSON | json) -}}
14
- {{- $num_repetitions := 1 -}}
15
- {{- if has $config "num_repetitions" -}}
16
- {{- $num_repetitions = $config.num_repetitions -}}
17
- {{- end -}}
18
- {"include":[
19
- {{- $inc := coll.Slice -}}
20
- {{- $dataset := coll.Slice -}}
21
- {{- range $pair := $config.include -}}
22
- {{- /* use all available datasets if value is equal to all */ -}}
23
- {{- if eq (index $pair.dataset 0) "all" -}}
24
- {{ $dataset = (coll.Keys (datasource "mapping").datasets) }}
25
- {{- else if eq (index $pair.dataset 0) "all-core" -}}
26
- {{- range $dataset_name, $dataset_spec := (datasource "mapping").datasets -}}
27
- {{- if has $dataset_spec "domain" -}}
28
- {{ $dataset = (coll.Append $dataset_name $dataset) -}}
29
- {{- end -}}
30
- {{- end -}}
31
- {{- else if eq (index $pair.dataset 0) "all-nlu" -}}
32
- {{- range $dataset_name, $dataset_spec := (datasource "mapping").datasets -}}
33
- {{- if not (has $dataset_spec "domain") -}}
34
- {{ $dataset = (coll.Append $dataset_name $dataset) -}}
35
- {{- end -}}
36
- {{- end -}}
37
- {{- else -}}
38
- {{- $dataset = $pair.dataset -}}
39
- {{- end -}}
40
- {{- range $index_dataset, $value_dataset := $dataset -}}
41
- {{- range $index_config, $value_config := $pair.config -}}
42
- {{ range $index_repetition, $element := (strings.Repeat $num_repetitions "x " | strings.Trim " " | strings.Split " ") }}
43
- {{- /* use all available configurations if value is equal to all */ -}}
44
- {{- if eq $value_config "all" -}}
45
- {{- range $config_type := (coll.Keys (datasource "mapping").configurations) -}}
46
- {{- range $config_name, $config_file := (index (datasource "mapping").configurations $config_type ) -}}
47
-
48
- {{ $inc = (coll.Append (dict "index_repetition" $index_repetition "dataset" $value_dataset "config" $config_name "type" $config_type | toJSON) $inc) -}}
49
- {{- end -}}
50
- {{- end -}}
51
- {{- else if eq $value_config "all-core" -}}
52
- {{- range $config_name, $config_file := (datasource "mapping").configurations.core -}}
53
- {{ $inc = (coll.Append (dict "index_repetition" $index_repetition "dataset" $value_dataset "config" $config_name "type" "core" | toJSON) $inc) -}}
54
- {{- end -}}
55
- {{- else if eq $value_config "all-nlu" -}}
56
- {{- range $config_name, $config_file := (datasource "mapping").configurations.nlu -}}
57
- {{ $inc = (coll.Append (dict "index_repetition" $index_repetition "dataset" $value_dataset "config" $config_name "type" "nlu" | toJSON) $inc) -}}
58
- {{- end -}}
59
- {{- else -}}
60
- {{- if has (datasource "mapping").configurations.nlu $value_config -}}
61
- {{ $inc = (coll.Append (dict "index_repetition" $index_repetition "dataset" $value_dataset "config" $value_config "type" "nlu" | toJSON) $inc) -}}
62
- {{- else if has (datasource "mapping").configurations.core $value_config -}}
63
- {{ $inc = (coll.Append (dict "index_repetition" $index_repetition "dataset" $value_dataset "config" $value_config "type" "core" | toJSON) $inc) -}}
64
- {{- end -}}
65
- {{- end -}}
66
- {{- end -}}
67
- {{- end -}}
68
- {{- end -}}
69
- {{- end -}}
70
- {{- join $inc "," -}}
71
- ]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/model_regression_test_read_dataset_branch.tmpl DELETED
@@ -1,13 +0,0 @@
1
- {{- /*
2
-
3
- The template reads a PR comment and gets the dataset branch for the training-data
4
- repository.
5
-
6
- */ -}}
7
- {{- $config := ((datasource "github").body | regexp.Find "```(?s)(.*)```" | regexp.ReplaceLiteral "```.*|\r" "" | yaml | toJSON | json) -}}
8
- {{- $dataset_branch := "main" -}}
9
- {{- /* if a branch name for dataset repository is not defined use the main branch */ -}}
10
- {{- if has $config "dataset_branch" -}}
11
- {{- $dataset_branch = $config.dataset_branch -}}
12
- {{- end -}}
13
- export DATASET_BRANCH="{{ $dataset_branch }}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/templates/model_regression_test_results.tmpl DELETED
@@ -1,159 +0,0 @@
1
- {{- /*
2
-
3
- The template reads a file with a report (the report file is available
4
- as an artifact in the model regression tests workflow) and returns
5
- a markdown table with a summary of the tests.
6
-
7
- */ -}}
8
- {{- /*
9
-
10
- The print_result_nlu template returns data depends on available fields.
11
-
12
- */ -}}
13
- {{ define "print_result_nlu" -}}
14
- {{- if and (has (index .branch "micro avg") "f1-score") (has (index .main "micro avg") "f1-score") -}}
15
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} ({{ printf "%.2f" ((index (index .main "micro avg") "f1-score") | math.Sub (index (index .branch "micro avg") "f1-score")) }})
16
- {{- else if and (has .branch "accuracy") (has .main "accuracy") -}}
17
- {{ printf "%.4f" .branch.accuracy }} ({{ printf "%.2f" (.main.accuracy | math.Sub .branch.accuracy) }})
18
- {{- else if and (has .branch "accuracy") (has (index .main "micro avg") "f1-score") -}}
19
- {{ printf "%.4f" .branch.accuracy }} ({{ printf "%.2f" ((index (index .main "micro avg") "f1-score") | math.Sub .branch.accuracy) }})
20
- {{- else if and (has (index .branch "micro avg") "f1-score") (has .main "accuracy") -}}
21
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} ({{ printf "%.2f" (.main.accuracy | math.Sub (index (index .branch "micro avg") "f1-score")) }})
22
- {{- else if (has .branch "accuracy") -}}
23
- {{ printf "%.4f" .branch.accuracy }} (`no data`)
24
- {{- else if has (index .branch "micro avg") "f1-score" -}}
25
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} (`no data`)
26
- {{- else -}}
27
- `no data`
28
- {{- end -}}
29
- {{- end -}}
30
- {{- /*
31
-
32
- The print_result_core template returns data depends on available fields.
33
-
34
- */ -}}
35
- {{ define "print_result_core_micro_avg" -}}
36
- {{- if and (has (index .branch "micro avg") "f1-score") (has (index .main "micro avg") "f1-score") -}}
37
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} ({{ printf "%.2f" ((index (index .main "micro avg") "f1-score") | math.Sub (index (index .branch "micro avg") "f1-score")) }})
38
- {{- else if and (has .branch "accuracy") (has .main "accuracy") -}}
39
- {{ printf "%.4f" .branch.accuracy }} ({{ printf "%.2f" (.main.accuracy | math.Sub .branch.accuracy) }})
40
- {{- else if and (has .branch "accuracy") (has (index .main "micro avg") "f1-score") -}}
41
- {{ printf "%.4f" .branch.accuracy }} ({{ printf "%.2f" ((index (index .main "micro avg") "f1-score") | math.Sub .branch.accuracy) }})
42
- {{- else if and (has (index .branch "micro avg") "f1-score") (has .main "accuracy") -}}
43
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} ({{ printf "%.2f" (.main.accuracy | math.Sub (index (index .branch "micro avg") "f1-score")) }})
44
- {{- else if (has .branch "accuracy") -}}
45
- {{ printf "%.4f" .branch.accuracy }} (`no data`)
46
- {{- else if has (index .branch "micro avg") "f1-score" -}}
47
- {{ printf "%.4f" (index (index .branch "micro avg") "f1-score") }} (`no data`)
48
- {{- else -}}
49
- `no data`
50
- {{- end -}}
51
- {{- end -}}
52
-
53
- {{ define "print_result_core_conversation_accuracy" -}}
54
- {{- if and (has (index .branch "conversation_accuracy") "accuracy") (has (index .main "conversation_accuracy") "accuracy") -}}
55
- {{ printf "%.4f" (index (index .branch "conversation_accuracy") "accuracy") }} ({{ printf "%.2f" ((index (index .main "conversation_accuracy") "accuracy") | math.Sub (index (index .branch "conversation_accuracy") "accuracy")) }})
56
- {{- else if has (index .branch "conversation_accuracy") "accuracy" -}}
57
- {{ printf "%.4f" (index (index .branch "conversation_accuracy") "accuracy") }} (`no data`)
58
- {{- else -}}
59
- `no data`
60
- {{- end -}}
61
- {{- end -}}
62
-
63
- {{ define "print_table_nlu" }}
64
- {{- $available_types := (index .results_for_dataset | jsonpath `@..type`) -}}
65
- {{- if isKind "string" $available_types }}{{- $available_types = (index .results_for_dataset | jsonpath `@..type` | slice) -}}{{- end -}}
66
- {{- if has $available_types "nlu" -}}
67
- | Configuration | Intent Classification Micro F1 | Entity Recognition Micro F1 | Response Selection Micro F1 |
68
- |---------------|-----------------|-----------------|-------------------|
69
- {{ range $config_name, $config_data_array := .results_for_dataset -}}
70
- {{ range $config_data := $config_data_array }}
71
- {{- if eq $config_data.type "nlu" -}}
72
- | `{{ $config_name }}`<br> test: `{{ $config_data.test_run_time }}`, train: `{{ $config_data.train_run_time }}`, total: `{{ $config_data.total_run_time }}`|
73
- {{- if has $config_data "intent_classification" -}}
74
- {{- $intent_class_main := dict -}}
75
- {{- if has $.results_for_dataset_main $config_name -}}
76
- {{- $intent_class_main = (index (index $.results_for_dataset_main $config_name) 0).intent_classification -}}
77
- {{- end -}}
78
- {{- $intent_class := $config_data.intent_classification -}}
79
- {{ template "print_result_nlu" (dict "branch" $intent_class "main" $intent_class_main) }}|
80
- {{- else -}}
81
- `no data`|
82
- {{- end -}}
83
- {{- if has $config_data "entity_prediction" -}}
84
- {{- $entity_class_main := dict -}}
85
- {{- if has $.results_for_dataset_main $config_name -}}
86
- {{- $entity_class_main = (index (index $.results_for_dataset_main $config_name) 0).entity_prediction -}}
87
- {{- end -}}
88
- {{- $entity_class := $config_data.entity_prediction -}}
89
- {{ template "print_result_nlu" (dict "branch" $entity_class "main" $entity_class_main) }}|
90
- {{- else -}}
91
- `no data`|
92
- {{- end -}}
93
- {{- if has $config_data "response_selection" -}}
94
- {{- $response_class_main := dict -}}
95
- {{- if has $.results_for_dataset_main $config_name -}}
96
- {{- $response_class_main = (index (index $.results_for_dataset_main $config_name) 0).response_selection -}}
97
- {{- end -}}
98
- {{- $response_class := $config_data.response_selection -}}
99
- {{ template "print_result_nlu" (dict "branch" $response_class "main" $response_class_main) }}|
100
- {{- else -}}
101
- `no data`|
102
- {{- end }}
103
- {{end}}
104
- {{- end}}
105
- {{- end}}
106
- {{- end -}}
107
- {{- end -}}
108
-
109
- {{- define "print_table_core" -}}
110
- {{- $available_types := (index .results_for_dataset | jsonpath `@..type`) -}}
111
- {{- if isKind "string" $available_types }}{{- $available_types = (index .results_for_dataset | jsonpath `@..type` | slice) -}}{{- end -}}
112
- {{- if has $available_types "core" -}}
113
- | Dialog Policy Configuration | Action Level Micro Avg. F1 | Conversation Level Accuracy | Run Time Train | Run Time Test |
114
- |---------------|-----------------|-----------------|-------------------|-------------------|
115
- {{ range $config_name, $config_data_array := .results_for_dataset -}}
116
- {{ range $config_data := $config_data_array }}
117
- {{- if eq $config_data.type "core" -}}
118
- | `{{ $config_name }}` |
119
- {{- if has $config_data "story_prediction" -}}
120
- {{- $story_prediction_main := dict -}}
121
- {{- if has $.results_for_dataset_main $config_name -}}
122
- {{- $story_prediction_main = (index (index $.results_for_dataset_main $config_name) 0).story_prediction -}}
123
- {{- end -}}
124
- {{- $story_prediction := $config_data.story_prediction -}}
125
- {{ template "print_result_core_micro_avg" (dict "branch" $story_prediction "main" $story_prediction_main) }}|
126
- {{- else -}}
127
- `no data`|
128
- {{- end -}}
129
- {{- if has $config_data "story_prediction" -}}
130
- {{- $story_prediction_main := dict -}}
131
- {{- if has $.results_for_dataset_main $config_name -}}
132
- {{- $story_prediction_main = (index (index $.results_for_dataset_main $config_name) 0).story_prediction -}}
133
- {{- end -}}
134
- {{- $story_prediction := index $config_data.story_prediction -}}
135
- {{ template "print_result_core_conversation_accuracy" (dict "branch" $story_prediction "main" $story_prediction_main) }}|
136
- {{- else -}}
137
- `no data`|
138
- {{- end -}}
139
- `{{ $config_data.train_run_time }}`| `{{ $config_data.test_run_time }}`|
140
- {{ end }}
141
- {{- end}}
142
- {{- end}}
143
- {{- end -}}
144
- {{- end -}}
145
-
146
- {{- $results_main := (datasource "results_main") -}}
147
- {{ range $dataset, $results_for_dataset := (datasource "data")}}
148
- {{ $results_for_dataset_main := (index $results_main $dataset) -}}
149
- {{ $content_dicts := index $results_for_dataset (index (keys $results_for_dataset) 0) -}}
150
- {{ $one_content_dict := index $content_dicts 0 -}}
151
- {{- if ($one_content_dict).external_dataset_repository -}}
152
- Dataset: `{{$dataset}}`, Dataset repository branch: `{{ ($one_content_dict).dataset_repository_branch }}` (external repository), commit: `{{ ($one_content_dict).dataset_commit }}`
153
- Configuration repository branch: `{{ ($one_content_dict).config_repository_branch }}`
154
- {{ else -}}
155
- Dataset: `{{$dataset}}`, Dataset repository branch: `{{ ($one_content_dict).dataset_repository_branch }}`, commit: `{{ ($one_content_dict).dataset_commit }}`
156
- {{ end -}}
157
- {{ template "print_table_nlu" (dict "results_for_dataset" $results_for_dataset "results_for_dataset_main" $results_for_dataset_main) }}
158
- {{ template "print_table_core" (dict "results_for_dataset" $results_for_dataset "results_for_dataset_main" $results_for_dataset_main) }}
159
- {{- end }}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_data/bert_diet_response2t.yml DELETED
@@ -1,23 +0,0 @@
1
- # Configuration for Rasa NLU.
2
- # https://rasa.com/docs/rasa/nlu/components/
3
- language: en
4
- pipeline:
5
- - name: WhitespaceTokenizer
6
- - name: LanguageModelFeaturizer
7
- alias: "lmf"
8
- - name: RegexFeaturizer
9
- alias: "rf"
10
- - name: LexicalSyntacticFeaturizer
11
- alias: "lsf"
12
- - name: DIETClassifier
13
- epochs: 50
14
- random_seed: 42
15
- - name: ResponseSelector
16
- epochs: 100
17
- num_transformer_layers: 2
18
- transformer_size: 256
19
- hidden_layers_size:
20
- text: []
21
- label: []
22
- random_seed: 42
23
- featurizers: ["lmf"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_data/comment_body.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "body": "/modeltest\r\n\r\n```yml\r\ndataset_branch: \"test_dataset_branch\"\r\ninclude:\r\n - dataset: [\"financial-demo\"]\r\n config: [\"TEST\"]\r\n ```\r\n\r\n<!-- comment-id:comment_configuration -->"
3
- }
 
 
 
 
AI/.github/tests/test_data/comment_body_no_dataset_branch.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "body": "/modeltest\r\n\r\n```yml\r\ninclude:\r\n - dataset: [\"financial-demo\"]\r\n config: [\"TEST\"]\r\n ```\r\n\r\n<!-- comment-id:comment_configuration -->"
3
- }
 
 
 
 
AI/.github/tests/test_data/intent_report.json DELETED
@@ -1,120 +0,0 @@
1
- {
2
- "search_transactions": {
3
- "precision": 1.0,
4
- "recall": 1.0,
5
- "f1-score": 1.0,
6
- "support": 1,
7
- "confused_with": {}
8
- },
9
- "greet": {
10
- "precision": 1.0,
11
- "recall": 1.0,
12
- "f1-score": 1.0,
13
- "support": 2,
14
- "confused_with": {}
15
- },
16
- "out_of_scope": {
17
- "precision": 1.0,
18
- "recall": 1.0,
19
- "f1-score": 1.0,
20
- "support": 1,
21
- "confused_with": {}
22
- },
23
- "thankyou": {
24
- "precision": 1.0,
25
- "recall": 1.0,
26
- "f1-score": 1.0,
27
- "support": 1,
28
- "confused_with": {}
29
- },
30
- "help": {
31
- "precision": 1.0,
32
- "recall": 1.0,
33
- "f1-score": 1.0,
34
- "support": 2,
35
- "confused_with": {}
36
- },
37
- "inform": {
38
- "precision": 1.0,
39
- "recall": 1.0,
40
- "f1-score": 1.0,
41
- "support": 1,
42
- "confused_with": {}
43
- },
44
- "goodbye": {
45
- "precision": 1.0,
46
- "recall": 1.0,
47
- "f1-score": 1.0,
48
- "support": 1,
49
- "confused_with": {}
50
- },
51
- "affirm": {
52
- "precision": 1.0,
53
- "recall": 1.0,
54
- "f1-score": 1.0,
55
- "support": 3,
56
- "confused_with": {}
57
- },
58
- "pay_cc": {
59
- "precision": 1.0,
60
- "recall": 1.0,
61
- "f1-score": 1.0,
62
- "support": 2,
63
- "confused_with": {}
64
- },
65
- "check_balance": {
66
- "precision": 1.0,
67
- "recall": 1.0,
68
- "f1-score": 1.0,
69
- "support": 5,
70
- "confused_with": {}
71
- },
72
- "deny": {
73
- "precision": 1.0,
74
- "recall": 1.0,
75
- "f1-score": 1.0,
76
- "support": 1,
77
- "confused_with": {}
78
- },
79
- "ask_transfer_charge": {
80
- "precision": 1.0,
81
- "recall": 1.0,
82
- "f1-score": 1.0,
83
- "support": 1,
84
- "confused_with": {}
85
- },
86
- "transfer_money": {
87
- "precision": 1.0,
88
- "recall": 1.0,
89
- "f1-score": 1.0,
90
- "support": 3,
91
- "confused_with": {}
92
- },
93
- "check_recipients": {
94
- "precision": 1.0,
95
- "recall": 1.0,
96
- "f1-score": 1.0,
97
- "support": 2,
98
- "confused_with": {}
99
- },
100
- "check_earnings": {
101
- "precision": 1.0,
102
- "recall": 1.0,
103
- "f1-score": 1.0,
104
- "support": 2,
105
- "confused_with": {}
106
- },
107
- "accuracy": 1.0,
108
- "macro avg": {
109
- "precision": 1.0,
110
- "recall": 1.0,
111
- "f1-score": 1.0,
112
- "support": 28
113
- },
114
- "weighted avg": {
115
- "precision": 1.0,
116
- "recall": 1.0,
117
- "f1-score": 1.0,
118
- "support": 28
119
- }
120
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_data/report-on-schedule-2022-02-02.json DELETED
@@ -1,303 +0,0 @@
1
- {
2
- "RasaHQ/financial-demo": {
3
- "BERT + DIET(bow) + ResponseSelector(bow)": [{
4
- "accelerator_type": "GPU",
5
- "config_repository": "training-data",
6
- "config_repository_branch": "main",
7
- "dataset_commit": "52a3ad3eb5292d56542687e23b06703431f15ead",
8
- "dataset_repository_branch": "fix-model-regression-tests",
9
- "entity_prediction": {
10
- "macro avg": {
11
- "f1-score": 0.7333333333333333,
12
- "precision": 0.8,
13
- "recall": 0.7,
14
- "support": 14
15
- },
16
- "micro avg": {
17
- "f1-score": 0.8333333333333333,
18
- "precision": 1.0,
19
- "recall": 0.7142857142857143,
20
- "support": 14
21
- },
22
- "weighted avg": {
23
- "f1-score": 0.738095238095238,
24
- "precision": 0.7857142857142857,
25
- "recall": 0.7142857142857143,
26
- "support": 14
27
- }
28
- },
29
- "external_dataset_repository": true,
30
- "intent_classification": {
31
- "accuracy": 1.0,
32
- "macro avg": {
33
- "f1-score": 1.0,
34
- "precision": 1.0,
35
- "recall": 1.0,
36
- "support": 28
37
- },
38
- "weighted avg": {
39
- "f1-score": 1.0,
40
- "precision": 1.0,
41
- "recall": 1.0,
42
- "support": 28
43
- }
44
- },
45
- "test_run_time": "35s",
46
- "total_run_time": "2m2s",
47
- "train_run_time": "1m28s",
48
- "type": "nlu"
49
- }],
50
- "BERT + DIET(seq) + ResponseSelector(t2t)": [{
51
- "accelerator_type": "GPU",
52
- "config_repository": "training-data",
53
- "config_repository_branch": "main",
54
- "dataset_commit": "52a3ad3eb5292d56542687e23b06703431f15ead",
55
- "dataset_repository_branch": "fix-model-regression-tests",
56
- "entity_prediction": {
57
- "macro avg": {
58
- "f1-score": 0.7333333333333333,
59
- "precision": 0.8,
60
- "recall": 0.7,
61
- "support": 14
62
- },
63
- "micro avg": {
64
- "f1-score": 0.8333333333333333,
65
- "precision": 1.0,
66
- "recall": 0.7142857142857143,
67
- "support": 14
68
- },
69
- "weighted avg": {
70
- "f1-score": 0.738095238095238,
71
- "precision": 0.7857142857142857,
72
- "recall": 0.7142857142857143,
73
- "support": 14
74
- }
75
- },
76
- "external_dataset_repository": true,
77
- "intent_classification": {
78
- "accuracy": 1.0,
79
- "macro avg": {
80
- "f1-score": 1.0,
81
- "precision": 1.0,
82
- "recall": 1.0,
83
- "support": 28
84
- },
85
- "weighted avg": {
86
- "f1-score": 1.0,
87
- "precision": 1.0,
88
- "recall": 1.0,
89
- "support": 28
90
- }
91
- },
92
- "test_run_time": "55s",
93
- "total_run_time": "2m8s",
94
- "train_run_time": "1m14s",
95
- "type": "nlu"
96
- }],
97
- "Rules + Memo + TED": [{
98
- "accelerator_type": "GPU",
99
- "config_repository": "training-data",
100
- "config_repository_branch": "main",
101
- "dataset_commit": "52a3ad3eb5292d56542687e23b06703431f15ead",
102
- "dataset_repository_branch": "fix-model-regression-tests",
103
- "external_dataset_repository": true,
104
- "story_prediction": {
105
- "accuracy": 1.0,
106
- "conversation_accuracy": {
107
- "accuracy": 1.0,
108
- "correct": 48,
109
- "total": 48,
110
- "with_warnings": 0
111
- },
112
- "macro avg": {
113
- "f1-score": 1.0,
114
- "precision": 1.0,
115
- "recall": 1.0,
116
- "support": 317
117
- },
118
- "weighted avg": {
119
- "f1-score": 1.0,
120
- "precision": 1.0,
121
- "recall": 1.0,
122
- "support": 317
123
- }
124
- },
125
- "test_run_time": "51s",
126
- "total_run_time": "8m15s",
127
- "train_run_time": "7m24s",
128
- "type": "core"
129
- }]
130
- },
131
- "RasaHQ/retail-demo": {
132
- "BERT + DIET(bow) + ResponseSelector(bow)": [{
133
- "accelerator_type": "GPU",
134
- "config_repository": "training-data",
135
- "config_repository_branch": "main",
136
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
137
- "dataset_repository_branch": "fix-model-regression-tests",
138
- "entity_prediction": {
139
- "macro avg": {
140
- "f1-score": 0.25,
141
- "precision": 0.25,
142
- "recall": 0.25,
143
- "support": 6
144
- },
145
- "micro avg": {
146
- "f1-score": 0.2857142857142857,
147
- "precision": 1.0,
148
- "recall": 0.16666666666666666,
149
- "support": 6
150
- },
151
- "weighted avg": {
152
- "f1-score": 0.16666666666666666,
153
- "precision": 0.16666666666666666,
154
- "recall": 0.16666666666666666,
155
- "support": 6
156
- }
157
- },
158
- "external_dataset_repository": true,
159
- "intent_classification": {
160
- "macro avg": {
161
- "f1-score": 0.8,
162
- "precision": 0.8,
163
- "recall": 0.85,
164
- "support": 16
165
- },
166
- "micro avg": {
167
- "f1-score": 0.8387096774193549,
168
- "precision": 0.8666666666666667,
169
- "recall": 0.8125,
170
- "support": 16
171
- },
172
- "weighted avg": {
173
- "f1-score": 0.8125,
174
- "precision": 0.875,
175
- "recall": 0.8125,
176
- "support": 16
177
- }
178
- },
179
- "test_run_time": "29s",
180
- "total_run_time": "1m16s",
181
- "train_run_time": "47s",
182
- "type": "nlu"
183
- }],
184
- "BERT + DIET(seq) + ResponseSelector(t2t)": [{
185
- "accelerator_type": "GPU",
186
- "config_repository": "training-data",
187
- "config_repository_branch": "main",
188
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
189
- "dataset_repository_branch": "fix-model-regression-tests",
190
- "entity_prediction": {
191
- "macro avg": {
192
- "f1-score": 0.25,
193
- "precision": 0.25,
194
- "recall": 0.25,
195
- "support": 6
196
- },
197
- "micro avg": {
198
- "f1-score": 0.2857142857142857,
199
- "precision": 1.0,
200
- "recall": 0.16666666666666666,
201
- "support": 6
202
- },
203
- "weighted avg": {
204
- "f1-score": 0.16666666666666666,
205
- "precision": 0.16666666666666666,
206
- "recall": 0.16666666666666666,
207
- "support": 6
208
- }
209
- },
210
- "external_dataset_repository": true,
211
- "intent_classification": {
212
- "accuracy": 0.875,
213
- "macro avg": {
214
- "f1-score": 0.8300000000000001,
215
- "precision": 0.8166666666666667,
216
- "recall": 0.85,
217
- "support": 16
218
- },
219
- "weighted avg": {
220
- "f1-score": 0.85,
221
- "precision": 0.8333333333333333,
222
- "recall": 0.875,
223
- "support": 16
224
- }
225
- },
226
- "test_run_time": "56s",
227
- "total_run_time": "2m2s",
228
- "train_run_time": "1m6s",
229
- "type": "nlu"
230
- }],
231
- "Rules + Memo": [{
232
- "accelerator_type": "GPU",
233
- "config_repository": "training-data",
234
- "config_repository_branch": "main",
235
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
236
- "dataset_repository_branch": "fix-model-regression-tests",
237
- "external_dataset_repository": true,
238
- "story_prediction": {
239
- "conversation_accuracy": {
240
- "accuracy": 0.8888888888888888,
241
- "correct": 8,
242
- "total": 9,
243
- "with_warnings": 0
244
- },
245
- "macro avg": {
246
- "f1-score": 0.9663698541747322,
247
- "precision": 1.0,
248
- "recall": 0.946007696007696,
249
- "support": 67
250
- },
251
- "micro avg": {
252
- "f1-score": 0.9692307692307692,
253
- "precision": 1.0,
254
- "recall": 0.9402985074626866,
255
- "support": 67
256
- },
257
- "weighted avg": {
258
- "f1-score": 0.9656317714563074,
259
- "precision": 1.0,
260
- "recall": 0.9402985074626866,
261
- "support": 67
262
- }
263
- },
264
- "test_run_time": "10s",
265
- "total_run_time": "19s",
266
- "train_run_time": "10s",
267
- "type": "core"
268
- }],
269
- "Rules + Memo + TED": [{
270
- "accelerator_type": "GPU",
271
- "config_repository": "training-data",
272
- "config_repository_branch": "main",
273
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
274
- "dataset_repository_branch": "fix-model-regression-tests",
275
- "external_dataset_repository": true,
276
- "story_prediction": {
277
- "accuracy": 1.0,
278
- "conversation_accuracy": {
279
- "accuracy": 1.0,
280
- "correct": 9,
281
- "total": 9,
282
- "with_warnings": 0
283
- },
284
- "macro avg": {
285
- "f1-score": 1.0,
286
- "precision": 1.0,
287
- "recall": 1.0,
288
- "support": 67
289
- },
290
- "weighted avg": {
291
- "f1-score": 1.0,
292
- "precision": 1.0,
293
- "recall": 1.0,
294
- "support": 67
295
- }
296
- },
297
- "test_run_time": "31s",
298
- "total_run_time": "4m57s",
299
- "train_run_time": "4m27s",
300
- "type": "core"
301
- }]
302
- }
303
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_data/report_listformat_core.json DELETED
@@ -1,70 +0,0 @@
1
- {
2
- "RasaHQ/retail-demo": {
3
- "Rules + Memo + TED": [{
4
- "accelerator_type": "GPU",
5
- "config_repository": "training-data",
6
- "config_repository_branch": "main",
7
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
8
- "dataset_repository_branch": "fix-model-regression-tests",
9
- "external_dataset_repository": true,
10
- "story_prediction": {
11
- "accuracy": 1.0,
12
- "conversation_accuracy": {
13
- "accuracy": 1.0,
14
- "correct": 9,
15
- "total": 9,
16
- "with_warnings": 0
17
- },
18
- "macro avg": {
19
- "f1-score": 1.0,
20
- "precision": 1.0,
21
- "recall": 1.0,
22
- "support": 67
23
- },
24
- "weighted avg": {
25
- "f1-score": 1.0,
26
- "precision": 1.0,
27
- "recall": 1.0,
28
- "support": 67
29
- }
30
- },
31
- "test_run_time": "31s",
32
- "total_run_time": "4m57s",
33
- "train_run_time": "4m27s",
34
- "type": "core"
35
- },
36
- {
37
- "accelerator_type": "GPU",
38
- "config_repository": "training-data",
39
- "config_repository_branch": "main",
40
- "dataset_commit": "8226b51b4312aa4d3723098cf6d4028feea040b4",
41
- "dataset_repository_branch": "fix-model-regression-tests",
42
- "external_dataset_repository": true,
43
- "story_prediction": {
44
- "accuracy": 1.0,
45
- "conversation_accuracy": {
46
- "accuracy": 1.0,
47
- "correct": 9,
48
- "total": 9,
49
- "with_warnings": 0
50
- },
51
- "macro avg": {
52
- "f1-score": 1.0,
53
- "precision": 1.0,
54
- "recall": 1.0,
55
- "support": 67
56
- },
57
- "weighted avg": {
58
- "f1-score": 1.0,
59
- "precision": 1.0,
60
- "recall": 1.0,
61
- "support": 67
62
- }
63
- },
64
- "test_run_time": "41s",
65
- "total_run_time": "5m57s",
66
- "train_run_time": "5m27s",
67
- "type": "core"
68
- }]
69
- }
70
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_data/report_listformat_nlu.json DELETED
@@ -1,98 +0,0 @@
1
- {
2
- "RasaHQ/financial-demo": {
3
- "BERT + DIET(seq) + ResponseSelector(t2t)": [{
4
- "accelerator_type": "CPU",
5
- "config_repository": "training-data",
6
- "config_repository_branch": "main",
7
- "dataset_commit": "52a3ad3eb5292d56542687e23b06703431f15ead",
8
- "dataset_repository_branch": "fix-model-regression-tests",
9
- "entity_prediction": {
10
- "macro avg": {
11
- "f1-score": 0.7333333333333333,
12
- "precision": 0.8,
13
- "recall": 0.7,
14
- "support": 14
15
- },
16
- "micro avg": {
17
- "f1-score": 0.8333333333333333,
18
- "precision": 1.0,
19
- "recall": 0.7142857142857143,
20
- "support": 14
21
- },
22
- "weighted avg": {
23
- "f1-score": 0.738095238095238,
24
- "precision": 0.7857142857142857,
25
- "recall": 0.7142857142857143,
26
- "support": 14
27
- }
28
- },
29
- "external_dataset_repository": true,
30
- "intent_classification": {
31
- "accuracy": 1.0,
32
- "macro avg": {
33
- "f1-score": 1.0,
34
- "precision": 1.0,
35
- "recall": 1.0,
36
- "support": 28
37
- },
38
- "weighted avg": {
39
- "f1-score": 1.0,
40
- "precision": 1.0,
41
- "recall": 1.0,
42
- "support": 28
43
- }
44
- },
45
- "test_run_time": "1m29s",
46
- "total_run_time": "4m24s",
47
- "train_run_time": "2m55s",
48
- "type": "nlu"
49
- },
50
- {
51
- "accelerator_type": "CPU",
52
- "config_repository": "training-data",
53
- "config_repository_branch": "main",
54
- "dataset_commit": "52a3ad3eb5292d56542687e23b06703431f15ead",
55
- "dataset_repository_branch": "fix-model-regression-tests",
56
- "entity_prediction": {
57
- "macro avg": {
58
- "f1-score": 0.7333333333333333,
59
- "precision": 0.8,
60
- "recall": 0.7,
61
- "support": 14
62
- },
63
- "micro avg": {
64
- "f1-score": 0.8333333333333333,
65
- "precision": 1.0,
66
- "recall": 0.7142857142857143,
67
- "support": 14
68
- },
69
- "weighted avg": {
70
- "f1-score": 0.738095238095238,
71
- "precision": 0.7857142857142857,
72
- "recall": 0.7142857142857143,
73
- "support": 14
74
- }
75
- },
76
- "external_dataset_repository": true,
77
- "intent_classification": {
78
- "accuracy": 1.0,
79
- "macro avg": {
80
- "f1-score": 1.0,
81
- "precision": 1.0,
82
- "recall": 1.0,
83
- "support": 28
84
- },
85
- "weighted avg": {
86
- "f1-score": 1.0,
87
- "precision": 1.0,
88
- "recall": 1.0,
89
- "support": 28
90
- }
91
- },
92
- "test_run_time": "2m29s",
93
- "total_run_time": "5m24s",
94
- "train_run_time": "3m55s",
95
- "type": "nlu"
96
- }]
97
- }
98
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_download_pretrained.py DELETED
@@ -1,111 +0,0 @@
1
- from copy import deepcopy
2
- import sys
3
- import tempfile
4
- from pathlib import Path
5
-
6
- import pytest
7
- from ruamel.yaml import YAML
8
-
9
- sys.path.append(".github/scripts")
10
- import download_pretrained # noqa: E402
11
-
12
- CONFIG_FPATH = Path(__file__).parent / "test_data" / "bert_diet_response2t.yml"
13
-
14
-
15
- def test_download_pretrained_lmf_exists_no_params():
16
- lmf_specs = download_pretrained.get_model_name_and_weights_from_config(CONFIG_FPATH)
17
- assert lmf_specs[0].model_name == "bert"
18
- assert lmf_specs[0].model_weights == "rasa/LaBSE"
19
-
20
-
21
- def test_download_pretrained_lmf_exists_with_model_name():
22
- yaml = YAML(typ="safe")
23
- config = yaml.load(CONFIG_FPATH)
24
-
25
- steps = config.get("pipeline", [])
26
- step = list( # noqa: RUF015
27
- filter(lambda x: x["name"] == download_pretrained.COMP_NAME, steps)
28
- )[0]
29
- step["model_name"] = "roberta"
30
- step["cache_dir"] = "/this/dir"
31
-
32
- with tempfile.NamedTemporaryFile("w+") as fp:
33
- yaml.dump(config, fp)
34
- fp.seek(0)
35
- lmf_specs = download_pretrained.get_model_name_and_weights_from_config(fp.name)
36
- assert lmf_specs[0].model_name == "roberta"
37
- assert lmf_specs[0].model_weights == "roberta-base"
38
- assert lmf_specs[0].cache_dir == "/this/dir"
39
-
40
-
41
- def test_download_pretrained_unknown_model_name():
42
- yaml = YAML(typ="safe")
43
- config = yaml.load(CONFIG_FPATH)
44
-
45
- steps = config.get("pipeline", [])
46
- step = list( # noqa: RUF015
47
- filter(lambda x: x["name"] == download_pretrained.COMP_NAME, steps)
48
- )[0]
49
- step["model_name"] = "unknown"
50
-
51
- with tempfile.NamedTemporaryFile("w+") as fp:
52
- yaml.dump(config, fp)
53
- fp.seek(0)
54
- with pytest.raises(KeyError):
55
- download_pretrained.get_model_name_and_weights_from_config(fp.name)
56
-
57
-
58
- def test_download_pretrained_multiple_model_names():
59
- yaml = YAML(typ="safe")
60
- config = yaml.load(CONFIG_FPATH)
61
-
62
- steps = config.get("pipeline", [])
63
- step = list( # noqa: RUF015
64
- filter(lambda x: x["name"] == download_pretrained.COMP_NAME, steps)
65
- )[0]
66
- step_new = deepcopy(step)
67
- step_new["model_name"] = "roberta"
68
- steps.append(step_new)
69
-
70
- with tempfile.NamedTemporaryFile("w+") as fp:
71
- yaml.dump(config, fp)
72
- fp.seek(0)
73
- lmf_specs = download_pretrained.get_model_name_and_weights_from_config(fp.name)
74
- assert len(lmf_specs) == 2
75
- assert lmf_specs[1].model_name == "roberta"
76
-
77
-
78
- def test_download_pretrained_with_model_name_and_nondefault_weight():
79
- yaml = YAML(typ="safe")
80
- config = yaml.load(CONFIG_FPATH)
81
-
82
- steps = config.get("pipeline", [])
83
- step = list( # noqa: RUF015
84
- filter(lambda x: x["name"] == download_pretrained.COMP_NAME, steps)
85
- )[0]
86
- step["model_name"] = "bert"
87
- step["model_weights"] = "bert-base-uncased"
88
-
89
- with tempfile.NamedTemporaryFile("w+") as fp:
90
- yaml.dump(config, fp)
91
- fp.seek(0)
92
- lmf_specs = download_pretrained.get_model_name_and_weights_from_config(fp.name)
93
- assert lmf_specs[0].model_name == "bert"
94
- assert lmf_specs[0].model_weights == "bert-base-uncased"
95
-
96
-
97
- def test_download_pretrained_lmf_doesnt_exists():
98
- yaml = YAML(typ="safe")
99
- config = yaml.load(CONFIG_FPATH)
100
-
101
- steps = config.get("pipeline", [])
102
- step = list( # noqa: RUF015
103
- filter(lambda x: x["name"] == download_pretrained.COMP_NAME, steps)
104
- )[0]
105
- steps.remove(step)
106
-
107
- with tempfile.NamedTemporaryFile("w+") as fp:
108
- yaml.dump(config, fp)
109
- fp.seek(0)
110
- lmf_specs = download_pretrained.get_model_name_and_weights_from_config(fp.name)
111
- assert len(lmf_specs) == 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_model_regression_test_read_dataset_branch_tmpl.py DELETED
@@ -1,27 +0,0 @@
1
- import pathlib
2
- import subprocess
3
- import pytest
4
- from typing import Text
5
-
6
- TEMPLATE_FPATH = ".github/templates/model_regression_test_read_dataset_branch.tmpl"
7
- REPO_DIR = pathlib.Path("").absolute()
8
- TEST_DATA_DIR = str(pathlib.Path(__file__).parent / "test_data")
9
- DEFAULT_DATASET_BRANCH = "main"
10
-
11
-
12
- @pytest.mark.parametrize(
13
- "comment_body_file,expected_dataset_branch",
14
- [
15
- ("comment_body.json", "test_dataset_branch"),
16
- ("comment_body_no_dataset_branch.json", DEFAULT_DATASET_BRANCH),
17
- ],
18
- )
19
- def test_read_dataset_branch(comment_body_file: Text, expected_dataset_branch: Text):
20
- cmd = (
21
- "gomplate "
22
- f"-d github={TEST_DATA_DIR}/{comment_body_file} "
23
- f"-f {TEMPLATE_FPATH}"
24
- )
25
- output = subprocess.check_output(cmd.split(" "), cwd=REPO_DIR)
26
- output = output.decode("utf-8").strip()
27
- assert output == f'export DATASET_BRANCH="{expected_dataset_branch}"'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_model_regression_test_results_tmpl.py DELETED
@@ -1,50 +0,0 @@
1
- import pathlib
2
- import subprocess
3
-
4
- TEMPLATE_FPATH = ".github/templates/model_regression_test_results.tmpl"
5
- REPO_DIR = pathlib.Path("").absolute()
6
- TEST_DATA_DIR = str(pathlib.Path(__file__).parent / "test_data")
7
-
8
-
9
- def test_comment_nlu():
10
- cmd = (
11
- "gomplate "
12
- f"-d data={TEST_DATA_DIR}/report_listformat_nlu.json "
13
- f"-d results_main={TEST_DATA_DIR}/report-on-schedule-2022-02-02.json "
14
- f"-f {TEMPLATE_FPATH}"
15
- )
16
- output = subprocess.check_output(cmd.split(" "), cwd=REPO_DIR)
17
- output = output.decode("utf-8")
18
- expected_output = """
19
- Dataset: `RasaHQ/financial-demo`, Dataset repository branch: `fix-model-regression-tests` (external repository), commit: `52a3ad3eb5292d56542687e23b06703431f15ead`
20
- Configuration repository branch: `main`
21
- | Configuration | Intent Classification Micro F1 | Entity Recognition Micro F1 | Response Selection Micro F1 |
22
- |---------------|-----------------|-----------------|-------------------|
23
- | `BERT + DIET(seq) + ResponseSelector(t2t)`<br> test: `1m29s`, train: `2m55s`, total: `4m24s`|1.0000 (0.00)|0.8333 (0.00)|`no data`|
24
- | `BERT + DIET(seq) + ResponseSelector(t2t)`<br> test: `2m29s`, train: `3m55s`, total: `5m24s`|1.0000 (0.00)|0.8333 (0.00)|`no data`|
25
-
26
-
27
- """ # noqa E501
28
- assert output == expected_output
29
-
30
-
31
- def test_comment_core():
32
- cmd = (
33
- "gomplate "
34
- f"-d data={TEST_DATA_DIR}/report_listformat_core.json "
35
- f"-d results_main={TEST_DATA_DIR}/report-on-schedule-2022-02-02.json "
36
- f"-f {TEMPLATE_FPATH}"
37
- )
38
- output = subprocess.check_output(cmd.split(" "), cwd=REPO_DIR)
39
- output = output.decode("utf-8")
40
- expected_output = """
41
- Dataset: `RasaHQ/retail-demo`, Dataset repository branch: `fix-model-regression-tests` (external repository), commit: `8226b51b4312aa4d3723098cf6d4028feea040b4`
42
- Configuration repository branch: `main`
43
-
44
- | Dialog Policy Configuration | Action Level Micro Avg. F1 | Conversation Level Accuracy | Run Time Train | Run Time Test |
45
- |---------------|-----------------|-----------------|-------------------|-------------------|
46
- | `Rules + Memo + TED` |1.0000 (0.00)|1.0000 (0.00)|`4m27s`| `31s`|
47
- | `Rules + Memo + TED` |1.0000 (0.00)|1.0000 (0.00)|`5m27s`| `41s`|
48
-
49
- """ # noqa E501
50
- assert output == expected_output
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_mr_generate_summary.py DELETED
@@ -1,208 +0,0 @@
1
- import sys
2
-
3
- sys.path.append(".github/scripts")
4
- from mr_generate_summary import combine_result # noqa: E402
5
-
6
-
7
- RESULT1 = {
8
- "financial-demo": {
9
- "BERT + DIET(bow) + ResponseSelector(bow)": [
10
- {
11
- "Entity Prediction": {
12
- "macro avg": {
13
- "f1-score": 0.7333333333333333,
14
- }
15
- },
16
- "test_run_time": "47s",
17
- }
18
- ]
19
- }
20
- }
21
-
22
-
23
- def test_same_ds_different_config():
24
- result2 = {
25
- "financial-demo": {
26
- "Sparse + DIET(bow) + ResponseSelector(bow)": [
27
- {
28
- "Entity Prediction": {
29
- "macro avg": {
30
- "f1-score": 0.88,
31
- }
32
- },
33
- "test_run_time": "47s",
34
- }
35
- ]
36
- }
37
- }
38
- expected_combined = {
39
- "financial-demo": {
40
- "BERT + DIET(bow) + ResponseSelector(bow)": [
41
- {
42
- "Entity Prediction": {
43
- "macro avg": {
44
- "f1-score": 0.7333333333333333,
45
- }
46
- },
47
- "test_run_time": "47s",
48
- }
49
- ],
50
- "Sparse + DIET(bow) + ResponseSelector(bow)": [
51
- {
52
- "Entity Prediction": {
53
- "macro avg": {
54
- "f1-score": 0.88,
55
- }
56
- },
57
- "test_run_time": "47s",
58
- }
59
- ],
60
- }
61
- }
62
-
63
- actual_combined = combine_result(RESULT1, result2)
64
- assert actual_combined == expected_combined
65
-
66
- actual_combined = combine_result(result2, RESULT1)
67
- assert actual_combined == expected_combined
68
-
69
-
70
- def test_different_ds_same_config():
71
- result2 = {
72
- "Carbon Bot": {
73
- "Sparse + DIET(bow) + ResponseSelector(bow)": [
74
- {
75
- "Entity Prediction": {
76
- "macro avg": {
77
- "f1-score": 0.88,
78
- }
79
- },
80
- "test_run_time": "47s",
81
- }
82
- ]
83
- }
84
- }
85
- expected_combined = {
86
- "financial-demo": {
87
- "BERT + DIET(bow) + ResponseSelector(bow)": [
88
- {
89
- "Entity Prediction": {
90
- "macro avg": {
91
- "f1-score": 0.7333333333333333,
92
- }
93
- },
94
- "test_run_time": "47s",
95
- }
96
- ],
97
- },
98
- "Carbon Bot": {
99
- "Sparse + DIET(bow) + ResponseSelector(bow)": [
100
- {
101
- "Entity Prediction": {
102
- "macro avg": {
103
- "f1-score": 0.88,
104
- }
105
- },
106
- "test_run_time": "47s",
107
- }
108
- ]
109
- },
110
- }
111
-
112
- actual_combined = combine_result(RESULT1, result2)
113
- assert actual_combined == expected_combined
114
-
115
- actual_combined = combine_result(result2, RESULT1)
116
- assert actual_combined == expected_combined
117
-
118
-
119
- def test_start_empty():
120
- result2 = {}
121
- expected_combined = {
122
- "financial-demo": {
123
- "BERT + DIET(bow) + ResponseSelector(bow)": [
124
- {
125
- "Entity Prediction": {
126
- "macro avg": {
127
- "f1-score": 0.7333333333333333,
128
- }
129
- },
130
- "test_run_time": "47s",
131
- }
132
- ]
133
- }
134
- }
135
-
136
- actual_combined = combine_result(RESULT1, result2)
137
- assert actual_combined == expected_combined
138
-
139
- actual_combined = combine_result(result2, RESULT1)
140
- assert actual_combined == expected_combined
141
-
142
-
143
- def test_combine_result_repetition():
144
- expected_combined = {
145
- "financial-demo": {
146
- "BERT + DIET(bow) + ResponseSelector(bow)": [
147
- {
148
- "Entity Prediction": {
149
- "macro avg": {
150
- "f1-score": 0.7333333333333333,
151
- }
152
- },
153
- "test_run_time": "47s",
154
- },
155
- {
156
- "Entity Prediction": {
157
- "macro avg": {
158
- "f1-score": 0.7333333333333333,
159
- }
160
- },
161
- "test_run_time": "47s",
162
- },
163
- ]
164
- }
165
- }
166
-
167
- actual_combined = combine_result(RESULT1, RESULT1)
168
- assert actual_combined == expected_combined
169
-
170
-
171
- def test_combine_result_repetition_3times():
172
- expected_combined = {
173
- "financial-demo": {
174
- "BERT + DIET(bow) + ResponseSelector(bow)": [
175
- {
176
- "Entity Prediction": {
177
- "macro avg": {
178
- "f1-score": 0.7333333333333333,
179
- }
180
- },
181
- "test_run_time": "47s",
182
- },
183
- {
184
- "Entity Prediction": {
185
- "macro avg": {
186
- "f1-score": 0.7333333333333333,
187
- }
188
- },
189
- "test_run_time": "47s",
190
- },
191
- {
192
- "Entity Prediction": {
193
- "macro avg": {
194
- "f1-score": 0.7333333333333333,
195
- }
196
- },
197
- "test_run_time": "47s",
198
- },
199
- ]
200
- }
201
- }
202
-
203
- tmp_combined = combine_result(RESULT1, RESULT1)
204
- actual_combined = combine_result(tmp_combined, RESULT1)
205
- assert actual_combined == expected_combined
206
-
207
- actual_combined = combine_result(RESULT1, tmp_combined)
208
- assert actual_combined == expected_combined
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_mr_publish_results.py DELETED
@@ -1,132 +0,0 @@
1
- import os
2
- from pathlib import Path
3
- import sys
4
- from unittest import mock
5
-
6
- sys.path.append(".github/scripts")
7
- from mr_publish_results import ( # noqa: E402
8
- prepare_ml_metric,
9
- prepare_ml_metrics,
10
- transform_to_seconds,
11
- generate_json,
12
- prepare_datadog_tags,
13
- )
14
-
15
- EXAMPLE_CONFIG = "Sparse + BERT + DIET(seq) + ResponseSelector(t2t)"
16
- EXAMPLE_DATASET_NAME = "financial-demo"
17
-
18
- ENV_VARS = {
19
- "BRANCH": "my-branch",
20
- "PR_ID": "10927",
21
- "PR_URL": "https://github.com/RasaHQ/rasa/pull/10856/",
22
- "GITHUB_EVENT_NAME": "pull_request",
23
- "GITHUB_RUN_ID": "1882718340",
24
- "GITHUB_SHA": "abc",
25
- "GITHUB_WORKFLOW": "CI - Model Regression",
26
- "IS_EXTERNAL": "false",
27
- "DATASET_REPOSITORY_BRANCH": "main",
28
- "CONFIG": EXAMPLE_CONFIG,
29
- "DATASET_NAME": EXAMPLE_DATASET_NAME,
30
- "CONFIG_REPOSITORY_BRANCH": "main",
31
- "DATASET_COMMIT": "52a3ad3eb5292d56542687e23b06703431f15ead",
32
- "ACCELERATOR_TYPE": "CPU",
33
- "TEST_RUN_TIME": "1m54s",
34
- "TRAIN_RUN_TIME": "4m4s",
35
- "TOTAL_RUN_TIME": "5m58s",
36
- "TYPE": "nlu",
37
- "INDEX_REPETITION": "0",
38
- "HOST_NAME": "github-runner-2223039222-22df222fcd-2cn7d",
39
- }
40
-
41
-
42
- @mock.patch.dict(os.environ, ENV_VARS, clear=True)
43
- def test_generate_json():
44
- f = Path(__file__).parent / "test_data" / "intent_report.json"
45
- result = generate_json(f, task="intent_classification", data={})
46
- assert isinstance(result[EXAMPLE_DATASET_NAME][EXAMPLE_CONFIG], list)
47
-
48
- actual = result[EXAMPLE_DATASET_NAME][EXAMPLE_CONFIG][0]["intent_classification"]
49
- expected = {
50
- "accuracy": 1.0,
51
- "weighted avg": {
52
- "precision": 1.0,
53
- "recall": 1.0,
54
- "f1-score": 1.0,
55
- "support": 28,
56
- },
57
- "macro avg": {"precision": 1.0, "recall": 1.0, "f1-score": 1.0, "support": 28},
58
- }
59
- assert expected == actual
60
-
61
-
62
- def test_transform_to_seconds():
63
- assert 87.0 == transform_to_seconds("1m27s")
64
- assert 87.3 == transform_to_seconds("1m27.3s")
65
- assert 27.0 == transform_to_seconds("27s")
66
- assert 3627.0 == transform_to_seconds("1h27s")
67
- assert 3687.0 == transform_to_seconds("1h1m27s")
68
-
69
-
70
- def test_prepare_ml_model_perf_metrics():
71
- results = [
72
- {
73
- "macro avg": {
74
- "precision": 0.8,
75
- "recall": 0.8,
76
- "f1-score": 0.8,
77
- "support": 14,
78
- },
79
- "micro avg": {
80
- "precision": 1.0,
81
- "recall": 0.7857142857142857,
82
- "f1-score": 0.88,
83
- "support": 14,
84
- },
85
- "file_name": "DIETClassifier_report.json",
86
- "task": "Entity Prediction",
87
- },
88
- {
89
- "accuracy": 1.0,
90
- "weighted avg": {
91
- "precision": 1.0,
92
- "recall": 1.0,
93
- "f1-score": 1.0,
94
- "support": 28,
95
- },
96
- "macro avg": {
97
- "precision": 1.0,
98
- "recall": 1.0,
99
- "f1-score": 1.0,
100
- "support": 28,
101
- },
102
- "file_name": "intent_report.json",
103
- "task": "Intent Classification",
104
- },
105
- ]
106
- metrics_ml = prepare_ml_metrics(results)
107
- assert len(metrics_ml) == 17
108
-
109
-
110
- def test_prepare_ml_model_perf_metrics_simple():
111
- result = {
112
- "accuracy": 1.0,
113
- "weighted avg": {"precision": 1, "recall": 1.0, "f1-score": 1, "support": 28},
114
- "task": "Intent Classification",
115
- }
116
- metrics_ml = prepare_ml_metric(result)
117
- assert len(metrics_ml) == 5
118
-
119
- for _, v in metrics_ml.items():
120
- assert isinstance(v, float)
121
-
122
- key, value = "Intent Classification.accuracy", 1.0
123
- assert key in metrics_ml and value == metrics_ml[key]
124
-
125
- key, value = "Intent Classification.weighted avg.f1-score", 1.0
126
- assert key in metrics_ml and value == metrics_ml[key]
127
-
128
-
129
- @mock.patch.dict(os.environ, ENV_VARS, clear=True)
130
- def test_prepare_datadog_tags():
131
- tags_list = prepare_datadog_tags()
132
- assert "dataset:financial-demo" in tags_list
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/tests/test_validate_gpus.py DELETED
@@ -1,27 +0,0 @@
1
- import os
2
- import sys
3
- from unittest import mock
4
-
5
- import pytest
6
-
7
- sys.path.append(".github/scripts")
8
- import validate_cpu # noqa: E402
9
- import validate_gpus # noqa: E402
10
-
11
- ENV_VARS = {
12
- "CUDA_VISIBLE_DEVICES": "-1",
13
- }
14
-
15
-
16
- @mock.patch.dict(os.environ, ENV_VARS, clear=True)
17
- def test_validate_cpu_succeeds_when_there_are_no_gpus():
18
- validate_cpu.check_gpu_not_available()
19
-
20
-
21
- @mock.patch.dict(os.environ, ENV_VARS, clear=True)
22
- def test_validate_gpus_exits_when_there_are_no_gpus():
23
- # This unit test assumes that unit tests are run on a CPU
24
- with pytest.raises(SystemExit) as pytest_wrapped_e:
25
- validate_gpus.check_gpu_available()
26
- assert pytest_wrapped_e.type == SystemExit
27
- assert pytest_wrapped_e.value.code == 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/workflows/automatic-pr-update.yml DELETED
@@ -1,22 +0,0 @@
1
- name: Automatic PR Merger
2
-
3
- on:
4
- push: {} # update PR when base branch is updated
5
-
6
- jobs:
7
- # thats's all. single step is needed - if PR is mergeable according to
8
- # branch protection rules it will be merged automatically
9
- mergepal:
10
- runs-on: ubuntu-22.04
11
- if: github.repository == 'RasaHQ/rasa'
12
-
13
- steps:
14
- - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
15
- - uses: rasahq/update-pr-branch@f7012036a6d5659cfbc37f180716963511e81f95
16
- with:
17
- token: ${{ secrets.UPDATE_BRANCH_PAT }}
18
- # required parameter by original action -
19
- # check is already done through protected branches so not needed for us
20
- required_approval_count: 0
21
- # update branch despite failing check runs
22
- require_passed_checks: false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
AI/.github/workflows/ci-docs-tests.yml DELETED
@@ -1,164 +0,0 @@
1
- name: Docs Tests
2
- on:
3
- push:
4
- branches:
5
- - main
6
- pull_request:
7
- types: [opened, synchronize, labeled]
8
-
9
- concurrency:
10
- group: ci-docs-tests-${{ github.ref }} # branch name
11
- cancel-in-progress: true
12
-
13
- env:
14
- DEFAULT_PYTHON_VERSION: "3.10"
15
-
16
- jobs:
17
- changes:
18
- name: Check for file changes
19
- runs-on: ubuntu-22.04
20
- outputs:
21
- docs: ${{ steps.filter.outputs.docs }}
22
- steps:
23
- - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
24
- - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50
25
- id: filter
26
- with:
27
- token: ${{ secrets.GITHUB_TOKEN }}
28
- filters: .github/change_filters.yml
29
-
30
- test_documentation:
31
- name: Test Documentation
32
- runs-on: ubuntu-22.04
33
- needs: [changes]
34
- if: needs.changes.outputs.docs == 'true'
35
-
36
- steps:
37
- - name: Checkout git repository 🕝
38
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
39
-
40
- - name: Set up Python ${{ env.DEFAULT_PYTHON_VERSION }} 🐍
41
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b
42
- with:
43
- python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
44
-
45
- - name: Set up Node 12.x 🦙
46
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c
47
- with:
48
- node-version: "12.x"
49
-
50
- - name: Read Poetry Version 🔢
51
- run: |
52
- echo "POETRY_VERSION=$(scripts/poetry-version.sh)" >> $GITHUB_ENV
53
- shell: bash
54
-
55
- - name: Install poetry 🦄
56
- uses: Gr1N/setup-poetry@15821dc8a61bc630db542ae4baf6a7c19a994844 # v8
57
- with:
58
- poetry-version: ${{ env.POETRY_VERSION }}
59
-
60
- - name: Load Poetry Cached Libraries ⬇
61
- id: cache-poetry
62
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
63
- with:
64
- path: .venv
65
- key: ${{ runner.os }}-poetry-${{ env.POETRY_VERSION }}-${{ env.DEFAULT_PYTHON_VERSION }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.POETRY_CACHE_VERSION }}
66
- restore-keys: ${{ runner.os }}-poetry-${{ env.DEFAULT_PYTHON_VERSION }}
67
-
68
- - name: Clear Poetry cache
69
- if: steps.cache-poetry.outputs.cache-hit == 'true' && contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-docs-tests')
70
- run: rm -r .venv
71
-
72
- - name: Create virtual environment
73
- if: (steps.cache-poetry.outputs.cache-hit != 'true' || contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-docs-tests'))
74
- run: python -m venv create .venv
75
-
76
- - name: Set up virtual environment
77
- if: needs.changes.outputs.docs == 'true'
78
- run: poetry config virtualenvs.in-project true
79
-
80
- - name: Load Yarn Cached Packages ⬇
81
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
82
- with:
83
- path: docs/node_modules
84
- key: ${{ runner.os }}-yarn-12.x-${{ hashFiles('docs/yarn.lock') }}
85
- restore-keys: ${{ runner.os }}-yarn-12.x
86
-
87
- - name: Install Dependencies 📦
88
- run: |
89
- sudo apt-get -y install libpq-dev
90
- make install-full install-docs
91
-
92
- - name: Run Swagger 🕵️‍♀️
93
- run: |
94
- npm install -g swagger-cli
95
- swagger-cli validate docs/static/spec/action-server.yml
96
- swagger-cli validate docs/static/spec/rasa.yml
97
-
98
- - name: Test Docs 🕸
99
- run: make test-docs
100
-
101
- documentation_lint:
102
- name: Documentation Linting Checks
103
- runs-on: ubuntu-22.04
104
- needs: [changes]
105
- if: needs.changes.outputs.docs == 'true'
106
-
107
- steps:
108
- - name: Checkout git repository 🕝
109
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
110
-
111
- - name: Set up Python ${{ env.DEFAULT_PYTHON_VERSION }} 🐍
112
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b
113
- with:
114
- python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
115
-
116
- - name: Set up Node 12.x 🦙
117
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c
118
- with:
119
- node-version: "12.x"
120
-
121
- - name: Read Poetry Version 🔢
122
- run: |
123
- echo "POETRY_VERSION=$(scripts/poetry-version.sh)" >> $GITHUB_ENV
124
- shell: bash
125
-
126
- - name: Install poetry 🦄
127
- uses: Gr1N/setup-poetry@15821dc8a61bc630db542ae4baf6a7c19a994844 # v8
128
- with:
129
- poetry-version: ${{ env.POETRY_VERSION }}
130
-
131
- - name: Load Poetry Cached Libraries ⬇
132
- id: cache-poetry
133
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
134
- with:
135
- path: .venv
136
- key: ${{ runner.os }}-poetry-${{ env.POETRY_VERSION }}-${{ env.DEFAULT_PYTHON_VERSION }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.POETRY_CACHE_VERSION }}
137
- restore-keys: ${{ runner.os }}-poetry-${{ env.DEFAULT_PYTHON_VERSION }}
138
-
139
- - name: Clear Poetry cache
140
- if: steps.cache-poetry.outputs.cache-hit == 'true' && contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-docs-tests')
141
- run: rm -r .venv
142
-
143
- - name: Create virtual environment
144
- if: (steps.cache-poetry.outputs.cache-hit != 'true' || contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-docs-tests'))
145
- run: python -m venv create .venv
146
-
147
- - name: Set up virtual environment
148
- if: needs.changes.outputs.docs == 'true'
149
- run: poetry config virtualenvs.in-project true
150
-
151
- - name: Load Yarn Cached Packages ⬇
152
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
153
- with:
154
- path: docs/node_modules
155
- key: ${{ runner.os }}-yarn-12.x-${{ hashFiles('docs/yarn.lock') }}
156
- restore-keys: ${{ runner.os }}-yarn-12.x
157
-
158
- - name: Install Dependencies 📦
159
- run: |
160
- sudo apt-get -y install libpq-dev
161
- make install-full install-docs
162
-
163
- - name: Docs Linting Checks 🕸
164
- run: make lint-docs