From 0c79b90121d994a0e103aefe206612635108b08c Mon Sep 17 00:00:00 2001 From: powerzilly Date: Tue, 17 Dec 2024 14:54:10 +0000 Subject: [PATCH 1/9] Initial Test --- .env | 4 +- .rasa/cache/cache.db | Bin 0 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 0 -> 61440 bytes .rasa/cache/tmpmcpc3ms2/command_prompt.jinja2 | 60 ++++++++++++++++++ .rasa/cache/tmpmcpc3ms2/config.json | 20 ++++++ actions/__init__.py | 0 actions/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 146 bytes actions/__pycache__/actions.cpython-310.pyc | Bin 0 -> 1457 bytes actions/actions.py | 28 ++++++++ config.yml | 15 +++++ credentials.yml | 33 ++++++++++ data/flows.yml | 8 +++ data/patterns.yml | 11 ++++ data/stories.yml | 5 ++ domain.yml | 38 +++++++++++ endpoints.yml | 50 +++++++++++++++ models/20241217-135916-maroon-jail.tar.gz | Bin 0 -> 9078 bytes models/20241217-142208-clever-mustard.tar.gz | Bin 0 -> 9124 bytes 18 files changed, 270 insertions(+), 2 deletions(-) create mode 100644 .rasa/cache/cache.db create mode 100644 .rasa/cache/rasa-llm-cache/cache.db create mode 100644 .rasa/cache/tmpmcpc3ms2/command_prompt.jinja2 create mode 100644 .rasa/cache/tmpmcpc3ms2/config.json create mode 100644 actions/__init__.py create mode 100644 actions/__pycache__/__init__.cpython-310.pyc create mode 100644 actions/__pycache__/actions.cpython-310.pyc create mode 100644 actions/actions.py create mode 100644 config.yml create mode 100644 credentials.yml create mode 100644 data/flows.yml create mode 100644 data/patterns.yml create mode 100644 data/stories.yml create mode 100644 domain.yml create mode 100644 endpoints.yml create mode 100644 models/20241217-135916-maroon-jail.tar.gz create mode 100644 models/20241217-142208-clever-mustard.tar.gz diff --git a/.env b/.env index d6c1a9d..760cca3 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -RASA_PRO_LICENSE='your_rasa_pro_license_key_here' -OPENAI_API_KEY='your_openai_api_key_here' +RASA_PRO_LICENSE='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZTk0MGRjMi0zMmJhLTRjM2EtYWE2My01ODAyNWI0YjFhZmIiLCJpYXQiOjE3MzQ0Mzk5NzUsIm5iZiI6MTczNDQzOTk3MSwic2NvcGUiOiJyYXNhOnBybyByYXNhOnBybzpjaGFtcGlvbiIsImV4cCI6MTgyOTA0Nzk3MSwiZW1haWwiOiJkYW5pZWxlLmRlZ3ZvaWNlQGdtYWlsLmNvbSIsImNvbXBhbnkiOiJSYXNhIENoYW1waW9ucyJ9.yT1AtBBeKyKAxekCCd8wHGSb3Wjd-dCnaU18lHS_ab3M1CmFQkkC-0bQANtor7rYbZKdMEEPUW9G8NZu3wHODEWgUFBP0cau4zjpcTgBQVMBJcfFg59SZa2LmLr0bPjDEiLqO6SO9I3-OLeBdEhm7Tx386leuGyz0xrVE7JshylVXQ8YNWNJgFxQKRPwoWK2YHR1oUDKyVP2l8Uo9AbCyZTGjQt9WwAk7poiqxSRdFDJHVCXSrC4rRejTgMhTaBCu2DbL52o0nsSs1r95k_Dlgvg0rvZBvuGgb4AihV_r12vEykg6CKbtKDZuYW5hxl-njI4tl9tGDnhlPtuNoLuhA' +OPENAI_API_KEY='your_openai_api_key_here' \ No newline at end of file diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..e166eb4bb4a789019491b419dbc869975e005752 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/.rasa/cache/tmpmcpc3ms2/command_prompt.jinja2 b/.rasa/cache/tmpmcpc3ms2/command_prompt.jinja2 new file mode 100644 index 0000000..673fcae --- /dev/null +++ b/.rasa/cache/tmpmcpc3ms2/command_prompt.jinja2 @@ -0,0 +1,60 @@ +Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. + +These are the flows that can be started, with their description and slots: +{% for flow in available_flows %} +{{ flow.name }}: {{ flow.description }} + {% for slot in flow.slots -%} + slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} + {% endfor %} +{%- endfor %} + +=== +Here is what happened previously in the conversation: +{{ current_conversation }} + +=== +{% if current_flow != None %} +You are currently in the flow "{{ current_flow }}". +You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. + +{% if flow_slots|length > 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/.rasa/cache/tmpmcpc3ms2/config.json b/.rasa/cache/tmpmcpc3ms2/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/.rasa/cache/tmpmcpc3ms2/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/actions/__init__.py b/actions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/actions/__pycache__/__init__.cpython-310.pyc b/actions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efdfbd5279f8c996ccc1637a2e1fdbacd10fc6e5 GIT binary patch literal 146 zcmd1j<>g`kf_{dmbP)X*L?8o3AjbiSi&=m~3PUi1CZpd&M4u=4F<|$LkeT-r}&y%}*)KNwotR KSIh(?SQr3tb|C`* literal 0 HcmV?d00001 diff --git a/actions/__pycache__/actions.cpython-310.pyc b/actions/__pycache__/actions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8737a6e52a21724201a73b7d76f195432d214513 GIT binary patch literal 1457 zcmaKs&2A$_5XbvtJRZ+Ffz28uw5&h^AsNZZYC#+jLPSAuVGV*k&85{$x4je3SGsyc zh@2C94bPB0a^!XT$|?@q`0~*5&FImMi&dC?0sAML4UzSld$OcuM#hlsra%iHLJWK50+8ce#%)rDin29a_ zO=hVX{=}xq6=r2q9^%8?7fp@cjGNs^XJx0MVK6RzIoahTYl5HBi(^6 zzk3>XX!TjMvUPE0-Ps4&j9KfIt)Rv-j`Nuum_CxOGj{`kXdw2h~2n z*$a7sj%RCbxDglPTzGyg)=2UlW_o@X@?3g$EZ5QuaSa(>2$Y@9gJ?Y}+ue{--qz4K z2&1BIJFf}@R|ZpG5i#tDw9==lwDrKsM``g_& z2epIC5ThB33E$&qv%BEFwmYQe<_6?McsnSg#M#sS2%WV!W|zqOB|neW>{6`p@|_RX z92pPr4Dh-x84{NB5P5rwjNK#Lg$Q;_6boKe7C&foZ(q@Ggah z-syaW)MC?Ax~RjrgIBL+d#^X_e@RK#)ekTgQ2UNWD#sFA@4dU|;Ewq;35inFgi3`} zDLk~UB!8^bNvF%}hy?H4J$8V35~*R)xXLS4Fkhm<~Bv str: + return "action_openassistant_response" + + def generate_response(self, prompt: str) -> str: + # Genera una risposta usando il modello OpenAssistant + inputs = tokenizer(prompt, return_tensors="pt") + outputs = model.generate(inputs["input_ids"], max_length=100, num_return_sequences=1) + return tokenizer.decode(outputs[0], skip_special_tokens=True) + + def run(self, dispatcher: CollectingDispatcher, tracker, domain): + # Ottieni l'ultimo messaggio dell'utente + user_message = tracker.latest_message.get("text") + + # Genera una risposta + assistant_response = self.generate_response(user_message) + + # Invia la risposta all'utente + dispatcher.utter_message(text=assistant_response) + return [] \ No newline at end of file diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..3c6dae8 --- /dev/null +++ b/config.yml @@ -0,0 +1,15 @@ +recipe: default.v1 +language: en +pipeline: +- name: SingleStepLLMCommandGenerator + llm: + provider: rasa + model: rasa/cmd_gen_codellama_13b_calm_demo + api_base: "https://tutorial-llm.rasa.ai" + flow_retrieval: + active: false + +policies: +- name: FlowPolicy +# - name: EnterpriseSearchPolicy +assistant_id: 20241217-142206-fixed-mastic diff --git a/credentials.yml b/credentials.yml new file mode 100644 index 0000000..bbd88d4 --- /dev/null +++ b/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-pro/connectors/messaging-and-voice-channels/ + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "" +# secret: "" +# page-access-token: "" + +#slack: +# slack_token: "" +# slack_channel: "" +# slack_signing_secret: "" + +#socketio: +# user_message_evt: +# bot_message_evt: +# session_persistence: + +#mattermost: +# url: "https:///api/v4" +# token: "" +# webhook_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/data/flows.yml b/data/flows.yml new file mode 100644 index 0000000..405321e --- /dev/null +++ b/data/flows.yml @@ -0,0 +1,8 @@ +flows: + transfer_money: + description: Help users send money to friends and family. + steps: + - collect: recipient + - collect: amount + description: the number of US dollars to send + - action: utter_transfer_complete diff --git a/data/patterns.yml b/data/patterns.yml new file mode 100644 index 0000000..dc34bf6 --- /dev/null +++ b/data/patterns.yml @@ -0,0 +1,11 @@ +flows: + pattern_chitchat: + description: Conversation repair flow for off-topic interactions that won't disrupt the main conversation. should not respond to greetings or anything else for which there is a flow defined + name: pattern chitchat + steps: + - action: utter_free_chitchat_response + pattern_search: + description: Flow for handling knowledge-based questions + name: pattern search + steps: + - action: utter_free_chitchat_response diff --git a/data/stories.yml b/data/stories.yml new file mode 100644 index 0000000..7fc021e --- /dev/null +++ b/data/stories.yml @@ -0,0 +1,5 @@ +stories: + - story: generate response with OpenAssistant + steps: + - intent: ask_question + - action: action_openassistant_response diff --git a/domain.yml b/domain.yml new file mode 100644 index 0000000..8b9200a --- /dev/null +++ b/domain.yml @@ -0,0 +1,38 @@ +version: "3.1" + +actions: + - action_openassistant_response + +slots: + recipient: + type: text + mappings: + - type: from_llm + amount: + type: float + mappings: + - type: from_llm + +responses: + utter_ask_recipient: + - text: "Who would you like to send money to?" + + utter_ask_amount: + - text: "How much money would you like to send?" + + utter_transfer_complete: + - text: "All done. {amount} has been sent to {recipient}." + + utter_free_chitchat_response: + - text: "placeholder" + metadata: + rephrase: True + rephrase_prompt: | + The following is a conversation with an AI assistant built with Rasa. + The assistant can help the user transfer money. + The assistant is helpful, creative, clever, and very friendly. + The user is making small talk, and the assistant should respond, keeping things light. + Context / previous conversation with the user: + {{history}} + {{current_input}} + Suggested AI Response: \ No newline at end of file diff --git a/endpoints.yml b/endpoints.yml new file mode 100644 index 0000000..22b5929 --- /dev/null +++ b/endpoints.yml @@ -0,0 +1,50 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions + +action_endpoint: + actions_module: "actions" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa-pro/production/tracker-stores + +#tracker_store: +# type: redis +# url: +# port: +# db: +# password: +# use_ssl: + +#tracker_store: +# type: mongod +# url: +# db: +# username: +# password: + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa-pro/production/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue + +# Allow rephrasing of responses using a Rasa-hosted model +nlg: + type: rephrase + llm: + provider: rasa + model: rasa/cmd_gen_codellama_13b_calm_demo + api_base: "https://tutorial-llm.rasa.ai" diff --git a/models/20241217-135916-maroon-jail.tar.gz b/models/20241217-135916-maroon-jail.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a060bf603171479f47e5535e0801047159d545f5 GIT binary patch literal 9078 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 K2Lc}w;{O0rJ_V2f literal 0 HcmV?d00001 diff --git a/models/20241217-142208-clever-mustard.tar.gz b/models/20241217-142208-clever-mustard.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..dbb58bdf20f7bcf7fabcebe3a30b51611dcc8c8c GIT binary patch literal 9124 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 Qtv Date: Tue, 17 Dec 2024 16:46:30 +0000 Subject: [PATCH 2/9] Training 1 --- .rasa/cache/cache.db | Bin 16384 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 61440 -> 61440 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 0 -> 32768 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 0 -> 98912 bytes .rasa/cache/tmpobyk2ibs/command_prompt.jinja2 | 60 ++++++++++++++++++ .rasa/cache/tmpobyk2ibs/config.json | 20 ++++++ models/20241217-163323-stone-run.tar.gz | Bin 0 -> 9155 bytes .../20241217-163510-descent-pinscher.tar.gz | Bin 0 -> 9188 bytes models/20241217-163809-plain-iteration.tar.gz | Bin 0 -> 9188 bytes tutorial_1/.rasa/cache/cache.db | Bin 0 -> 16384 bytes .../.rasa/cache/rasa-llm-cache/cache.db | Bin 0 -> 32768 bytes .../cache/tmpai47q5lw/command_prompt.jinja2 | 60 ++++++++++++++++++ .../.rasa/cache/tmpai47q5lw/config.json | 20 ++++++ tutorial_1/actions/__init__.py | 0 tutorial_1/actions/actions.py | 22 +++++++ tutorial_1/config.yml | 14 ++++ tutorial_1/credentials.yml | 33 ++++++++++ tutorial_1/data/flows.yml | 16 +++++ tutorial_1/data/patterns.yml | 11 ++++ tutorial_1/domain.yml | 44 +++++++++++++ tutorial_1/endpoints.yml | 50 +++++++++++++++ .../20241217-161816-chamfered-debug.tar.gz | Bin 0 -> 9061 bytes 22 files changed, 350 insertions(+) create mode 100644 .rasa/cache/rasa-llm-cache/cache.db-shm create mode 100644 .rasa/cache/rasa-llm-cache/cache.db-wal create mode 100644 .rasa/cache/tmpobyk2ibs/command_prompt.jinja2 create mode 100644 .rasa/cache/tmpobyk2ibs/config.json create mode 100644 models/20241217-163323-stone-run.tar.gz create mode 100644 models/20241217-163510-descent-pinscher.tar.gz create mode 100644 models/20241217-163809-plain-iteration.tar.gz create mode 100644 tutorial_1/.rasa/cache/cache.db create mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db create mode 100644 tutorial_1/.rasa/cache/tmpai47q5lw/command_prompt.jinja2 create mode 100644 tutorial_1/.rasa/cache/tmpai47q5lw/config.json create mode 100644 tutorial_1/actions/__init__.py create mode 100644 tutorial_1/actions/actions.py create mode 100644 tutorial_1/config.yml create mode 100644 tutorial_1/credentials.yml create mode 100644 tutorial_1/data/flows.yml create mode 100644 tutorial_1/data/patterns.yml create mode 100644 tutorial_1/domain.yml create mode 100644 tutorial_1/endpoints.yml create mode 100644 tutorial_1/models/20241217-161816-chamfered-debug.tar.gz diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db index e166eb4bb4a789019491b419dbc869975e005752..5cb5d2ef5747d9b677ff10e31781b7443f6e9fe1 100644 GIT binary patch delta 694 zcmaix%W70X5QgVqGP;;AH z4-j-MAq(*xe1yD&Z{V3DqF~_cnx?4#`~F%is>P!EaJL$Ny!X5sU%dWowuYm#fqA+4 zb8~;=%f^$@*~PolQ8}3oZ_ek>?mT{xl~ZZ5hU9@sl&waeeQiqwfaF4KfWe}al5KFB zVmnbhQtg019Rb-Lq#e|4lwJ0_5M}|H(Ke}lJMpD3tBU>?g)jp`w!YIlOh<3&O?uzzJ-FPT ze6O~KW;!r?=99TH2WD!%U5>YnIlg~mUiCFSTn+VAv)*m`*XkOnwbhV=!rHdm6!y#W pN9i}&K})u`;xbo%$@*^Gk@X#=BkQZPBa`e{y(R${mgi4j{Q{Cuuh{?q delta 82 zcmZo@U~Fh$oFL7}F;T{ukz-@R5`HdbK5qv8D87$;-kTK_Z22~O%k5<3V&e(lPB5d0RW$;7sdbp diff --git a/.rasa/cache/rasa-llm-cache/cache.db b/.rasa/cache/rasa-llm-cache/cache.db index 9647737909bad4e48f1535277005866a55308f55..c844e31fa728cbc8615d17875c42a291446b4800 100644 GIT binary patch delta 580 zcmZut&rcIU6n@=@5sA)QRBXXRX-uq!;HDuYdO^4tZ~g~P*6AuEvpcmrTic?-`X{*j z13+T9kdS!rjENT$uf&84@yJOI_*-;W+G5mqn8|$KH{W~jTin6L9o(=+FTMwxts;BL zw%A+tih%9W7F(s)v`$OZq}z0Z#>jp#W6v`jjGM{xE7xw(9;8Lt(W#Sh1B?B}y~kxx z^_r*R2uuB;ag7X(6k*{h;AE~U!#Q4)VorIyR@X)gt&SDqg{0_=OgzELiSU7v#^Yft z5VLh1=qSv`k8!-OgZsW)_)(&q^CR=pqlyX=6@&^y|sHF`#Ey2`fGy%Xlp zAlThav-|Hi!=lyO9X=+zQ{{zJg(WK+=CCzwh`rAdi(p#+L!VE7J@!bNHFz{{~lqgCQL6620W$M*%0g=zSg416OfhS3UTiY+gTi b`P(0EZe%oXxFU*t_?pdmlp}muncnyX?6I{0 delta 545 zcmZvYJxCl;5Xa~CA<>IBbEl_wr-Abtj}YQ=BqBC`baqy$m-XGEFYfNU+`g5lja#J1 zcjB|Qh!89f0qHg_pWPA#LLI`Lcl&wUd1P=fp z6=yT@QI?G+sv=mlYJxAij#aBmCAoAv@=>oIF$W4gtkM-cbA@uOVAK$_4Kvr1Vx6d z-Wh#W{p%8}_pyhqx#!unYh&PJo;_+!pUSZA+pguwsskVN-emv%_ie}QP)Tda=3(f; OyDP?9AK~q%sm31^zoAwD diff --git a/.rasa/cache/rasa-llm-cache/cache.db-shm b/.rasa/cache/rasa-llm-cache/cache.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..a36b1b3f0acf60c6380ebb675e2b8480f274f2a4 GIT binary patch literal 32768 zcmeI)J4!=A6b9h`8sE=oeB1@tW)*3~UI@4pdpp4mh)uEvOTh(LxdOLfX`$ze1ltrE zi|@eU48t%pd<*#7*I~Nau5OZkTXU~^dUba_88zd}^ZS?K!}G<{&D-Pq?de%N=lQzo ztGatXe$@B&Z1ifiT>V>f_K*bu0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAh1Azrm}`s zvX+f(Wv4Qa_A|&)P8RqhPZRhnfu%~@TFrVkEBR|T{T$>l$LUhK6afMR2oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0{=ze6Mq3I AmjD0& literal 0 HcmV?d00001 diff --git a/.rasa/cache/rasa-llm-cache/cache.db-wal b/.rasa/cache/rasa-llm-cache/cache.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..ddbdfd346db7fcada5c76c11503a4fb01fb424f3 GIT binary patch literal 98912 zcmeI*ZD`zN0KoC&o_2lNmgmO2wG~C{+t6~3TB?Fmr(%_fD2i`P7tZutv*s>cliS+) zGVjEx;24exg330kY@!qKOTVfx(GLzk=oF_SLs5pvs?PadllJ> zA1%}lDRFH;XoK1T?IZ0yZAc!_2IM}uS8kVma<%M`Eix|sxAH&$0R#|0009ILKmY** z5J2E`3M|U^iRLQD+?duaGh@0dyp7c@6b-6j=d$iab#c*Dn=u_H?bJw-sO>Ucr$+Ps z@ZTYa{5_le^>smhy*Q`VO|8+*Y-hS}VL=tmwT_!|O~*A2r?H@jcD2)Vy7eB@=(f^& zPp|FThHX_h<~NB}G4fQ#%<2!B-jn_|l*g4s{xQ*7=d80#*IU=0HM)B3tetZj@{fvS zRdIbLlj<3HLzTBnP5DPe+v4IgYwcWbHf8AGk8PPozm-loZn8IRq_eKo zpLATiH{I#&ioZK@Y`oxu+AFW!a^u$b>%En6?O;sS$RqMWd9yrUJE|Sl{*{a6=ki^- zM{biF<(1k&?`1p?KmY**5I_I{1Q0*~0R#}32?4pN_? zFObWexEHu*=bm3r~8-v}Up00IagfB*srAby1<3<1h1Q0*~0R#|0009ILD4W2dLe+HMk028B3rx8e z`1Pw@Pj6ZE>OOjbvR&V72mu5TKmY**5I_I{1Q0-AY68JNAhm0 zzq04k&-H;&FR)i`mwj@z?2s)oE|t+*K<=B`spDM;AbC)5j+tOexW znK|`r6#)bgKmY**5I_I{1Q0+VLIU&xFWj5UAGTkz5MSR=mjG5 z3FA-^KmY**5I_I{1Q0*~fyxvJ_5s0VdV$aYf;!K?kHW+c4#K^_=62Ch|IAr$gnEGz za|=js&VkCjbl7VI5I_I{1Q0*~0R#|00D%e;h+Z#Hs1eIz#Vo)`8C_-U1s?dm<$)hw zShtg2pn^Uj>?#5XAbmh}N-@g-P=ZoVXX*dF+nO z?})_qP%jX=6Md|dVvnvBI8oghU5WlK<*o@1?1|foH*Wt00IagfB*sr zAbLqi7qOFJSVo4yL^q7#O~2cun`~PlbAc zlC^;Bn28h5HW5Go0R#|0009ILKmY**A|+4>y+EN}wAK~70H;4|boJUHa9}rxw$X-CLPl)7L88H6KgYxwP zYp=U>{+4U5+8yczO3W=Fy*URe@xo!B5kLR|1Q0*~0R#|0009IlN?_LX0)_daRdkw8 zx1KSx`a`Cb9+@scd0a`%nO2iJ@hDz+95Vt4Abv{P3&ysyDnsFHqKN roQ)xX00IagfB*srAb&yHSTf!_s$e|#`odV&7{2@^%s literal 0 HcmV?d00001 diff --git a/.rasa/cache/tmpobyk2ibs/command_prompt.jinja2 b/.rasa/cache/tmpobyk2ibs/command_prompt.jinja2 new file mode 100644 index 0000000..673fcae --- /dev/null +++ b/.rasa/cache/tmpobyk2ibs/command_prompt.jinja2 @@ -0,0 +1,60 @@ +Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. + +These are the flows that can be started, with their description and slots: +{% for flow in available_flows %} +{{ flow.name }}: {{ flow.description }} + {% for slot in flow.slots -%} + slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} + {% endfor %} +{%- endfor %} + +=== +Here is what happened previously in the conversation: +{{ current_conversation }} + +=== +{% if current_flow != None %} +You are currently in the flow "{{ current_flow }}". +You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. + +{% if flow_slots|length > 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/.rasa/cache/tmpobyk2ibs/config.json b/.rasa/cache/tmpobyk2ibs/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/.rasa/cache/tmpobyk2ibs/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/models/20241217-163323-stone-run.tar.gz b/models/20241217-163323-stone-run.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c921704e6a3bdafae2c280ca339fd482f88fb03b GIT binary patch literal 9155 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%0Dt76gV-rVV2J*n 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 literal 0 HcmV?d00001 diff --git a/models/20241217-163510-descent-pinscher.tar.gz b/models/20241217-163510-descent-pinscher.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..189aad1500bb22110c4bb3ba5f911cd9a0ebf0c5 GIT binary patch literal 9188 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 aDqNI({?YgUKgry_izpy8sX`G!L;WAbG4$X7 literal 0 HcmV?d00001 diff --git a/models/20241217-163809-plain-iteration.tar.gz b/models/20241217-163809-plain-iteration.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e1a415e4d346e3bbc12f67bff434053eaa19226 GIT binary patch literal 9188 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 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/tutorial_1/.rasa/cache/tmpai47q5lw/config.json b/tutorial_1/.rasa/cache/tmpai47q5lw/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/tutorial_1/.rasa/cache/tmpai47q5lw/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/tutorial_1/actions/__init__.py b/tutorial_1/actions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tutorial_1/actions/actions.py b/tutorial_1/actions/actions.py new file mode 100644 index 0000000..312c3a4 --- /dev/null +++ b/tutorial_1/actions/actions.py @@ -0,0 +1,22 @@ +from typing import Any, Text, Dict, List +from rasa_sdk import Action, Tracker +from rasa_sdk.executor import CollectingDispatcher +from rasa_sdk.events import SlotSet + + +class ActionCheckSufficientFunds(Action): + def name(self) -> Text: + return "action_check_sufficient_funds" + + def run( + self, + dispatcher: CollectingDispatcher, + tracker: Tracker, + domain: Dict[Text, Any], + ) -> List[Dict[Text, Any]]: + # hard-coded balance for tutorial purposes. in production this + # would be retrieved from a database or an API + balance = 1000 + transfer_amount = tracker.get_slot("amount") + has_sufficient_funds = transfer_amount <= balance + return [SlotSet("has_sufficient_funds", has_sufficient_funds)] diff --git a/tutorial_1/config.yml b/tutorial_1/config.yml new file mode 100644 index 0000000..41ad796 --- /dev/null +++ b/tutorial_1/config.yml @@ -0,0 +1,14 @@ +recipe: default.v1 +language: en +pipeline: +- name: SingleStepLLMCommandGenerator + llm: + provider: rasa + model: rasa/cmd_gen_codellama_13b_calm_demo + api_base: "https://tutorial-llm.rasa.ai" + flow_retrieval: + active: false + +policies: + - name: FlowPolicy +# - name: EnterpriseSearchPolicy \ No newline at end of file diff --git a/tutorial_1/credentials.yml b/tutorial_1/credentials.yml new file mode 100644 index 0000000..bbd88d4 --- /dev/null +++ b/tutorial_1/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-pro/connectors/messaging-and-voice-channels/ + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "" +# secret: "" +# page-access-token: "" + +#slack: +# slack_token: "" +# slack_channel: "" +# slack_signing_secret: "" + +#socketio: +# user_message_evt: +# bot_message_evt: +# session_persistence: + +#mattermost: +# url: "https:///api/v4" +# token: "" +# webhook_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/tutorial_1/data/flows.yml b/tutorial_1/data/flows.yml new file mode 100644 index 0000000..8a52b99 --- /dev/null +++ b/tutorial_1/data/flows.yml @@ -0,0 +1,16 @@ +flows: + transfer_money: + description: Help users send money to friends and family. + steps: + - collect: recipient + - collect: amount + description: the number of US dollars to send + - collect: final_confirmation + next: + - if: not slots.final_confirmation + then: + - action: utter_transfer_cancelled + next: END + - else: transfer_successful + - action: utter_transfer_complete + id: transfer_successful \ No newline at end of file diff --git a/tutorial_1/data/patterns.yml b/tutorial_1/data/patterns.yml new file mode 100644 index 0000000..dc34bf6 --- /dev/null +++ b/tutorial_1/data/patterns.yml @@ -0,0 +1,11 @@ +flows: + pattern_chitchat: + description: Conversation repair flow for off-topic interactions that won't disrupt the main conversation. should not respond to greetings or anything else for which there is a flow defined + name: pattern chitchat + steps: + - action: utter_free_chitchat_response + pattern_search: + description: Flow for handling knowledge-based questions + name: pattern search + steps: + - action: utter_free_chitchat_response diff --git a/tutorial_1/domain.yml b/tutorial_1/domain.yml new file mode 100644 index 0000000..c799cb5 --- /dev/null +++ b/tutorial_1/domain.yml @@ -0,0 +1,44 @@ +version: "3.1" + +slots: + recipient: + type: text + mappings: + - type: from_llm + amount: + type: float + mappings: + - type: from_llm + final_confirmation: + type: bool + mappings: + - type: from_llm + +responses: + utter_ask_recipient: + - text: "Who would you like to send money to?" + + utter_ask_amount: + - text: "How much money would you like to send?" + + utter_transfer_complete: + - text: "All done. {amount} has been sent to {recipient}." + + utter_ask_final_confirmation: + - text: "Please confirm: you want to transfer {amount} to {recipient}?" + utter_transfer_cancelled: + - text: "Your transfer has been cancelled." + + utter_free_chitchat_response: + - text: "placeholder" + metadata: + rephrase: True + rephrase_prompt: | + The following is a conversation with an AI assistant built with Rasa. + The assistant can help the user transfer money. + The assistant is helpful, creative, clever, and very friendly. + The user is making small talk, and the assistant should respond, keeping things light. + Context / previous conversation with the user: + {{history}} + {{current_input}} + Suggested AI Response: \ No newline at end of file diff --git a/tutorial_1/endpoints.yml b/tutorial_1/endpoints.yml new file mode 100644 index 0000000..22b5929 --- /dev/null +++ b/tutorial_1/endpoints.yml @@ -0,0 +1,50 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions + +action_endpoint: + actions_module: "actions" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa-pro/production/tracker-stores + +#tracker_store: +# type: redis +# url: +# port: +# db: +# password: +# use_ssl: + +#tracker_store: +# type: mongod +# url: +# db: +# username: +# password: + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa-pro/production/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue + +# Allow rephrasing of responses using a Rasa-hosted model +nlg: + type: rephrase + llm: + provider: rasa + model: rasa/cmd_gen_codellama_13b_calm_demo + api_base: "https://tutorial-llm.rasa.ai" diff --git a/tutorial_1/models/20241217-161816-chamfered-debug.tar.gz b/tutorial_1/models/20241217-161816-chamfered-debug.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..666a655736eba138817c62a7fec37611aad98018 GIT binary patch literal 9061 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%0A<=&ApEg^J7u%LomkC2YjQewlPz`@WetR;v8ay zW~QeDSL>Pe0#9{r>CsjsW`u1Ak`BVtog8f>E4Il;xGndz6_I3S&;2Cm4L?yVG7tZx zRvoYf)1{Y2C{;o*%?*~Sm^|AMMXRm@Zkzk875T1;n@OckC$tOVQ#TuKKcj^hWw%hhzYwU<*~H17 z_~EZv(l(l!bBV8fXgvuuxo+c$ z!1s{Om7(TG1JkUYG1vk&9u3<C8IMi0DC39u2T`}iXS9GX7Vs$mh{=ODW6Xwb4I z6J8vNt4(3wcPw*D5&zxHU(H(Sh!n(3i~P1oY?waJi0J@fy02GOlz+ut@4xgNPD^d) zcaBWR#7EViE6@gu`w8NsLFL?l-~F-%2g|R3ANV+ZFnVGAJvy~KNLpqaa$S`%>2b&BG==^^G)7vQ!$ z^&Ob|u0yMslrcv=ti=sB`atQa{mK!7W-esfYr{8HFl}+0>HzbTiPC*k3#{fl3@uRpKy(8;UljoLEmvozIMW|a20(BamCK0AkE4F7J+B$wXus} zj-CCf-NPQ(`IJXtLArYUtzm@4JNiqEKdVE#4xq`U9pfd*}Dd6IIp?&rJ?V3-WEwH&E%#8v*Ir<+TXAgYiN|Kf+QzQLph_l((S$0%!K8gJMrc z-Yx=X=dI>~vQZ@(iAWBqTSqM0N?8G_kEg(QHSast)b;O{t|%eP8h{dWU#|%{MR)vb zfV(c460(;q3!($fHkA)M3In7_Yob6m{k1|RrMn5dJvShB|1bV5&PW6w_Q^7OJy(;@ zGsMHPd0&)pk$=hGE&nUEq&_}?qP3X?GE+Yu0z05PksmO#M+WYNUZ&YmGGH6liq`!jiuiJ%@AtyR)xBd=h=U+t=_*xK_iXIL6$0e_}>R1W<2i z+Ys{cb&-7&^cEl_c^dxpZN1$kth(>(18F#bh8x#^Jo~B{a&+jsa`fEv8s2@m4>h}$ptI|!%?)r1PI)Q9k8Jv?t`^MA&#@ZiDj3@ z{Ahj;5KdXa{QCu8Q5$t-LuzCSwxsU#3`D4qroEil+SE$dhNn{N@mV|PXsG?X`MT~> zGK{8({$qE8==e=5`c6)~eyj1;1*=ihg&Vys@rOHNxU&noRsaXP-eWbp;Bs=07?Ri& zMKEg0zGaR$E>1Rxjil#huz(pSldEu0jQH-`g#D Date: Tue, 17 Dec 2024 16:52:44 +0000 Subject: [PATCH 3/9] Add domain --- .rasa/cache/rasa-llm-cache/cache.db | Bin 61440 -> 73728 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 32768 -> 0 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 98912 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .rasa/cache/rasa-llm-cache/cache.db-shm delete mode 100644 .rasa/cache/rasa-llm-cache/cache.db-wal diff --git a/.rasa/cache/rasa-llm-cache/cache.db b/.rasa/cache/rasa-llm-cache/cache.db index c844e31fa728cbc8615d17875c42a291446b4800..770fb8a62192fd97821a279e5ac04cb846b9c4bf 100644 GIT binary patch delta 6003 zcmbtYe{5vMec$KxkG(supSe5k4yf+d&JW-D{Op-|GjC>qazsQF(h`!isai#p zwnFW9c3J;UQsjSTJmcB#o6qO_d+z&Q{=Vlr&t28koy+BRFO`l3-OG2r8fH;{c<}@M z&xU_i`eNU~MVcSztd~DwCo1Kca^re9x}%uiAL!a#wZXE#9YxnJlKi1ULrqSUtH%CL zaS`VS3iXC+l_Eq&$UZrChrPS38|7Mc;#93t*7HFe<_9`f zZyVq%@~mU4+XmO}&*RpAX3EtGR|X{h0>L$YfAj5wt1r(-?fsb z+-y}(BpV-w(sTEWXe&-T7qq zD?L-aF8J`yx$Z2icl}NN*v`>iFZCVo87MC9{Hwy5;x#*Vcb(pq?|7@{PnVXyyKrOI z?-q9iT&GA&jZ7kybt)#77;Ih2Ek-d*ki@Y}Q?40OMDbXQ7&DX_mtw^X!j!edAY&9J z#4?PmP+Vgf8wHZF5f-IRaIBEz2&Kw$_<2mtf)WYVSdlnIf-BmRL$PB>T5Y7oDb^^B znL|P_mEf3R8{1eKV;#t1F^v^Xs6bezT39ZeOQYCf6b95HwWb17jYnH@u;xM#t_%{6BnqgB z3F3+1u}CpRDn^c5qL9@{QATkLiWUqJm&8geq>M)`Im}Q+9KmoyD&sU!7F3Q2#h586 zcnaDkF+kQ7VdWC)Gp1_C;PSS))OTqX-Gk}OwU_%Pb2v&xm zRDv))+!DiMYqT;FS*l|L-%t$P3OS9yrKDKU2{oWRX&vBnaBazi0GhmRNlGj~(vm~0 zw<$|Bp~^L#0VkNH;9oqo1Zg7R0ttvhN;qdMCc+3UQiCi8KNE-FVaIX_$CwnL8LbqD zi>1m@aA%`vn#SPbU;;#20z~oH7>zX?SJuliI2mfm$&S5x{l&k&?N@f@S>Ib(&z-j% z46h4iNW-ykIDB7N3a<+Hg_niBVNcl6_jcb~5br+S_p6=xT)_N5{SfXw6j-NpYZzFz#7;)})Si(f7NN%7I* zQt?djbaA@)+r^K-xBt0!p*Pp_Rqcdu|$QFaGHDyZ&Ibz4(0LTVqjs@ksQ+{dbJCSLffnR5-e_ zxNzb>hTDtmOT&kbtSoN-$?qRtSqwi@9=f>a-Z$=g_*{423%TOcyJ%stdniAhdtqtm z&nM3w90_v}%6oD>g76=rSyRIOUK zzc*g!$mKpcST=)K4=U=I!AM0I;z~qg>LTe<8W|_76HXz@)ZoaVp0%oB;RkSxQgB8p zvVn&lyY;4WsWD||?Lg_K+Ub&3)zZzSDO)*Jny<~38a1QlkCkq&x6YJQb-poGu1+@p zS+&-bRJ{&mjjC!}I$dr|9m|5x|5kvr=PvEtBS!`swFYGKM(w1n*5S(}d-lTkbwq⁡0|c0mdaIKo1L|~QMzl+&dz5a{pMAps(upwS$3Yj z`I09LmQ8j&S*3by#f}LypGAw+=C(V zZ6}5{83g}m&sq4)p|0uk7fxKtme1^$iG(5pN|6W?MIxF?5lKW*lr*!u(ZY#%OUf<= zXRin@7x6|QTu1aEM@r>Jsc!8|y;LcmwBAjI?zTV2 zN=BPrr_$P7W3At9wvOzHADlQ$fWHm4A(M@iV(cj$ch$q|7`^}Sb`x5YNr;f`*?U>O zm|GwMw+e8bgpgp%dA{&0@#->LQ02D*Q zjw}F;C~__W4>1we02<0{N7Jq0fk#{!WY2x-!rqZ`Im!xmzSmk zfI>Dv`F~W`KexE{5T1lA+n!rcVCV0fP*Q1q6&ptm{2-#%&`4VAB9h?LKuyXy+cF+X zfN~(%C&VUG6p}Pe@gBSm$^9SX+pOYi^29}{ zbu6L@P9kWASOnEQH#|XvTeg)cf`c#5XXwG9XmcX;fg3#6=gn3sY^KJQRG5A5YkRY= zys{TkqW8&Zw4R7k%rtf*qBfn!9xI;zvf9KbPV}U!hIBW@cclwB7rks zC;|(6x|)jq83aJV5fp!_58W2mjw1TX({E6(`Yu9Jh2W$HT*$gxG-hKSxbDcZ$g>$*$!#m$7 zoLgR6EKHvHO|~9+ZoBV39xdc zqgww&<)Qkvu|0dpyj6F=_Va5Y_pX+638XHEEP@yZXld$nBzU4Dcqt|DumP`XZtHC3 z%ef~$rmB;^&vE4{pf9UR3EntOeYAAEHdist7~d@LW~`5YjagN#J7@=1`lDuAaJAXy z$yOKjPG{8rh4(>lgj!|t%*l8iQ}+*U_Z6xbe2s$ExBY5138G(wPNx4;AkYF5-XLo+CYkxBrKq{E4mK)G2ZcGUK;0#1iRtl~c`2zCyp5&IiX6oyi6xoEC7H>^ z5={)uri>|>#o6%%naSBXsqqCx`6czEBWiwkoyOH$*DEAx^w zit_XFON+%DYbPh_OE5LoOs>|Kl5VVK)@OpMN={790ICH#OMyYOv1;-LeKFz2N@hjI zN`~+J%!*71 z*D`#SWHx2O=2}Juab`oN$%gvE9{)isO!qSU6J^$giRb1f7Jwbd@K=J_7$%yPUs{xx zm=m9ypOVV(XYxUNQ74AqNTwy0mgL8mB_@}a<}&;OxeVbShM%BVV&i`VBpLYmfAfFi z|H%J_|2hAo&590N`6n)rnEcdV-cOCSoPpbma{-$V_e2g`9(gua&gUGbdDiml@O)wa z#u>>sk57Q_DgQ3slWe!xGkDUtO4%m!7qjl;(&N6t7tXH8+r+hpqlMR+Q;4;kn|X3U zz`czN+*v031+q=Hf9SAzZ>T#Lvl_qiWcCE#&4B{%`6fH(A7obJ6Q0ao020{GJ2{}1 KeX~^EvqAuxaLOJ4 diff --git a/.rasa/cache/rasa-llm-cache/cache.db-shm b/.rasa/cache/rasa-llm-cache/cache.db-shm deleted file mode 100644 index a36b1b3f0acf60c6380ebb675e2b8480f274f2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)J4!=A6b9h`8sE=oeB1@tW)*3~UI@4pdpp4mh)uEvOTh(LxdOLfX`$ze1ltrE zi|@eU48t%pd<*#7*I~Nau5OZkTXU~^dUba_88zd}^ZS?K!}G<{&D-Pq?de%N=lQzo ztGatXe$@B&Z1ifiT>V>f_K*bu0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAh1Azrm}`s zvX+f(Wv4Qa_A|&)P8RqhPZRhnfu%~@TFrVkEBR|T{T$>l$LUhK6afMR2oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0{=ze6Mq3I AmjD0& diff --git a/.rasa/cache/rasa-llm-cache/cache.db-wal b/.rasa/cache/rasa-llm-cache/cache.db-wal deleted file mode 100644 index ddbdfd346db7fcada5c76c11503a4fb01fb424f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98912 zcmeI*ZD`zN0KoC&o_2lNmgmO2wG~C{+t6~3TB?Fmr(%_fD2i`P7tZutv*s>cliS+) zGVjEx;24exg330kY@!qKOTVfx(GLzk=oF_SLs5pvs?PadllJ> zA1%}lDRFH;XoK1T?IZ0yZAc!_2IM}uS8kVma<%M`Eix|sxAH&$0R#|0009ILKmY** z5J2E`3M|U^iRLQD+?duaGh@0dyp7c@6b-6j=d$iab#c*Dn=u_H?bJw-sO>Ucr$+Ps z@ZTYa{5_le^>smhy*Q`VO|8+*Y-hS}VL=tmwT_!|O~*A2r?H@jcD2)Vy7eB@=(f^& zPp|FThHX_h<~NB}G4fQ#%<2!B-jn_|l*g4s{xQ*7=d80#*IU=0HM)B3tetZj@{fvS zRdIbLlj<3HLzTBnP5DPe+v4IgYwcWbHf8AGk8PPozm-loZn8IRq_eKo zpLATiH{I#&ioZK@Y`oxu+AFW!a^u$b>%En6?O;sS$RqMWd9yrUJE|Sl{*{a6=ki^- zM{biF<(1k&?`1p?KmY**5I_I{1Q0*~0R#}32?4pN_? zFObWexEHu*=bm3r~8-v}Up00IagfB*srAby1<3<1h1Q0*~0R#|0009ILD4W2dLe+HMk028B3rx8e z`1Pw@Pj6ZE>OOjbvR&V72mu5TKmY**5I_I{1Q0-AY68JNAhm0 zzq04k&-H;&FR)i`mwj@z?2s)oE|t+*K<=B`spDM;AbC)5j+tOexW znK|`r6#)bgKmY**5I_I{1Q0+VLIU&xFWj5UAGTkz5MSR=mjG5 z3FA-^KmY**5I_I{1Q0*~fyxvJ_5s0VdV$aYf;!K?kHW+c4#K^_=62Ch|IAr$gnEGz za|=js&VkCjbl7VI5I_I{1Q0*~0R#|00D%e;h+Z#Hs1eIz#Vo)`8C_-U1s?dm<$)hw zShtg2pn^Uj>?#5XAbmh}N-@g-P=ZoVXX*dF+nO z?})_qP%jX=6Md|dVvnvBI8oghU5WlK<*o@1?1|foH*Wt00IagfB*sr zAbLqi7qOFJSVo4yL^q7#O~2cun`~PlbAc zlC^;Bn28h5HW5Go0R#|0009ILKmY**A|+4>y+EN}wAK~70H;4|boJUHa9}rxw$X-CLPl)7L88H6KgYxwP zYp=U>{+4U5+8yczO3W=Fy*URe@xo!B5kLR|1Q0*~0R#|0009IlN?_LX0)_daRdkw8 zx1KSx`a`Cb9+@scd0a`%nO2iJ@hDz+95Vt4Abv{P3&ysyDnsFHqKN roQ)xX00IagfB*srAb&yHSTf!_s$e|#`odV&7{2@^%s From bfc7f1eb2122915c6d0215db4d3c9b75da10384b Mon Sep 17 00:00:00 2001 From: powerzilly Date: Tue, 17 Dec 2024 16:57:35 +0000 Subject: [PATCH 4/9] INtegrazione --- .rasa/cache/cache.db | Bin 16384 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 73728 -> 90112 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 0 -> 32768 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 0 -> 370832 bytes .rasa/cache/tmpydlqtcg0/command_prompt.jinja2 | 60 ++++++++++++++++++ .rasa/cache/tmpydlqtcg0/config.json | 20 ++++++ domain.yml | 6 ++ models/20241217-164701-online-couple.tar.gz | Bin 0 -> 9182 bytes .../20241217-164837-generative-canoe.tar.gz | Bin 0 -> 9193 bytes models/20241217-165114-mild-barnacles.tar.gz | Bin 0 -> 9273 bytes 10 files changed, 86 insertions(+) create mode 100644 .rasa/cache/rasa-llm-cache/cache.db-shm create mode 100644 .rasa/cache/rasa-llm-cache/cache.db-wal create mode 100644 .rasa/cache/tmpydlqtcg0/command_prompt.jinja2 create mode 100644 .rasa/cache/tmpydlqtcg0/config.json create mode 100644 models/20241217-164701-online-couple.tar.gz create mode 100644 models/20241217-164837-generative-canoe.tar.gz create mode 100644 models/20241217-165114-mild-barnacles.tar.gz diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db index 5cb5d2ef5747d9b677ff10e31781b7443f6e9fe1..a00649e4a4edfc0c0b00bfba1d7f8bcd1c645c44 100644 GIT binary patch delta 702 zcmaiyJ!=$E6oz*Y*_}-?V__DIn`LAZ5h3e6=YFrkA{Ghg){2EV_hX_Ei-3()HXzul z7gE@0p`9RM7sNuav+)lEY|>ck9}s7j*afCNJoldGeea!2qRAwBc`;gf)x8z196o%X zcH;JNBfX#eNp3HFSh}%zu<(1~Mf>=0_j}vz_v7YxeDlKfyNV02Mxr(Z6c$1-p)@7N z=SCVVa$g7rD1m#em{e$r+-PpOwiM9k774NqzzvWYh#`j|@Bt9b1Ph;fohI9Uyz_{f z@S}J6N^8Ed(J%x#)y5+y&HA2pptlwo z%>_}~7FG(1BBxN~MVU=1!E@>ivECPiF@{!Yuc$1j@Y-0%)Tx`!3Jp}05tdue+|KS( zyG_ar>*1h#Z;`1XRRcm%0aQdtSD*hMq99U+x2q3M2EafQtf*J25OD?7RoAMZxQLQhh{M)s?dn{juJyS@_}0zB=IF~mVm7*d delta 180 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 delta 870 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 %i%z4$o(OsRrkM-O)aL1hQMZ+C;cO28Xap1}J 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 xldX5{^u9wJJ=q6V|2WEtcJ0)@`#;Xk 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/.rasa/cache/tmpydlqtcg0/config.json b/.rasa/cache/tmpydlqtcg0/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/.rasa/cache/tmpydlqtcg0/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/domain.yml b/domain.yml index 8b9200a..a00cc0f 100644 --- a/domain.yml +++ b/domain.yml @@ -20,6 +20,12 @@ responses: utter_ask_amount: - text: "How much money would you like to send?" + utter_ask_final_confirmation: + - text: "Please confirm: you want to transfer {amount} to {recipient}?" + + utter_transfer_cancelled: + - text: "Your transfer has been cancelled." + utter_transfer_complete: - text: "All done. {amount} has been sent to {recipient}." diff --git a/models/20241217-164701-online-couple.tar.gz b/models/20241217-164701-online-couple.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4e3913cd546aee16fca7415ab5ce2f708fc8c1f3 GIT binary patch literal 9182 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 e@XtoYz-#c$sr>(oNc0&9{B>Js5)2OFC2d)=x& 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 Date: Tue, 17 Dec 2024 16:58:07 +0000 Subject: [PATCH 5/9] Altro --- domain.yml | 4 ++++ tutorial_1/data/flows.yml | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/domain.yml b/domain.yml index a00cc0f..668079f 100644 --- a/domain.yml +++ b/domain.yml @@ -12,6 +12,10 @@ slots: type: float mappings: - type: from_llm + final_confirmation: + type: bool + mappings: + - type: from_llm responses: utter_ask_recipient: diff --git a/tutorial_1/data/flows.yml b/tutorial_1/data/flows.yml index 8a52b99..5a4b4d3 100644 --- a/tutorial_1/data/flows.yml +++ b/tutorial_1/data/flows.yml @@ -13,4 +13,5 @@ flows: next: END - else: transfer_successful - action: utter_transfer_complete - id: transfer_successful \ No newline at end of file + id: transfer_successful + From 5a8b2453b58e507bf5abc37bd5d03f2c295d8f37 Mon Sep 17 00:00:00 2001 From: powerzilly Date: Tue, 17 Dec 2024 23:31:06 +0000 Subject: [PATCH 6/9] Update --- .rasa/cache/cache.db | Bin 16384 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 90112 -> 98304 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 32768 -> 32768 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 370832 -> 201912 bytes .rasa/cache/tmpvmyhfpi3/command_prompt.jinja2 | 60 ++++++++++++++++++ .rasa/cache/tmpvmyhfpi3/config.json | 20 ++++++ models/20241217-165333-warm-bumper.tar.gz | Bin 0 -> 9253 bytes 7 files changed, 80 insertions(+) create mode 100644 .rasa/cache/tmpvmyhfpi3/command_prompt.jinja2 create mode 100644 .rasa/cache/tmpvmyhfpi3/config.json create mode 100644 models/20241217-165333-warm-bumper.tar.gz diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db index a00649e4a4edfc0c0b00bfba1d7f8bcd1c645c44..26d484c977ec0c22d6ad361e601f984d8c418679 100644 GIT binary patch delta 741 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 U=c#YH91r^o-f0Ni!GpT-KlKu9MgRZ+ delta 772 zcmZvZPe>GD7{=$DZ~pH5`6f|!RmxqAJY;SnQXslQMPX&#LPEx2+-*l^XI5v%vI3kT3I2& z2G;7=H9Ia_Lx!3hFb&hOf*HY6q7{Jmu0*RUIT*$NcvMAA`c5AyjFn{q-qUEXgoP2H zI=Wtj4Af@m+*(vZVAT8EdU$xO6z<34gPLk3rj2Ad}W&^iK{{$S$`!80GexNP%4Shiy=mT0utLQCSL3#gpk5Ddu zrdfh9amk~*hjaZ>o0wZNS^hiCB`eiOW>x7bcV``NR2FX#{@_y+GK=Bamdl20slgu!E+ zAm*{-u6tx!st45Ku^P|?2=d~NH2rli7$YbTn{?gr-==A9AD94Y)|ElA=w~fpn4@7j zf}!WgLUrOtaaKGhNxQU*HpbHMh#STssE?F9J@Wo{q2^>>S(4me5IN hnYqriWZgBYm|1%WtcNHd%wWQdzkn%Wai$9-@L!gI>}mi2 diff --git a/.rasa/cache/rasa-llm-cache/cache.db-shm b/.rasa/cache/rasa-llm-cache/cache.db-shm index 0b9e56d3ae0c3b7babb7f616d8124a7b41b4096a..56c997605a150e34bfe089aa345a1ec6438b0456 100644 GIT binary patch delta 251 zcmZo@U}|V!s+V}A%K!p`K+MR%AYcfjC4l(n3hqyu4{95QqVhL>XueijKUHS#O?`)3 zq^buR1qM1m@;?%Q3Qw%B6a`tw48-g}%mKv0KrAs?kx`ftiQN2#@rC^+rUh)9uQ+Nk zPX6VgwD}X`9j47cy#Fz6V*10%Da9bqpu(WZptt!W<5#B1AHunS3LYphDgya`nb>6* N)EKlG41gR(7640WOi};< delta 476 zcmb7;%PvDv6o$XOkH)2`kfxU)sftKSh|r>_y0^4SiO~7prD|qTwf=m*Tt*5s=kSJ`z~(X zuH4C4=KhlEfBT)gohk@F4ONqHUO82ME3CXezZgSk7diy5P)q*un3Kx~(SpHNin^nLW<1O=6XT&wVWA!SpomH<%`!O}Dj4Af*yn0gZI7_UNW`}}^kTRw@s3oc_ zQ$$(c=^;;)d6KNNMUF$!58D3BRJ9SKD7!CLppOv4M3`WP1(w-hn_Ws0zG>^d)a99F kkrg({u*Z?;=fTbq=17nwFWV3886eCUldO{BSX6)8FYi%U5dZ)H diff --git a/.rasa/cache/rasa-llm-cache/cache.db-wal b/.rasa/cache/rasa-llm-cache/cache.db-wal index 3b650bda764c268d533107ebab531f3ec4b19d88..43724685a37b7fd6032e889ff145a0b7cfd89fcc 100644 GIT binary patch delta 10436 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
  • ddeBkNE3w-6AH@>Iz=WHj&3q0la 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 literal 0 HcmV?d00001 diff --git a/tutorial_1/actions/__pycache__/__init__.cpython-310.pyc b/tutorial_1/actions/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..037a4b879dcde8dfd8b52edede4e154367666629 GIT binary patch literal 157 zcmd1j<>g`kf_{dmbP)X*L?8o3AjbiSi&=m~3PUi1CZpdlIYq V;;_lhPbtkwwF8-4%mgG@7yu&gB|!iH literal 0 HcmV?d00001 diff --git a/tutorial_1/actions/__pycache__/actions.cpython-310.pyc b/tutorial_1/actions/__pycache__/actions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7de61a7bfe7b92042a82c7fbd22cb2e23194eab GIT binary patch literal 1120 zcmaJ=OK;RL5VoD?W_SC5f?6a%;4z1n@4Lq&{o@1d*?5} zk-y|C7x)Xj#7v@XEAg=8FEbN+=9@2*dN_;-toJ0Ig$^N~(Yd)?aCTtp0{}q;El5dY zTC$jxPVAI!>{5)g!YlpQFM~K}eWwV^UfgSKw}{Gq+^6Iv5uWfbiSVU=;lu+GOvxzx z3Yp2swa#vJYTW~QVywHLbHLZRHX~;JU2gKavcZ8$`CO_IwHteNQAh|^v;ABjrG_82 z@nBliW-1NGoHth=oE_Nu6@Vl$6(nYYN+)B23Fi{}5U%uuCw*WSNJoYl+k$>&@7miU zSttS#!s$r#fO}-`b=>w2C7(~5EX#Q=EAyhMgtoqtrco8AP;$A@#=Qqyqqu@X9yYP} z)3(V38sYOqU!_Vi%=L*t)2^09riO5-g>TQt?`k!N?zz-sUJKcokB^(2&$UUF8Jot` zDo=~#$+*j}m(T4Z5W7lC86pz~;L@{)|L$fR&)P^_sci$(eGco3x=izmV>`OYi#c?f6H zBpN=n>OtaBpjP0a))8(Y+y=10o3uzPF5^|8S?Nrwq)V&r;F&8G)heELR8!%IXjH=u zBO1~HJ$vvUIpD%%)VE=hpfE{dqa-P7(G+M8lH|Bai|&m=9n=~EW>+YULah|4t~`WI zglkT%g~Sy8op?dt1qjIsWe#KP7vRsxWj|KDmGAAD$!KVOb9w|nM3=TL+E&2=HdLuj z6D{V-2e;*5*O#$vc_KMZN=wkLUdP|UFzZ(4w#wfq+VE-D_cNSpjf6MJ8pt=G8_sXa C_Ypz> literal 0 HcmV?d00001 diff --git a/tutorial_1/models/20241217-235204-green-triangle.tar.gz b/tutorial_1/models/20241217-235204-green-triangle.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..574d0ad4ade44b883c65325bdc1636dc699bac54 GIT binary patch literal 9456 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 Cw2KY^ literal 0 HcmV?d00001 From c4e566cee8a3ae932f2d6f8c9df7f20b059eaaa2 Mon Sep 17 00:00:00 2001 From: powerzilly Date: Wed, 18 Dec 2024 12:52:44 +0000 Subject: [PATCH 9/9] Update --- calm/.rasa/cache/cache.db | Bin 16384 -> 0 bytes calm/.rasa/cache/rasa-llm-cache/cache.db | Bin 32768 -> 0 bytes calm/actions/__init__.py | 0 calm/actions/action_template.py | 27 -------- calm/actions/add_contact.py | 30 --------- calm/actions/db.py | 57 ----------------- calm/actions/list_contacts.py | 22 ------- calm/actions/remove_contact.py | 35 ---------- calm/config.yml | 11 ---- calm/credentials.yml | 33 ---------- calm/data/flows/add_contact.yml | 31 --------- calm/data/flows/list_contacts.yml | 14 ---- calm/data/flows/remove_contact.yml | 29 --------- calm/db/contacts.json | 10 --- calm/domain/add_contact.yml | 39 ------------ calm/domain/list_contacts.yml | 17 ----- calm/domain/remove_contact.yml | 38 ----------- calm/domain/shared.yml | 10 --- .../user_cancels_during_a_correction.yml | 16 ----- .../user_changes_mind_on_a_whim.yml | 7 -- .../user_corrects_contact_handle.yml | 20 ------ .../user_corrects_contact_name.yml | 19 ------ .../user_adds_contact_to_their_list.yml | 15 ----- .../happy_paths/user_lists_contacts.yml | 5 -- .../happy_paths/user_removes_contact.yml | 11 ---- .../user_removes_contact_from_list.yml | 12 ---- calm/endpoints.yml | 58 ----------------- caml/.rasa/cache/cache.db | Bin 16384 -> 0 bytes caml/.rasa/cache/rasa-llm-cache/cache.db | Bin 32768 -> 0 bytes caml/actions/__init__.py | 0 caml/actions/action_template.py | 27 -------- caml/actions/add_contact.py | 30 --------- caml/actions/db.py | 57 ----------------- caml/actions/list_contacts.py | 22 ------- caml/actions/remove_contact.py | 35 ---------- caml/config.yml | 11 ---- caml/credentials.yml | 33 ---------- caml/data/flows/add_contact.yml | 31 --------- caml/data/flows/list_contacts.yml | 14 ---- caml/data/flows/remove_contact.yml | 29 --------- caml/db/contacts.json | 10 --- caml/domain/add_contact.yml | 39 ------------ caml/domain/list_contacts.yml | 17 ----- caml/domain/remove_contact.yml | 38 ----------- caml/domain/shared.yml | 10 --- .../user_cancels_during_a_correction.yml | 16 ----- .../user_changes_mind_on_a_whim.yml | 7 -- .../user_corrects_contact_handle.yml | 20 ------ .../user_corrects_contact_name.yml | 19 ------ .../user_adds_contact_to_their_list.yml | 15 ----- .../happy_paths/user_lists_contacts.yml | 5 -- .../happy_paths/user_removes_contact.yml | 11 ---- .../user_removes_contact_from_list.yml | 12 ---- caml/endpoints.yml | 58 ----------------- tutorial_1/.rasa/cache/cache.db | Bin 16384 -> 0 bytes .../.rasa/cache/rasa-llm-cache/cache.db | Bin 40960 -> 0 bytes .../.rasa/cache/rasa-llm-cache/cache.db-shm | Bin 32768 -> 0 bytes .../.rasa/cache/rasa-llm-cache/cache.db-wal | Bin 601552 -> 0 bytes .../cache/tmpai47q5lw/command_prompt.jinja2 | 60 ------------------ .../.rasa/cache/tmpai47q5lw/config.json | 20 ------ .../cache/tmpwtefg7uu/command_prompt.jinja2 | 60 ------------------ .../.rasa/cache/tmpwtefg7uu/config.json | 20 ------ .../cache/tmpy4g0sx1x/command_prompt.jinja2 | 60 ------------------ .../.rasa/cache/tmpy4g0sx1x/config.json | 20 ------ tutorial_1/actions/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 157 -> 0 bytes .../__pycache__/actions.cpython-310.pyc | Bin 1120 -> 0 bytes tutorial_1/actions/actions.py | 22 ------- tutorial_1/config.yml | 15 ----- tutorial_1/credentials.yml | 33 ---------- tutorial_1/data/flows.yml | 25 -------- tutorial_1/data/patterns.yml | 11 ---- tutorial_1/domain.yml | 53 ---------------- tutorial_1/endpoints.yml | 50 --------------- .../20241217-161816-chamfered-debug.tar.gz | Bin 9061 -> 0 bytes .../models/20241217-171052-gentle-body.tar.gz | Bin 9288 -> 0 bytes .../models/20241217-233343-vivid-flush.tar.gz | Bin 9452 -> 0 bytes .../20241217-235204-green-triangle.tar.gz | Bin 9456 -> 0 bytes 78 files changed, 1581 deletions(-) delete mode 100644 calm/.rasa/cache/cache.db delete mode 100644 calm/.rasa/cache/rasa-llm-cache/cache.db delete mode 100644 calm/actions/__init__.py delete mode 100644 calm/actions/action_template.py delete mode 100644 calm/actions/add_contact.py delete mode 100644 calm/actions/db.py delete mode 100644 calm/actions/list_contacts.py delete mode 100644 calm/actions/remove_contact.py delete mode 100644 calm/config.yml delete mode 100644 calm/credentials.yml delete mode 100644 calm/data/flows/add_contact.yml delete mode 100644 calm/data/flows/list_contacts.yml delete mode 100644 calm/data/flows/remove_contact.yml delete mode 100644 calm/db/contacts.json delete mode 100644 calm/domain/add_contact.yml delete mode 100644 calm/domain/list_contacts.yml delete mode 100644 calm/domain/remove_contact.yml delete mode 100644 calm/domain/shared.yml delete mode 100644 calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml delete mode 100644 calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml delete mode 100644 calm/e2e_tests/corrections/user_corrects_contact_handle.yml delete mode 100644 calm/e2e_tests/corrections/user_corrects_contact_name.yml delete mode 100644 calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml delete mode 100644 calm/e2e_tests/happy_paths/user_lists_contacts.yml delete mode 100644 calm/e2e_tests/happy_paths/user_removes_contact.yml delete mode 100644 calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml delete mode 100644 calm/endpoints.yml delete mode 100644 caml/.rasa/cache/cache.db delete mode 100644 caml/.rasa/cache/rasa-llm-cache/cache.db delete mode 100644 caml/actions/__init__.py delete mode 100644 caml/actions/action_template.py delete mode 100644 caml/actions/add_contact.py delete mode 100644 caml/actions/db.py delete mode 100644 caml/actions/list_contacts.py delete mode 100644 caml/actions/remove_contact.py delete mode 100644 caml/config.yml delete mode 100644 caml/credentials.yml delete mode 100644 caml/data/flows/add_contact.yml delete mode 100644 caml/data/flows/list_contacts.yml delete mode 100644 caml/data/flows/remove_contact.yml delete mode 100644 caml/db/contacts.json delete mode 100644 caml/domain/add_contact.yml delete mode 100644 caml/domain/list_contacts.yml delete mode 100644 caml/domain/remove_contact.yml delete mode 100644 caml/domain/shared.yml delete mode 100644 caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml delete mode 100644 caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml delete mode 100644 caml/e2e_tests/corrections/user_corrects_contact_handle.yml delete mode 100644 caml/e2e_tests/corrections/user_corrects_contact_name.yml delete mode 100644 caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml delete mode 100644 caml/e2e_tests/happy_paths/user_lists_contacts.yml delete mode 100644 caml/e2e_tests/happy_paths/user_removes_contact.yml delete mode 100644 caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml delete mode 100644 caml/endpoints.yml delete mode 100644 tutorial_1/.rasa/cache/cache.db delete mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db delete mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-shm delete mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal delete mode 100644 tutorial_1/.rasa/cache/tmpai47q5lw/command_prompt.jinja2 delete mode 100644 tutorial_1/.rasa/cache/tmpai47q5lw/config.json delete mode 100644 tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 delete mode 100644 tutorial_1/.rasa/cache/tmpwtefg7uu/config.json delete mode 100644 tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 delete mode 100644 tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json delete mode 100644 tutorial_1/actions/__init__.py delete mode 100644 tutorial_1/actions/__pycache__/__init__.cpython-310.pyc delete mode 100644 tutorial_1/actions/__pycache__/actions.cpython-310.pyc delete mode 100644 tutorial_1/actions/actions.py delete mode 100644 tutorial_1/config.yml delete mode 100644 tutorial_1/credentials.yml delete mode 100644 tutorial_1/data/flows.yml delete mode 100644 tutorial_1/data/patterns.yml delete mode 100644 tutorial_1/domain.yml delete mode 100644 tutorial_1/endpoints.yml delete mode 100644 tutorial_1/models/20241217-161816-chamfered-debug.tar.gz delete mode 100644 tutorial_1/models/20241217-171052-gentle-body.tar.gz delete mode 100644 tutorial_1/models/20241217-233343-vivid-flush.tar.gz delete mode 100644 tutorial_1/models/20241217-235204-green-triangle.tar.gz diff --git a/calm/.rasa/cache/cache.db b/calm/.rasa/cache/cache.db deleted file mode 100644 index 1a5d6a89e180b3a0e0a799206cf5abda8d32ed4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI#OH0Er00;1N8_pH>xa}I4hZRIn+1)w|mc6vr$4;ScnHFn1+f=sW#4q60Z{xS} zXge*mV~96l`~yjv=KV`9xj66Ig42oTKU#twk{XdDazrU1Bp1a(6qB%8mXeBJ@*LUg zyp^k;Bwrz<@?QOjG6V=f00Izz00bZa0SG_<0ucBIfki!EtY0^zg=)KFKC@?RWR31Q zf@8rAzJ+710vZ#wAH)Cjb>eiG$nM=I7E z4e7NitXqetx}-jHKl7XFaaYR@E0uw7JKG?V0&)Tzj@GVDcM#$2pz#3Z)Ay7!+0tFca@k=dD1`reP-xA z)fm!_Hl)p!Eh)0n%5By4hD4Uf7d$!9Yo1x5@RsGwVeY5g^3he>j;~uePHJ(2009U< z00Izz00bZa0SG_<0uX?}rV7aM#_;~%)Z@jzAOHafKmY;|fB*y_009U<00K(^y#H|# ZAOHafKmY;|fB*y_009U<00NsY@C8eKv|#`M diff --git a/calm/.rasa/cache/rasa-llm-cache/cache.db b/calm/.rasa/cache/rasa-llm-cache/cache.db deleted file mode 100644 index e553bb7d0135b6664cc05c43e9b119b73f13fe29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI&O>fjj7zgn2PT1WftS5*D6H&y3sv=Pm(g+Yps1kWG5V75b%|?Mk>pI>caq+Ih z+DiyhrJAZAp#1MEnG89{IU$6G?|k@9UOnNLuJ}h(t|S#t_@w0crFRSL zPtx0cpRk+kQ*}w*U$|eW?ftO#kKVIAt*{s`2tWV=5P$##AOL}m1cEcYxkIP4{M~WC zX)i5_=A7_-yRqaMo_$9cHQ@+fOq$J_0~$w>?HMeyEyeYucu3WgqQS%cIq7*#hLCWodCPx ziKhSWC!pOfK8o4WoL;FuY5yPQ+oxU4X0V7M(54=vUkK zUaHB)Tb-6P8%4FplzocIqm7U2{u{umqxj7F7fuhWN((_lWI|SYhtS{uiK7jn03Lc`qk=a+%ZO>hO0_e zJA7DqQ#vHQX!1!nX(Xk5NFH?*ikHgad%jrYZT>j)@OUPxO&?Z>JZIibCmhooX3KZw zZzBn0OeEi;al9Pc%R&6Me>(a{ghmj600bZa0SG_<0uX=z1Rwwb2t4Bg1@#xwr`{v# zL-lj@GxZbo5qlJ_(%)krvG>_K%w}bFnmx}tS?hnsj}+-a00Izz00bZa0SG_<0uX?} zvnvn{PSe@#3tp##UGn)R$FAG{xv;Xkj}GMPw&w{i$7p|k+4jAh8h(kIrT8 zeA{gpE3RW(YmP8If2=7i(eRzMG5Lr@ZEx@zJ(3TfY%t`r0ntPKed>b@%dy|sBD=_5 zP=8l{RsUl9*%$0%_5pj3-C<|c2Vpb3AOHafKmY;|fB*y_009U<00O%q!1isP9C-Y< zN{?jL$GPOI9y*}3rwRJ!VAYTs9Q<<$M5y;OPooLr=o 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/calm/actions/add_contact.py b/calm/actions/add_contact.py deleted file mode 100644 index bef564d..0000000 --- a/calm/actions/add_contact.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import add_contact, get_contacts, Contact - - -class AddContact(Action): - def name(self) -> str: - return "add_contact" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - name = tracker.get_slot("add_contact_name") - handle = tracker.get_slot("add_contact_handle") - - if name is None or handle is None: - return [SlotSet("return_value", "data_not_present")] - - existing_handles = {c.handle for c in contacts} - if handle in existing_handles: - return [SlotSet("return_value", "already_exists")] - - new_contact = Contact(name=name, handle=handle) - add_contact(tracker.sender_id, new_contact) - return [SlotSet("return_value", "success")] diff --git a/calm/actions/db.py b/calm/actions/db.py deleted file mode 100644 index fa95f1e..0000000 --- a/calm/actions/db.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import shutil -import tempfile -from typing import Any, List - -from pydantic import BaseModel - -from rasa.nlu.utils import write_json_to_file -from rasa.shared.utils.io import read_json_file - -ORIGIN_DB_PATH = "db" -CONTACTS = "contacts.json" - - -class Contact(BaseModel): - name: str - handle: str - - -def get_session_db_path(session_id: str) -> str: - tempdir = tempfile.gettempdir() - project_name = "calm_starter" - return os.path.join(tempdir, project_name, session_id) - - -def prepare_db_file(session_id: str, db: str) -> str: - session_db_path = get_session_db_path(session_id) - os.makedirs(session_db_path, exist_ok=True) - destination_file = os.path.join(session_db_path, db) - if not os.path.exists(destination_file): - origin_file = os.path.join(ORIGIN_DB_PATH, db) - shutil.copy(origin_file, destination_file) - return destination_file - - -def read_db(session_id: str, db: str) -> Any: - db_file = prepare_db_file(session_id, db) - return read_json_file(db_file) - - -def write_db(session_id: str, db: str, data: Any) -> None: - db_file = prepare_db_file(session_id, db) - write_json_to_file(db_file, data) - - -def get_contacts(session_id: str) -> List[Contact]: - return [Contact(**item) for item in read_db(session_id, CONTACTS)] - - -def add_contact(session_id: str, contact: Contact) -> None: - contacts = get_contacts(session_id) - contacts.append(contact) - write_db(session_id, CONTACTS, [c.dict() for c in contacts]) - - -def write_contacts(session_id: str, contacts: List[Contact]) -> None: - write_db(session_id, CONTACTS, [c.dict() for c in contacts]) diff --git a/calm/actions/list_contacts.py b/calm/actions/list_contacts.py deleted file mode 100644 index 27975a2..0000000 --- a/calm/actions/list_contacts.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import get_contacts - - -class ListContacts(Action): - def name(self) -> str: - return "list_contacts" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - if len(contacts) > 0: - contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts]) - return [SlotSet("contacts_list", contacts_list)] - else: - return [SlotSet("contacts_list", None)] diff --git a/calm/actions/remove_contact.py b/calm/actions/remove_contact.py deleted file mode 100644 index 51fe40c..0000000 --- a/calm/actions/remove_contact.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import get_contacts, write_contacts - - -class RemoveContact(Action): - def name(self) -> str: - return "remove_contact" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - handle = tracker.get_slot("remove_contact_handle") - - if handle is not None: - contact_indices_with_handle = [ - i for i, c in enumerate(contacts) if c.handle == handle - ] - if len(contact_indices_with_handle) == 0: - return [SlotSet("return_value", "not_found")] - else: - removed_contact = contacts.pop(contact_indices_with_handle[0]) - write_contacts(tracker.sender_id, contacts) - return [ - SlotSet("return_value", "success"), - SlotSet("remove_contact_name", removed_contact.name), - ] - - else: - return [SlotSet("return_value", "missing_handle")] diff --git a/calm/config.yml b/calm/config.yml deleted file mode 100644 index 4411128..0000000 --- a/calm/config.yml +++ /dev/null @@ -1,11 +0,0 @@ -recipe: default.v1 -language: en -pipeline: -- name: SingleStepLLMCommandGenerator - llm: - model_group: huggingface_llm # Model group ID - -policies: -- name: FlowPolicy -- name: IntentlessPolicy -assistant_id: 20241218-000051-arctic-silo \ No newline at end of file diff --git a/calm/credentials.yml b/calm/credentials.yml deleted file mode 100644 index bbd88d4..0000000 --- a/calm/credentials.yml +++ /dev/null @@ -1,33 +0,0 @@ -# This file contains the credentials for the voice & chat platforms -# which your bot is using. -# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/ - -rest: -# # you don't need to provide anything here - this channel doesn't -# # require any credentials - - -#facebook: -# verify: "" -# secret: "" -# page-access-token: "" - -#slack: -# slack_token: "" -# slack_channel: "" -# slack_signing_secret: "" - -#socketio: -# user_message_evt: -# bot_message_evt: -# session_persistence: - -#mattermost: -# url: "https:///api/v4" -# token: "" -# webhook_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/calm/data/flows/add_contact.yml b/calm/data/flows/add_contact.yml deleted file mode 100644 index 7a8b8ec..0000000 --- a/calm/data/flows/add_contact.yml +++ /dev/null @@ -1,31 +0,0 @@ -flows: - add_contact: - description: add a contact to your contact list - name: add a contact - steps: - - collect: "add_contact_handle" - description: "a user handle starting with @" - - collect: "add_contact_name" - description: "a name of a person" - - collect: "add_contact_confirmation" - ask_before_filling: true - next: - - if: "slots.add_contact_confirmation is not true" - then: - - action: utter_add_contact_cancelled - next: END - - else: add_contact - - id: add_contact - action: add_contact - next: - - if: "slots.return_value = 'success'" - then: - - action: utter_contact_added - next: END - - if: "slots.return_value = 'already_exists'" - then: - - action: utter_contact_already_exists - next: END - - else: - - action: utter_add_contact_error - next: END diff --git a/calm/data/flows/list_contacts.yml b/calm/data/flows/list_contacts.yml deleted file mode 100644 index eabee59..0000000 --- a/calm/data/flows/list_contacts.yml +++ /dev/null @@ -1,14 +0,0 @@ -flows: - list_contacts: - name: list your contacts - description: show your contact list - steps: - - action: list_contacts - next: - - if: "slots.contacts_list" - then: - - action: utter_list_contacts - next: END - - else: - - action: utter_no_contacts - next: END diff --git a/calm/data/flows/remove_contact.yml b/calm/data/flows/remove_contact.yml deleted file mode 100644 index 1c69f59..0000000 --- a/calm/data/flows/remove_contact.yml +++ /dev/null @@ -1,29 +0,0 @@ -flows: - remove_contact: - name: remove a contact - description: remove a contact from your contact list - steps: - - collect: "remove_contact_handle" - description: "a contact handle starting with @" - - collect: "remove_contact_confirmation" - ask_before_filling: true - next: - - if: "slots.remove_contact_confirmation is not true" - then: - - action: utter_remove_contact_cancelled - next: END - - else: remove_contact - - id: "remove_contact" - action: remove_contact - next: - - if: "slots.return_value == 'success'" - then: - - action: utter_remove_contact_success - next: END - - if: "slots.return_value == 'not_found'" - then: - - action: utter_contact_not_in_list - next: END - - else: - - action: utter_remove_contact_error - next: END diff --git a/calm/db/contacts.json b/calm/db/contacts.json deleted file mode 100644 index 3915c44..0000000 --- a/calm/db/contacts.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "name": "Joe", - "handle": "@JoeMyers" - }, - { - "name": "Mary", - "handle": "@MaryLu" - } -] diff --git a/calm/domain/add_contact.yml b/calm/domain/add_contact.yml deleted file mode 100644 index f208e33..0000000 --- a/calm/domain/add_contact.yml +++ /dev/null @@ -1,39 +0,0 @@ -version: "3.1" - -actions: - - add_contact - -slots: - add_contact_confirmation: - type: bool - mappings: - - type: from_llm - add_contact_name: - type: text - mappings: - - type: from_llm - add_contact_handle: - type: text - mappings: - - type: from_llm - -responses: - utter_ask_add_contact_confirmation: - - text: Do you want to add {add_contact_name}({add_contact_handle}) to your contacts? - buttons: - - payload: "/SetSlots(add_contact_confirmation=true)" - title: Yes - - payload: "/SetSlots(add_contact_confirmation=false)" - title: No, cancel - utter_ask_add_contact_handle: - - text: What's the handle of the user you want to add? - utter_ask_add_contact_name: - - text: What's the name of the user you want to add? - utter_add_contact_error: - - text: "Something went wrong, please try again." - utter_add_contact_cancelled: - - text: "Okay, I am cancelling this adding of a contact." - utter_contact_already_exists: - - text: "There's already a contact with that handle in your list." - utter_contact_added: - - text: "Contact added successfully." diff --git a/calm/domain/list_contacts.yml b/calm/domain/list_contacts.yml deleted file mode 100644 index 6265180..0000000 --- a/calm/domain/list_contacts.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: "3.1" - -actions: - - list_contacts - -slots: - contacts_list: - type: text - mappings: - - type: custom - action: list_contacts - -responses: - utter_no_contacts: - - text: "You have no contacts in your list." - utter_list_contacts: - - text: "You currently have the following contacts:\n{contacts_list}" diff --git a/calm/domain/remove_contact.yml b/calm/domain/remove_contact.yml deleted file mode 100644 index 59a6e7d..0000000 --- a/calm/domain/remove_contact.yml +++ /dev/null @@ -1,38 +0,0 @@ -version: "3.1" - -actions: - - remove_contact - -slots: - remove_contact_name: - type: text - mappings: - - type: custom - action: remove_contact - remove_contact_handle: - type: text - mappings: - - type: from_llm - remove_contact_confirmation: - type: text - mappings: - - type: from_llm - -responses: - utter_ask_remove_contact_handle: - - text: What's the handle of the user you want to remove? - utter_contact_not_in_list: - - text: "That contact is not in your list." - utter_remove_contact_error: - - text: "Something went wrong, please try again." - utter_remove_contact_success: - - text: "Removed {remove_contact_handle}({remove_contact_name}) from your contacts." - utter_ask_remove_contact_confirmation: - - buttons: - - payload: "/SetSlots(remove_contact_confirmation=true)" - title: Yes - - payload: "/SetSlots(remove_contact_confirmation=false)" - title: No, cancel the removal - text: "Should I remove {remove_contact_handle} from your contact list?" - utter_remove_contact_cancelled: - - text: "Okay, I am cancelling this removal of a contact." diff --git a/calm/domain/shared.yml b/calm/domain/shared.yml deleted file mode 100644 index 93f6fed..0000000 --- a/calm/domain/shared.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: "3.1" - -slots: - return_value: - type: any - mappings: - - type: custom - action: add_contact - - type: custom - action: remove_contact diff --git a/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml b/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml deleted file mode 100644 index 9d7d79a..0000000 --- a/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +++ /dev/null @@ -1,16 +0,0 @@ -test_cases: - - test_case: user cancels adding a contact during the correction - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @foo - - slot_was_set: - - add_contact_handle: "@foo" - - utter: utter_ask_add_contact_name - - user: Wait, no, the handle is @bar - - slot_was_set: - - add_contact_handle: "@bar" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_name - - user: I changed my mind, stop. - - utter: utter_flow_cancelled_rasa diff --git a/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml b/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml deleted file mode 100644 index 220fd40..0000000 --- a/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +++ /dev/null @@ -1,7 +0,0 @@ -test_cases: - - test_case: user changes mind based on new info - steps: - - user: I want to add contact - - utter: utter_ask_add_contact_handle - - user: Stop - - utter: utter_flow_cancelled_rasa diff --git a/calm/e2e_tests/corrections/user_corrects_contact_handle.yml b/calm/e2e_tests/corrections/user_corrects_contact_handle.yml deleted file mode 100644 index c874814..0000000 --- a/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +++ /dev/null @@ -1,20 +0,0 @@ -test_cases: - - test_case: user corrects the handle - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @foo - - slot_was_set: - - add_contact_handle: "@foo" - - utter: utter_ask_add_contact_name - - user: Wait, no, the handle is @bar - - slot_was_set: - - add_contact_handle: "@bar" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_name - - user: It's Barbar - - slot_was_set: - - add_contact_name: "Barbar" - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/calm/e2e_tests/corrections/user_corrects_contact_name.yml b/calm/e2e_tests/corrections/user_corrects_contact_name.yml deleted file mode 100644 index 3836acd..0000000 --- a/calm/e2e_tests/corrections/user_corrects_contact_name.yml +++ /dev/null @@ -1,19 +0,0 @@ -test_cases: - - test_case: user corrects the handle - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @jane - - slot_was_set: - - add_contact_handle: "@jane" - - utter: utter_ask_add_contact_name - - user: It's Jane Bar - - slot_was_set: - - add_contact_name: "Jane Bar" - - user: Wait, it's Jane Foo - - slot_was_set: - - add_contact_name: "Jane Foo" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml b/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml deleted file mode 100644 index b318972..0000000 --- a/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +++ /dev/null @@ -1,15 +0,0 @@ -test_cases: - - test_case: user adds a contact to their list - steps: - - user: I want to add someone to my contact list - - utter: utter_ask_add_contact_handle - - user: it's @barts - - slot_was_set: - - add_contact_handle: "@barts" - - utter: utter_ask_add_contact_name - - user: just Bart - - slot_was_set: - - add_contact_name: Bart - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/calm/e2e_tests/happy_paths/user_lists_contacts.yml b/calm/e2e_tests/happy_paths/user_lists_contacts.yml deleted file mode 100644 index 427a72d..0000000 --- a/calm/e2e_tests/happy_paths/user_lists_contacts.yml +++ /dev/null @@ -1,5 +0,0 @@ -test_cases: - - test_case: user lists their contacts - steps: - - user: Please show me my contacts - - utter: utter_list_contacts diff --git a/calm/e2e_tests/happy_paths/user_removes_contact.yml b/calm/e2e_tests/happy_paths/user_removes_contact.yml deleted file mode 100644 index 89cd7d8..0000000 --- a/calm/e2e_tests/happy_paths/user_removes_contact.yml +++ /dev/null @@ -1,11 +0,0 @@ -test_cases: - - test_case: user removes a contact - steps: - - user: I want to remove contact - - utter: utter_ask_remove_contact_handle - - user: "@MaryLu" - - slot_was_set: - - remove_contact_handle: "@MaryLu" - - utter: utter_ask_remove_contact_confirmation - - user: Yes - - utter: utter_remove_contact_success diff --git a/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml b/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml deleted file mode 100644 index f1d47a9..0000000 --- a/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +++ /dev/null @@ -1,12 +0,0 @@ -test_cases: - - test_case: user removes a contact using contact list - steps: - - user: Please show me my contacts - - utter: utter_list_contacts - - utter: utter_can_do_something_else - - user: Remove contact @MaryLu - - slot_was_set: - - remove_contact_handle: "@MaryLu" - - utter: utter_ask_remove_contact_confirmation - - user: yes - - utter: utter_remove_contact_success diff --git a/calm/endpoints.yml b/calm/endpoints.yml deleted file mode 100644 index 085bea8..0000000 --- a/calm/endpoints.yml +++ /dev/null @@ -1,58 +0,0 @@ -# This file contains the different endpoints your bot can use. - -# Server where the models are pulled from. -# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions - -action_endpoint: - actions_module: "actions" - -# Tracker store which is used to store the conversations. -# By default the conversations are stored in memory. -# https://rasa.com/docs/rasa-pro/production/tracker-stores - -#tracker_store: -# type: redis -# url: -# port: -# db: -# password: -# use_ssl: - -#tracker_store: -# type: mongod -# url: -# db: -# username: -# password: - -# Event broker which all conversation events should be streamed to. -# https://rasa.com/docs/rasa-pro/production/event-brokers - -#event_broker: -# url: localhost -# username: username -# password: password -# queue: queue - -# The lines below activate contextual rephrasing, using the default OpenAI language model. -# Ensure the OPENAI_API_KEY is set to prevent any missing API key errors. -# For more details, refer to the documentation: -# https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser -# To enable the rephraser, remove the comment symbols in the lines below. -#nlg: -# type: rephrase - -model_groups: -- id: huggingface_llm - models: - - provider: huggingface - model: meta-llama/CodeLlama-7b-Instruct-hf - api_base: "https://my-endpoint.huggingface.cloud" - api_key: ${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} # Optional, if you want to set the API key in the model configuration. diff --git a/caml/.rasa/cache/cache.db b/caml/.rasa/cache/cache.db deleted file mode 100644 index 1a5d6a89e180b3a0e0a799206cf5abda8d32ed4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI#OH0Er00;1N8_pH>xa}I4hZRIn+1)w|mc6vr$4;ScnHFn1+f=sW#4q60Z{xS} zXge*mV~96l`~yjv=KV`9xj66Ig42oTKU#twk{XdDazrU1Bp1a(6qB%8mXeBJ@*LUg zyp^k;Bwrz<@?QOjG6V=f00Izz00bZa0SG_<0ucBIfki!EtY0^zg=)KFKC@?RWR31Q zf@8rAzJ+710vZ#wAH)Cjb>eiG$nM=I7E z4e7NitXqetx}-jHKl7XFaaYR@E0uw7JKG?V0&)Tzj@GVDcM#$2pz#3Z)Ay7!+0tFca@k=dD1`reP-xA z)fm!_Hl)p!Eh)0n%5By4hD4Uf7d$!9Yo1x5@RsGwVeY5g^3he>j;~uePHJ(2009U< z00Izz00bZa0SG_<0uX?}rV7aM#_;~%)Z@jzAOHafKmY;|fB*y_009U<00K(^y#H|# ZAOHafKmY;|fB*y_009U<00NsY@C8eKv|#`M diff --git a/caml/.rasa/cache/rasa-llm-cache/cache.db b/caml/.rasa/cache/rasa-llm-cache/cache.db deleted file mode 100644 index 615555e950ae003f93173eaaf560fd729ed2dcc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)Z%^As90zclgCs!XgF-NrB92N^L4`5|RgtPm4Pa>0G-*Q+?IX)`40t$k8aq%n zO=`PWFzvx!!n6l_13a4gWRIpj+mlM$gFRZGZPKPans)w2Ob0AdH>pG4NFmPo{PW%C z&WG-7SbvZ=U4w1ejjHCdd7)3}=n!r*CI|xI?-YMWuO7b98GiB7#c0PFpG3HR_tP}} zL+I^36zF66jkGNdqz}`T3t#pA-g~R3$&>Md00bZa0SG_<0uX3R;Mrnta`c9rdOqtm z%C)^Y{5aeu`N76oDJN}26xR?}ebg`YF5m|wZ>6@qQvQA!Hi zH4gaBD_+W#TTCgeJX`Jwimsek^k%)HwNvyUUs&|8TyIwNYpkGb21Re97K`0yHGo-j zjE4Kq4G`oDYmqCgE2Z)qHbATvr!~MrDmi+S_nmiMZvfqH*4%bFPdwwl+k57YcN_mi zVZT{Oo>}ZR$b(}47v`rIyPQbKGqUKIwTkh??+~iv+6_Z>&1!Ikrou}!S6ERV2G?FJ zORGCfwvL`KV9vbZ0MYCNf%@vzAg!p8E%;>J>^N}UP$sw_5Rf%z4zHne@e?1?bw zMj`iLLt*hEhuMzePV$6l#t)o&o+L?Gmc>u1uJ*na4olwH)D;a**`>S^jyjX9Vegw2 z9=fb}1J?ag?q0U^h}~5lP5Xn%Qogw4$BnW~vla~Fqg{TQ#cC9$Xu57Vj*osk#qSeQ zC_V_U<%uwQUxh%OB06^2Bmf?TT^Ikz1x^)U>L>%F4s?bT}}2p{B}WLLM6v zKlUA>Q8fA_$26i;HtE;e3&jdW{@%#vS->BLo|^4Q$jf7*;J2Cc*y3|~RcpGo|6Pp& zsdLemH;?z{_WmUP)E{mAB0?qzKmY;|fB*y_009U<00Izz00iE0fiy2)pY%eIew4nK zzLj3kU+7QtkbXfwr%&k)y+;@57$wrrZ+SIPJP1Gl0uX=z1Rwwb2tWV=5IFY&-F;*v zRW%*QaFUc{Qah&WBqhG#-Lp@niJbE9?+;%lH^hqR?5cHB-?a?2-mqO;x2>+>Q8GvT zJyo-&dUx*qC#Zy{Lgo^g>kjXxI|ns=r(xIZrX!D#na(h|TGi@)cJGe*$S|272zPv7 zHybt0QoSbx_BCrrCbJ#kF5P?Z!9R!znW5Gxyc_oFo~AdORVhOzM7?QQs%2J9x2J!Q zOmun`3clawC%Za8uH7{DOx-o@np(FlQ$Mf_&2eWMhHlhc>tM!zD57%VA{kHdM;TQA zVSsc$nMgUV=9-Rc>P`>s=kx!U0!`Ad=^`DcKS;kxucSZecl1m88U2WE(W3N{{(A1a z5h@4)2tWV=5P$##AOHafKmY>&R{@Dnp<5H({vI+S2FnC}DUuPrWdiDLc(ZD$o5-TS zOyJ!Qms&L*K4sD1GM}~ws|m-}3`V`=zb_bE8YDAO^3j69h)m|A#Q0*taE8oA>8+Il zITks#PB7$Evb9c-@#}oFOfblo2*lTx2nNz*Ts&G0xaifF|It5Q5P$##AOHafKmY;| zfB*y_009V`V*&4<`eFWmjvE+Ng8&2|009U<00Izz00bZa0SIsb%>U61AOHafKmY;| qfB*y_009U<00QS<0Q3Lz-^QpR1Rwwb2tWV=5P$##AOHafK;SRbrru@% diff --git a/caml/actions/__init__.py b/caml/actions/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/caml/actions/action_template.py b/caml/actions/action_template.py deleted file mode 100644 index b5d4667..0000000 --- a/caml/actions/action_template.py +++ /dev/null @@ -1,27 +0,0 @@ -# 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-pro/concepts/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/caml/actions/add_contact.py b/caml/actions/add_contact.py deleted file mode 100644 index bef564d..0000000 --- a/caml/actions/add_contact.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import add_contact, get_contacts, Contact - - -class AddContact(Action): - def name(self) -> str: - return "add_contact" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - name = tracker.get_slot("add_contact_name") - handle = tracker.get_slot("add_contact_handle") - - if name is None or handle is None: - return [SlotSet("return_value", "data_not_present")] - - existing_handles = {c.handle for c in contacts} - if handle in existing_handles: - return [SlotSet("return_value", "already_exists")] - - new_contact = Contact(name=name, handle=handle) - add_contact(tracker.sender_id, new_contact) - return [SlotSet("return_value", "success")] diff --git a/caml/actions/db.py b/caml/actions/db.py deleted file mode 100644 index fa95f1e..0000000 --- a/caml/actions/db.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import shutil -import tempfile -from typing import Any, List - -from pydantic import BaseModel - -from rasa.nlu.utils import write_json_to_file -from rasa.shared.utils.io import read_json_file - -ORIGIN_DB_PATH = "db" -CONTACTS = "contacts.json" - - -class Contact(BaseModel): - name: str - handle: str - - -def get_session_db_path(session_id: str) -> str: - tempdir = tempfile.gettempdir() - project_name = "calm_starter" - return os.path.join(tempdir, project_name, session_id) - - -def prepare_db_file(session_id: str, db: str) -> str: - session_db_path = get_session_db_path(session_id) - os.makedirs(session_db_path, exist_ok=True) - destination_file = os.path.join(session_db_path, db) - if not os.path.exists(destination_file): - origin_file = os.path.join(ORIGIN_DB_PATH, db) - shutil.copy(origin_file, destination_file) - return destination_file - - -def read_db(session_id: str, db: str) -> Any: - db_file = prepare_db_file(session_id, db) - return read_json_file(db_file) - - -def write_db(session_id: str, db: str, data: Any) -> None: - db_file = prepare_db_file(session_id, db) - write_json_to_file(db_file, data) - - -def get_contacts(session_id: str) -> List[Contact]: - return [Contact(**item) for item in read_db(session_id, CONTACTS)] - - -def add_contact(session_id: str, contact: Contact) -> None: - contacts = get_contacts(session_id) - contacts.append(contact) - write_db(session_id, CONTACTS, [c.dict() for c in contacts]) - - -def write_contacts(session_id: str, contacts: List[Contact]) -> None: - write_db(session_id, CONTACTS, [c.dict() for c in contacts]) diff --git a/caml/actions/list_contacts.py b/caml/actions/list_contacts.py deleted file mode 100644 index 27975a2..0000000 --- a/caml/actions/list_contacts.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import get_contacts - - -class ListContacts(Action): - def name(self) -> str: - return "list_contacts" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - if len(contacts) > 0: - contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts]) - return [SlotSet("contacts_list", contacts_list)] - else: - return [SlotSet("contacts_list", None)] diff --git a/caml/actions/remove_contact.py b/caml/actions/remove_contact.py deleted file mode 100644 index 51fe40c..0000000 --- a/caml/actions/remove_contact.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Any, Dict, List, Text - -from rasa_sdk import Action, Tracker -from rasa_sdk.events import SlotSet -from rasa_sdk.executor import CollectingDispatcher - -from actions.db import get_contacts, write_contacts - - -class RemoveContact(Action): - def name(self) -> str: - return "remove_contact" - - def run( - self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] - ) -> List[Dict[Text, Any]]: - contacts = get_contacts(tracker.sender_id) - handle = tracker.get_slot("remove_contact_handle") - - if handle is not None: - contact_indices_with_handle = [ - i for i, c in enumerate(contacts) if c.handle == handle - ] - if len(contact_indices_with_handle) == 0: - return [SlotSet("return_value", "not_found")] - else: - removed_contact = contacts.pop(contact_indices_with_handle[0]) - write_contacts(tracker.sender_id, contacts) - return [ - SlotSet("return_value", "success"), - SlotSet("remove_contact_name", removed_contact.name), - ] - - else: - return [SlotSet("return_value", "missing_handle")] diff --git a/caml/config.yml b/caml/config.yml deleted file mode 100644 index b348a71..0000000 --- a/caml/config.yml +++ /dev/null @@ -1,11 +0,0 @@ -recipe: default.v1 -language: en -pipeline: -- name: SingleStepLLMCommandGenerator - llm: - model_group: openai-gpt-4 - -policies: -- name: FlowPolicy -- name: IntentlessPolicy -assistant_id: 20241218-002720-salmon-shallows diff --git a/caml/credentials.yml b/caml/credentials.yml deleted file mode 100644 index bbd88d4..0000000 --- a/caml/credentials.yml +++ /dev/null @@ -1,33 +0,0 @@ -# This file contains the credentials for the voice & chat platforms -# which your bot is using. -# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/ - -rest: -# # you don't need to provide anything here - this channel doesn't -# # require any credentials - - -#facebook: -# verify: "" -# secret: "" -# page-access-token: "" - -#slack: -# slack_token: "" -# slack_channel: "" -# slack_signing_secret: "" - -#socketio: -# user_message_evt: -# bot_message_evt: -# session_persistence: - -#mattermost: -# url: "https:///api/v4" -# token: "" -# webhook_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/caml/data/flows/add_contact.yml b/caml/data/flows/add_contact.yml deleted file mode 100644 index 7a8b8ec..0000000 --- a/caml/data/flows/add_contact.yml +++ /dev/null @@ -1,31 +0,0 @@ -flows: - add_contact: - description: add a contact to your contact list - name: add a contact - steps: - - collect: "add_contact_handle" - description: "a user handle starting with @" - - collect: "add_contact_name" - description: "a name of a person" - - collect: "add_contact_confirmation" - ask_before_filling: true - next: - - if: "slots.add_contact_confirmation is not true" - then: - - action: utter_add_contact_cancelled - next: END - - else: add_contact - - id: add_contact - action: add_contact - next: - - if: "slots.return_value = 'success'" - then: - - action: utter_contact_added - next: END - - if: "slots.return_value = 'already_exists'" - then: - - action: utter_contact_already_exists - next: END - - else: - - action: utter_add_contact_error - next: END diff --git a/caml/data/flows/list_contacts.yml b/caml/data/flows/list_contacts.yml deleted file mode 100644 index eabee59..0000000 --- a/caml/data/flows/list_contacts.yml +++ /dev/null @@ -1,14 +0,0 @@ -flows: - list_contacts: - name: list your contacts - description: show your contact list - steps: - - action: list_contacts - next: - - if: "slots.contacts_list" - then: - - action: utter_list_contacts - next: END - - else: - - action: utter_no_contacts - next: END diff --git a/caml/data/flows/remove_contact.yml b/caml/data/flows/remove_contact.yml deleted file mode 100644 index 1c69f59..0000000 --- a/caml/data/flows/remove_contact.yml +++ /dev/null @@ -1,29 +0,0 @@ -flows: - remove_contact: - name: remove a contact - description: remove a contact from your contact list - steps: - - collect: "remove_contact_handle" - description: "a contact handle starting with @" - - collect: "remove_contact_confirmation" - ask_before_filling: true - next: - - if: "slots.remove_contact_confirmation is not true" - then: - - action: utter_remove_contact_cancelled - next: END - - else: remove_contact - - id: "remove_contact" - action: remove_contact - next: - - if: "slots.return_value == 'success'" - then: - - action: utter_remove_contact_success - next: END - - if: "slots.return_value == 'not_found'" - then: - - action: utter_contact_not_in_list - next: END - - else: - - action: utter_remove_contact_error - next: END diff --git a/caml/db/contacts.json b/caml/db/contacts.json deleted file mode 100644 index 3915c44..0000000 --- a/caml/db/contacts.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "name": "Joe", - "handle": "@JoeMyers" - }, - { - "name": "Mary", - "handle": "@MaryLu" - } -] diff --git a/caml/domain/add_contact.yml b/caml/domain/add_contact.yml deleted file mode 100644 index f208e33..0000000 --- a/caml/domain/add_contact.yml +++ /dev/null @@ -1,39 +0,0 @@ -version: "3.1" - -actions: - - add_contact - -slots: - add_contact_confirmation: - type: bool - mappings: - - type: from_llm - add_contact_name: - type: text - mappings: - - type: from_llm - add_contact_handle: - type: text - mappings: - - type: from_llm - -responses: - utter_ask_add_contact_confirmation: - - text: Do you want to add {add_contact_name}({add_contact_handle}) to your contacts? - buttons: - - payload: "/SetSlots(add_contact_confirmation=true)" - title: Yes - - payload: "/SetSlots(add_contact_confirmation=false)" - title: No, cancel - utter_ask_add_contact_handle: - - text: What's the handle of the user you want to add? - utter_ask_add_contact_name: - - text: What's the name of the user you want to add? - utter_add_contact_error: - - text: "Something went wrong, please try again." - utter_add_contact_cancelled: - - text: "Okay, I am cancelling this adding of a contact." - utter_contact_already_exists: - - text: "There's already a contact with that handle in your list." - utter_contact_added: - - text: "Contact added successfully." diff --git a/caml/domain/list_contacts.yml b/caml/domain/list_contacts.yml deleted file mode 100644 index 6265180..0000000 --- a/caml/domain/list_contacts.yml +++ /dev/null @@ -1,17 +0,0 @@ -version: "3.1" - -actions: - - list_contacts - -slots: - contacts_list: - type: text - mappings: - - type: custom - action: list_contacts - -responses: - utter_no_contacts: - - text: "You have no contacts in your list." - utter_list_contacts: - - text: "You currently have the following contacts:\n{contacts_list}" diff --git a/caml/domain/remove_contact.yml b/caml/domain/remove_contact.yml deleted file mode 100644 index 59a6e7d..0000000 --- a/caml/domain/remove_contact.yml +++ /dev/null @@ -1,38 +0,0 @@ -version: "3.1" - -actions: - - remove_contact - -slots: - remove_contact_name: - type: text - mappings: - - type: custom - action: remove_contact - remove_contact_handle: - type: text - mappings: - - type: from_llm - remove_contact_confirmation: - type: text - mappings: - - type: from_llm - -responses: - utter_ask_remove_contact_handle: - - text: What's the handle of the user you want to remove? - utter_contact_not_in_list: - - text: "That contact is not in your list." - utter_remove_contact_error: - - text: "Something went wrong, please try again." - utter_remove_contact_success: - - text: "Removed {remove_contact_handle}({remove_contact_name}) from your contacts." - utter_ask_remove_contact_confirmation: - - buttons: - - payload: "/SetSlots(remove_contact_confirmation=true)" - title: Yes - - payload: "/SetSlots(remove_contact_confirmation=false)" - title: No, cancel the removal - text: "Should I remove {remove_contact_handle} from your contact list?" - utter_remove_contact_cancelled: - - text: "Okay, I am cancelling this removal of a contact." diff --git a/caml/domain/shared.yml b/caml/domain/shared.yml deleted file mode 100644 index 93f6fed..0000000 --- a/caml/domain/shared.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: "3.1" - -slots: - return_value: - type: any - mappings: - - type: custom - action: add_contact - - type: custom - action: remove_contact diff --git a/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml b/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml deleted file mode 100644 index 9d7d79a..0000000 --- a/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml +++ /dev/null @@ -1,16 +0,0 @@ -test_cases: - - test_case: user cancels adding a contact during the correction - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @foo - - slot_was_set: - - add_contact_handle: "@foo" - - utter: utter_ask_add_contact_name - - user: Wait, no, the handle is @bar - - slot_was_set: - - add_contact_handle: "@bar" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_name - - user: I changed my mind, stop. - - utter: utter_flow_cancelled_rasa diff --git a/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml b/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml deleted file mode 100644 index 220fd40..0000000 --- a/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +++ /dev/null @@ -1,7 +0,0 @@ -test_cases: - - test_case: user changes mind based on new info - steps: - - user: I want to add contact - - utter: utter_ask_add_contact_handle - - user: Stop - - utter: utter_flow_cancelled_rasa diff --git a/caml/e2e_tests/corrections/user_corrects_contact_handle.yml b/caml/e2e_tests/corrections/user_corrects_contact_handle.yml deleted file mode 100644 index c874814..0000000 --- a/caml/e2e_tests/corrections/user_corrects_contact_handle.yml +++ /dev/null @@ -1,20 +0,0 @@ -test_cases: - - test_case: user corrects the handle - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @foo - - slot_was_set: - - add_contact_handle: "@foo" - - utter: utter_ask_add_contact_name - - user: Wait, no, the handle is @bar - - slot_was_set: - - add_contact_handle: "@bar" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_name - - user: It's Barbar - - slot_was_set: - - add_contact_name: "Barbar" - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/caml/e2e_tests/corrections/user_corrects_contact_name.yml b/caml/e2e_tests/corrections/user_corrects_contact_name.yml deleted file mode 100644 index 3836acd..0000000 --- a/caml/e2e_tests/corrections/user_corrects_contact_name.yml +++ /dev/null @@ -1,19 +0,0 @@ -test_cases: - - test_case: user corrects the handle - steps: - - user: I want to add a new contact - - utter: utter_ask_add_contact_handle - - user: it's @jane - - slot_was_set: - - add_contact_handle: "@jane" - - utter: utter_ask_add_contact_name - - user: It's Jane Bar - - slot_was_set: - - add_contact_name: "Jane Bar" - - user: Wait, it's Jane Foo - - slot_was_set: - - add_contact_name: "Jane Foo" - - utter: utter_corrected_previous_input - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml b/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml deleted file mode 100644 index b318972..0000000 --- a/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +++ /dev/null @@ -1,15 +0,0 @@ -test_cases: - - test_case: user adds a contact to their list - steps: - - user: I want to add someone to my contact list - - utter: utter_ask_add_contact_handle - - user: it's @barts - - slot_was_set: - - add_contact_handle: "@barts" - - utter: utter_ask_add_contact_name - - user: just Bart - - slot_was_set: - - add_contact_name: Bart - - utter: utter_ask_add_contact_confirmation - - user: Yes - - utter: utter_contact_added diff --git a/caml/e2e_tests/happy_paths/user_lists_contacts.yml b/caml/e2e_tests/happy_paths/user_lists_contacts.yml deleted file mode 100644 index 427a72d..0000000 --- a/caml/e2e_tests/happy_paths/user_lists_contacts.yml +++ /dev/null @@ -1,5 +0,0 @@ -test_cases: - - test_case: user lists their contacts - steps: - - user: Please show me my contacts - - utter: utter_list_contacts diff --git a/caml/e2e_tests/happy_paths/user_removes_contact.yml b/caml/e2e_tests/happy_paths/user_removes_contact.yml deleted file mode 100644 index 89cd7d8..0000000 --- a/caml/e2e_tests/happy_paths/user_removes_contact.yml +++ /dev/null @@ -1,11 +0,0 @@ -test_cases: - - test_case: user removes a contact - steps: - - user: I want to remove contact - - utter: utter_ask_remove_contact_handle - - user: "@MaryLu" - - slot_was_set: - - remove_contact_handle: "@MaryLu" - - utter: utter_ask_remove_contact_confirmation - - user: Yes - - utter: utter_remove_contact_success diff --git a/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml b/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml deleted file mode 100644 index f1d47a9..0000000 --- a/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml +++ /dev/null @@ -1,12 +0,0 @@ -test_cases: - - test_case: user removes a contact using contact list - steps: - - user: Please show me my contacts - - utter: utter_list_contacts - - utter: utter_can_do_something_else - - user: Remove contact @MaryLu - - slot_was_set: - - remove_contact_handle: "@MaryLu" - - utter: utter_ask_remove_contact_confirmation - - user: yes - - utter: utter_remove_contact_success diff --git a/caml/endpoints.yml b/caml/endpoints.yml deleted file mode 100644 index 4f4e020..0000000 --- a/caml/endpoints.yml +++ /dev/null @@ -1,58 +0,0 @@ -# This file contains the different endpoints your bot can use. - -# Server where the models are pulled from. -# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions - -action_endpoint: - actions_module: "actions" - -# Tracker store which is used to store the conversations. -# By default the conversations are stored in memory. -# https://rasa.com/docs/rasa-pro/production/tracker-stores - -#tracker_store: -# type: redis -# url: -# port: -# db: -# password: -# use_ssl: - -#tracker_store: -# type: mongod -# url: -# db: -# username: -# password: - -# Event broker which all conversation events should be streamed to. -# https://rasa.com/docs/rasa-pro/production/event-brokers - -#event_broker: -# url: localhost -# username: username -# password: password -# queue: queue - -# The lines below activate contextual rephrasing, using the default OpenAI language model. -# Ensure the OPENAI_API_KEY is set to prevent any missing API key errors. -# For more details, refer to the documentation: -# https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser -# To enable the rephraser, remove the comment symbols in the lines below. -#nlg: -# type: rephrase - -model_groups: - - id: openai-gpt-4 - models: - - provider: openai - model: openai/gpt-4 - request_timeout: 7 - max_tokens: 256 diff --git a/tutorial_1/.rasa/cache/cache.db b/tutorial_1/.rasa/cache/cache.db deleted file mode 100644 index d943b15b5c12b66c78211ec6aefd988145b089c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 Y0tzUgfC36Apnw7jD4>7>3gnl-Z!(ov7ytkO diff --git a/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal b/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal deleted file mode 100644 index 73754050bad9375dc8c83864a26d982b98ed389e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601552 zcmeFa37i~9eds@{k+k==e6AcY9#2dxJ@2f$&aRS!jV!HYVIhOGj_ha5rnF9R9za zLwjf~8?TO)_3Mw+v)xl&UG?qi>Y1Kje=E9U^_{uWKd#N?*5tCO^7s||9@~0>e9^_Z zJ1!qBUI44|bJzdcpTF+j^}lw{mj;LaF}G&u-T9$E8~V!7=Y~E$^n>6lL+=hg72FdX z3ibpq4Xz3<3DyMJrZ^!1B!C2v01`j~NB{{S0VIF~kN^@mo&?S~@T>U?S2oJGyNOD9 zs+>L_cGf$XAMUcXnQGeGyC#2L&s4e5aEBQ4v;+5?;OqAMvkZkd=a+gmDbV!B>SYqnNdwf4ZK zJjplTnkrW(d>P)%_K|x-JXdWW83c%`}D&Y|NKdw%1Qhnd#;R zE1^i|9e948oz;Hl=GsiXYAO>`wZz?KD(4=!B7fL^=XJGiAFS!gpVO7yJ_xcuvaj|-y`9?(gK!rif8mPRyAZjLoSna9#e%QcxeqrJ z9lo28`_y@Pv0|~i3As-W=Sl0G`8N|jk*z=SPD1YE=j2PB^@r~y{t=oZRQ!K*)V8EBEXTgxp7g-Mn~#yMEo;+Tl_UwC-eSh@F`xeFv zEan!-oCBw7x~4E01`j~NB{{S0VIF~kN^@u0w;{X83(RDrsENu7Jh-J z8!zy0yB>Yx&sMB^C&mk$u=b5RLIOwt2_OL^fCP{L5BYt)c*e#HtdX~V?@goWJCBGLxF
  • ddeBkNE3w-6AH@>Iz=WHj&3q0la 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 diff --git a/tutorial_1/.rasa/cache/tmpai47q5lw/command_prompt.jinja2 b/tutorial_1/.rasa/cache/tmpai47q5lw/command_prompt.jinja2 deleted file mode 100644 index 673fcae..0000000 --- a/tutorial_1/.rasa/cache/tmpai47q5lw/command_prompt.jinja2 +++ /dev/null @@ -1,60 +0,0 @@ -Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. - -These are the flows that can be started, with their description and slots: -{% for flow in available_flows %} -{{ flow.name }}: {{ flow.description }} - {% for slot in flow.slots -%} - slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} - {% endfor %} -{%- endfor %} - -=== -Here is what happened previously in the conversation: -{{ current_conversation }} - -=== -{% if current_flow != None %} -You are currently in the flow "{{ current_flow }}". -You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. - -{% if flow_slots|length > 0 %} -Here are the slots of the currently active flow: -{% for slot in flow_slots -%} -- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} -{% endfor %} -{% endif %} -{% else %} -You are currently not in any flow and so there are no active slots. -This means you can only set a slot if you first start a flow that requires that slot. -{% endif %} -If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. - -The user just said """{{ user_message }}""". - -=== -Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: -* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" -* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" -* Cancelling the current flow, described by "CancelFlow()" -* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). -* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". -* Responding to knowledge-oriented user messages, described by "SearchAndReply()" -* Responding to a casual, non-task-oriented user message, described by "ChitChat()". -* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". -{% if is_repeat_command_enabled %} -* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. -{% endif %} - -=== -Write out the actions you want to take, one per line, in the order they should take place. -Do not fill slots with abstract values or placeholders. -Only use information provided by the user. -Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. -Don't be overly confident. Take a conservative approach and clarify before proceeding. -If the user asks for two things which seem contradictory, clarify before starting a flow. -If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. -Strictly adhere to the provided action types listed above. -Focus on the last message and take it one step at a time. -Use the previous conversation steps only to aid understanding. - -Your action list: diff --git a/tutorial_1/.rasa/cache/tmpai47q5lw/config.json b/tutorial_1/.rasa/cache/tmpai47q5lw/config.json deleted file mode 100644 index 5c59ff2..0000000 --- a/tutorial_1/.rasa/cache/tmpai47q5lw/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "prompt": null, - "prompt_template": null, - "user_input": null, - "llm": { - "provider": "rasa", - "model": "rasa/cmd_gen_codellama_13b_calm_demo", - "api_base": "https://tutorial-llm.rasa.ai" - }, - "flow_retrieval": { - "embeddings": { - "provider": "openai", - "model": "text-embedding-ada-002" - }, - "num_flows": 20, - "turns_to_embed": 1, - "should_embed_slots": true, - "active": false - } -} \ No newline at end of file diff --git a/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 b/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 deleted file mode 100644 index 673fcae..0000000 --- a/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 +++ /dev/null @@ -1,60 +0,0 @@ -Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. - -These are the flows that can be started, with their description and slots: -{% for flow in available_flows %} -{{ flow.name }}: {{ flow.description }} - {% for slot in flow.slots -%} - slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} - {% endfor %} -{%- endfor %} - -=== -Here is what happened previously in the conversation: -{{ current_conversation }} - -=== -{% if current_flow != None %} -You are currently in the flow "{{ current_flow }}". -You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. - -{% if flow_slots|length > 0 %} -Here are the slots of the currently active flow: -{% for slot in flow_slots -%} -- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} -{% endfor %} -{% endif %} -{% else %} -You are currently not in any flow and so there are no active slots. -This means you can only set a slot if you first start a flow that requires that slot. -{% endif %} -If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. - -The user just said """{{ user_message }}""". - -=== -Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: -* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" -* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" -* Cancelling the current flow, described by "CancelFlow()" -* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). -* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". -* Responding to knowledge-oriented user messages, described by "SearchAndReply()" -* Responding to a casual, non-task-oriented user message, described by "ChitChat()". -* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". -{% if is_repeat_command_enabled %} -* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. -{% endif %} - -=== -Write out the actions you want to take, one per line, in the order they should take place. -Do not fill slots with abstract values or placeholders. -Only use information provided by the user. -Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. -Don't be overly confident. Take a conservative approach and clarify before proceeding. -If the user asks for two things which seem contradictory, clarify before starting a flow. -If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. -Strictly adhere to the provided action types listed above. -Focus on the last message and take it one step at a time. -Use the previous conversation steps only to aid understanding. - -Your action list: diff --git a/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json b/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json deleted file mode 100644 index 5c59ff2..0000000 --- a/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "prompt": null, - "prompt_template": null, - "user_input": null, - "llm": { - "provider": "rasa", - "model": "rasa/cmd_gen_codellama_13b_calm_demo", - "api_base": "https://tutorial-llm.rasa.ai" - }, - "flow_retrieval": { - "embeddings": { - "provider": "openai", - "model": "text-embedding-ada-002" - }, - "num_flows": 20, - "turns_to_embed": 1, - "should_embed_slots": true, - "active": false - } -} \ No newline at end of file diff --git a/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 b/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 deleted file mode 100644 index 673fcae..0000000 --- a/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 +++ /dev/null @@ -1,60 +0,0 @@ -Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. - -These are the flows that can be started, with their description and slots: -{% for flow in available_flows %} -{{ flow.name }}: {{ flow.description }} - {% for slot in flow.slots -%} - slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} - {% endfor %} -{%- endfor %} - -=== -Here is what happened previously in the conversation: -{{ current_conversation }} - -=== -{% if current_flow != None %} -You are currently in the flow "{{ current_flow }}". -You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. - -{% if flow_slots|length > 0 %} -Here are the slots of the currently active flow: -{% for slot in flow_slots -%} -- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} -{% endfor %} -{% endif %} -{% else %} -You are currently not in any flow and so there are no active slots. -This means you can only set a slot if you first start a flow that requires that slot. -{% endif %} -If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. - -The user just said """{{ user_message }}""". - -=== -Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: -* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" -* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" -* Cancelling the current flow, described by "CancelFlow()" -* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). -* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". -* Responding to knowledge-oriented user messages, described by "SearchAndReply()" -* Responding to a casual, non-task-oriented user message, described by "ChitChat()". -* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". -{% if is_repeat_command_enabled %} -* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. -{% endif %} - -=== -Write out the actions you want to take, one per line, in the order they should take place. -Do not fill slots with abstract values or placeholders. -Only use information provided by the user. -Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. -Don't be overly confident. Take a conservative approach and clarify before proceeding. -If the user asks for two things which seem contradictory, clarify before starting a flow. -If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. -Strictly adhere to the provided action types listed above. -Focus on the last message and take it one step at a time. -Use the previous conversation steps only to aid understanding. - -Your action list: diff --git a/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json b/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json deleted file mode 100644 index 5c59ff2..0000000 --- a/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "prompt": null, - "prompt_template": null, - "user_input": null, - "llm": { - "provider": "rasa", - "model": "rasa/cmd_gen_codellama_13b_calm_demo", - "api_base": "https://tutorial-llm.rasa.ai" - }, - "flow_retrieval": { - "embeddings": { - "provider": "openai", - "model": "text-embedding-ada-002" - }, - "num_flows": 20, - "turns_to_embed": 1, - "should_embed_slots": true, - "active": false - } -} \ No newline at end of file diff --git a/tutorial_1/actions/__init__.py b/tutorial_1/actions/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tutorial_1/actions/__pycache__/__init__.cpython-310.pyc b/tutorial_1/actions/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 037a4b879dcde8dfd8b52edede4e154367666629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmd1j<>g`kf_{dmbP)X*L?8o3AjbiSi&=m~3PUi1CZpdlIYq V;;_lhPbtkwwF8-4%mgG@7yu&gB|!iH diff --git a/tutorial_1/actions/__pycache__/actions.cpython-310.pyc b/tutorial_1/actions/__pycache__/actions.cpython-310.pyc deleted file mode 100644 index e7de61a7bfe7b92042a82c7fbd22cb2e23194eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmaJ=OK;RL5VoD?W_SC5f?6a%;4z1n@4Lq&{o@1d*?5} zk-y|C7x)Xj#7v@XEAg=8FEbN+=9@2*dN_;-toJ0Ig$^N~(Yd)?aCTtp0{}q;El5dY zTC$jxPVAI!>{5)g!YlpQFM~K}eWwV^UfgSKw}{Gq+^6Iv5uWfbiSVU=;lu+GOvxzx z3Yp2swa#vJYTW~QVywHLbHLZRHX~;JU2gKavcZ8$`CO_IwHteNQAh|^v;ABjrG_82 z@nBliW-1NGoHth=oE_Nu6@Vl$6(nYYN+)B23Fi{}5U%uuCw*WSNJoYl+k$>&@7miU zSttS#!s$r#fO}-`b=>w2C7(~5EX#Q=EAyhMgtoqtrco8AP;$A@#=Qqyqqu@X9yYP} z)3(V38sYOqU!_Vi%=L*t)2^09riO5-g>TQt?`k!N?zz-sUJKcokB^(2&$UUF8Jot` zDo=~#$+*j}m(T4Z5W7lC86pz~;L@{)|L$fR&)P^_sci$(eGco3x=izmV>`OYi#c?f6H zBpN=n>OtaBpjP0a))8(Y+y=10o3uzPF5^|8S?Nrwq)V&r;F&8G)heELR8!%IXjH=u zBO1~HJ$vvUIpD%%)VE=hpfE{dqa-P7(G+M8lH|Bai|&m=9n=~EW>+YULah|4t~`WI zglkT%g~Sy8op?dt1qjIsWe#KP7vRsxWj|KDmGAAD$!KVOb9w|nM3=TL+E&2=HdLuj z6D{V-2e;*5*O#$vc_KMZN=wkLUdP|UFzZ(4w#wfq+VE-D_cNSpjf6MJ8pt=G8_sXa C_Ypz> diff --git a/tutorial_1/actions/actions.py b/tutorial_1/actions/actions.py deleted file mode 100644 index 312c3a4..0000000 --- a/tutorial_1/actions/actions.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Any, Text, Dict, List -from rasa_sdk import Action, Tracker -from rasa_sdk.executor import CollectingDispatcher -from rasa_sdk.events import SlotSet - - -class ActionCheckSufficientFunds(Action): - def name(self) -> Text: - return "action_check_sufficient_funds" - - def run( - self, - dispatcher: CollectingDispatcher, - tracker: Tracker, - domain: Dict[Text, Any], - ) -> List[Dict[Text, Any]]: - # hard-coded balance for tutorial purposes. in production this - # would be retrieved from a database or an API - balance = 1000 - transfer_amount = tracker.get_slot("amount") - has_sufficient_funds = transfer_amount <= balance - return [SlotSet("has_sufficient_funds", has_sufficient_funds)] diff --git a/tutorial_1/config.yml b/tutorial_1/config.yml deleted file mode 100644 index de7c89f..0000000 --- a/tutorial_1/config.yml +++ /dev/null @@ -1,15 +0,0 @@ -recipe: default.v1 -language: en -pipeline: -- name: SingleStepLLMCommandGenerator - llm: - provider: rasa - model: rasa/cmd_gen_codellama_13b_calm_demo - api_base: "https://tutorial-llm.rasa.ai" - flow_retrieval: - active: false - -policies: -- name: FlowPolicy -# - name: EnterpriseSearchPolicy -assistant_id: 20241217-171049-frozen-programming diff --git a/tutorial_1/credentials.yml b/tutorial_1/credentials.yml deleted file mode 100644 index bbd88d4..0000000 --- a/tutorial_1/credentials.yml +++ /dev/null @@ -1,33 +0,0 @@ -# This file contains the credentials for the voice & chat platforms -# which your bot is using. -# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/ - -rest: -# # you don't need to provide anything here - this channel doesn't -# # require any credentials - - -#facebook: -# verify: "" -# secret: "" -# page-access-token: "" - -#slack: -# slack_token: "" -# slack_channel: "" -# slack_signing_secret: "" - -#socketio: -# user_message_evt: -# bot_message_evt: -# session_persistence: - -#mattermost: -# url: "https:///api/v4" -# token: "" -# webhook_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/tutorial_1/data/flows.yml b/tutorial_1/data/flows.yml deleted file mode 100644 index 59d6897..0000000 --- a/tutorial_1/data/flows.yml +++ /dev/null @@ -1,25 +0,0 @@ -flows: - transfer_money: - description: Help users send money to friends and family. - steps: - - collect: recipient - - collect: amount - description: the number of US dollars to send - - action: action_check_sufficient_funds - next: - - if: not slots.has_sufficient_funds - then: - - action: utter_insufficient_funds - next: END - - else: final_confirmation - - collect: final_confirmation - id: final_confirmation - next: - - if: not slots.final_confirmation - then: - - action: utter_transfer_cancelled - next: END - - else: transfer_successful - - action: utter_transfer_complete - id: transfer_successful - diff --git a/tutorial_1/data/patterns.yml b/tutorial_1/data/patterns.yml deleted file mode 100644 index dc34bf6..0000000 --- a/tutorial_1/data/patterns.yml +++ /dev/null @@ -1,11 +0,0 @@ -flows: - pattern_chitchat: - description: Conversation repair flow for off-topic interactions that won't disrupt the main conversation. should not respond to greetings or anything else for which there is a flow defined - name: pattern chitchat - steps: - - action: utter_free_chitchat_response - pattern_search: - description: Flow for handling knowledge-based questions - name: pattern search - steps: - - action: utter_free_chitchat_response diff --git a/tutorial_1/domain.yml b/tutorial_1/domain.yml deleted file mode 100644 index fd12876..0000000 --- a/tutorial_1/domain.yml +++ /dev/null @@ -1,53 +0,0 @@ -version: "3.1" - -actions: - - action_check_sufficient_funds - -slots: - recipient: - type: text - mappings: - - type: from_llm - amount: - type: float - mappings: - - type: from_llm - final_confirmation: - type: bool - mappings: - - type: from_llm - has_sufficient_funds: - type: bool - mappings: - - type: custom - -responses: - utter_ask_recipient: - - text: "Who would you like to send money to?" - - utter_ask_amount: - - text: "How much money would you like to send?" - - utter_transfer_complete: - - text: "All done. {amount} has been sent to {recipient}." - - utter_ask_final_confirmation: - - text: "Please confirm: you want to transfer {amount} to {recipient}?" - utter_transfer_cancelled: - - text: "Your transfer has been cancelled." - - utter_free_chitchat_response: - - text: "placeholder" - metadata: - rephrase: True - rephrase_prompt: | - The following is a conversation with an AI assistant built with Rasa. - The assistant can help the user transfer money. - The assistant is helpful, creative, clever, and very friendly. - The user is making small talk, and the assistant should respond, keeping things light. - Context / previous conversation with the user: - {{history}} - {{current_input}} - Suggested AI Response: - utter_insufficient_funds: - - text: "You do not have enough funds to make this transaction." \ No newline at end of file diff --git a/tutorial_1/endpoints.yml b/tutorial_1/endpoints.yml deleted file mode 100644 index e7bbf30..0000000 --- a/tutorial_1/endpoints.yml +++ /dev/null @@ -1,50 +0,0 @@ -# This file contains the different endpoints your bot can use. - -# Server where the models are pulled from. -# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions - -action_endpoint: - actions_module: actions - -# Tracker store which is used to store the conversations. -# By default the conversations are stored in memory. -# https://rasa.com/docs/rasa-pro/production/tracker-stores - -#tracker_store: -# type: redis -# url: -# port: -# db: -# password: -# use_ssl: - -#tracker_store: -# type: mongod -# url: -# db: -# username: -# password: - -# Event broker which all conversation events should be streamed to. -# https://rasa.com/docs/rasa-pro/production/event-brokers - -#event_broker: -# url: localhost -# username: username -# password: password -# queue: queue - -# Allow rephrasing of responses using a Rasa-hosted model -nlg: - type: rephrase - llm: - provider: rasa - model: rasa/cmd_gen_codellama_13b_calm_demo - api_base: "https://tutorial-llm.rasa.ai" diff --git a/tutorial_1/models/20241217-161816-chamfered-debug.tar.gz b/tutorial_1/models/20241217-161816-chamfered-debug.tar.gz deleted file mode 100644 index 666a655736eba138817c62a7fec37611aad98018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9061 zcmb8zQ+FkRvMu1)wrwXJc5K_WZFX$i$%@mlZFJJHosMml2 zonoJtmlusZO}jJ{9Orz(4a_|1;bP|}kn}Z*C$xv+{US}^*Bj?o$1W*S%fNl#Mu);B zxtPi*AFy+~I4eMi5g+qo9<9!<+K2j9rRBl4TkjKyLM5(!cJ3!Fe=>z!tprqhN z$M?RoJ1_ndY^G)IYaj>7&^xK%(R9WDS?P1!^E%Y_9+8=C{ z?R1+b#_D?T)?Z){_j`VUaR0+J>t03$QzK5b&iN==V%V_Ig^wze8$}(*QDPHPEp9I) zVH6tjovW1g-vU38JZ_#>CpJJxH@<9hkROpS?`xKj1;spK>MR;8&7)?l&bKnocydQ9l zxzfef9KkDTc?z#oQE?tG=KJC`NJnspxZ#rDh5kb5mYria2OlC~bCk~D=0h-!EA_~L z$4?WM9SjT?scwgUSuo;|;QLy!A~RN<@P$|cHZc1__d2jh(d`QPKR_oN_O5;Go*u}^ zFlNHGf45${2HPWlsnW1n;EeBg5P6!eq3tJ_pF6*OmNesjA%B5kL)b7yFgph0b-Gfv z-^XQvUb&t^ad8d3?o+S5cuNEUXlga2PD~IQj zo=K8AXt|@8msJVTV?&aggrP4P00Sev;x5;~E8tu7DyD>YT<~=A!>OPVvWuMe(t;bH zrr-L8Ag=v~q`;VmdTd%?EKbSaji_+hm)ed(=Rz`4DY(3n8YRWnXWO!P2dfmd8CptFl=y~F)=mkgXbZwY+f=zu~z>6hNTBR)FwV$6Y0vqw?L$) zf!b_?dg*sv4ys^njd5sCkNp{0e0vY^w+r_mTd0H^O~A8Li$N@2G=lY=bi%k&?AhfE z0u*g*vrAK>YHhh%G1-Qk9AeKOcJP*5#Bf$Jnur0uQXG6^2)xve(pE?UCF&oPCrMXD zWTE)VHYSX}aj9VZ3FVn-faJ2b3Lg2iedRtO5vLRpk0!c!XUfaRTuG)D6e5$9T1q8W zZI-VY#pT$&-3hM*c5G(qd1NAVhV$kl)J$6WjN6@5Wg^Y%F}$_3he#&q(=*+{Xfpw> zC@Mfo%dp_nA)I5nP~W(2vcPyY2xzH^1qd-9DhNe{9ef8%3Olfh3OuIQ{=4vu4}s^m znni5l$pd^XSwEB~96rA_qU)5_;4%ifb+-!ICXc8OV!Rjqm9K93nA0l+Cj;(>$H*Rq zsg5B_8(F_(&I7_JxYjX&ghlEK0DUsu0~OO> zkPV1g5b%R0L85k4D8bwCFi4m1HW;rCP=|@o#&5ic2P1l9;_jo)O85dCBooFCXe1Nu zA)GrDzYgAu<>q~eAeGt52w1pW_`oAH4bCax#kWvZ3mR^zmpW5clDmt#hnq&$kOnG> z8#slMVbrQ6gbY4WUULrrxV=#r1ZVY}PV1M6;o_Eu@T;4UqQlPO{<(T%Q5UnH6qTI{ z#G5B-YCh#hX_-D$aY8l)^eWU>ak>-_oc8GTa!xpOVa_-vv=k`ol=4DqcB&B#HykMa z*dnjYQ_!)fLAE(~2zy^`mTK*6<0?4W@`DzDU!|HKF1WJEy4R=DTnt$X3Fe0Ua1{7% zJnuA*Q9S1n88)Kw{3T%2X=eWO*PaNP*DHxOL-mY^gcq5U<8wxdwUQt6)scUEdL@<> zK}lfG32zbEO2p)?DVOA|XF0cRTv_@GmSx_!oN3^P8vQhtR@>k4nSz3?pPDr?3Y{yV z)i8Q>rKs7H)X-nW20G~^$7*}5MYbF6*~o2A2X@%0fEC%Svj*1bAE$2Qt~j0)&mM`h zTOWXz?@Bk2dGXg;XCLUT`6dX*h%6QP=7+;i#{EWMPjAC>(B>Ct{UT}W1N1-d^%!*h z$oD4PYY=Ng9MVq=G=ZI0m-GpHV7y`x{{AM-9N=Sk2(pi+0l)qNK?-;`R$cEcNGt0? zc+~4yn`Bok+u?X%n&LHci?g$Gg`ZF>+9dNN43H$gb$4aoPh`!!Vd57hSg|C0b(LmPx0|}0b>x}u&9T1oIqK!>~mW?*t8+3&GP!w2IS7uyAfDKl9EDgq* zrf<19?7N8J%#Qa5jNBIq8Zqymu^C&HQ@b_Ymo}Q$CIEG9e36ee#d58c-%N6jC#SS1;d_ZTNNuY3*eC-`_8%i(ofF*$vjMg zO(yiZ@m60U1rWxd(q9&I#mG>{*-sSzKI&2jTSqCHJg6kbJD0_}KWPM3_?nA;2ju9M zxq?fdyc+arNeCtVOETnJDEW=cqqR{qRxC?e@b~oY=`GZ@`E-1#p&PO(hdg@1r2LMn zwXmRcn)+h>nPgN?KaLxiuR=bXK_hWi=w(eZL8sycI|}_YJQ-uC+`W*eC6Xz;zFy?g zJf9h2bmNl!#LpJsF5z5PaRo~PkisYE-2ZWktG0m+56=q3@q)1sR?TCB>>g9vxqMRQ zWfg+hnxQsD&BWh-kEw4LDH7!MgB<&xmYpm;+=wTM@P#v-kwMd}q}4GE@|sr<;tN*~ zU28#oNt{xwtO<^2;Sj@Tiyl-k=|MZ`FexzmZvJU7nl73YHFpAK*+K@yM~Byl zww(<|&8|x+8?(sBQliz?xR-XuWywqmw8g#TKZ$TYM-lg|qNnt=-@Uf`qM~9M9nC9x zs*6{ro=hy`BP5?oWU35bS-fM#JIXlBhv*{e4I{*7wG!UYh_g%ST^i1NHC-LsMYmDS zA6f(j9$1FOxZwKWtAZ*uy4=!9`CxGp6n*ZFzo z(>c*uQj?k!(Y$7zHMl#sh!aNX$(lq-6S*yUE+|m>OF-2Z)Wjn8{qy}9Lu0_WT$x0= zjH60(=;z}m%7V~ELFUKvF!5ybIxkvRw%>u3IP3R#*%0G}nS5SKL8Y3=7h5g874D7t z@VhFk-lSTQaEUPR%W3Cj_+@SY-}Q^0^u42)S2i?}oR&aA%actOcbrhBTmL@muo}Cx zajTb*C%4k2eA*$gbm38OQw>7xJ%d$Y$lL-h8~lW?boTNu-iv$jScuvlJi$ygkoJ>y ze7V1%uaewJ!={?sP@D!9ipTM`N`APG0J6sFhsrI#y4^#c5N3|lRXJ(w3zugco+AgARQ;!Bx4u7OMSwd@HIg`Vrxyo93q`(5I!;1r z285YqOV;+|7(cw%twR)Mf??6^k=YH7kZgq-U;BXpd*(~!;vIO8^;X=Pf_aXOif>bE zjGCu%T7YKN-r~ZKw}fN8AcQi#yJ-Hw$QPeoz*O|K?p*VGTl|@dvt+)UaNzZZH-R4Y zz=BT#V+eS zZq>WcdM0!k&lyj1T`Ab>t1WrZBPFUO@U?k&JRAvzjeNwMrmPtF1>4Rwgnt8l!7d`` z7~b8r7S=mKaIClEA5g=eg0UxYLkXn92kt+jiIZdH1|X!CjfuV|zo?(8|EeIvhqy-} z^a!nRij_%k!&^3s(1TX^=6fPijdv}*tI7l4Uszr=A1Cz;z_VTvug1LNgs^nA;M%9R z?~c!_EelL*usahU5s0+#{~lAKaPGoV{mGieF~W zwUgLGAx?6?qwK2sCZwGv(bg82Od_P3-*woXt*m#3H+G*pRer1GIRoZtix*e^K>4b`X>}%PA&i6akcAMDRI2`) zM%n~pi&mUYP)!5V=C4ffZO~A8xDrE=Az&K;A%X7aG;T|0EcoOl7rwDKOr^%m6j zCfqLrVvT*aXQk}#?>A=Mb3YJ9-g;H813CY1rOp5y$}0!tlin4-D*tLp2Tfd{vV-g| zK_BM;P7o%{uZvdsZ+U;cx7|q)H^`q6B>Jr`#Qsr$%k=A>1^x1N05rF@$a4)`&{akz zhjL(TAeBT+m2?Z(rs5vf5;&T2dnJ4Pm1r0_NTid?IWx3fv&GJD66KIHh|pUiCUM_z zGC%-3tAiAMM9<=gO<0#L4Z`KNCua_h%dOC04JVMA2Q9n|5QK z^dHw!ojLl1DA5AB=%#PC=gvi8_U`$0~AOe#*|mZg|!d{j93=_4hu7{#a-Z%0fiutj`u<2NZ$K!5 zJeCeq^7)({9Yykwp|H9#1ii~*B}bVUlxHlt5sW>W>@f8^5gKs`l29W98;!8@8yh=Z zjn=yo9m$6U_JHVXGW!RLnL8T`=-^!z4ZG{B5vSs&^hnK}IT1^Z$hVCW$xv4PF@|jT zG&F@?=3AjWHP2j8?RpeeMMYZO%36sj@{_`;pTuPW9Ii|BSHTbbjb1jg->?ydB`>Ch z55zYqNN-pG_yKf=s=bDNgBY@mwbX2;tbD*&)fi1vTVzTtr3W3?I-|&MQWinjo(c8> zo%fQRhrbE*s5MU@(?>_{n#M7KY22&{WV!XM;|3-7t}jCWs8^WfQm$B<&n}0CMdi=yI$ z@juWAv+vVC*sVC?oy-cvg=i#oP$D`h=gBut86II>5N=!#otqZMjYA zcS;(fDOVAi>PzJKa2)-z%OBHUxrzg4)9JhTgL2BG>tjP?4w6p+; zsMd0^7JYm=`mvmDvx42IRt|PG>I>gZnvNyQ0_`H2`bk}PeqM&0?=?*;JzbZdy#fg7 zOWxeQ7Y9R)-VG2y>86*C)QVVUwEt6<~QUPxnvu9Eh?5q0@k>7|;u4orXZBOmPXU z|Js(CZ1+k94Y4Dz*gpW2sF^yQDaM?xk1R^idSxlHCfe$ilS2N??YYb*mO1BJJ}-_k z&3tpmw#c*QU4$w>!S=|q2#8ERDJRX4Xp?aTtD@B%NXBccaYla}h|!2-siGDUiEl`# zg_gBMgo)!ciS>A9*k`RHuGmS;eh4%?Cd& zjjfVI$FPjf24it8>1;iT+fn~^q5tl5S45KFp*QcI6wDM!Mp|ZxwV|zh;a;v9qVA9~ ztNdjMMd^Bn)2Z*o>3Nu(Ce2)VxU?k27b^cFYx8C5Ok}V@Y*LJ=l<WD-P!`pB=1bykDVJD9KWB^HUg=7W5Bo$=f2d zIU7L>(TurFZK6s^+#UVNt(@+|#6Hn+dSqVNl0ix)1c}(9@>ydIYZKltMpn`O zi5bq>HnVr=<==dAwB%X0RlGflcLyAmXonH6%TYstQJ5R$<~+Vz3QOgQZ{1h7-ri4s z9UuPMuw@l^3osv|b5)$^s<=EFba@=JMBW_|o*Uf1#c`Ai(r7BUzi;+^-|**(&$$V2 z3w9^Zx;?&;4g=8QaWH-nHLq9lVk}Y-s7mjX8ZuVbN4jyC6 zZizq6?@?o4pYu>Aqor8&?%?g}_ZAPBLtb#BM3ypwU2+1>9A-C0qIE=7UMBGv{<&q( z0pE!%3Q;BqHsoP+ly(~B4!nOL9f&l#J1CiAF>3yYVr@4^`;c4nfR52vv;-FP!E2Kk z4(zgDlwZEK6C9aqkea#SQqBUGTI8z!4;~+8P;R)`_=0RsYV#$p@L~_y%v~{3oivJw z?cfR2BK4DOlezByqM|LaAQR%)&dEHY;%VQu`O z|Leh=2Qu@-+(zt(U}f^&&3EHkmM2foKn@9mX{}F~kh$8Rp3QFBwTNa0mEry=r*NGb zec#@*m%d|9i0gi>)u}9Gp5Cf|$X* z7o6`KnEW4j=tkRaWn*~m%?-#h{TiVb@~%mKc$-KSCj!n(+g84sY4q;V*vsN!;T=uQ zwG5l!O$vEFI?QdkhUa&!UlNd=C+yRhR)$C#p%nR5E1AvY_l+8yY|;>c2FmY6Et zl*FB~xhZmalGAD!{ODE-93(Dh90qIXqa~8JS{q}ju`G2*q0H64c+d2=xy{me&2+R? z-THT24{R9r0ZFS2GORr(x3)9V`!LT>4lTu8kx-pT#%9%eNotO<`t1;|VN$_SKuS@Y z%1Fm|sf)b}sNb&;+@dU@XQ>&e+!S57lIxu7H4+42yEXx0S)XhpNCjN!sR(c)Luq8_93xK24Xnh%0A<=&ApEg^J7u%LomkC2YjQewlPz`@WetR;v8ay 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 amZIT#y~6+haT2^g$RXXHNid&bVg5gpk6}Ro diff --git a/tutorial_1/models/20241217-233343-vivid-flush.tar.gz b/tutorial_1/models/20241217-233343-vivid-flush.tar.gz deleted file mode 100644 index 9b2aa9a6107a6e2fb6079db9c1547f6e93da436c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9452 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 diff --git a/tutorial_1/models/20241217-235204-green-triangle.tar.gz b/tutorial_1/models/20241217-235204-green-triangle.tar.gz deleted file mode 100644 index 574d0ad4ade44b883c65325bdc1636dc699bac54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9456 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 Cw2KY^
  • ed+rA0fX7Ic;+SzL6GcdaC(vV=f3 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 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/.rasa/cache/tmpvmyhfpi3/config.json b/.rasa/cache/tmpvmyhfpi3/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/.rasa/cache/tmpvmyhfpi3/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/models/20241217-165333-warm-bumper.tar.gz b/models/20241217-165333-warm-bumper.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cfdb31e0748bf5ed8fe450ce15f5c7b05fded99c GIT binary patch literal 9253 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 Date: Tue, 17 Dec 2024 23:34:52 +0000 Subject: [PATCH 7/9] update --- .rasa/cache/cache.db | Bin 16384 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 98304 -> 98304 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 32768 -> 32768 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 201912 -> 288432 bytes models/20241217-165831-burning-agent.tar.gz | Bin 0 -> 9256 bytes tutorial_1/.rasa/cache/cache.db | Bin 16384 -> 16384 bytes .../.rasa/cache/rasa-llm-cache/cache.db | Bin 32768 -> 40960 bytes .../cache/tmpwtefg7uu/command_prompt.jinja2 | 60 ++++++++++++++++++ .../.rasa/cache/tmpwtefg7uu/config.json | 20 ++++++ .../cache/tmpy4g0sx1x/command_prompt.jinja2 | 60 ++++++++++++++++++ .../.rasa/cache/tmpy4g0sx1x/config.json | 20 ++++++ tutorial_1/config.yml | 5 +- tutorial_1/data/flows.yml | 8 +++ tutorial_1/domain.yml | 11 +++- tutorial_1/endpoints.yml | 2 +- .../models/20241217-171052-gentle-body.tar.gz | Bin 0 -> 9288 bytes .../models/20241217-233343-vivid-flush.tar.gz | Bin 0 -> 9452 bytes 17 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 models/20241217-165831-burning-agent.tar.gz create mode 100644 tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 create mode 100644 tutorial_1/.rasa/cache/tmpwtefg7uu/config.json create mode 100644 tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 create mode 100644 tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json create mode 100644 tutorial_1/models/20241217-171052-gentle-body.tar.gz create mode 100644 tutorial_1/models/20241217-233343-vivid-flush.tar.gz diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db index 26d484c977ec0c22d6ad361e601f984d8c418679..8d0765477597c28494db94ed77c65cc9b36e56b2 100644 GIT binary patch delta 70 zcmZo@U~Fh$oFL7pFj2;tQDI|(sw9_%m9e3ov9Xb<`Q(1d*-);LiKXde6R8Alu&jxR Sv8kcSEsELqMNr!`KST_c8U@4 diff --git a/.rasa/cache/rasa-llm-cache/cache.db b/.rasa/cache/rasa-llm-cache/cache.db index d7626175702cc8c16e5e5034f32376e371798def..4234ac2da05af94538eb6c07b5bb87d5a005468d 100644 GIT binary patch delta 2039 zcmbu9TWnNC7{_;d_Ez@NqFdUc$hM*c>1pTOX3i-=C{YqkFRKZWi?YnjnM04=?zY|C zDimpJMUDE>9Pzw}A)>)(440ZTF}}zfi7yf*fQt7-eNdYaH9i>UP*+4WG4e8B<~ws{ ze*bU&-%L$Kr>3IEU+rA+pwt#FyL)-Q;10W$jiFGeJ|#5+R;m^&Iqy`bvTnPyGF~CO z^KQ}RkEUj}Np10Rg;d;f#bxD|8Cx=d?Usk~BQ6^%@chVFsZwI4LZoGed7WL$TdAbf zmq!b3h3CtAifnMKR4i4?%`?O!U9Di3H_>&|^1Rel_s1GW*q~S`kg}nsnVsJ8uI3va zlG*^P77B}yOIFY9m^lk*70$dRoqfBKT;~VY!CRTL29eJ!U@i| zN=Ds3ae}X!C1vr;uv^SKuFw#i4!#WX*MfsDnk2cFA08$n*~R6bw@6wo{cx!|RwRY| zaLMN2Gw<$ivi~qZQzrW8^c*Cmmc+EyZj~T1L>*sM0z|u zIyc&QI@KDMLLe6m1HsTA41K}SJNHa+FOYJH1ur(@FG=2(Y)K{(za_b8_mHbboEK_M0GrkaWT?Cs!uUC1%6lhIh;(2+m5E zX(mk-A#s$6kp^v>s+wim*wQG|Ip@ScmZGZ&s=BHZoj8~hWUItxI-?pPnBv^#$aJb6 zFjcoXAsjj?<3z<6S;Vk4&9Q9ER1OUVs?Z=7qDavZVN78Tvk{y`HZwT1_`u>m;#UL- zQ8YzU#VH1MOr~JPWROBp6^B{K;1nX}s9e#xMLDI&&~44ubV#V$zqk!`prcqw#R@bz z!&KKTsN0A^1==d6HnOOx2wJO!K}V;|!J3V^%1lFpCT0rhorebapt~^&)`wEliDmIO zqMN06!1@!jYryU&_T?HvLUk+@i-+PM^z>cVTg93eYcV_(Ik?oj?}g=&z@p=RJ`9>~ z#YAU_SWu=&<+846NT!y~WK9$rV--VY_#+vRk%WW1rQaX+a}jXJKR5}7=z-Y4)x_KX z?}gRwD?IU*^S1R)L++2b;j{{yGXS^8Tx3G+wV?F5`<< zuf?G7KYJ&h6@~9Ob!5Rm#6a^Z8#_T43UsO?Sx4BCh4(d?TZ$oE$_-5?HFN=+1V{ZJ z?*|i2I_hYzlq%xgtCWU#vE1Hm8rVB=bSoL`yIRN1*ZU|0{J|?#i~dCpvSE>V%RinF z-mxK55N4*V5+)=tg$nNwC>xq>8HQ<^HAP0`lN#t;IzJBD3YPf_7>-R8uTbbxeeRG_J~~MYv2jLn3Wq?r+==nuGu~ c5OCPv>4K-4uyM^DVB{@*ee3-6V_>rGcX9P$w*UYD delta 596 zcmZvXPi)d)7{>edqXnb|Vm5)Pp{NP*9|a6^4#&87kwv|E@KBqN&V8=!$7s8`sTtVB z!){A8+{_Z=(KscuI{$m~;=zMa?_P{YV>}AMWhQ$4y-%L^_q1AktHrP1%k3RQnSe!> zG({%{v8xQjghiA9OdZp%d2e%t@+eA&Z1s{t%(`|(bW11`vTW5RmQApgbgQTYbz;pb z4T5KNO=&c#O)=HEq&w;5PHauF7EL_Uq$YK&ggfD>atcm*SLNL!WhAqI zGFZhky<|^GVusyuZ(UC8Jb^NR9bF$t?#Q~wyPxHF3?6&mDr3t}hR|VFnuyow#ifX%+=_BMF>s2Y$^ExO_bFLt_f@$X`H z#aseZ6N+B2(I>Ye-Qu+mclYdvAQL$qUgM|WHkS_!MON8gp$T*|a6w3S_DPUq;f#My zf>XSoKLir^8(BCTDrUJn6Wfegu_Mv1(L2%e(KtUPzT+0e8^NDkp6A4J@PY6{xX*tP rriFCmQ)JbzkFFg%sm86pxl?ztR7TWl_nu21 zNL3Fs3Je^94Ax-AYgKmmEi%|E=aFfuzbxB+?UjLb3&wm`;D*2x##xme8@>=>MZ y-1kiUatz808VtG&MhxZ*_6#mS!P^R~@(g+m79izJoGJ{O48{x&46Z<~JPQDKDpA`2 delta 288 zcmZo@U}|V!s+V}A%K!p`K+MR%AYcfjC4l(n3hqyu4{95QqVhL>XueijKUHS#O?`)3 zq^buR1qM1m@;?%Q3Qw%hoVb8xvIirND9Bc3AZ7<*4j>i=Vu{I)jKYj4VLkYiA0&|uI73f*Pe{KNYSBT%gxJEs(bJc9~@ qCW9VO;wuxUG=lFapW7HxUSARAKBuR#np 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 ONaD>f%bq{W*8DGwVCu2} delta 9680 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 EAHriXFaQ7m literal 0 HcmV?d00001 diff --git a/tutorial_1/.rasa/cache/cache.db b/tutorial_1/.rasa/cache/cache.db index afe5b5e54daec38280f08660841667d92d94c31e..7beffb83e4be6a880f7b3cc62f092ee376eb7732 100644 GIT binary patch delta 1124 zcmaizJ8KkC6vuZlkKJrCgM|T6*1#sgChI--+~+C;u@ORQ!6x2kKu92JG^w(wY&8QG z)>=zQG>9L-#xEeG$v4n15WKUyYKp)V)65+HkKZ}d@7MeN`kNc|*4vv8>aD{kAM)Ae z)LAWmoc+#LWc(Qp%8@ojmo=-q1V{a2)nNWd;Ym+W^YN7)5> zodPk5(njJqk=ANd4uk_16oQH>SgE-bz(`7u5tLHgg!Gjvb!m3MRB`B3d~WBBUA9i1 z@4!xKu#mV-jJ%`M#EFz3`ly79PC7Igh?kxc83bk216WE>S*B&w8i-)%(Mm)E=7KlK z9*`cVT~w&K9&p=QQ`>8F_vL`w_+M@W1vL?kb_@geE*QbRaa4g166uKB^xi)~DNv?` z46%)kqN8(Q0H`Q4(WDcsklwS9-f@s2(UM341)&48B4}y^jn-4C7-yVZ8eMQ9$k3@< zd}(KmS1&?bm)qMVx1*Kz*ZOQTJFaEN`9^+_o#zj;pZRHil6Q`-&b`m}=C7>Qt4^_5 z4prSwqa3O_jLCB7;s)0)Tj9jOuY&n_IaEb-tT?#yY}o%i?<4}JiNir^pC}CaFO(`( hzgn|6S)N}R6s)@JLBXmMoGA4c2L-BDo(e2){sH^#B60u# delta 86 zcmZo@U~Fh$oFL7}I#I@%k#%Fj5`HdbK5qv8D87$;-kTK_Z22~O%k5<3V&3ESrZ04ZP_Z~y=R diff --git a/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db b/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db index 9c7b9f4c406798e25008e5ea222f5179ce53d1d6..8d7e22dccbfed39b3cd6838093885ec0030238c1 100644 GIT binary patch literal 40960 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 diff --git a/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 b/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 new file mode 100644 index 0000000..673fcae --- /dev/null +++ b/tutorial_1/.rasa/cache/tmpwtefg7uu/command_prompt.jinja2 @@ -0,0 +1,60 @@ +Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. + +These are the flows that can be started, with their description and slots: +{% for flow in available_flows %} +{{ flow.name }}: {{ flow.description }} + {% for slot in flow.slots -%} + slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} + {% endfor %} +{%- endfor %} + +=== +Here is what happened previously in the conversation: +{{ current_conversation }} + +=== +{% if current_flow != None %} +You are currently in the flow "{{ current_flow }}". +You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. + +{% if flow_slots|length > 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json b/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/tutorial_1/.rasa/cache/tmpwtefg7uu/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 b/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 new file mode 100644 index 0000000..673fcae --- /dev/null +++ b/tutorial_1/.rasa/cache/tmpy4g0sx1x/command_prompt.jinja2 @@ -0,0 +1,60 @@ +Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests. + +These are the flows that can be started, with their description and slots: +{% for flow in available_flows %} +{{ flow.name }}: {{ flow.description }} + {% for slot in flow.slots -%} + slot: {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} + {% endfor %} +{%- endfor %} + +=== +Here is what happened previously in the conversation: +{{ current_conversation }} + +=== +{% if current_flow != None %} +You are currently in the flow "{{ current_flow }}". +You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}. + +{% if flow_slots|length > 0 %} +Here are the slots of the currently active flow: +{% for slot in flow_slots -%} +- name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %} +{% endfor %} +{% endif %} +{% else %} +You are currently not in any flow and so there are no active slots. +This means you can only set a slot if you first start a flow that requires that slot. +{% endif %} +If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message. + +The user just said """{{ user_message }}""". + +=== +Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions: +* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)" +* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)" +* Cancelling the current flow, described by "CancelFlow()" +* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money). +* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else". +* Responding to knowledge-oriented user messages, described by "SearchAndReply()" +* Responding to a casual, non-task-oriented user message, described by "ChitChat()". +* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()". +{% if is_repeat_command_enabled %} +* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages. +{% endif %} + +=== +Write out the actions you want to take, one per line, in the order they should take place. +Do not fill slots with abstract values or placeholders. +Only use information provided by the user. +Only start a flow if it's completely clear what the user wants. Imagine you were a person reading this message. If it's not 100% clear, clarify the next step. +Don't be overly confident. Take a conservative approach and clarify before proceeding. +If the user asks for two things which seem contradictory, clarify before starting a flow. +If it's not clear whether the user wants to skip the step or to cancel the flow, cancel the flow. +Strictly adhere to the provided action types listed above. +Focus on the last message and take it one step at a time. +Use the previous conversation steps only to aid understanding. + +Your action list: diff --git a/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json b/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json new file mode 100644 index 0000000..5c59ff2 --- /dev/null +++ b/tutorial_1/.rasa/cache/tmpy4g0sx1x/config.json @@ -0,0 +1,20 @@ +{ + "prompt": null, + "prompt_template": null, + "user_input": null, + "llm": { + "provider": "rasa", + "model": "rasa/cmd_gen_codellama_13b_calm_demo", + "api_base": "https://tutorial-llm.rasa.ai" + }, + "flow_retrieval": { + "embeddings": { + "provider": "openai", + "model": "text-embedding-ada-002" + }, + "num_flows": 20, + "turns_to_embed": 1, + "should_embed_slots": true, + "active": false + } +} \ No newline at end of file diff --git a/tutorial_1/config.yml b/tutorial_1/config.yml index 41ad796..de7c89f 100644 --- a/tutorial_1/config.yml +++ b/tutorial_1/config.yml @@ -10,5 +10,6 @@ pipeline: active: false policies: - - name: FlowPolicy -# - name: EnterpriseSearchPolicy \ No newline at end of file +- name: FlowPolicy +# - name: EnterpriseSearchPolicy +assistant_id: 20241217-171049-frozen-programming diff --git a/tutorial_1/data/flows.yml b/tutorial_1/data/flows.yml index 5a4b4d3..59d6897 100644 --- a/tutorial_1/data/flows.yml +++ b/tutorial_1/data/flows.yml @@ -5,7 +5,15 @@ flows: - collect: recipient - collect: amount description: the number of US dollars to send + - action: action_check_sufficient_funds + next: + - if: not slots.has_sufficient_funds + then: + - action: utter_insufficient_funds + next: END + - else: final_confirmation - collect: final_confirmation + id: final_confirmation next: - if: not slots.final_confirmation then: diff --git a/tutorial_1/domain.yml b/tutorial_1/domain.yml index c799cb5..fd12876 100644 --- a/tutorial_1/domain.yml +++ b/tutorial_1/domain.yml @@ -1,5 +1,8 @@ version: "3.1" +actions: + - action_check_sufficient_funds + slots: recipient: type: text @@ -13,6 +16,10 @@ slots: type: bool mappings: - type: from_llm + has_sufficient_funds: + type: bool + mappings: + - type: custom responses: utter_ask_recipient: @@ -41,4 +48,6 @@ responses: Context / previous conversation with the user: {{history}} {{current_input}} - Suggested AI Response: \ No newline at end of file + Suggested AI Response: + utter_insufficient_funds: + - text: "You do not have enough funds to make this transaction." \ No newline at end of file diff --git a/tutorial_1/endpoints.yml b/tutorial_1/endpoints.yml index 22b5929..e7bbf30 100644 --- a/tutorial_1/endpoints.yml +++ b/tutorial_1/endpoints.yml @@ -11,7 +11,7 @@ # https://rasa.com/docs/rasa-pro/concepts/custom-actions action_endpoint: - actions_module: "actions" + actions_module: actions # Tracker store which is used to store the conversations. # By default the conversations are stored in memory. diff --git a/tutorial_1/models/20241217-171052-gentle-body.tar.gz b/tutorial_1/models/20241217-171052-gentle-body.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ddd9a906e9eab6fb9181b3c2cf7911d7478a015d GIT binary patch literal 9288 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 amZIT#y~6+haT2^g$RXXHNid&bVg5gpk6}Ro literal 0 HcmV?d00001 diff --git a/tutorial_1/models/20241217-233343-vivid-flush.tar.gz b/tutorial_1/models/20241217-233343-vivid-flush.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9b2aa9a6107a6e2fb6079db9c1547f6e93da436c GIT binary patch literal 9452 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 literal 0 HcmV?d00001 From 92856d01a20c975b47357c94d0d63ed928471213 Mon Sep 17 00:00:00 2001 From: powerzilly Date: Wed, 18 Dec 2024 00:35:47 +0000 Subject: [PATCH 8/9] update --- .env | 3 +- .rasa/cache/cache.db | Bin 16384 -> 16384 bytes .rasa/cache/rasa-llm-cache/cache.db | Bin 98304 -> 106496 bytes .rasa/cache/rasa-llm-cache/cache.db-shm | Bin 32768 -> 32768 bytes .rasa/cache/rasa-llm-cache/cache.db-wal | Bin 288432 -> 119512 bytes calm/.rasa/cache/cache.db | Bin 0 -> 16384 bytes calm/.rasa/cache/rasa-llm-cache/cache.db | Bin 0 -> 32768 bytes calm/actions/__init__.py | 0 calm/actions/action_template.py | 27 ++++++++ calm/actions/add_contact.py | 30 +++++++++ calm/actions/db.py | 57 +++++++++++++++++ calm/actions/list_contacts.py | 22 +++++++ calm/actions/remove_contact.py | 35 +++++++++++ calm/config.yml | 11 ++++ calm/credentials.yml | 33 ++++++++++ calm/data/flows/add_contact.yml | 31 ++++++++++ calm/data/flows/list_contacts.yml | 14 +++++ calm/data/flows/remove_contact.yml | 29 +++++++++ calm/db/contacts.json | 10 +++ calm/domain/add_contact.yml | 39 ++++++++++++ calm/domain/list_contacts.yml | 17 +++++ calm/domain/remove_contact.yml | 38 ++++++++++++ calm/domain/shared.yml | 10 +++ .../user_cancels_during_a_correction.yml | 16 +++++ .../user_changes_mind_on_a_whim.yml | 7 +++ .../user_corrects_contact_handle.yml | 20 ++++++ .../user_corrects_contact_name.yml | 19 ++++++ .../user_adds_contact_to_their_list.yml | 15 +++++ .../happy_paths/user_lists_contacts.yml | 5 ++ .../happy_paths/user_removes_contact.yml | 11 ++++ .../user_removes_contact_from_list.yml | 12 ++++ calm/endpoints.yml | 58 ++++++++++++++++++ caml/.rasa/cache/cache.db | Bin 0 -> 16384 bytes caml/.rasa/cache/rasa-llm-cache/cache.db | Bin 0 -> 32768 bytes caml/actions/__init__.py | 0 caml/actions/action_template.py | 27 ++++++++ caml/actions/add_contact.py | 30 +++++++++ caml/actions/db.py | 57 +++++++++++++++++ caml/actions/list_contacts.py | 22 +++++++ caml/actions/remove_contact.py | 35 +++++++++++ caml/config.yml | 11 ++++ caml/credentials.yml | 33 ++++++++++ caml/data/flows/add_contact.yml | 31 ++++++++++ caml/data/flows/list_contacts.yml | 14 +++++ caml/data/flows/remove_contact.yml | 29 +++++++++ caml/db/contacts.json | 10 +++ caml/domain/add_contact.yml | 39 ++++++++++++ caml/domain/list_contacts.yml | 17 +++++ caml/domain/remove_contact.yml | 38 ++++++++++++ caml/domain/shared.yml | 10 +++ .../user_cancels_during_a_correction.yml | 16 +++++ .../user_changes_mind_on_a_whim.yml | 7 +++ .../user_corrects_contact_handle.yml | 20 ++++++ .../user_corrects_contact_name.yml | 19 ++++++ .../user_adds_contact_to_their_list.yml | 15 +++++ .../happy_paths/user_lists_contacts.yml | 5 ++ .../happy_paths/user_removes_contact.yml | 11 ++++ .../user_removes_contact_from_list.yml | 12 ++++ caml/endpoints.yml | 58 ++++++++++++++++++ models/20241218-000001-frigid-channel.tar.gz | Bin 0 -> 9276 bytes tutorial_1/.rasa/cache/cache.db | Bin 16384 -> 16384 bytes .../.rasa/cache/rasa-llm-cache/cache.db | Bin 40960 -> 40960 bytes .../.rasa/cache/rasa-llm-cache/cache.db-shm | Bin 0 -> 32768 bytes .../.rasa/cache/rasa-llm-cache/cache.db-wal | Bin 0 -> 601552 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 157 bytes .../__pycache__/actions.cpython-310.pyc | Bin 0 -> 1120 bytes .../20241217-235204-green-triangle.tar.gz | Bin 0 -> 9456 bytes 67 files changed, 1134 insertions(+), 1 deletion(-) create mode 100644 calm/.rasa/cache/cache.db create mode 100644 calm/.rasa/cache/rasa-llm-cache/cache.db create mode 100644 calm/actions/__init__.py create mode 100644 calm/actions/action_template.py create mode 100644 calm/actions/add_contact.py create mode 100644 calm/actions/db.py create mode 100644 calm/actions/list_contacts.py create mode 100644 calm/actions/remove_contact.py create mode 100644 calm/config.yml create mode 100644 calm/credentials.yml create mode 100644 calm/data/flows/add_contact.yml create mode 100644 calm/data/flows/list_contacts.yml create mode 100644 calm/data/flows/remove_contact.yml create mode 100644 calm/db/contacts.json create mode 100644 calm/domain/add_contact.yml create mode 100644 calm/domain/list_contacts.yml create mode 100644 calm/domain/remove_contact.yml create mode 100644 calm/domain/shared.yml create mode 100644 calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml create mode 100644 calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml create mode 100644 calm/e2e_tests/corrections/user_corrects_contact_handle.yml create mode 100644 calm/e2e_tests/corrections/user_corrects_contact_name.yml create mode 100644 calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml create mode 100644 calm/e2e_tests/happy_paths/user_lists_contacts.yml create mode 100644 calm/e2e_tests/happy_paths/user_removes_contact.yml create mode 100644 calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml create mode 100644 calm/endpoints.yml create mode 100644 caml/.rasa/cache/cache.db create mode 100644 caml/.rasa/cache/rasa-llm-cache/cache.db create mode 100644 caml/actions/__init__.py create mode 100644 caml/actions/action_template.py create mode 100644 caml/actions/add_contact.py create mode 100644 caml/actions/db.py create mode 100644 caml/actions/list_contacts.py create mode 100644 caml/actions/remove_contact.py create mode 100644 caml/config.yml create mode 100644 caml/credentials.yml create mode 100644 caml/data/flows/add_contact.yml create mode 100644 caml/data/flows/list_contacts.yml create mode 100644 caml/data/flows/remove_contact.yml create mode 100644 caml/db/contacts.json create mode 100644 caml/domain/add_contact.yml create mode 100644 caml/domain/list_contacts.yml create mode 100644 caml/domain/remove_contact.yml create mode 100644 caml/domain/shared.yml create mode 100644 caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml create mode 100644 caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml create mode 100644 caml/e2e_tests/corrections/user_corrects_contact_handle.yml create mode 100644 caml/e2e_tests/corrections/user_corrects_contact_name.yml create mode 100644 caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml create mode 100644 caml/e2e_tests/happy_paths/user_lists_contacts.yml create mode 100644 caml/e2e_tests/happy_paths/user_removes_contact.yml create mode 100644 caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml create mode 100644 caml/endpoints.yml create mode 100644 models/20241218-000001-frigid-channel.tar.gz create mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-shm create mode 100644 tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal create mode 100644 tutorial_1/actions/__pycache__/__init__.cpython-310.pyc create mode 100644 tutorial_1/actions/__pycache__/actions.cpython-310.pyc create mode 100644 tutorial_1/models/20241217-235204-green-triangle.tar.gz diff --git a/.env b/.env index 760cca3..4a5e7e7 100644 --- a/.env +++ b/.env @@ -1,2 +1,3 @@ RASA_PRO_LICENSE='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZTk0MGRjMi0zMmJhLTRjM2EtYWE2My01ODAyNWI0YjFhZmIiLCJpYXQiOjE3MzQ0Mzk5NzUsIm5iZiI6MTczNDQzOTk3MSwic2NvcGUiOiJyYXNhOnBybyByYXNhOnBybzpjaGFtcGlvbiIsImV4cCI6MTgyOTA0Nzk3MSwiZW1haWwiOiJkYW5pZWxlLmRlZ3ZvaWNlQGdtYWlsLmNvbSIsImNvbXBhbnkiOiJSYXNhIENoYW1waW9ucyJ9.yT1AtBBeKyKAxekCCd8wHGSb3Wjd-dCnaU18lHS_ab3M1CmFQkkC-0bQANtor7rYbZKdMEEPUW9G8NZu3wHODEWgUFBP0cau4zjpcTgBQVMBJcfFg59SZa2LmLr0bPjDEiLqO6SO9I3-OLeBdEhm7Tx386leuGyz0xrVE7JshylVXQ8YNWNJgFxQKRPwoWK2YHR1oUDKyVP2l8Uo9AbCyZTGjQt9WwAk7poiqxSRdFDJHVCXSrC4rRejTgMhTaBCu2DbL52o0nsSs1r95k_Dlgvg0rvZBvuGgb4AihV_r12vEykg6CKbtKDZuYW5hxl-njI4tl9tGDnhlPtuNoLuhA' -OPENAI_API_KEY='your_openai_api_key_here' \ No newline at end of file +HUGGINGFACE_API_KEY='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' +OPENAI_API_KEY='open_here' \ No newline at end of file diff --git a/.rasa/cache/cache.db b/.rasa/cache/cache.db index 8d0765477597c28494db94ed77c65cc9b36e56b2..a8b44231a457f0b6734e00cfa2e54c2085fc02a2 100644 GIT binary patch delta 90 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 blm)U?*%_sP)L$k>X(07nnNbEvsj~n8iseC@ literal 32768 zcmeI)NlrpR5XSKj6ek>T2An5U6mgy>RP+v>z^j+-{uQ1k58#+_Te&fle{>;JG*** zjsGy;j`|om`+fT|ip!rzrVp-V<3P40tg_000IagfB*srAbqDKHgvv zzx+mvC45XR43qEiNlzD4Wie8yW0vPANlcH=%u7kF;BDb#R^%uyNi4}MF3C(TmT2La z?9DI9)WSafUJ?_KW}Do|FUHiuI$bcCNrI_`Wx94UlN3`6^W^jV;!G_}(-V@J#DrTI znH3q6OLKDKb24)?OSsgV>n95e=m|=}99chAZ_Au72jn&f2)yKD{5RQ3-n^cPL4;YG zDYYy!xg;|`FTNl@Co{Q{@jpMaA``+rOq`O;rc5cB#o6%%naSBXsqqCx`6c?B+ncU30__R!*TybVqDib?MytptYvjiwmnU|bVl%JPhTFk^I%B%|$&&^F#EPyCy zm0&i831{V(7Ud=8#OLOxq%yHg7E};*Vq!)zF0r&EKfWw6xwJHwi3#LTgrAuh(IcSz zYY9s?+oQ_O844&dV5r!_H2_g?D!X;My_!ioFbZDqF)?wCh&Z_O=6lxRw)0ar&u|!s zIB4NU%?1^nhmUs8?N25g2Ta_qaP>*0j%JVV{Ln}0OWBMx}cssr>muyNmfD2w^^=iwX&yy*48iX&6A z;;#MLwpn8#E#rU>S|t;T0|T`RS)rB*uY@M7rWXmZ^t_ zR2&FE+NNa3!Ta6pdchy_EVu7qWTZ+Y2txY@WJba#4abi+cDVi?jFBLStAjvkB!vBc zr~7|*cir|EiWEkI5TuhvVI)lWJF92!+r>Hq8VN$!ducR_1Tlqz+n+92MsJsJA~O<% zp*>~lL_&$qK`W)$d4K5=3BpKaIC58+-jSf`{$D9NUbA8QhF~TViz5-pa0PWEfye0M z-zPz$epHPF5l~=*M>0^yD+Ws>^hfLwOnEKXixLTpk&}P%84w(?pi(SM7ZhgF7l#cR zxn7Z+dA0AdBp0wH9m(f1JztGwBNLy?#>6h(=>o#cER2!cH=3~QXM}5bpV!}OII-p* zSOa&>bpB_|>sh!vxob8i9^#tbpuo(|);f)C>c7bCoK7tDEO31*3KTZ4E8Dghq|cBk zYx;aQmOv(^tnDA%SOl1+H#}lub4)e1G_g!fH8)I2GqW&AHnTJ_H!(6ZHBC-2H%u~5 zF-T1`HAyu$Gc+_$G69Mur<$9m0g2=!pgQ9uOUuaZo}Mh>ymBzV?OOP|E+HdS3*18G z=w{$8=K8|Xy)m(tBfTXplAocGmy?}=or8gck)cC^Qp+80-T?a>Mzb`qPW?SSzMWYr z3?zQHhodO9xFA2TICViVVwNhq^l9iHWnz@mwp=q+NrICe^u1QK_imqjvnTf8k zg>jNel0hm^&PYi|DY+;$u_P6!!O+~;#KgkT#L{f~LVu?D?9MrfMVV=p)6dy3H;9@W j=_r-tmjDOXO7gQ)^NN+M%q@(jI|eg_Z(owg!ovyxsrQ|C literal 288432 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 diff --git a/calm/.rasa/cache/cache.db b/calm/.rasa/cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..1a5d6a89e180b3a0e0a799206cf5abda8d32ed4b GIT binary patch literal 16384 zcmeI#OH0Er00;1N8_pH>xa}I4hZRIn+1)w|mc6vr$4;ScnHFn1+f=sW#4q60Z{xS} zXge*mV~96l`~yjv=KV`9xj66Ig42oTKU#twk{XdDazrU1Bp1a(6qB%8mXeBJ@*LUg zyp^k;Bwrz<@?QOjG6V=f00Izz00bZa0SG_<0ucBIfki!EtY0^zg=)KFKC@?RWR31Q zf@8rAzJ+710vZ#wAH)Cjb>eiG$nM=I7E z4e7NitXqetx}-jHKl7XFaaYR@E0uw7JKG?V0&)Tzj@GVDcM#$2pz#3Z)Ay7!+0tFca@k=dD1`reP-xA z)fm!_Hl)p!Eh)0n%5By4hD4Uf7d$!9Yo1x5@RsGwVeY5g^3he>j;~uePHJ(2009U< z00Izz00bZa0SG_<0uX?}rV7aM#_;~%)Z@jzAOHafKmY;|fB*y_009U<00K(^y#H|# ZAOHafKmY;|fB*y_009U<00NsY@C8eKv|#`M literal 0 HcmV?d00001 diff --git a/calm/.rasa/cache/rasa-llm-cache/cache.db b/calm/.rasa/cache/rasa-llm-cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..e553bb7d0135b6664cc05c43e9b119b73f13fe29 GIT binary patch literal 32768 zcmeI&O>fjj7zgn2PT1WftS5*D6H&y3sv=Pm(g+Yps1kWG5V75b%|?Mk>pI>caq+Ih z+DiyhrJAZAp#1MEnG89{IU$6G?|k@9UOnNLuJ}h(t|S#t_@w0crFRSL zPtx0cpRk+kQ*}w*U$|eW?ftO#kKVIAt*{s`2tWV=5P$##AOL}m1cEcYxkIP4{M~WC zX)i5_=A7_-yRqaMo_$9cHQ@+fOq$J_0~$w>?HMeyEyeYucu3WgqQS%cIq7*#hLCWodCPx ziKhSWC!pOfK8o4WoL;FuY5yPQ+oxU4X0V7M(54=vUkK zUaHB)Tb-6P8%4FplzocIqm7U2{u{umqxj7F7fuhWN((_lWI|SYhtS{uiK7jn03Lc`qk=a+%ZO>hO0_e zJA7DqQ#vHQX!1!nX(Xk5NFH?*ikHgad%jrYZT>j)@OUPxO&?Z>JZIibCmhooX3KZw zZzBn0OeEi;al9Pc%R&6Me>(a{ghmj600bZa0SG_<0uX=z1Rwwb2t4Bg1@#xwr`{v# zL-lj@GxZbo5qlJ_(%)krvG>_K%w}bFnmx}tS?hnsj}+-a00Izz00bZa0SG_<0uX?} zvnvn{PSe@#3tp##UGn)R$FAG{xv;Xkj}GMPw&w{i$7p|k+4jAh8h(kIrT8 zeA{gpE3RW(YmP8If2=7i(eRzMG5Lr@ZEx@zJ(3TfY%t`r0ntPKed>b@%dy|sBD=_5 zP=8l{RsUl9*%$0%_5pj3-C<|c2Vpb3AOHafKmY;|fB*y_009U<00O%q!1isP9C-Y< zN{?jL$GPOI9y*}3rwRJ!VAYTs9Q<<$M5y;OPooLr=o 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/calm/actions/add_contact.py b/calm/actions/add_contact.py new file mode 100644 index 0000000..bef564d --- /dev/null +++ b/calm/actions/add_contact.py @@ -0,0 +1,30 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import add_contact, get_contacts, Contact + + +class AddContact(Action): + def name(self) -> str: + return "add_contact" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + name = tracker.get_slot("add_contact_name") + handle = tracker.get_slot("add_contact_handle") + + if name is None or handle is None: + return [SlotSet("return_value", "data_not_present")] + + existing_handles = {c.handle for c in contacts} + if handle in existing_handles: + return [SlotSet("return_value", "already_exists")] + + new_contact = Contact(name=name, handle=handle) + add_contact(tracker.sender_id, new_contact) + return [SlotSet("return_value", "success")] diff --git a/calm/actions/db.py b/calm/actions/db.py new file mode 100644 index 0000000..fa95f1e --- /dev/null +++ b/calm/actions/db.py @@ -0,0 +1,57 @@ +import os +import shutil +import tempfile +from typing import Any, List + +from pydantic import BaseModel + +from rasa.nlu.utils import write_json_to_file +from rasa.shared.utils.io import read_json_file + +ORIGIN_DB_PATH = "db" +CONTACTS = "contacts.json" + + +class Contact(BaseModel): + name: str + handle: str + + +def get_session_db_path(session_id: str) -> str: + tempdir = tempfile.gettempdir() + project_name = "calm_starter" + return os.path.join(tempdir, project_name, session_id) + + +def prepare_db_file(session_id: str, db: str) -> str: + session_db_path = get_session_db_path(session_id) + os.makedirs(session_db_path, exist_ok=True) + destination_file = os.path.join(session_db_path, db) + if not os.path.exists(destination_file): + origin_file = os.path.join(ORIGIN_DB_PATH, db) + shutil.copy(origin_file, destination_file) + return destination_file + + +def read_db(session_id: str, db: str) -> Any: + db_file = prepare_db_file(session_id, db) + return read_json_file(db_file) + + +def write_db(session_id: str, db: str, data: Any) -> None: + db_file = prepare_db_file(session_id, db) + write_json_to_file(db_file, data) + + +def get_contacts(session_id: str) -> List[Contact]: + return [Contact(**item) for item in read_db(session_id, CONTACTS)] + + +def add_contact(session_id: str, contact: Contact) -> None: + contacts = get_contacts(session_id) + contacts.append(contact) + write_db(session_id, CONTACTS, [c.dict() for c in contacts]) + + +def write_contacts(session_id: str, contacts: List[Contact]) -> None: + write_db(session_id, CONTACTS, [c.dict() for c in contacts]) diff --git a/calm/actions/list_contacts.py b/calm/actions/list_contacts.py new file mode 100644 index 0000000..27975a2 --- /dev/null +++ b/calm/actions/list_contacts.py @@ -0,0 +1,22 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import get_contacts + + +class ListContacts(Action): + def name(self) -> str: + return "list_contacts" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + if len(contacts) > 0: + contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts]) + return [SlotSet("contacts_list", contacts_list)] + else: + return [SlotSet("contacts_list", None)] diff --git a/calm/actions/remove_contact.py b/calm/actions/remove_contact.py new file mode 100644 index 0000000..51fe40c --- /dev/null +++ b/calm/actions/remove_contact.py @@ -0,0 +1,35 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import get_contacts, write_contacts + + +class RemoveContact(Action): + def name(self) -> str: + return "remove_contact" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + handle = tracker.get_slot("remove_contact_handle") + + if handle is not None: + contact_indices_with_handle = [ + i for i, c in enumerate(contacts) if c.handle == handle + ] + if len(contact_indices_with_handle) == 0: + return [SlotSet("return_value", "not_found")] + else: + removed_contact = contacts.pop(contact_indices_with_handle[0]) + write_contacts(tracker.sender_id, contacts) + return [ + SlotSet("return_value", "success"), + SlotSet("remove_contact_name", removed_contact.name), + ] + + else: + return [SlotSet("return_value", "missing_handle")] diff --git a/calm/config.yml b/calm/config.yml new file mode 100644 index 0000000..4411128 --- /dev/null +++ b/calm/config.yml @@ -0,0 +1,11 @@ +recipe: default.v1 +language: en +pipeline: +- name: SingleStepLLMCommandGenerator + llm: + model_group: huggingface_llm # Model group ID + +policies: +- name: FlowPolicy +- name: IntentlessPolicy +assistant_id: 20241218-000051-arctic-silo \ No newline at end of file diff --git a/calm/credentials.yml b/calm/credentials.yml new file mode 100644 index 0000000..bbd88d4 --- /dev/null +++ b/calm/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-pro/connectors/messaging-and-voice-channels/ + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "" +# secret: "" +# page-access-token: "" + +#slack: +# slack_token: "" +# slack_channel: "" +# slack_signing_secret: "" + +#socketio: +# user_message_evt: +# bot_message_evt: +# session_persistence: + +#mattermost: +# url: "https:///api/v4" +# token: "" +# webhook_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/calm/data/flows/add_contact.yml b/calm/data/flows/add_contact.yml new file mode 100644 index 0000000..7a8b8ec --- /dev/null +++ b/calm/data/flows/add_contact.yml @@ -0,0 +1,31 @@ +flows: + add_contact: + description: add a contact to your contact list + name: add a contact + steps: + - collect: "add_contact_handle" + description: "a user handle starting with @" + - collect: "add_contact_name" + description: "a name of a person" + - collect: "add_contact_confirmation" + ask_before_filling: true + next: + - if: "slots.add_contact_confirmation is not true" + then: + - action: utter_add_contact_cancelled + next: END + - else: add_contact + - id: add_contact + action: add_contact + next: + - if: "slots.return_value = 'success'" + then: + - action: utter_contact_added + next: END + - if: "slots.return_value = 'already_exists'" + then: + - action: utter_contact_already_exists + next: END + - else: + - action: utter_add_contact_error + next: END diff --git a/calm/data/flows/list_contacts.yml b/calm/data/flows/list_contacts.yml new file mode 100644 index 0000000..eabee59 --- /dev/null +++ b/calm/data/flows/list_contacts.yml @@ -0,0 +1,14 @@ +flows: + list_contacts: + name: list your contacts + description: show your contact list + steps: + - action: list_contacts + next: + - if: "slots.contacts_list" + then: + - action: utter_list_contacts + next: END + - else: + - action: utter_no_contacts + next: END diff --git a/calm/data/flows/remove_contact.yml b/calm/data/flows/remove_contact.yml new file mode 100644 index 0000000..1c69f59 --- /dev/null +++ b/calm/data/flows/remove_contact.yml @@ -0,0 +1,29 @@ +flows: + remove_contact: + name: remove a contact + description: remove a contact from your contact list + steps: + - collect: "remove_contact_handle" + description: "a contact handle starting with @" + - collect: "remove_contact_confirmation" + ask_before_filling: true + next: + - if: "slots.remove_contact_confirmation is not true" + then: + - action: utter_remove_contact_cancelled + next: END + - else: remove_contact + - id: "remove_contact" + action: remove_contact + next: + - if: "slots.return_value == 'success'" + then: + - action: utter_remove_contact_success + next: END + - if: "slots.return_value == 'not_found'" + then: + - action: utter_contact_not_in_list + next: END + - else: + - action: utter_remove_contact_error + next: END diff --git a/calm/db/contacts.json b/calm/db/contacts.json new file mode 100644 index 0000000..3915c44 --- /dev/null +++ b/calm/db/contacts.json @@ -0,0 +1,10 @@ +[ + { + "name": "Joe", + "handle": "@JoeMyers" + }, + { + "name": "Mary", + "handle": "@MaryLu" + } +] diff --git a/calm/domain/add_contact.yml b/calm/domain/add_contact.yml new file mode 100644 index 0000000..f208e33 --- /dev/null +++ b/calm/domain/add_contact.yml @@ -0,0 +1,39 @@ +version: "3.1" + +actions: + - add_contact + +slots: + add_contact_confirmation: + type: bool + mappings: + - type: from_llm + add_contact_name: + type: text + mappings: + - type: from_llm + add_contact_handle: + type: text + mappings: + - type: from_llm + +responses: + utter_ask_add_contact_confirmation: + - text: Do you want to add {add_contact_name}({add_contact_handle}) to your contacts? + buttons: + - payload: "/SetSlots(add_contact_confirmation=true)" + title: Yes + - payload: "/SetSlots(add_contact_confirmation=false)" + title: No, cancel + utter_ask_add_contact_handle: + - text: What's the handle of the user you want to add? + utter_ask_add_contact_name: + - text: What's the name of the user you want to add? + utter_add_contact_error: + - text: "Something went wrong, please try again." + utter_add_contact_cancelled: + - text: "Okay, I am cancelling this adding of a contact." + utter_contact_already_exists: + - text: "There's already a contact with that handle in your list." + utter_contact_added: + - text: "Contact added successfully." diff --git a/calm/domain/list_contacts.yml b/calm/domain/list_contacts.yml new file mode 100644 index 0000000..6265180 --- /dev/null +++ b/calm/domain/list_contacts.yml @@ -0,0 +1,17 @@ +version: "3.1" + +actions: + - list_contacts + +slots: + contacts_list: + type: text + mappings: + - type: custom + action: list_contacts + +responses: + utter_no_contacts: + - text: "You have no contacts in your list." + utter_list_contacts: + - text: "You currently have the following contacts:\n{contacts_list}" diff --git a/calm/domain/remove_contact.yml b/calm/domain/remove_contact.yml new file mode 100644 index 0000000..59a6e7d --- /dev/null +++ b/calm/domain/remove_contact.yml @@ -0,0 +1,38 @@ +version: "3.1" + +actions: + - remove_contact + +slots: + remove_contact_name: + type: text + mappings: + - type: custom + action: remove_contact + remove_contact_handle: + type: text + mappings: + - type: from_llm + remove_contact_confirmation: + type: text + mappings: + - type: from_llm + +responses: + utter_ask_remove_contact_handle: + - text: What's the handle of the user you want to remove? + utter_contact_not_in_list: + - text: "That contact is not in your list." + utter_remove_contact_error: + - text: "Something went wrong, please try again." + utter_remove_contact_success: + - text: "Removed {remove_contact_handle}({remove_contact_name}) from your contacts." + utter_ask_remove_contact_confirmation: + - buttons: + - payload: "/SetSlots(remove_contact_confirmation=true)" + title: Yes + - payload: "/SetSlots(remove_contact_confirmation=false)" + title: No, cancel the removal + text: "Should I remove {remove_contact_handle} from your contact list?" + utter_remove_contact_cancelled: + - text: "Okay, I am cancelling this removal of a contact." diff --git a/calm/domain/shared.yml b/calm/domain/shared.yml new file mode 100644 index 0000000..93f6fed --- /dev/null +++ b/calm/domain/shared.yml @@ -0,0 +1,10 @@ +version: "3.1" + +slots: + return_value: + type: any + mappings: + - type: custom + action: add_contact + - type: custom + action: remove_contact diff --git a/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml b/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml new file mode 100644 index 0000000..9d7d79a --- /dev/null +++ b/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml @@ -0,0 +1,16 @@ +test_cases: + - test_case: user cancels adding a contact during the correction + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @foo + - slot_was_set: + - add_contact_handle: "@foo" + - utter: utter_ask_add_contact_name + - user: Wait, no, the handle is @bar + - slot_was_set: + - add_contact_handle: "@bar" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_name + - user: I changed my mind, stop. + - utter: utter_flow_cancelled_rasa diff --git a/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml b/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml new file mode 100644 index 0000000..220fd40 --- /dev/null +++ b/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml @@ -0,0 +1,7 @@ +test_cases: + - test_case: user changes mind based on new info + steps: + - user: I want to add contact + - utter: utter_ask_add_contact_handle + - user: Stop + - utter: utter_flow_cancelled_rasa diff --git a/calm/e2e_tests/corrections/user_corrects_contact_handle.yml b/calm/e2e_tests/corrections/user_corrects_contact_handle.yml new file mode 100644 index 0000000..c874814 --- /dev/null +++ b/calm/e2e_tests/corrections/user_corrects_contact_handle.yml @@ -0,0 +1,20 @@ +test_cases: + - test_case: user corrects the handle + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @foo + - slot_was_set: + - add_contact_handle: "@foo" + - utter: utter_ask_add_contact_name + - user: Wait, no, the handle is @bar + - slot_was_set: + - add_contact_handle: "@bar" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_name + - user: It's Barbar + - slot_was_set: + - add_contact_name: "Barbar" + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/calm/e2e_tests/corrections/user_corrects_contact_name.yml b/calm/e2e_tests/corrections/user_corrects_contact_name.yml new file mode 100644 index 0000000..3836acd --- /dev/null +++ b/calm/e2e_tests/corrections/user_corrects_contact_name.yml @@ -0,0 +1,19 @@ +test_cases: + - test_case: user corrects the handle + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @jane + - slot_was_set: + - add_contact_handle: "@jane" + - utter: utter_ask_add_contact_name + - user: It's Jane Bar + - slot_was_set: + - add_contact_name: "Jane Bar" + - user: Wait, it's Jane Foo + - slot_was_set: + - add_contact_name: "Jane Foo" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml b/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml new file mode 100644 index 0000000..b318972 --- /dev/null +++ b/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml @@ -0,0 +1,15 @@ +test_cases: + - test_case: user adds a contact to their list + steps: + - user: I want to add someone to my contact list + - utter: utter_ask_add_contact_handle + - user: it's @barts + - slot_was_set: + - add_contact_handle: "@barts" + - utter: utter_ask_add_contact_name + - user: just Bart + - slot_was_set: + - add_contact_name: Bart + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/calm/e2e_tests/happy_paths/user_lists_contacts.yml b/calm/e2e_tests/happy_paths/user_lists_contacts.yml new file mode 100644 index 0000000..427a72d --- /dev/null +++ b/calm/e2e_tests/happy_paths/user_lists_contacts.yml @@ -0,0 +1,5 @@ +test_cases: + - test_case: user lists their contacts + steps: + - user: Please show me my contacts + - utter: utter_list_contacts diff --git a/calm/e2e_tests/happy_paths/user_removes_contact.yml b/calm/e2e_tests/happy_paths/user_removes_contact.yml new file mode 100644 index 0000000..89cd7d8 --- /dev/null +++ b/calm/e2e_tests/happy_paths/user_removes_contact.yml @@ -0,0 +1,11 @@ +test_cases: + - test_case: user removes a contact + steps: + - user: I want to remove contact + - utter: utter_ask_remove_contact_handle + - user: "@MaryLu" + - slot_was_set: + - remove_contact_handle: "@MaryLu" + - utter: utter_ask_remove_contact_confirmation + - user: Yes + - utter: utter_remove_contact_success diff --git a/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml b/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml new file mode 100644 index 0000000..f1d47a9 --- /dev/null +++ b/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml @@ -0,0 +1,12 @@ +test_cases: + - test_case: user removes a contact using contact list + steps: + - user: Please show me my contacts + - utter: utter_list_contacts + - utter: utter_can_do_something_else + - user: Remove contact @MaryLu + - slot_was_set: + - remove_contact_handle: "@MaryLu" + - utter: utter_ask_remove_contact_confirmation + - user: yes + - utter: utter_remove_contact_success diff --git a/calm/endpoints.yml b/calm/endpoints.yml new file mode 100644 index 0000000..085bea8 --- /dev/null +++ b/calm/endpoints.yml @@ -0,0 +1,58 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions + +action_endpoint: + actions_module: "actions" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa-pro/production/tracker-stores + +#tracker_store: +# type: redis +# url: +# port: +# db: +# password: +# use_ssl: + +#tracker_store: +# type: mongod +# url: +# db: +# username: +# password: + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa-pro/production/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue + +# The lines below activate contextual rephrasing, using the default OpenAI language model. +# Ensure the OPENAI_API_KEY is set to prevent any missing API key errors. +# For more details, refer to the documentation: +# https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser +# To enable the rephraser, remove the comment symbols in the lines below. +#nlg: +# type: rephrase + +model_groups: +- id: huggingface_llm + models: + - provider: huggingface + model: meta-llama/CodeLlama-7b-Instruct-hf + api_base: "https://my-endpoint.huggingface.cloud" + api_key: ${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} # Optional, if you want to set the API key in the model configuration. diff --git a/caml/.rasa/cache/cache.db b/caml/.rasa/cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..1a5d6a89e180b3a0e0a799206cf5abda8d32ed4b GIT binary patch literal 16384 zcmeI#OH0Er00;1N8_pH>xa}I4hZRIn+1)w|mc6vr$4;ScnHFn1+f=sW#4q60Z{xS} zXge*mV~96l`~yjv=KV`9xj66Ig42oTKU#twk{XdDazrU1Bp1a(6qB%8mXeBJ@*LUg zyp^k;Bwrz<@?QOjG6V=f00Izz00bZa0SG_<0ucBIfki!EtY0^zg=)KFKC@?RWR31Q zf@8rAzJ+710vZ#wAH)Cjb>eiG$nM=I7E z4e7NitXqetx}-jHKl7XFaaYR@E0uw7JKG?V0&)Tzj@GVDcM#$2pz#3Z)Ay7!+0tFca@k=dD1`reP-xA z)fm!_Hl)p!Eh)0n%5By4hD4Uf7d$!9Yo1x5@RsGwVeY5g^3he>j;~uePHJ(2009U< z00Izz00bZa0SG_<0uX?}rV7aM#_;~%)Z@jzAOHafKmY;|fB*y_009U<00K(^y#H|# ZAOHafKmY;|fB*y_009U<00NsY@C8eKv|#`M literal 0 HcmV?d00001 diff --git a/caml/.rasa/cache/rasa-llm-cache/cache.db b/caml/.rasa/cache/rasa-llm-cache/cache.db new file mode 100644 index 0000000000000000000000000000000000000000..615555e950ae003f93173eaaf560fd729ed2dcc3 GIT binary patch literal 32768 zcmeI)Z%^As90zclgCs!XgF-NrB92N^L4`5|RgtPm4Pa>0G-*Q+?IX)`40t$k8aq%n zO=`PWFzvx!!n6l_13a4gWRIpj+mlM$gFRZGZPKPans)w2Ob0AdH>pG4NFmPo{PW%C z&WG-7SbvZ=U4w1ejjHCdd7)3}=n!r*CI|xI?-YMWuO7b98GiB7#c0PFpG3HR_tP}} zL+I^36zF66jkGNdqz}`T3t#pA-g~R3$&>Md00bZa0SG_<0uX3R;Mrnta`c9rdOqtm z%C)^Y{5aeu`N76oDJN}26xR?}ebg`YF5m|wZ>6@qQvQA!Hi zH4gaBD_+W#TTCgeJX`Jwimsek^k%)HwNvyUUs&|8TyIwNYpkGb21Re97K`0yHGo-j zjE4Kq4G`oDYmqCgE2Z)qHbATvr!~MrDmi+S_nmiMZvfqH*4%bFPdwwl+k57YcN_mi zVZT{Oo>}ZR$b(}47v`rIyPQbKGqUKIwTkh??+~iv+6_Z>&1!Ikrou}!S6ERV2G?FJ zORGCfwvL`KV9vbZ0MYCNf%@vzAg!p8E%;>J>^N}UP$sw_5Rf%z4zHne@e?1?bw zMj`iLLt*hEhuMzePV$6l#t)o&o+L?Gmc>u1uJ*na4olwH)D;a**`>S^jyjX9Vegw2 z9=fb}1J?ag?q0U^h}~5lP5Xn%Qogw4$BnW~vla~Fqg{TQ#cC9$Xu57Vj*osk#qSeQ zC_V_U<%uwQUxh%OB06^2Bmf?TT^Ikz1x^)U>L>%F4s?bT}}2p{B}WLLM6v zKlUA>Q8fA_$26i;HtE;e3&jdW{@%#vS->BLo|^4Q$jf7*;J2Cc*y3|~RcpGo|6Pp& zsdLemH;?z{_WmUP)E{mAB0?qzKmY;|fB*y_009U<00Izz00iE0fiy2)pY%eIew4nK zzLj3kU+7QtkbXfwr%&k)y+;@57$wrrZ+SIPJP1Gl0uX=z1Rwwb2tWV=5IFY&-F;*v zRW%*QaFUc{Qah&WBqhG#-Lp@niJbE9?+;%lH^hqR?5cHB-?a?2-mqO;x2>+>Q8GvT zJyo-&dUx*qC#Zy{Lgo^g>kjXxI|ns=r(xIZrX!D#na(h|TGi@)cJGe*$S|272zPv7 zHybt0QoSbx_BCrrCbJ#kF5P?Z!9R!znW5Gxyc_oFo~AdORVhOzM7?QQs%2J9x2J!Q zOmun`3clawC%Za8uH7{DOx-o@np(FlQ$Mf_&2eWMhHlhc>tM!zD57%VA{kHdM;TQA zVSsc$nMgUV=9-Rc>P`>s=kx!U0!`Ad=^`DcKS;kxucSZecl1m88U2WE(W3N{{(A1a z5h@4)2tWV=5P$##AOHafKmY>&R{@Dnp<5H({vI+S2FnC}DUuPrWdiDLc(ZD$o5-TS zOyJ!Qms&L*K4sD1GM}~ws|m-}3`V`=zb_bE8YDAO^3j69h)m|A#Q0*taE8oA>8+Il zITks#PB7$Evb9c-@#}oFOfblo2*lTx2nNz*Ts&G0xaifF|It5Q5P$##AOHafKmY;| zfB*y_009V`V*&4<`eFWmjvE+Ng8&2|009U<00Izz00bZa0SIsb%>U61AOHafKmY;| qfB*y_009U<00QS<0Q3Lz-^QpR1Rwwb2tWV=5P$##AOHafK;SRbrru@% literal 0 HcmV?d00001 diff --git a/caml/actions/__init__.py b/caml/actions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/caml/actions/action_template.py b/caml/actions/action_template.py new file mode 100644 index 0000000..b5d4667 --- /dev/null +++ b/caml/actions/action_template.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-pro/concepts/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/caml/actions/add_contact.py b/caml/actions/add_contact.py new file mode 100644 index 0000000..bef564d --- /dev/null +++ b/caml/actions/add_contact.py @@ -0,0 +1,30 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import add_contact, get_contacts, Contact + + +class AddContact(Action): + def name(self) -> str: + return "add_contact" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + name = tracker.get_slot("add_contact_name") + handle = tracker.get_slot("add_contact_handle") + + if name is None or handle is None: + return [SlotSet("return_value", "data_not_present")] + + existing_handles = {c.handle for c in contacts} + if handle in existing_handles: + return [SlotSet("return_value", "already_exists")] + + new_contact = Contact(name=name, handle=handle) + add_contact(tracker.sender_id, new_contact) + return [SlotSet("return_value", "success")] diff --git a/caml/actions/db.py b/caml/actions/db.py new file mode 100644 index 0000000..fa95f1e --- /dev/null +++ b/caml/actions/db.py @@ -0,0 +1,57 @@ +import os +import shutil +import tempfile +from typing import Any, List + +from pydantic import BaseModel + +from rasa.nlu.utils import write_json_to_file +from rasa.shared.utils.io import read_json_file + +ORIGIN_DB_PATH = "db" +CONTACTS = "contacts.json" + + +class Contact(BaseModel): + name: str + handle: str + + +def get_session_db_path(session_id: str) -> str: + tempdir = tempfile.gettempdir() + project_name = "calm_starter" + return os.path.join(tempdir, project_name, session_id) + + +def prepare_db_file(session_id: str, db: str) -> str: + session_db_path = get_session_db_path(session_id) + os.makedirs(session_db_path, exist_ok=True) + destination_file = os.path.join(session_db_path, db) + if not os.path.exists(destination_file): + origin_file = os.path.join(ORIGIN_DB_PATH, db) + shutil.copy(origin_file, destination_file) + return destination_file + + +def read_db(session_id: str, db: str) -> Any: + db_file = prepare_db_file(session_id, db) + return read_json_file(db_file) + + +def write_db(session_id: str, db: str, data: Any) -> None: + db_file = prepare_db_file(session_id, db) + write_json_to_file(db_file, data) + + +def get_contacts(session_id: str) -> List[Contact]: + return [Contact(**item) for item in read_db(session_id, CONTACTS)] + + +def add_contact(session_id: str, contact: Contact) -> None: + contacts = get_contacts(session_id) + contacts.append(contact) + write_db(session_id, CONTACTS, [c.dict() for c in contacts]) + + +def write_contacts(session_id: str, contacts: List[Contact]) -> None: + write_db(session_id, CONTACTS, [c.dict() for c in contacts]) diff --git a/caml/actions/list_contacts.py b/caml/actions/list_contacts.py new file mode 100644 index 0000000..27975a2 --- /dev/null +++ b/caml/actions/list_contacts.py @@ -0,0 +1,22 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import get_contacts + + +class ListContacts(Action): + def name(self) -> str: + return "list_contacts" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + if len(contacts) > 0: + contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts]) + return [SlotSet("contacts_list", contacts_list)] + else: + return [SlotSet("contacts_list", None)] diff --git a/caml/actions/remove_contact.py b/caml/actions/remove_contact.py new file mode 100644 index 0000000..51fe40c --- /dev/null +++ b/caml/actions/remove_contact.py @@ -0,0 +1,35 @@ +from typing import Any, Dict, List, Text + +from rasa_sdk import Action, Tracker +from rasa_sdk.events import SlotSet +from rasa_sdk.executor import CollectingDispatcher + +from actions.db import get_contacts, write_contacts + + +class RemoveContact(Action): + def name(self) -> str: + return "remove_contact" + + def run( + self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any] + ) -> List[Dict[Text, Any]]: + contacts = get_contacts(tracker.sender_id) + handle = tracker.get_slot("remove_contact_handle") + + if handle is not None: + contact_indices_with_handle = [ + i for i, c in enumerate(contacts) if c.handle == handle + ] + if len(contact_indices_with_handle) == 0: + return [SlotSet("return_value", "not_found")] + else: + removed_contact = contacts.pop(contact_indices_with_handle[0]) + write_contacts(tracker.sender_id, contacts) + return [ + SlotSet("return_value", "success"), + SlotSet("remove_contact_name", removed_contact.name), + ] + + else: + return [SlotSet("return_value", "missing_handle")] diff --git a/caml/config.yml b/caml/config.yml new file mode 100644 index 0000000..b348a71 --- /dev/null +++ b/caml/config.yml @@ -0,0 +1,11 @@ +recipe: default.v1 +language: en +pipeline: +- name: SingleStepLLMCommandGenerator + llm: + model_group: openai-gpt-4 + +policies: +- name: FlowPolicy +- name: IntentlessPolicy +assistant_id: 20241218-002720-salmon-shallows diff --git a/caml/credentials.yml b/caml/credentials.yml new file mode 100644 index 0000000..bbd88d4 --- /dev/null +++ b/caml/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-pro/connectors/messaging-and-voice-channels/ + +rest: +# # you don't need to provide anything here - this channel doesn't +# # require any credentials + + +#facebook: +# verify: "" +# secret: "" +# page-access-token: "" + +#slack: +# slack_token: "" +# slack_channel: "" +# slack_signing_secret: "" + +#socketio: +# user_message_evt: +# bot_message_evt: +# session_persistence: + +#mattermost: +# url: "https:///api/v4" +# token: "" +# webhook_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/caml/data/flows/add_contact.yml b/caml/data/flows/add_contact.yml new file mode 100644 index 0000000..7a8b8ec --- /dev/null +++ b/caml/data/flows/add_contact.yml @@ -0,0 +1,31 @@ +flows: + add_contact: + description: add a contact to your contact list + name: add a contact + steps: + - collect: "add_contact_handle" + description: "a user handle starting with @" + - collect: "add_contact_name" + description: "a name of a person" + - collect: "add_contact_confirmation" + ask_before_filling: true + next: + - if: "slots.add_contact_confirmation is not true" + then: + - action: utter_add_contact_cancelled + next: END + - else: add_contact + - id: add_contact + action: add_contact + next: + - if: "slots.return_value = 'success'" + then: + - action: utter_contact_added + next: END + - if: "slots.return_value = 'already_exists'" + then: + - action: utter_contact_already_exists + next: END + - else: + - action: utter_add_contact_error + next: END diff --git a/caml/data/flows/list_contacts.yml b/caml/data/flows/list_contacts.yml new file mode 100644 index 0000000..eabee59 --- /dev/null +++ b/caml/data/flows/list_contacts.yml @@ -0,0 +1,14 @@ +flows: + list_contacts: + name: list your contacts + description: show your contact list + steps: + - action: list_contacts + next: + - if: "slots.contacts_list" + then: + - action: utter_list_contacts + next: END + - else: + - action: utter_no_contacts + next: END diff --git a/caml/data/flows/remove_contact.yml b/caml/data/flows/remove_contact.yml new file mode 100644 index 0000000..1c69f59 --- /dev/null +++ b/caml/data/flows/remove_contact.yml @@ -0,0 +1,29 @@ +flows: + remove_contact: + name: remove a contact + description: remove a contact from your contact list + steps: + - collect: "remove_contact_handle" + description: "a contact handle starting with @" + - collect: "remove_contact_confirmation" + ask_before_filling: true + next: + - if: "slots.remove_contact_confirmation is not true" + then: + - action: utter_remove_contact_cancelled + next: END + - else: remove_contact + - id: "remove_contact" + action: remove_contact + next: + - if: "slots.return_value == 'success'" + then: + - action: utter_remove_contact_success + next: END + - if: "slots.return_value == 'not_found'" + then: + - action: utter_contact_not_in_list + next: END + - else: + - action: utter_remove_contact_error + next: END diff --git a/caml/db/contacts.json b/caml/db/contacts.json new file mode 100644 index 0000000..3915c44 --- /dev/null +++ b/caml/db/contacts.json @@ -0,0 +1,10 @@ +[ + { + "name": "Joe", + "handle": "@JoeMyers" + }, + { + "name": "Mary", + "handle": "@MaryLu" + } +] diff --git a/caml/domain/add_contact.yml b/caml/domain/add_contact.yml new file mode 100644 index 0000000..f208e33 --- /dev/null +++ b/caml/domain/add_contact.yml @@ -0,0 +1,39 @@ +version: "3.1" + +actions: + - add_contact + +slots: + add_contact_confirmation: + type: bool + mappings: + - type: from_llm + add_contact_name: + type: text + mappings: + - type: from_llm + add_contact_handle: + type: text + mappings: + - type: from_llm + +responses: + utter_ask_add_contact_confirmation: + - text: Do you want to add {add_contact_name}({add_contact_handle}) to your contacts? + buttons: + - payload: "/SetSlots(add_contact_confirmation=true)" + title: Yes + - payload: "/SetSlots(add_contact_confirmation=false)" + title: No, cancel + utter_ask_add_contact_handle: + - text: What's the handle of the user you want to add? + utter_ask_add_contact_name: + - text: What's the name of the user you want to add? + utter_add_contact_error: + - text: "Something went wrong, please try again." + utter_add_contact_cancelled: + - text: "Okay, I am cancelling this adding of a contact." + utter_contact_already_exists: + - text: "There's already a contact with that handle in your list." + utter_contact_added: + - text: "Contact added successfully." diff --git a/caml/domain/list_contacts.yml b/caml/domain/list_contacts.yml new file mode 100644 index 0000000..6265180 --- /dev/null +++ b/caml/domain/list_contacts.yml @@ -0,0 +1,17 @@ +version: "3.1" + +actions: + - list_contacts + +slots: + contacts_list: + type: text + mappings: + - type: custom + action: list_contacts + +responses: + utter_no_contacts: + - text: "You have no contacts in your list." + utter_list_contacts: + - text: "You currently have the following contacts:\n{contacts_list}" diff --git a/caml/domain/remove_contact.yml b/caml/domain/remove_contact.yml new file mode 100644 index 0000000..59a6e7d --- /dev/null +++ b/caml/domain/remove_contact.yml @@ -0,0 +1,38 @@ +version: "3.1" + +actions: + - remove_contact + +slots: + remove_contact_name: + type: text + mappings: + - type: custom + action: remove_contact + remove_contact_handle: + type: text + mappings: + - type: from_llm + remove_contact_confirmation: + type: text + mappings: + - type: from_llm + +responses: + utter_ask_remove_contact_handle: + - text: What's the handle of the user you want to remove? + utter_contact_not_in_list: + - text: "That contact is not in your list." + utter_remove_contact_error: + - text: "Something went wrong, please try again." + utter_remove_contact_success: + - text: "Removed {remove_contact_handle}({remove_contact_name}) from your contacts." + utter_ask_remove_contact_confirmation: + - buttons: + - payload: "/SetSlots(remove_contact_confirmation=true)" + title: Yes + - payload: "/SetSlots(remove_contact_confirmation=false)" + title: No, cancel the removal + text: "Should I remove {remove_contact_handle} from your contact list?" + utter_remove_contact_cancelled: + - text: "Okay, I am cancelling this removal of a contact." diff --git a/caml/domain/shared.yml b/caml/domain/shared.yml new file mode 100644 index 0000000..93f6fed --- /dev/null +++ b/caml/domain/shared.yml @@ -0,0 +1,10 @@ +version: "3.1" + +slots: + return_value: + type: any + mappings: + - type: custom + action: add_contact + - type: custom + action: remove_contact diff --git a/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml b/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml new file mode 100644 index 0000000..9d7d79a --- /dev/null +++ b/caml/e2e_tests/cancelations/user_cancels_during_a_correction.yml @@ -0,0 +1,16 @@ +test_cases: + - test_case: user cancels adding a contact during the correction + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @foo + - slot_was_set: + - add_contact_handle: "@foo" + - utter: utter_ask_add_contact_name + - user: Wait, no, the handle is @bar + - slot_was_set: + - add_contact_handle: "@bar" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_name + - user: I changed my mind, stop. + - utter: utter_flow_cancelled_rasa diff --git a/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml b/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml new file mode 100644 index 0000000..220fd40 --- /dev/null +++ b/caml/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml @@ -0,0 +1,7 @@ +test_cases: + - test_case: user changes mind based on new info + steps: + - user: I want to add contact + - utter: utter_ask_add_contact_handle + - user: Stop + - utter: utter_flow_cancelled_rasa diff --git a/caml/e2e_tests/corrections/user_corrects_contact_handle.yml b/caml/e2e_tests/corrections/user_corrects_contact_handle.yml new file mode 100644 index 0000000..c874814 --- /dev/null +++ b/caml/e2e_tests/corrections/user_corrects_contact_handle.yml @@ -0,0 +1,20 @@ +test_cases: + - test_case: user corrects the handle + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @foo + - slot_was_set: + - add_contact_handle: "@foo" + - utter: utter_ask_add_contact_name + - user: Wait, no, the handle is @bar + - slot_was_set: + - add_contact_handle: "@bar" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_name + - user: It's Barbar + - slot_was_set: + - add_contact_name: "Barbar" + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/caml/e2e_tests/corrections/user_corrects_contact_name.yml b/caml/e2e_tests/corrections/user_corrects_contact_name.yml new file mode 100644 index 0000000..3836acd --- /dev/null +++ b/caml/e2e_tests/corrections/user_corrects_contact_name.yml @@ -0,0 +1,19 @@ +test_cases: + - test_case: user corrects the handle + steps: + - user: I want to add a new contact + - utter: utter_ask_add_contact_handle + - user: it's @jane + - slot_was_set: + - add_contact_handle: "@jane" + - utter: utter_ask_add_contact_name + - user: It's Jane Bar + - slot_was_set: + - add_contact_name: "Jane Bar" + - user: Wait, it's Jane Foo + - slot_was_set: + - add_contact_name: "Jane Foo" + - utter: utter_corrected_previous_input + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml b/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml new file mode 100644 index 0000000..b318972 --- /dev/null +++ b/caml/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml @@ -0,0 +1,15 @@ +test_cases: + - test_case: user adds a contact to their list + steps: + - user: I want to add someone to my contact list + - utter: utter_ask_add_contact_handle + - user: it's @barts + - slot_was_set: + - add_contact_handle: "@barts" + - utter: utter_ask_add_contact_name + - user: just Bart + - slot_was_set: + - add_contact_name: Bart + - utter: utter_ask_add_contact_confirmation + - user: Yes + - utter: utter_contact_added diff --git a/caml/e2e_tests/happy_paths/user_lists_contacts.yml b/caml/e2e_tests/happy_paths/user_lists_contacts.yml new file mode 100644 index 0000000..427a72d --- /dev/null +++ b/caml/e2e_tests/happy_paths/user_lists_contacts.yml @@ -0,0 +1,5 @@ +test_cases: + - test_case: user lists their contacts + steps: + - user: Please show me my contacts + - utter: utter_list_contacts diff --git a/caml/e2e_tests/happy_paths/user_removes_contact.yml b/caml/e2e_tests/happy_paths/user_removes_contact.yml new file mode 100644 index 0000000..89cd7d8 --- /dev/null +++ b/caml/e2e_tests/happy_paths/user_removes_contact.yml @@ -0,0 +1,11 @@ +test_cases: + - test_case: user removes a contact + steps: + - user: I want to remove contact + - utter: utter_ask_remove_contact_handle + - user: "@MaryLu" + - slot_was_set: + - remove_contact_handle: "@MaryLu" + - utter: utter_ask_remove_contact_confirmation + - user: Yes + - utter: utter_remove_contact_success diff --git a/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml b/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml new file mode 100644 index 0000000..f1d47a9 --- /dev/null +++ b/caml/e2e_tests/happy_paths/user_removes_contact_from_list.yml @@ -0,0 +1,12 @@ +test_cases: + - test_case: user removes a contact using contact list + steps: + - user: Please show me my contacts + - utter: utter_list_contacts + - utter: utter_can_do_something_else + - user: Remove contact @MaryLu + - slot_was_set: + - remove_contact_handle: "@MaryLu" + - utter: utter_ask_remove_contact_confirmation + - user: yes + - utter: utter_remove_contact_success diff --git a/caml/endpoints.yml b/caml/endpoints.yml new file mode 100644 index 0000000..4f4e020 --- /dev/null +++ b/caml/endpoints.yml @@ -0,0 +1,58 @@ +# This file contains the different endpoints your bot can use. + +# Server where the models are pulled from. +# https://rasa.com/docs/rasa-pro/production/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-pro/concepts/custom-actions + +action_endpoint: + actions_module: "actions" + +# Tracker store which is used to store the conversations. +# By default the conversations are stored in memory. +# https://rasa.com/docs/rasa-pro/production/tracker-stores + +#tracker_store: +# type: redis +# url: +# port: +# db: +# password: +# use_ssl: + +#tracker_store: +# type: mongod +# url: +# db: +# username: +# password: + +# Event broker which all conversation events should be streamed to. +# https://rasa.com/docs/rasa-pro/production/event-brokers + +#event_broker: +# url: localhost +# username: username +# password: password +# queue: queue + +# The lines below activate contextual rephrasing, using the default OpenAI language model. +# Ensure the OPENAI_API_KEY is set to prevent any missing API key errors. +# For more details, refer to the documentation: +# https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser +# To enable the rephraser, remove the comment symbols in the lines below. +#nlg: +# type: rephrase + +model_groups: + - id: openai-gpt-4 + models: + - provider: openai + model: openai/gpt-4 + request_timeout: 7 + max_tokens: 256 diff --git a/models/20241218-000001-frigid-channel.tar.gz b/models/20241218-000001-frigid-channel.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8cfc03bb2dc21c7c2c5ee6c2670be3eb709653d5 GIT binary patch literal 9276 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 VeewVIQa-+m{*(`PgCT;2`5(1kJi7n@ literal 0 HcmV?d00001 diff --git a/tutorial_1/.rasa/cache/cache.db b/tutorial_1/.rasa/cache/cache.db index 7beffb83e4be6a880f7b3cc62f092ee376eb7732..d943b15b5c12b66c78211ec6aefd988145b089c9 100644 GIT binary patch delta 78 zcmZo@U~Fh$oFL7}H&Mo!k#A$dO(`BzBP#*YizM@hH91dYrM4b3LM Yl8)nss4}*&FtD7wPEKrdrp$C@06@zXQvd(} delta 79 zcmZo@U~Fh$oFL7}JyFJ)k$YppO(`B@V=EJ5JxgN)6LZ7K>*YizM@hH91dU7#fP$~2 U<6r`Y#ulbVAXS?)Wu_|w08}Iuh5!Hn diff --git a/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db b/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db index 8d7e22dccbfed39b3cd6838093885ec0030238c1..6dc5040bda804c2efa41f5df1c2e22b0b754e312 100644 GIT binary patch delta 580 zcmZoTz|?SnX#`v>DxaK~oB`AgRG`2h z+Gsa?B+ncU30 z__R!57=jFEI1CcU3^+rEL!!*OFbR0bF&va&Hin62<(C%aCFaEE=BK1G9GHC2UQBa8 dl4*&hCHe7XiOHp2>`#!uq^-p delta 545 zcmZvYJxml)5Xa}<3lR=(<_-?-4o!}0ybuDL3lKu1lyp|s>-ug3Pj>emw{Hm_4O>uv z^7*VSBr%pGCR)&djfJr_8VegMDoM08E}SPMI>{vS@y|?t|Me5Le!`B}(Cx2~#Y4b1 z_z^$gTl_}n^bQZ{H9eyZl5~%z=oY13)v{~Ib8(M(F*ZGeKcE9LaTl+2hT73G)KY{1 zkV&!?#W>F=Q*{|G*bONbJlAeCl~zJ|9mTlMj9G)FUS8`87d@$6J6s9Gd{YG~3JY=0 zI94f@HEY(*LE;wsqY;jnPn2@i9fJNC&5>2;&G1S}M4o4R(w912jl0cft2)&ar+K+k zJ9D-S>h5xyatY%x&<*-d4{4Ul_!H0Y7rv)YbV@JjfL8Gsza)$XE#eh+4QlhUPrkN( zz!T(U_V+YwnX^09`!oUACI`s#5#}yQp`{A!hVrCXfyc=@e2%kN>D| z|K3tv_xa<8Pc>iTKV$#-eAwzwdmgU8y0zr=-=SCd)jRZDj>TdBKB4ywy(IZx|1uX` zC`>+I6vpmrO4ICQe6&P(T3%A}TOCRC%8q(d@=nAUlDX%wrMD zSxs|x8@XD6$O&v_2YWfhaZX1ryMYzRPT&&PX{Uq7B)&sqQy`xN65n*PDWHG?3Mim} Y0tzUgfC36Apnw7jD4>7>3gnl-Z!(ov7ytkO literal 0 HcmV?d00001 diff --git a/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal b/tutorial_1/.rasa/cache/rasa-llm-cache/cache.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..73754050bad9375dc8c83864a26d982b98ed389e GIT binary patch literal 601552 zcmeFa37i~9eds@{k+k==e6AcY9#2dxJ@2f$&aRS!jV!HYVIhOGj_ha5rnF9R9za zLwjf~8?TO)_3Mw+v)xl&UG?qi>Y1Kje=E9U^_{uWKd#N?*5tCO^7s||9@~0>e9^_Z zJ1!qBUI44|bJzdcpTF+j^}lw{mj;LaF}G&u-T9$E8~V!7=Y~E$^n>6lL+=hg72FdX z3ibpq4Xz3<3DyMJrZ^!1B!C2v01`j~NB{{S0VIF~kN^@mo&?S~@T>U?S2oJGyNOD9 zs+>L_cGf$XAMUcXnQGeGyC#2L&s4e5aEBQ4v;+5?;OqAMvkZkd=a+gmDbV!B>SYqnNdwf4ZK zJjplTnkrW(d>P)%_K|x-JXdWW83c%`}D&Y|NKdw%1Qhnd#;R zE1^i|9e948oz;Hl=GsiXYAO>`wZz?KD(4=!B7fL^=XJGiAFS!gpVO7yJ_xcuvaj|-y`9?(gK!rif8mPRyAZjLoSna9#e%QcxeqrJ z9lo28`_y@Pv0|~i3As-W=Sl0G`8N|jk*z=SPD1YE=j2PB^@r~y{t=oZRQ!K*)V8EBEXTgxp7g-Mn~#yMEo;+Tl_UwC-eSh@F`xeFv zEan!-oCBw7x~4E01`j~NB{{S0VIF~kN^@u0w;{X83(RDrsENu7Jh-J z8!zy0yB>Yx&sMB^C&mk$u=b5RLIOwt2_OL^fCP{L5BYt)c*e#HtdX~V?@goWJCBGLxF