user-simulator 0.1.10__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {user_simulator-0.1.10 → user_simulator-0.2.0}/PKG-INFO +4 -1
- {user_simulator-0.1.10 → user_simulator-0.2.0}/pyproject.toml +57 -54
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/technologies/chatbot_connectors.py +6 -0
- user_simulator-0.2.0/src/user_sim/__init__.py +14 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/sensei_chat.py +39 -27
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/sensei_check.py +1 -1
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/utilities.py +61 -14
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/PKG-INFO +4 -1
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/requires.txt +3 -0
- user_simulator-0.1.10/src/user_sim/__init__.py +0 -15
- {user_simulator-0.1.10 → user_simulator-0.2.0}/LICENSE.txt +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/README.md +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/setup.cfg +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/results.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/rule_utils.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/rules.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/tests.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/metamorphic/text_comparison_utils.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/technologies/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/technologies/chatbots.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/technologies/taskyto.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/gen_user_profile.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/init_project.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/cli/validation_check.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/ask_about.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/data_extraction.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/data_gathering.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/interaction_styles.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/role_structure.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/core/user_simulator.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/asr_module.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/html_parser_module.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/image_recognition_module.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/pdf_parser_module.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/__init__.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/config.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/cost_tracker.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/cost_tracker_v2.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/errors.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/exceptions.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/languages.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/register_management.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/show_logs.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/token_cost_calculator.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/utils/url_management.py +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/SOURCES.txt +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/dependency_links.txt +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/entry_points.txt +0 -0
- {user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: user-simulator
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: LLM-based user simulator for chatbot testing.
|
5
5
|
Author: Alejandro Del Pozzo Escalera, Juan de Lara Jaramillo, Esther Guerra Sánchez
|
6
6
|
License: MIT License
|
@@ -30,6 +30,8 @@ Description-Content-Type: text/markdown
|
|
30
30
|
License-File: LICENSE.txt
|
31
31
|
Requires-Dist: allpairspy>=2.5.1
|
32
32
|
Requires-Dist: beautifulsoup4>=4.13.4
|
33
|
+
Requires-Dist: build>=1.3.0
|
34
|
+
Requires-Dist: chatbot-connectors>=0.2.2
|
33
35
|
Requires-Dist: colorama>=0.4.6
|
34
36
|
Requires-Dist: httpx>=0.28.1
|
35
37
|
Requires-Dist: inflect>=7.0.0
|
@@ -44,6 +46,7 @@ Requires-Dist: pyyaml>=6.0.2
|
|
44
46
|
Requires-Dist: requests>=2.32.4
|
45
47
|
Requires-Dist: scikit-learn>=1.7.0
|
46
48
|
Requires-Dist: selenium>=4.33.0
|
49
|
+
Requires-Dist: twine>=6.1.0
|
47
50
|
Requires-Dist: webdriver-manager>=4.0.2
|
48
51
|
Dynamic: license-file
|
49
52
|
|
@@ -1,54 +1,57 @@
|
|
1
|
-
[project]
|
2
|
-
name = "user-simulator"
|
3
|
-
version = "0.
|
4
|
-
description = "LLM-based user simulator for chatbot testing."
|
5
|
-
readme = "README.md"
|
6
|
-
requires-python = ">=3.12"
|
7
|
-
license = {file = "LICENSE.txt"}
|
8
|
-
|
9
|
-
authors = [
|
10
|
-
{name = "Alejandro Del Pozzo Escalera"},
|
11
|
-
{name = "Juan de Lara Jaramillo"},
|
12
|
-
{name = "Esther Guerra Sánchez"}
|
13
|
-
]
|
14
|
-
|
15
|
-
dependencies = [
|
16
|
-
"allpairspy>=2.5.1",
|
17
|
-
"beautifulsoup4>=4.13.4",
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
23
|
-
"
|
24
|
-
"
|
25
|
-
"
|
26
|
-
"
|
27
|
-
"
|
28
|
-
"
|
29
|
-
"
|
30
|
-
"
|
31
|
-
"
|
32
|
-
"
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
[project.
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
sensei-
|
43
|
-
sensei-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
[
|
50
|
-
|
51
|
-
|
52
|
-
[tool.setuptools
|
53
|
-
|
54
|
-
|
1
|
+
[project]
|
2
|
+
name = "user-simulator"
|
3
|
+
version = "0.2.0"
|
4
|
+
description = "LLM-based user simulator for chatbot testing."
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.12"
|
7
|
+
license = {file = "LICENSE.txt"}
|
8
|
+
|
9
|
+
authors = [
|
10
|
+
{name = "Alejandro Del Pozzo Escalera"},
|
11
|
+
{name = "Juan de Lara Jaramillo"},
|
12
|
+
{name = "Esther Guerra Sánchez"}
|
13
|
+
]
|
14
|
+
|
15
|
+
dependencies = [
|
16
|
+
"allpairspy>=2.5.1",
|
17
|
+
"beautifulsoup4>=4.13.4",
|
18
|
+
"build>=1.3.0",
|
19
|
+
"chatbot-connectors>=0.2.2",
|
20
|
+
"colorama>=0.4.6",
|
21
|
+
"httpx>=0.28.1",
|
22
|
+
"inflect>=7.0.0",
|
23
|
+
"langchain>=0.3.25",
|
24
|
+
"langchain-openai>=0.3.23",
|
25
|
+
"openai>=1.0.0",
|
26
|
+
"pandas>=2.3.0",
|
27
|
+
"pillow>=11.2.1",
|
28
|
+
"pydantic>=2.0.0",
|
29
|
+
"pymupdf>=1.26.1",
|
30
|
+
"pyyaml>=6.0.2",
|
31
|
+
"requests>=2.32.4",
|
32
|
+
"scikit-learn>=1.7.0",
|
33
|
+
"selenium>=4.33.0",
|
34
|
+
"twine>=6.1.0",
|
35
|
+
"webdriver-manager>=4.0.2",
|
36
|
+
]
|
37
|
+
|
38
|
+
[project.urls]
|
39
|
+
Homepage = "https://github.com/satori-chatbots/user-simulator"
|
40
|
+
|
41
|
+
[project.scripts]
|
42
|
+
sensei-init-project = "user_sim.cli.init_project:main"
|
43
|
+
sensei-chat = "user_sim.cli.sensei_chat:main"
|
44
|
+
sensei-check = "user_sim.cli.sensei_check:main"
|
45
|
+
sensei-validation-check = "user_sim.cli.validation_check:main"
|
46
|
+
sensei-gen-user-profile = "user_sim.cli.gen_user_profile:main"
|
47
|
+
|
48
|
+
[build-system]
|
49
|
+
requires = ["setuptools>=61.0"]
|
50
|
+
build-backend = "setuptools.build_meta"
|
51
|
+
|
52
|
+
[tool.setuptools]
|
53
|
+
package-dir = {"" = "src"}
|
54
|
+
|
55
|
+
[tool.setuptools.packages.find]
|
56
|
+
where = ["src"]
|
57
|
+
include = ["user_sim*", "technologies*", "metamorphic*"]
|
@@ -13,6 +13,12 @@ logger = logging.getLogger('Info Logger')
|
|
13
13
|
# THE CONNECTORS NEED HEAVY REFACTORING TO JUST
|
14
14
|
# ONE OR TWO CLASSES
|
15
15
|
|
16
|
+
# def get_get_content():
|
17
|
+
# from user_sim.utils.url_management import get_content
|
18
|
+
# return get_content
|
19
|
+
#
|
20
|
+
# get_content = get_get_content()
|
21
|
+
|
16
22
|
class Chatbot:
|
17
23
|
def __init__(self, connector):
|
18
24
|
self.fallback = 'I do not understand you'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# from .cli.sensei_chat import main as sensei_chat_main
|
2
|
+
# from .cli.sensei_check import main as sensei_check_main
|
3
|
+
# from .cli.init_project import main as init_project_main
|
4
|
+
# from .cli.validation_check import main as validation_check_main
|
5
|
+
# from .cli.gen_user_profile import main as gen_user_profile_main
|
6
|
+
#
|
7
|
+
#
|
8
|
+
# __all__ = [
|
9
|
+
# "sensei_chat_main",
|
10
|
+
# "sensei_check_main",
|
11
|
+
# "init_project_main",
|
12
|
+
# "validation_check_main",
|
13
|
+
# "gen_user_profile_main"
|
14
|
+
# ]
|
@@ -4,8 +4,8 @@ import pandas as pd
|
|
4
4
|
from collections import Counter
|
5
5
|
from argparse import ArgumentParser
|
6
6
|
from colorama import Fore, Style
|
7
|
-
from technologies.chatbot_connectors import (Chatbot, ChatbotRasa, ChatbotTaskyto, ChatbotMillionBot,
|
8
|
-
|
7
|
+
# from technologies.chatbot_connectors import (Chatbot, ChatbotRasa, ChatbotTaskyto, ChatbotMillionBot,
|
8
|
+
# ChatbotServiceform)
|
9
9
|
from user_sim.core.data_extraction import DataExtraction
|
10
10
|
from user_sim.core.role_structure import *
|
11
11
|
from user_sim.core.user_simulator import UserSimulator
|
@@ -14,7 +14,15 @@ from user_sim.utils.utilities import *
|
|
14
14
|
from user_sim.utils.token_cost_calculator import create_cost_dataset
|
15
15
|
from user_sim.utils.register_management import clean_temp_files
|
16
16
|
|
17
|
-
|
17
|
+
from chatbot_connectors.implementations.custom import CustomChatbot
|
18
|
+
from chatbot_connectors.implementations.taskyto import ChatbotTaskyto
|
19
|
+
from chatbot_connectors.implementations.rasa import RasaChatbot
|
20
|
+
from chatbot_connectors.implementations.millionbot import MillionBot
|
21
|
+
|
22
|
+
from chatbot_connectors import ChatbotFactory, parse_connector_params
|
23
|
+
|
24
|
+
|
25
|
+
# check_keys(["OPENAI_API_KEY"])
|
18
26
|
current_script_dir = os.path.dirname(os.path.abspath(__file__))
|
19
27
|
root_path = os.path.abspath(os.path.join(current_script_dir, ".."))
|
20
28
|
|
@@ -79,7 +87,7 @@ def configure_project(project_path):
|
|
79
87
|
config.custom_personalities_folder = os.path.join(project_path, "personalities")
|
80
88
|
|
81
89
|
custom_types_path = os.path.join(project_path, "types")
|
82
|
-
default_types_path = os.path.join(config.root_path, "config", "types")
|
90
|
+
default_types_path = os.path.join(config.root_path, "src", "config", "types")
|
83
91
|
|
84
92
|
custom_types = load_yaml_files_from_folder(custom_types_path)
|
85
93
|
default_types = load_yaml_files_from_folder(default_types_path, existing_keys=custom_types.keys())
|
@@ -233,17 +241,18 @@ def parse_profiles(user_path):
|
|
233
241
|
raise Exception(f'Invalid path for user profile operation: {user_path}')
|
234
242
|
|
235
243
|
|
236
|
-
def build_chatbot(technology, connector)
|
237
|
-
chatbot_builder = {
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
244
|
+
def build_chatbot(technology, connector):
|
245
|
+
# chatbot_builder = {
|
246
|
+
# 'rasa': RasaChatbot,
|
247
|
+
# 'taskyto': ChatbotTaskyto,
|
248
|
+
# # 'serviceform': ChatbotServiceform(connector),
|
249
|
+
# 'millionbot': MillionBot,
|
250
|
+
# 'custom': CustomChatbot
|
251
|
+
# }
|
252
|
+
# chatbot_class = chatbot_builder.get(technology, CustomChatbot)
|
253
|
+
parsed_connector = parse_connector_params(connector)
|
254
|
+
chatbot = ChatbotFactory.create_chatbot(chatbot_type=technology, **parsed_connector)
|
255
|
+
return chatbot
|
247
256
|
|
248
257
|
def generate_conversation(technology, connector, user,
|
249
258
|
personality, extract, project_folder):
|
@@ -412,13 +421,12 @@ def main():
|
|
412
421
|
parser.add_argument('--technology', required=False,
|
413
422
|
choices=['rasa', 'taskyto', 'ada-uam', 'millionbot', 'genion', 'lola', 'serviceform', 'kuki', 'julie', 'rivas_catalina', 'saic_malaga'],
|
414
423
|
help='Technology the chatbot is implemented in')
|
415
|
-
# parser.add_argument('--
|
416
|
-
parser.add_argument('--connector', required=False, help='
|
417
|
-
parser.add_argument('--connector_parameters', required=False, help='dynamic parameters for the selected chatbot connector')
|
424
|
+
# parser.add_argument('--connector', required=False, help='path to the connector configuration file')
|
425
|
+
parser.add_argument('--connector-params', required=False, help='dynamic parameters for the selected chatbot connector')
|
418
426
|
parser.add_argument('--project_path', required=False, help='Project folder PATH where all testing data is stored')
|
419
427
|
parser.add_argument('--user_profile', required=False, help='User profile file or user profile folder to test the chatbot')
|
420
428
|
parser.add_argument('--personality', required=False, help='Personality file')
|
421
|
-
parser.add_argument(
|
429
|
+
parser.add_argument('--extract', default=False, help='Path to store conversation user-chatbot')
|
422
430
|
parser.add_argument('--verbose', action='store_true', help='Shows debug prints')
|
423
431
|
parser.add_argument('--clean_cache', action='store_true', help='Deletes temporary files.')
|
424
432
|
parser.add_argument('--ignore_cache', action='store_true', help='Ignores cache for temporary files')
|
@@ -449,7 +457,7 @@ def main():
|
|
449
457
|
parser_args = ArgsNamespace(**yaml_args)
|
450
458
|
|
451
459
|
else:
|
452
|
-
required_args = ['technology', 'user_profile', '
|
460
|
+
required_args = ['technology', 'user_profile', 'connector_params']
|
453
461
|
missing_args = [arg for arg in required_args if getattr(parser_args, arg) is None]
|
454
462
|
|
455
463
|
if missing_args:
|
@@ -462,20 +470,24 @@ def main():
|
|
462
470
|
logger = create_logger(parser_args.verbose, 'Info Logger')
|
463
471
|
logger.info('Logs enabled!')
|
464
472
|
|
465
|
-
check_keys(["OPENAI_API_KEY"])
|
473
|
+
# check_keys(["OPENAI_API_KEY"])
|
466
474
|
config.test_cases_folder = parser_args.extract
|
467
475
|
config.ignore_cache = parser_args.ignore_cache
|
468
476
|
config.update_cache = parser_args.update_cache
|
469
477
|
config.clean_cache = parser_args.clean_cache
|
470
478
|
|
471
|
-
if parser_args.connector_parameters:
|
472
|
-
|
473
|
-
else:
|
474
|
-
|
479
|
+
# if parser_args.connector_parameters:
|
480
|
+
# connector = configure_connector(parser_args.connector, parser_args.connector_parameters)
|
481
|
+
# else:
|
482
|
+
# connector = configure_connector(parser_args.connector)
|
475
483
|
|
476
|
-
|
477
|
-
parser_args.personality, parser_args.extract, parser_args.project_path)
|
484
|
+
connector = parser_args.connector_params
|
478
485
|
|
486
|
+
try:
|
487
|
+
generate_conversation(parser_args.technology, connector, profile_path,
|
488
|
+
parser_args.personality, parser_args.extract, parser_args.project_path)
|
489
|
+
except Exception as e:
|
490
|
+
logger.error(f"An error occurred while generating the conversation: {e}")
|
479
491
|
|
480
492
|
if __name__ == '__main__':
|
481
493
|
main()
|
@@ -9,7 +9,7 @@ from argparse import ArgumentParser
|
|
9
9
|
from metamorphic.results import Result
|
10
10
|
from metamorphic.rules import *
|
11
11
|
from metamorphic.tests import Test
|
12
|
-
from user_sim.utils.utilities import check_keys
|
12
|
+
# from user_sim.utils.utilities import check_keys
|
13
13
|
import user_sim.utils.errors as errors
|
14
14
|
|
15
15
|
def __get_object_from_yaml_files(file_or_dir, operation, name):
|
@@ -9,6 +9,7 @@ import importlib.util
|
|
9
9
|
import logging
|
10
10
|
import platform
|
11
11
|
|
12
|
+
from typing import Any
|
12
13
|
from datetime import datetime, timedelta, date
|
13
14
|
from sklearn.feature_extraction.text import TfidfVectorizer
|
14
15
|
from sklearn.metrics.pairwise import cosine_similarity
|
@@ -20,20 +21,20 @@ from charset_normalizer import detect
|
|
20
21
|
logger = logging.getLogger('Info Logger')
|
21
22
|
|
22
23
|
|
23
|
-
def check_keys(key_list: list):
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
24
|
+
# def check_keys(key_list: list):
|
25
|
+
# if os.path.exists("keys.properties"):
|
26
|
+
# logger.info("properties found!")
|
27
|
+
# config = configparser.ConfigParser()
|
28
|
+
# config.read('keys.properties')
|
29
|
+
#
|
30
|
+
# # Loop over all keys and values
|
31
|
+
# for key in config['keys']:
|
32
|
+
# key = key.upper()
|
33
|
+
# os.environ[key] = config['keys'][key]
|
34
|
+
#
|
35
|
+
# for k in key_list:
|
36
|
+
# if not os.environ.get(k):
|
37
|
+
# raise Exception(f"{k} not found")
|
37
38
|
|
38
39
|
|
39
40
|
def end_alarm():
|
@@ -63,6 +64,52 @@ def init_model():
|
|
63
64
|
return model, llm
|
64
65
|
|
65
66
|
|
67
|
+
# def parse_connector_params(connector_params_str: str | None) -> dict[str, Any]:
|
68
|
+
# """Parse connector parameters from string input.
|
69
|
+
#
|
70
|
+
# Args:
|
71
|
+
# connector_params_str: JSON string or key=value pairs
|
72
|
+
#
|
73
|
+
# Returns:
|
74
|
+
# Dictionary of connector parameters
|
75
|
+
#
|
76
|
+
# Raises:
|
77
|
+
# ValueError: If parameter parsing fails
|
78
|
+
# """
|
79
|
+
# params = {}
|
80
|
+
#
|
81
|
+
# if connector_params_str:
|
82
|
+
# try:
|
83
|
+
# # Try to parse as JSON first
|
84
|
+
# if connector_params_str.strip().startswith("{"):
|
85
|
+
# params = json.loads(connector_params_str)
|
86
|
+
# else:
|
87
|
+
# # Parse as key=value pairs
|
88
|
+
# for pair in connector_params_str.split(","):
|
89
|
+
# if "=" not in pair:
|
90
|
+
# continue
|
91
|
+
# key, value = pair.split("=", 1)
|
92
|
+
# key = key.strip()
|
93
|
+
# value = value.strip()
|
94
|
+
#
|
95
|
+
# # Try to convert to appropriate types
|
96
|
+
# if value.lower() in ("true", "false"):
|
97
|
+
# params[key] = value.lower() == "true"
|
98
|
+
# elif value.isdigit():
|
99
|
+
# params[key] = int(value)
|
100
|
+
# else:
|
101
|
+
# try:
|
102
|
+
# params[key] = float(value)
|
103
|
+
# except ValueError:
|
104
|
+
# params[key] = value
|
105
|
+
#
|
106
|
+
# except (json.JSONDecodeError, ValueError) as e:
|
107
|
+
# logger.exception("Failed to parse connector parameters: %s", connector_params_str)
|
108
|
+
# msg = f"Invalid connector parameters format: {e}"
|
109
|
+
# raise ValueError(msg) from e
|
110
|
+
#
|
111
|
+
# return params
|
112
|
+
|
66
113
|
|
67
114
|
def parse_content_to_text(messages):
|
68
115
|
return " ".join([message["content"] for message in messages if "content" in message])
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: user-simulator
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: LLM-based user simulator for chatbot testing.
|
5
5
|
Author: Alejandro Del Pozzo Escalera, Juan de Lara Jaramillo, Esther Guerra Sánchez
|
6
6
|
License: MIT License
|
@@ -30,6 +30,8 @@ Description-Content-Type: text/markdown
|
|
30
30
|
License-File: LICENSE.txt
|
31
31
|
Requires-Dist: allpairspy>=2.5.1
|
32
32
|
Requires-Dist: beautifulsoup4>=4.13.4
|
33
|
+
Requires-Dist: build>=1.3.0
|
34
|
+
Requires-Dist: chatbot-connectors>=0.2.2
|
33
35
|
Requires-Dist: colorama>=0.4.6
|
34
36
|
Requires-Dist: httpx>=0.28.1
|
35
37
|
Requires-Dist: inflect>=7.0.0
|
@@ -44,6 +46,7 @@ Requires-Dist: pyyaml>=6.0.2
|
|
44
46
|
Requires-Dist: requests>=2.32.4
|
45
47
|
Requires-Dist: scikit-learn>=1.7.0
|
46
48
|
Requires-Dist: selenium>=4.33.0
|
49
|
+
Requires-Dist: twine>=6.1.0
|
47
50
|
Requires-Dist: webdriver-manager>=4.0.2
|
48
51
|
Dynamic: license-file
|
49
52
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
allpairspy>=2.5.1
|
2
2
|
beautifulsoup4>=4.13.4
|
3
|
+
build>=1.3.0
|
4
|
+
chatbot-connectors>=0.2.2
|
3
5
|
colorama>=0.4.6
|
4
6
|
httpx>=0.28.1
|
5
7
|
inflect>=7.0.0
|
@@ -14,4 +16,5 @@ pyyaml>=6.0.2
|
|
14
16
|
requests>=2.32.4
|
15
17
|
scikit-learn>=1.7.0
|
16
18
|
selenium>=4.33.0
|
19
|
+
twine>=6.1.0
|
17
20
|
webdriver-manager>=4.0.2
|
@@ -1,15 +0,0 @@
|
|
1
|
-
|
2
|
-
from .cli.sensei_chat import main as sensei_chat_main
|
3
|
-
from .cli.sensei_check import main as sensei_check_main
|
4
|
-
from .cli.init_project import main as init_project_main
|
5
|
-
from .cli.validation_check import main as validation_check_main
|
6
|
-
from .cli.gen_user_profile import main as gen_user_profile_main
|
7
|
-
|
8
|
-
|
9
|
-
__all__ = [
|
10
|
-
"sensei_chat_main",
|
11
|
-
"sensei_check_main",
|
12
|
-
"init_project_main",
|
13
|
-
"validation_check_main",
|
14
|
-
"gen_user_profile_main"
|
15
|
-
]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_sim/handlers/image_recognition_module.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{user_simulator-0.1.10 → user_simulator-0.2.0}/src/user_simulator.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|