Source code for dronebuddylib.atoms.intentrecognition.gpt_intent_recognition_impl

from dronebuddylib.atoms.gpt_integration import GPTEngine
from dronebuddylib.atoms.intentrecognition.i_intent_recognition import IIntentRecognition
from dronebuddylib.exceptions.intent_resolution_exception import IntentResolutionException
from dronebuddylib.models.enums import Configurations
from dronebuddylib.models.gpt_configs import GPTConfigs
from dronebuddylib.utils.chat_prompts import SYSTEM_PROMPT_INTENT_CLASSIFICATION
from dronebuddylib.utils.utils import create_custom_drone_action_list, create_system_drone_action_list, \
    config_validity_check
from dronebuddylib.models.engine_configurations import EngineConfigurations


[docs] class GPTIntentRecognitionImpl(IIntentRecognition): """ GPT-based intent recognition system specifically tailored for drone actions. This class interfaces with the GPTEngine to recognize intents from user messages, taking into account system-defined and custom-defined drone actions. Attributes: configs (GPTConfigs): Configurations for the GPT Engine. gpt_engine (GPTEngine): The GPT engine instance used for intent recognition. """
[docs] def introduce_new_intents(self, new_intents: dict) -> bool: self.set_custom_actions_to_system_prompt(new_intents) return True
[docs] def get_class_name(self) -> str: """ Returns the class name of the intent recognition implementation. Returns: str: The class name. """ return 'INTENT_RECOGNITION_OPEN_AI'
[docs] def get_algorithm_name(self) -> str: """ Returns the algorithm name of the intent recognition implementation. Returns: str: The algorithm name. """ return 'GPT Intent Recognition'
def __init__(self, engine_configurations: EngineConfigurations): """ Initializes the GPTIntentRecognition with configurations and sets up the default system prompt. Args: engine_configurations (EngineConfigurations): Configurations for the GPT Engine. """ # Validate configurations super().__init__(engine_configurations) config_validity_check(self.get_required_params(), engine_configurations.get_configurations_for_engine(self.get_class_name()), self.get_algorithm_name()) # Get configurations configs = engine_configurations.get_configurations_for_engine(self.get_class_name()) self.configs = engine_configurations # Initialize GPT configs gpt_configs = GPTConfigs( open_ai_api_key=configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_API_KEY.name, configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_API_KEY)), open_ai_model=configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_MODEL.name, configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_MODEL)), open_ai_temperature=configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_TEMPERATURE.name, configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_TEMPERATURE)), open_ai_api_url=configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_API_URL.name, configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_API_URL)), loger_location=configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_LOGGER_LOCATION.name, configs.get(Configurations.INTENT_RECOGNITION_OPEN_AI_LOGGER_LOCATION)) ) # Initialize GPT engine self.gpt_engine = GPTEngine(gpt_configs) # Set system prompt if configs.get(Configurations.INTENT_RECOGNITION_SYSTEM_PROMPT.name, None) is not None: self.override_system_prompt(configs.get(Configurations.INTENT_RECOGNITION_SYSTEM_PROMPT.name)) else: drone_actions = create_system_drone_action_list() modified_prompt = SYSTEM_PROMPT_INTENT_CLASSIFICATION.replace("#list", "\'" + drone_actions + "\'") self.gpt_engine.set_system_prompt(modified_prompt)
[docs] def set_custom_actions_to_system_prompt(self, custom_actions: dict): """ Updates the system prompt with custom drone actions. Args: custom_actions (list): List of custom drone actions. """ drone_actions = create_custom_drone_action_list(custom_actions) modified_prompt = SYSTEM_PROMPT_INTENT_CLASSIFICATION.replace("#list", "\'" + drone_actions + "\'") self.gpt_engine.set_system_prompt(modified_prompt)
[docs] def get_system_prompt(self) -> str: """ Retrieves the current system prompt being used. Returns: str: Current system prompt. """ return SYSTEM_PROMPT_INTENT_CLASSIFICATION
[docs] def override_system_prompt(self, system_prompt: str): """ Overrides the current system prompt with the provided one. Args: system_prompt (str): The new system prompt. """ self.gpt_engine.set_system_prompt(system_prompt)
[docs] def get_resolved_intent(self, user_message: str) -> str: """ Recognizes the intent from the provided user message using the ChatGPT engine. Args: user_message (str): The user's input message for which the intent is to be recognized. Returns: str: Recognized intent based on the user message. """ try: return self.gpt_engine.session.get_chatgpt_response(user_message) except KeyError: raise IntentResolutionException("Intent could not be resolved.")
[docs] def get_required_params(self) -> list: """ Returns the list of required configuration parameters for the intent recognition engine. Returns: list: List of required configuration parameters. """ return [Configurations.INTENT_RECOGNITION_OPEN_AI_API_KEY, Configurations.INTENT_RECOGNITION_OPEN_AI_API_URL, Configurations.INTENT_RECOGNITION_OPEN_AI_MODEL, Configurations.INTENT_RECOGNITION_OPEN_AI_TEMPERATURE, Configurations.INTENT_RECOGNITION_OPEN_AI_LOGGER_LOCATION]
[docs] def get_optional_params(self) -> list: """ Returns the list of optional configuration parameters for the intent recognition engine. Returns: list: List of optional configuration parameters. """ return [Configurations.INTENT_RECOGNITION_SYSTEM_PROMPT]