Skip to content

Commit

Permalink
Add support for CBF Submind tests (#10)
Browse files Browse the repository at this point in the history
* Implement Submind test base class for testing CBF subminds
Add common Chatbot test resources

* Add Chatbot extra deps to setup.py

* Refactor so submind may be defined after test case import

---------

Co-authored-by: Daniel McKnight <[email protected]>
  • Loading branch information
NeonDaniel and NeonDaniel authored Nov 30, 2023
1 parent 0eeb94f commit ab4f3d8
Show file tree
Hide file tree
Showing 6 changed files with 176 additions and 0 deletions.
18 changes: 18 additions & 0 deletions neon_minerva/chatbots/__init__.py
Original file line number Diff line number Diff line change
@@ -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 [email protected]
# For commercial licensing, distribution of derivative works or redistribution please contact [email protected]
# 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
74 changes: 74 additions & 0 deletions neon_minerva/chatbots/test_constants.py
Original file line number Diff line number Diff line change
@@ -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 [email protected]
# For commercial licensing, distribution of derivative works or redistribution please contact [email protected]
# 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?"
]
31 changes: 31 additions & 0 deletions neon_minerva/chatbots/util.py
Original file line number Diff line number Diff line change
@@ -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 [email protected]
# For commercial licensing, distribution of derivative works or redistribution please contact [email protected]
# 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()
50 changes: 50 additions & 0 deletions neon_minerva/tests/chatbot_v1_test_base.py
Original file line number Diff line number Diff line change
@@ -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 [email protected]
# For commercial licensing, distribution of derivative works or redistribution please contact [email protected]
# 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()
2 changes: 2 additions & 0 deletions requirements/chatbots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
klat-connector
neon-chatbot-core
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']
}
Expand Down

0 comments on commit ab4f3d8

Please sign in to comment.