From 2fd980f972e5a4ec23555dbf9b34b714b44feda1 Mon Sep 17 00:00:00 2001 From: Dominic Kraemer <Dominic_Daniel.Kraemer@Student.Reutlingen-University.de> Date: Thu, 9 May 2024 00:11:22 +0200 Subject: [PATCH] add rasa and restructure project base --- .gitignore | 2 + README.md => app/README.md | 0 app.py => app/app.py | 2 +- {static => app/static}/icons/favicon.ico | Bin {static => app}/templates/index.html | 0 rasa/actions/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 220 bytes .../__pycache__/actions.cpython-310.pyc | Bin 0 -> 219 bytes rasa/actions/actions.py | 27 ++++++ rasa/config.yml | 44 +++++++++ rasa/credentials.yml | 33 +++++++ rasa/data/nlu.yml | 91 ++++++++++++++++++ rasa/data/rules.yml | 13 +++ rasa/data/stories.yml | 30 ++++++ rasa/domain.yml | 34 +++++++ rasa/endpoints.yml | 42 ++++++++ rasa/tests/test_stories.yml | 91 ++++++++++++++++++ 17 files changed, 408 insertions(+), 1 deletion(-) create mode 100644 .gitignore rename README.md => app/README.md (100%) rename app.py => app/app.py (75%) rename {static => app/static}/icons/favicon.ico (100%) rename {static => app}/templates/index.html (100%) create mode 100644 rasa/actions/__init__.py create mode 100644 rasa/actions/__pycache__/__init__.cpython-310.pyc create mode 100644 rasa/actions/__pycache__/actions.cpython-310.pyc create mode 100644 rasa/actions/actions.py create mode 100644 rasa/config.yml create mode 100644 rasa/credentials.yml create mode 100644 rasa/data/nlu.yml create mode 100644 rasa/data/rules.yml create mode 100644 rasa/data/stories.yml create mode 100644 rasa/domain.yml create mode 100644 rasa/endpoints.yml create mode 100644 rasa/tests/test_stories.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a090aab --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/venv +.vscode \ No newline at end of file diff --git a/README.md b/app/README.md similarity index 100% rename from README.md rename to app/README.md diff --git a/app.py b/app/app.py similarity index 75% rename from app.py rename to app/app.py index d8e8519..1333743 100644 --- a/app.py +++ b/app/app.py @@ -1,7 +1,7 @@ from flask import Flask from flask import render_template -app = Flask(__name__, template_folder="static/templates") +app = Flask(__name__) @app.route('/') def home(): diff --git a/static/icons/favicon.ico b/app/static/icons/favicon.ico similarity index 100% rename from static/icons/favicon.ico rename to app/static/icons/favicon.ico diff --git a/static/templates/index.html b/app/templates/index.html similarity index 100% rename from static/templates/index.html rename to app/templates/index.html diff --git a/rasa/actions/__init__.py b/rasa/actions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rasa/actions/__pycache__/__init__.cpython-310.pyc b/rasa/actions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e8202dd4b747b3fa792e1eb2b38e65001073ff6 GIT binary patch literal 220 zcmYjLy$ZrG5Kg6o2z?NTnq5T%S8)-ygK$k_O>LW!iv=g2$5(Ro0o<Lu45A<0clX`T z$GI$<2nN0u$C#gy{*ka)b5P1uioKX7ySwnQ{iFA7Glv5iPf)tnc2-00UFET5Q7Nu# zqXPl;s7+1*gLPf5PZ$apU@+YPTU!9xU~*nLV`T_D5=z}z$$r6N^R<zv<2gyC;zX%g Te|?OXtt&5$S;fa_#FUB;G;KdS literal 0 HcmV?d00001 diff --git a/rasa/actions/__pycache__/actions.cpython-310.pyc b/rasa/actions/__pycache__/actions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d132fb64e601652a299ba237d31886db1435edf GIT binary patch literal 219 zcmYjMu?oUK3{9nj2>lR;+FeBiS8)-yfTY*6p0>SmISVfSkH6$9xVk%;8;U;2OI}DG ziA|Cb2<SaKyaoWzApQ}FSW0j#RKOO-(dG^=w14!ut){qR?HCJNo5m<?oh=>JBFeqg zC#^gqx1@B+p1iS5s*dDy>#@^Khij7~8?RFtIa8?_9WiC9GMV^!Lsf5+kqYbF=Sh2g R4Cl2iE|p${yIB5!7{0I~KjQ!Z literal 0 HcmV?d00001 diff --git a/rasa/actions/actions.py b/rasa/actions/actions.py new file mode 100644 index 0000000..8bf1f75 --- /dev/null +++ b/rasa/actions/actions.py @@ -0,0 +1,27 @@ +# This files contains your custom actions which can be used to run +# custom Python code. +# +# See this guide on how to implement these action: +# https://rasa.com/docs/rasa/custom-actions + + +# This is a simple example for a custom action which utters "Hello World!" + +# from typing import Any, Text, Dict, List +# +# from rasa_sdk import Action, Tracker +# from rasa_sdk.executor import CollectingDispatcher +# +# +# class ActionHelloWorld(Action): +# +# def name(self) -> Text: +# return "action_hello_world" +# +# def run(self, dispatcher: CollectingDispatcher, +# tracker: Tracker, +# domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: +# +# dispatcher.utter_message(text="Hello World!") +# +# return [] diff --git a/rasa/config.yml b/rasa/config.yml new file mode 100644 index 0000000..eb54e60 --- /dev/null +++ b/rasa/config.yml @@ -0,0 +1,44 @@ +# The config recipe. +# https://rasa.com/docs/rasa/model-configuration/ +recipe: default.v1 + +# The assistant project unique identifier +# This default value must be replaced with a unique assistant name within your deployment +assistant_id: placeholder_default + +# Configuration for Rasa NLU. +# https://rasa.com/docs/rasa/nlu/components/ +language: en + +pipeline: +# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model. +# # If you'd like to customize it, uncomment and adjust the pipeline. +# # See https://rasa.com/docs/rasa/tuning-your-model for more information. +# - name: WhitespaceTokenizer +# - name: RegexFeaturizer +# - name: LexicalSyntacticFeaturizer +# - name: CountVectorsFeaturizer +# - name: CountVectorsFeaturizer +# analyzer: char_wb +# min_ngram: 1 +# max_ngram: 4 +# - name: DIETClassifier +# epochs: 100 +# - name: EntitySynonymMapper +# - name: ResponseSelector +# epochs: 100 +# - name: FallbackClassifier +# threshold: 0.3 +# ambiguity_threshold: 0.1 + +# Configuration for Rasa Core. +# https://rasa.com/docs/rasa/core/policies/ +policies: +# # No configuration for policies was provided. The following default policies were used to train your model. +# # If you'd like to customize them, uncomment and adjust the policies. +# # See https://rasa.com/docs/rasa/policies for more information. +# - name: MemoizationPolicy +# - name: TEDPolicy +# max_history: 5 +# epochs: 100 +# - name: RulePolicy diff --git a/rasa/credentials.yml b/rasa/credentials.yml new file mode 100644 index 0000000..e9f1291 --- /dev/null +++ b/rasa/credentials.yml @@ -0,0 +1,33 @@ +# This file contains the credentials for the voice & chat platforms +# which your bot is using. +# https://rasa.com/docs/rasa/messaging-and-voice-channels + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "<verify>" +# secret: "<your secret>" +# page-access-token: "<your page access token>" + +#slack: +# slack_token: "<your slack token>" +# slack_channel: "<the slack channel>" +# slack_signing_secret: "<your slack signing secret>" + +#socketio: +# user_message_evt: <event name for user message> +# bot_message_evt: <event name for bot messages> +# session_persistence: <true/false> + +#mattermost: +# url: "https://<mattermost instance>/api/v4" +# token: "<bot token>" +# webhook_url: "<callback URL>" + +# This entry is needed if you are using Rasa Enterprise. The entry represents credentials +# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers. +rasa: + url: "http://localhost:5002/api" diff --git a/rasa/data/nlu.yml b/rasa/data/nlu.yml new file mode 100644 index 0000000..2f6c3f8 --- /dev/null +++ b/rasa/data/nlu.yml @@ -0,0 +1,91 @@ +version: "3.1" + +nlu: +- intent: greet + examples: | + - hey + - hello + - hi + - hello there + - good morning + - good evening + - moin + - hey there + - let's go + - hey dude + - goodmorning + - goodevening + - good afternoon + +- intent: goodbye + examples: | + - cu + - good by + - cee you later + - good night + - bye + - goodbye + - have a nice day + - see you around + - bye bye + - see you later + +- intent: affirm + examples: | + - yes + - y + - indeed + - of course + - that sounds good + - correct + +- intent: deny + examples: | + - no + - n + - never + - I don't think so + - don't like that + - no way + - not really + +- intent: mood_great + examples: | + - perfect + - great + - amazing + - feeling like a king + - wonderful + - I am feeling very good + - I am great + - I am amazing + - I am going to save the world + - super stoked + - extremely good + - so so perfect + - so good + - so perfect + +- intent: mood_unhappy + examples: | + - my day was horrible + - I am sad + - I don't feel very well + - I am disappointed + - super sad + - I'm so sad + - sad + - very sad + - unhappy + - not good + - not very good + - extremly sad + - so saad + - so sad + +- intent: bot_challenge + examples: | + - are you a bot? + - are you a human? + - am I talking to a bot? + - am I talking to a human? diff --git a/rasa/data/rules.yml b/rasa/data/rules.yml new file mode 100644 index 0000000..a9987ee --- /dev/null +++ b/rasa/data/rules.yml @@ -0,0 +1,13 @@ +version: "3.1" + +rules: + +- rule: Say goodbye anytime the user says goodbye + steps: + - intent: goodbye + - action: utter_goodbye + +- rule: Say 'I am a bot' anytime the user challenges + steps: + - intent: bot_challenge + - action: utter_iamabot diff --git a/rasa/data/stories.yml b/rasa/data/stories.yml new file mode 100644 index 0000000..6ff78ee --- /dev/null +++ b/rasa/data/stories.yml @@ -0,0 +1,30 @@ +version: "3.1" + +stories: + +- story: happy path + steps: + - intent: greet + - action: utter_greet + - intent: mood_great + - action: utter_happy + +- story: sad path 1 + steps: + - intent: greet + - action: utter_greet + - intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - intent: affirm + - action: utter_happy + +- story: sad path 2 + steps: + - intent: greet + - action: utter_greet + - intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - intent: deny + - action: utter_goodbye diff --git a/rasa/domain.yml b/rasa/domain.yml new file mode 100644 index 0000000..932195f --- /dev/null +++ b/rasa/domain.yml @@ -0,0 +1,34 @@ +version: "3.1" + +intents: + - greet + - goodbye + - affirm + - deny + - mood_great + - mood_unhappy + - bot_challenge + +responses: + utter_greet: + - text: "Hey! How are you?" + + utter_cheer_up: + - text: "Here is something to cheer you up:" + image: "https://i.imgur.com/nGF1K8f.jpg" + + utter_did_that_help: + - text: "Did that help you?" + + utter_happy: + - text: "Great, carry on!" + + utter_goodbye: + - text: "Bye" + + utter_iamabot: + - text: "I am a bot, powered by Rasa." + +session_config: + session_expiration_time: 60 + carry_over_slots_to_new_session: true diff --git a/rasa/endpoints.yml b/rasa/endpoints.yml new file mode 100644 index 0000000..1128e1d --- /dev/null +++ b/rasa/endpoints.yml @@ -0,0 +1,42 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa/model-storage#fetching-models-from-a-server + +#models: +# url: http://my-server.com/models/default_core@latest +# wait_time_between_pulls: 10 # [optional](default: 100) + +# Server which runs your custom actions. +# https://rasa.com/docs/rasa/custom-actions + +#action_endpoint: +# url: "http://localhost:5055/webhook" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa/tracker-stores + +#tracker_store: +# type: redis +# url: <host of the redis instance, e.g. localhost> +# port: <port of your redis instance, usually 6379> +# db: <number of your database within redis, e.g. 0> +# password: <password used for authentication> +# use_ssl: <whether or not the communication is encrypted, default false> + +#tracker_store: +# type: mongod +# url: <url to your mongo instance, e.g. mongodb://localhost:27017> +# db: <name of the db within your mongo instance, e.g. rasa> +# username: <username used for authentication> +# password: <password used for authentication> + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue diff --git a/rasa/tests/test_stories.yml b/rasa/tests/test_stories.yml new file mode 100644 index 0000000..d46e39b --- /dev/null +++ b/rasa/tests/test_stories.yml @@ -0,0 +1,91 @@ +#### This file contains tests to evaluate that your bot behaves as expected. +#### If you want to learn more, please see the docs: https://rasa.com/docs/rasa/testing-your-assistant + +stories: +- story: happy path 1 + steps: + - user: | + hello there! + intent: greet + - action: utter_greet + - user: | + amazing + intent: mood_great + - action: utter_happy + +- story: happy path 2 + steps: + - user: | + hello there! + intent: greet + - action: utter_greet + - user: | + amazing + intent: mood_great + - action: utter_happy + - user: | + bye-bye! + intent: goodbye + - action: utter_goodbye + +- story: sad path 1 + steps: + - user: | + hello + intent: greet + - action: utter_greet + - user: | + not good + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + yes + intent: affirm + - action: utter_happy + +- story: sad path 2 + steps: + - user: | + hello + intent: greet + - action: utter_greet + - user: | + not good + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + not really + intent: deny + - action: utter_goodbye + +- story: sad path 3 + steps: + - user: | + hi + intent: greet + - action: utter_greet + - user: | + very terrible + intent: mood_unhappy + - action: utter_cheer_up + - action: utter_did_that_help + - user: | + no + intent: deny + - action: utter_goodbye + +- story: say goodbye + steps: + - user: | + bye-bye! + intent: goodbye + - action: utter_goodbye + +- story: bot challenge + steps: + - user: | + are you a bot? + intent: bot_challenge + - action: utter_iamabot -- GitLab