diff --git a/neon_minerva/chatbots/__init__.py b/neon_minerva/chatbots/__init__.py new file mode 100644 index 0000000..158a323 --- /dev/null +++ b/neon_minerva/chatbots/__init__.py @@ -0,0 +1,18 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Development System +# +# Copyright 2008-2023 Neongecko.com Inc. | All Rights Reserved +# +# Notice of License - Duplicating this Notice of License near the start of any file containing +# a derivative of this software is a condition of license for this software. +# Friendly Licensing: +# No charge, open source royalty free use of the Neon AI software source and object is offered for +# educational users, noncommercial enthusiasts, Public Benefit Corporations (and LLCs) and +# Social Purpose Corporations (and LLCs). Developers can contact developers@neon.ai +# For commercial licensing, distribution of derivative works or redistribution please contact licenses@neon.ai +# Distributed on an "AS IS” basis without warranties or conditions of any kind, either express or implied. +# Trademarks of Neongecko: Neon AI(TM), Neon Assist (TM), Neon Communicator(TM), Klat(TM) +# Authors: Guy Daniels, Daniel McKnight, Regina Bloomstine, Elon Gasper, Richard Leeds +# +# Specialized conversational reconveyance options from Conversation Processing Intelligence Corp. +# US Patents 2008-2023: US7424516, US20140161250, US20140177813, US8638908, US8068604, US8553852, US10530923, US10530924 +# China Patent: CN102017585 - Europe Patent: EU2156652 - Patents Pending diff --git a/neon_minerva/chatbots/test_constants.py b/neon_minerva/chatbots/test_constants.py new file mode 100644 index 0000000..073b046 --- /dev/null +++ b/neon_minerva/chatbots/test_constants.py @@ -0,0 +1,74 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Development System +# +# Copyright 2008-2023 Neongecko.com Inc. | All Rights Reserved +# +# Notice of License - Duplicating this Notice of License near the start of any file containing +# a derivative of this software is a condition of license for this software. +# Friendly Licensing: +# No charge, open source royalty free use of the Neon AI software source and object is offered for +# educational users, noncommercial enthusiasts, Public Benefit Corporations (and LLCs) and +# Social Purpose Corporations (and LLCs). Developers can contact developers@neon.ai +# For commercial licensing, distribution of derivative works or redistribution please contact licenses@neon.ai +# Distributed on an "AS IS” basis without warranties or conditions of any kind, either express or implied. +# Trademarks of Neongecko: Neon AI(TM), Neon Assist (TM), Neon Communicator(TM), Klat(TM) +# Authors: Guy Daniels, Daniel McKnight, Regina Bloomstine, Elon Gasper, Richard Leeds +# +# Specialized conversational reconveyance options from Conversation Processing Intelligence Corp. +# US Patents 2008-2023: US7424516, US20140161250, US20140177813, US8638908, US8068604, US8553852, US10530923, US10530924 +# China Patent: CN102017585 - Europe Patent: EU2156652 - Patents Pending + +PROMPT = "hello!" + +RESPONSES = {"Ned": "Hi, I'm Ned. How are you, testrunner?", + "Eliza": "Hello... I'm glad you could drop by today.", + "terry": "Hey", + "Ima": "I am ready to talk", + "wolfram": "Hello, human", + "kbot": "hello!", + "alice": "Hi there!", + "abstain": ""} + +VOTES_BY_USER = { + '1prompt1': { + 'bot1': [], + 'bot2': ['bot1'], + 'bot3': [], + 'bot4': [], + 'abstain': ['bot2', 'bot3', 'bot4'] + }, + '2prompt2': { + 'bot1': [], + 'bot2': [], + 'bot4': [], + 'abstain': ['bot1', 'bot2', 'bot4'] + }, + '3prompt3': { + 'bot1': [], + 'bot2': ['bot1'], + 'bot3': [], + 'bot4': [], + 'abstain': ['bot2', 'bot3', 'bot4'] + } +} + +SELECTIONS = { + 'bot1': [('prompt1', 'bot2'), ('prompt2', 'abstain'), ('prompt3', 'bot2')], + 'bot2': [('prompt1', 'abstain'), ('prompt2', 'abstain'), ('prompt3', 'abstain')], + 'bot3': [('prompt1', 'abstain'), ('prompt3', 'abstain')], + 'bot4': [('prompt1', 'abstain'), ('prompt2', 'abstain'), ('prompt3', 'abstain')] +} + +SELECTION_HISTORY = ['bot2', 'bot2', 'bot2'] + +PARTICIPANT_HISTORY = [(), # element 0 is expected to be an empty tuple + ('bot1', 'bot2', 'bot3', 'bot4'), + ('bot1', 'bot2', 'bot3', 'bot4')] + +# ContextKeeper constants +RECENT_USERS = [f"user{number}" for number in range(20)] +RECENT_SHOUTS = [ + "Who is the president of Ukraine?", + "Who is the president of the US?", + "What is the distance between them?", + "When was he born?" +] diff --git a/neon_minerva/chatbots/util.py b/neon_minerva/chatbots/util.py new file mode 100644 index 0000000..6104de6 --- /dev/null +++ b/neon_minerva/chatbots/util.py @@ -0,0 +1,31 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Development System +# +# Copyright 2008-2023 Neongecko.com Inc. | All Rights Reserved +# +# Notice of License - Duplicating this Notice of License near the start of any file containing +# a derivative of this software is a condition of license for this software. +# Friendly Licensing: +# No charge, open source royalty free use of the Neon AI software source and object is offered for +# educational users, noncommercial enthusiasts, Public Benefit Corporations (and LLCs) and +# Social Purpose Corporations (and LLCs). Developers can contact developers@neon.ai +# For commercial licensing, distribution of derivative works or redistribution please contact licenses@neon.ai +# Distributed on an "AS IS” basis without warranties or conditions of any kind, either express or implied. +# Trademarks of Neongecko: Neon AI(TM), Neon Assist (TM), Neon Communicator(TM), Klat(TM) +# Authors: Guy Daniels, Daniel McKnight, Regina Bloomstine, Elon Gasper, Richard Leeds +# +# Specialized conversational reconveyance options from Conversation Processing Intelligence Corp. +# US Patents 2008-2023: US7424516, US20140161250, US20140177813, US8638908, US8068604, US8553852, US10530923, US10530924 +# China Patent: CN102017585 - Europe Patent: EU2156652 - Patents Pending +import pkg_resources + + +def load_chatbot(name: str): + try: + from importlib_metadata import entry_points + bot_entrypoints = entry_points(group="neon.plugin.chatbot") + except ImportError: + bot_entrypoints = pkg_resources.iter_entry_points("neon.plugin.chatbot") + + for bot in bot_entrypoints: + if bot.name == name: + return bot.load() diff --git a/neon_minerva/tests/chatbot_v1_test_base.py b/neon_minerva/tests/chatbot_v1_test_base.py new file mode 100644 index 0000000..a7a8bcf --- /dev/null +++ b/neon_minerva/tests/chatbot_v1_test_base.py @@ -0,0 +1,50 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Development System +# +# Copyright 2008-2023 Neongecko.com Inc. | All Rights Reserved +# +# Notice of License - Duplicating this Notice of License near the start of any file containing +# a derivative of this software is a condition of license for this software. +# Friendly Licensing: +# No charge, open source royalty free use of the Neon AI software source and object is offered for +# educational users, noncommercial enthusiasts, Public Benefit Corporations (and LLCs) and +# Social Purpose Corporations (and LLCs). Developers can contact developers@neon.ai +# For commercial licensing, distribution of derivative works or redistribution please contact licenses@neon.ai +# Distributed on an "AS IS” basis without warranties or conditions of any kind, either express or implied. +# Trademarks of Neongecko: Neon AI(TM), Neon Assist (TM), Neon Communicator(TM), Klat(TM) +# Authors: Guy Daniels, Daniel McKnight, Regina Bloomstine, Elon Gasper, Richard Leeds +# +# Specialized conversational reconveyance options from Conversation Processing Intelligence Corp. +# US Patents 2008-2023: US7424516, US20140161250, US20140177813, US8638908, US8068604, US8553852, US10530923, US10530924 +# China Patent: CN102017585 - Europe Patent: EU2156652 - Patents Pending + + +import unittest + +from os import getenv +from time import sleep +from chatbot_core.utils import clean_up_bot +from klat_connector import start_socket +from klat_connector.mach_server import MachKlatServer +from neon_minerva.chatbots.util import load_chatbot + + +class TestSubmind(unittest.TestCase): + # Initialize a server for testing + server = MachKlatServer() + sleep(1) + socket = start_socket("0.0.0.0") + submind = None + + @classmethod + def setUpClass(cls) -> None: + # Determine submind to test + submind_entrypoint = getenv("TEST_BOT_ENTRYPOINT") + bot_class = load_chatbot(submind_entrypoint) + # Initialize a submind instance + cls.submind = bot_class(cls.socket, "Private", "testrunner", + "testpassword", on_server=False) + + @classmethod + def tearDownClass(cls) -> None: + clean_up_bot(cls.submind) + cls.server.shutdown_server() diff --git a/requirements/chatbots.txt b/requirements/chatbots.txt new file mode 100644 index 0000000..0724fe8 --- /dev/null +++ b/requirements/chatbots.txt @@ -0,0 +1,2 @@ +klat-connector +neon-chatbot-core \ No newline at end of file diff --git a/setup.py b/setup.py index 52304e5..dd1e47b 100644 --- a/setup.py +++ b/setup.py @@ -74,6 +74,7 @@ def get_requirements(requirements_filename: str): ], python_requires='>=3.6', install_requires=get_requirements("requirements.txt"), + extras_require={"chatbots": get_requirements("chatbots.txt")}, entry_points={ 'console_scripts': ['minerva=neon_minerva.cli:neon_minerva_cli'] }