# This files contains your custom actions which can be used to run # custom Python code. # # See this guide on how to implement these action: # https://rasa.com/docs/rasa/custom-actions # This is a simple example for a custom action which utters "Hello World!" from typing import Any, Text, Dict, List import os from rasa_sdk import Action, Tracker from rasa_sdk.events import SlotSet from rasa_sdk.executor import CollectingDispatcher from actions.ChatBot import ChatBot from actions.free_flow import FormFillingBot from typing import Text, List, Any, Dict import json import psycopg2 from rasa_sdk.events import SlotSet, ActiveLoop from rasa_sdk import Tracker, FormValidationAction, Action from rasa_sdk.events import EventType, UserUtteranceReverted, SlotSet from rasa_sdk.executor import CollectingDispatcher from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory # from langchain.chains import ConversationalRetrievalChain from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from rasa_sdk.events import SlotSet, FollowupAction from rasa_sdk.executor import CollectingDispatcher from pymongo.mongo_client import MongoClient from typing import Any, Text, Dict, List from rasa_sdk import Action, Tracker from langchain.chains import LLMChain from langchain.prompts.chat import ( ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, ) class ActionChat(Action): def name(self) -> Text: return "action_chat" def run(self,dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print("In action chat") current_state = tracker.current_state() print(current_state["latest_message"]) print(f"sender_id: {tracker.sender_id}") latest_msg = current_state["latest_message"]['text'] cb = ChatBot(tracker.sender_id) cb.create_llm_chain() res = cb.get_response(latest_msg) print(res) dispatcher.utter_message(res) SlotSet("data", None) return [UserUtteranceReverted()] class ActionFreeFlow(Action): def name(self) -> Text: return "action_free_flow" def run(self,dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print("FREE FLOW ACTION CALLED") current_state = tracker.current_state() print(current_state["latest_message"]) latest_msg = current_state["latest_message"]['text'] slot_value = tracker.get_slot("data") print(slot_value) uuid = tracker.sender_id cb = FormFillingBot() default_json=cb.get_current_form_json(uuid) res= cb.form_filling(latest_msg,default_json) dispatcher.utter_message(res) return [SlotSet("data", None)] #rutvi's code class ActionAskDetails(Action): def name(self): return "action_ask_details" def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: dict): slot_value = tracker.get_slot('data') if slot_value is None: dispatcher.utter_message(template="utter") return [FollowupAction('action_check_details')] else: dispatcher.utter_message(template="utter_thanks") return [] class ActionSubmitForm(Action): def name(self) -> Text: return "action_submit_form" def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: try: # Retrieve slot values first_name = tracker.get_slot('first_name') middle_name = tracker.get_slot('middle_name') last_name = tracker.get_slot('last_name') email = tracker.get_slot('email') us_number = tracker.get_slot('us_number') phone = tracker.get_slot('phone') confirm_location = tracker.get_slot('confirm_location') confirm_mail_address = tracker.get_slot('confirm_mail_address') preferred_language = tracker.get_slot('preferred_language') able_to_read_write = tracker.get_slot('able_to_read_write') born_in_us = tracker.get_slot('born_in_us') become_citizen_us = tracker.get_slot('become_citizen_us') legal_resident_us = tracker.get_slot('legal_resident_us') permanent_resident_number = tracker.get_slot('permanent_resident_number') serve_military = tracker.get_slot('serve_military') military_benefit = tracker.get_slot('military_benefit') medicare_benefit = tracker.get_slot('medicare_benefit') social_security_benefit = tracker.get_slot('social_security_benefit') supplemental_security_income = tracker.get_slot('supplemental_security_income') current_spouse_first_name = tracker.get_slot('current_spouse_first_name') current_spouse_last_name = tracker.get_slot('current_spouse_last_name') current_spouse_social_security_number = tracker.get_slot('current_spouse_social_security_number') prior_marriages = tracker.get_slot('prior_marriages') prior_marriages_duration = tracker.get_slot('prior_marriages_duration') prior_marriages_death = tracker.get_slot('prior_marriages_death') have_children = tracker.get_slot('have_children') parent_support = tracker.get_slot('parent_support') used_other_names = tracker.get_slot('used_other_names') ssn = tracker.get_slot('ssn') used_other_ssn = tracker.get_slot('used_other_ssn') bank_account_for_deposit = tracker.get_slot('bank_account_for_deposit') routing_number = tracker.get_slot('routing_number') account_number = tracker.get_slot('account_number') able_to_work = tracker.get_slot('able_to_work') perform_usual_job_responsibilities = tracker.get_slot('perform_usual_job_responsibilities') condition_last_14_months = tracker.get_slot('condition_last_14_months') condition_end_in_death = tracker.get_slot('condition_end_in_death') condition_require_work_changes = tracker.get_slot('condition_require_work_changes') earned_more_than_1470_in_2024 = tracker.get_slot('earned_more_than_1470_in_2024') intend_to_work_in_2024 = tracker.get_slot('intend_to_work_in_2024') received_money_from_employer = tracker.get_slot('received_money_from_employer') expect_to_receive_money_from_employer = tracker.get_slot('expect_to_receive_money_from_employer') school_name = tracker.get_slot('school_name') school_city = tracker.get_slot('school_city') school_state = tracker.get_slot('school_state') school_country = tracker.get_slot('school_country') special_education = tracker.get_slot('special_education') specialized_job_training = tracker.get_slot('specialized_job_training') company_name = tracker.get_slot('company_name') business_type = tracker.get_slot('business_type') end_date_last_worked = tracker.get_slot('end_date_last_worked') job_title = tracker.get_slot('job_title') pay_amount = tracker.get_slot('pay_amount') lifting_ability = tracker.get_slot('lifting_ability') supervised_others = tracker.get_slot('supervised_others') cared_for_children = tracker.get_slot('cared_for_children') self_employed_last_15_years = tracker.get_slot('self_employed_last_15_years') self_employed_2023 = tracker.get_slot('self_employed_2023') profit_self_employed_2023 = tracker.get_slot('profit_self_employed_2023') self_employed_2024 = tracker.get_slot('self_employed_2024') profit_self_employed_2024 = tracker.get_slot('profit_self_employed_2024') worked_outside_us = tracker.get_slot('worked_outside_us') worked_outside_us_2024 = tracker.get_slot('worked_outside_us_2024') illness_expected_duration = tracker.get_slot('illness_expected_duration') worked_outside_2023 = tracker.get_slot('worked_outside_2023') earnings_subject_us_social_security = tracker.get_slot('earnings_subject_us_social_security') eligible_foreign_social_security = tracker.get_slot('eligible_foreign_social_security') special_payments = tracker.get_slot('special_payments') no_social_security_taxes = tracker.get_slot('no_social_security_taxes') spouse_receiving_pension = tracker.get_slot('spouse_receiving_pension') future_pension_annuity = tracker.get_slot('future_pension_annuity') government_pension_or_annuity = tracker.get_slot('government_pension_or_annuity') lump_sum_payment = tracker.get_slot('lump_sum_payment') vision_impairment = tracker.get_slot('vision_impairment') impaired_vision_with_glasses_contacts = tracker.get_slot('impaired_vision_with_glasses_contacts') partial_or_total_deafness = tracker.get_slot('partial_or_total_deafness') use_hearing_aids = tracker.get_slot('use_hearing_aids') history_of_seizures = tracker.get_slot('history_of_seizures') mental_illness_treatment = tracker.get_slot('mental_illness_treatment') physical_illness_treatment = tracker.get_slot('physical_illness_treatment') emergency_room_visit = tracker.get_slot('emergency_room_visit') medical_tests_or_medications = tracker.get_slot('medical_tests_or_medications') mental_health_treatment = tracker.get_slot('mental_health_treatment') inpatient_stays = tracker.get_slot('inpatient_stays') outpatient_visits = tracker.get_slot('outpatient_visits') had_surgeries = tracker.get_slot('had_surgeries') had_physical_therapy = tracker.get_slot('had_physical_therapy') medical_records = tracker.get_slot('medical_records') doctor_in_prison = tracker.get_slot('doctor_in_prison') public_welfare = tracker.get_slot('public_welfare') attorney_records = tracker.get_slot('attorney_records') disability_insurance = tracker.get_slot('disability_insurance') vocational_rehab = tracker.get_slot('vocational_rehab') workers_compensation = tracker.get_slot('workers_compensation') other_records = tracker.get_slot('other_records') medical_tests_completed = tracker.get_slot('medical_tests_completed') taking_medications = tracker.get_slot('taking_medications') summary_message = ( f"Thank you {first_name} {middle_name} {last_name}. " f"We have recorded your email as {email} and phone number as {phone}. " f"US Number: {us_number}, Confirm Location: {confirm_location}, " f"Confirm Mail Address: {confirm_mail_address}. " f"Preferred Language: {preferred_language}, Able to Read/Write: {able_to_read_write}, " f"Born in US: {born_in_us}, Becoming Citizen: {become_citizen_us}, " f"Legal Resident: {legal_resident_us}, Permanent Resident Number: {permanent_resident_number}, " f"Served in Military: {serve_military}, Military Benefit: {military_benefit}, " f"Social Security Benefit: {social_security_benefit}, Supplemental Security Income: {supplemental_security_income}, " ) dispatcher.utter_message(text=summary_message) except Exception as e: dispatcher.utter_message(text=f"An error occurred: {e}")