Spaces:
Runtime error
Runtime error
# 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 | |
from typing import Any, Text, Dict, List | |
from rasa_sdk import Action, Tracker | |
from rasa_sdk.events import SlotSet, FollowupAction | |
from rasa_sdk.executor import CollectingDispatcher | |
import random | |
import os | |
import sys | |
import openai | |
# Add "/app/actions" to the sys.path | |
actions_path = os.path.abspath("/app/actions") | |
sys.path.insert(0, actions_path) | |
print("-#-System-path-#-") | |
for path in sys.path: | |
print(path) | |
print("-#-END-OF-System-path-#-") | |
# Import search_content.py from /actions folder | |
from search_content import main_search | |
# Import api key from secrets | |
secret_value_0 = os.environ.get("openai") | |
openai.api_key = secret_value_0 | |
# Provide your OpenAI API key | |
def generate_openai_response(query, model_engine="text-davinci-003", max_tokens=124, temperature=0.8): | |
"""Generate a response using the OpenAI API.""" | |
# Run the main function from search_content.py and store the results in a variable | |
results = main_search(query) | |
# Create context from the results | |
context = "".join([f"#{str(i)}" for i in results])[:2014] # Trim the context to 2014 characters - Modify as necessory | |
prompt_template = f"Relevant context: {context}\n\n Answer the question in detail: {query}" | |
# Generate a response using the OpenAI API | |
response = openai.Completion.create( | |
engine=model_engine, | |
prompt=prompt_template, | |
max_tokens=max_tokens, | |
temperature=temperature, | |
n=1, | |
stop=None, | |
) | |
return response.choices[0].text.strip() | |
class GetOpenAIResponse(Action): | |
def name(self) -> Text: | |
return "action_get_response_openai" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Use OpenAI API to generate a response | |
query = tracker.latest_message.get('text') | |
response = generate_openai_response(query) | |
# Output the generated response to user | |
dispatcher.utter_message(text=response) | |
class GeneralHelp(Action): | |
def name(self) -> Text: | |
return "action_general_help" | |
def run(self, dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
user_role = tracker.slots.get("user_role", None) | |
if user_role is None: | |
dispatcher.utter_message(text="Sure! Are you a developer or a client representing an organization?") | |
else: | |
return [FollowupAction("action_help_with_role")] | |
# Modified from @Rohit Garg's code https://github.com/rohitkg83/Omdena/blob/master/actions/actions.py | |
class ActionHelpWithRole(Action): | |
def name(self) -> Text: | |
return "action_help_with_role" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Get the value of the first_occurrence_user_type slot | |
current_user_type = tracker.slots.get("user_role", None) | |
if current_user_type == 'developer': | |
msg = "Thanks a lot for providing the details. You can join one of our local chapter and collaborate on " \ | |
"various projects and challenges to Develop Your Skills, Get Recognized, and Make an Impact. Please " \ | |
"visit https://omdena.com/community for more details. Do you have any other questions? " | |
elif current_user_type == 'client': | |
msg = "Thanks a lot for providing the details. With us you can Innovate, Deploy and Scale " \ | |
"AI Solutions in Record Time. For more details please visit https://omdena.com/offerings. Do you have any other questions? " | |
else: | |
msg = "Please enter either developer or client" | |
dispatcher.utter_message(text=msg) | |
class ResetSlotsAction(Action): | |
def name(self) -> Text: | |
return "action_reset_slots" | |
def run(self, dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
slots_to_reset = ["user_role"] # Add the names of the slots you want to reset | |
events = [SlotSet(slot, None) for slot in slots_to_reset] | |
return events | |
class ActionJoinClassify(Action): | |
def name(self) -> Text: | |
return "action_join_classify" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Get the value of the latest intent | |
last_intent = tracker.slots.get("local_chapter", None) | |
# Check if the last intent was 'local_chapter' | |
if last_intent == 'local chapter': | |
dispatcher.utter_message(template="utter_join_chapter") | |
else: | |
return [FollowupAction("action_get_response_openai")] | |
class ActionEligibilityClassify(Action): | |
def name(self) -> Text: | |
return "action_eligibility_classify" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Get the value of the latest intent | |
last_intent = tracker.slots.get("local_chapter", None) | |
# Check if the last intent was 'local_chapter' | |
if last_intent == 'local chapter': | |
dispatcher.utter_message(template="utter_local_chapter_participation_eligibility") | |
else: | |
return [FollowupAction("action_get_response_openai")] | |
class ActionCostClassify(Action): | |
def name(self) -> Text: | |
return "action_cost_classify" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Get the value of the latest intent | |
last_intent = tracker.slots.get("local_chapter", None) | |
# Check if the last intent was 'local_chapter' | |
if last_intent == 'local chapter': | |
dispatcher.utter_message(template="utter_local_chapter_cost") | |
else: | |
return [FollowupAction("action_get_response_openai")] | |
class SayHelloWorld(Action): | |
def name(self) -> Text: | |
return "action_hello_world" | |
def run(self, | |
dispatcher: CollectingDispatcher, | |
tracker: Tracker, | |
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: | |
# Use OpenAI API to generate a response | |
secret_value_0 = os.environ.get("openai") | |
openai.api_key = secret_value_0 | |
model_engine = "text-davinci-002" | |
prompt_template = "Say hello world" | |
response = openai.Completion.create( | |
engine=model_engine, | |
prompt=prompt_template, | |
max_tokens=124, | |
temperature=0.8, | |
n=1, | |
stop=None, | |
) | |
# Output the generated response to user | |
generated_text = response.choices[0].text | |
dispatcher.utter_message(text=generated_text) |