user-simulator 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

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.
Files changed (37) hide show
  1. metamorphic/__init__.py +9 -0
  2. metamorphic/results.py +62 -0
  3. metamorphic/rule_utils.py +482 -0
  4. metamorphic/rules.py +231 -0
  5. metamorphic/tests.py +83 -0
  6. metamorphic/text_comparison_utils.py +31 -0
  7. technologies/__init__.py +0 -0
  8. technologies/chatbot_connectors.py +567 -0
  9. technologies/chatbots.py +80 -0
  10. technologies/taskyto.py +110 -0
  11. user_sim/cli/gen_user_profile.py +1 -1
  12. user_sim/cli/sensei_chat.py +9 -9
  13. user_sim/cli/sensei_check.py +5 -5
  14. user_sim/cli/validation_check.py +2 -2
  15. user_sim/core/ask_about.py +5 -5
  16. user_sim/core/data_extraction.py +3 -3
  17. user_sim/core/data_gathering.py +4 -4
  18. user_sim/core/role_structure.py +9 -9
  19. user_sim/core/user_simulator.py +4 -4
  20. user_sim/handlers/asr_module.py +2 -2
  21. user_sim/handlers/html_parser_module.py +3 -3
  22. user_sim/handlers/pdf_parser_module.py +1 -1
  23. user_sim/utils/cost_tracker.py +1 -1
  24. user_sim/utils/cost_tracker_v2.py +1 -1
  25. user_sim/utils/register_management.py +1 -1
  26. user_sim/utils/token_cost_calculator.py +2 -2
  27. user_sim/utils/url_management.py +3 -3
  28. user_sim/utils/utilities.py +2 -2
  29. {user_simulator-0.1.0.dist-info → user_simulator-0.1.2.dist-info}/METADATA +1 -1
  30. user_simulator-0.1.2.dist-info/RECORD +47 -0
  31. user_simulator-0.1.2.dist-info/entry_points.txt +6 -0
  32. user_simulator-0.1.2.dist-info/top_level.txt +3 -0
  33. user_simulator-0.1.0.dist-info/RECORD +0 -37
  34. user_simulator-0.1.0.dist-info/entry_points.txt +0 -6
  35. user_simulator-0.1.0.dist-info/top_level.txt +0 -1
  36. {user_simulator-0.1.0.dist-info → user_simulator-0.1.2.dist-info}/WHEEL +0 -0
  37. {user_simulator-0.1.0.dist-info → user_simulator-0.1.2.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,110 @@
1
+ import glob
2
+ import inflect
3
+ import os
4
+ import yaml
5
+
6
+ from .chatbots import RoleData, ChatbotSpecification
7
+ from typing import List, Dict
8
+
9
+
10
+ class ChatbotSpecificationTaskyto (ChatbotSpecification):
11
+ def build_user_profile(self, chatbot_folder) -> RoleData:
12
+ """
13
+ :param chatbot_folder: folder containing the chatbot modules
14
+ :returns user profile built from the chatbot specification
15
+ """
16
+ formatter = inflect.engine()
17
+ profile = RoleData()
18
+ profile.role = 'You have to act as a user of a chatbot.'
19
+ profile.context = [
20
+ "Never indicate that you are the user, like 'user: bla bla'.", #todo: these prompts should be removed since they are added internaly in the code. A.
21
+ "Sometimes, interact with what the assistant just said.",
22
+ "Never act as the assistant.",
23
+ "Don't end the conversation until you've asked everything you need."
24
+ ]
25
+ # profile.conversations.interaction_style.append('long phrase')
26
+ profile.conversations.interaction_style.append('change your mind')
27
+ profile.conversations.interaction_style.append('make spelling mistakes')
28
+ profile.conversations.interaction_style.append('single question')
29
+ profile.conversations.interaction_style.append('all questions')
30
+ # profile.conversations.interaction_style.append('default')
31
+
32
+ # chatbot modules
33
+ modules = self.__class__.__load_chatbot_modules(chatbot_folder)
34
+ for module in modules:
35
+ if module.get("modules"):
36
+ modules.extend(module.get("modules"))
37
+ continue
38
+ # menu module ...........................................
39
+ kind = module.get("kind")
40
+ if kind == "menu":
41
+ if module.get("items"):
42
+ modules.extend(module.get("items"))
43
+ if not profile.fallback:
44
+ profile.fallback = module.get("fallback")
45
+ if module.get("presentation"):
46
+ profile.role += f' This chatbot is described as follows: \"{module.get("presentation").strip()}\"'
47
+ # data gathering module .................................
48
+ elif kind == "data_gathering":
49
+ for data in module.get("data"):
50
+ for item in data.keys():
51
+ item_values = data.get(item)
52
+ if item_values.get("type") == "enum":
53
+ if formatter.singular_noun(item) is True:
54
+ item = formatter.plural(item)
55
+ ask_about = 'Consider the following ' + item + ': {{' + item + '}}.'
56
+ ask_values = self.__class__.__flatten(item_values.get("values"))
57
+ profile.ask_about.append(ask_about)
58
+ profile.ask_about.append({item: ask_values})
59
+ # answer module .........................................
60
+ elif kind == "answer":
61
+ profile.ask_about.append(module.get("title"))
62
+
63
+ # chatbot configuration
64
+ config = self.__class__.__load_configuration_file(chatbot_folder)
65
+ if config.get("languages"):
66
+ languages = [language.strip() for language in config.get("languages").split(",")]
67
+ profile.conversations.change_language.extend(languages)
68
+ profile.language = languages[0]
69
+
70
+ return profile
71
+
72
+ @staticmethod
73
+ def __flatten(list_values: List[str | Dict[str, List[str]]]) -> List[str]:
74
+ """
75
+ :param list_values: list of values, which can be strings or dictionaries
76
+ :returns list of string values (dicts are flattened -- their keys and values are added to the list)
77
+ """
78
+ list_flattened = []
79
+ for value in list_values:
80
+ if isinstance(value, Dict):
81
+ for key in value.keys():
82
+ list_flattened.append(key)
83
+ list_flattened.extend(value.get(key))
84
+ else:
85
+ list_flattened.append(value)
86
+ return list_flattened
87
+
88
+ @staticmethod
89
+ def __load_chatbot_modules(chatbot_folder) -> List[Dict]:
90
+ """
91
+ :param chatbot_folder: folder containing the chatbot modules
92
+ :returns yaml files in chatbot_folder
93
+ """
94
+ modules = []
95
+ for file_path in glob.glob(os.path.join(chatbot_folder, '*.yaml')):
96
+ with open(file_path) as yaml_file:
97
+ modules.append(yaml.safe_load(yaml_file.read()))
98
+ return modules
99
+
100
+ @staticmethod
101
+ def __load_configuration_file(chatbot_folder) -> Dict:
102
+ """
103
+ :param chatbot_folder: folder containing the chatbot modules
104
+ :returns file chatbot_folder/configuration/default.yaml
105
+ """
106
+ configuration_file = os.path.join(chatbot_folder, "configuration", "default.yaml")
107
+ if os.path.isfile(configuration_file):
108
+ with open(configuration_file) as yaml_file:
109
+ return yaml.safe_load(yaml_file.read())
110
+ return {}
@@ -1,7 +1,7 @@
1
1
  import os
2
2
 
3
3
  from argparse import ArgumentParser
4
- from technologies.taskyto import ChatbotSpecificationTaskyto
4
+ from src.technologies.taskyto import ChatbotSpecificationTaskyto
5
5
 
6
6
 
7
7
  def generate(technology: str, chatbot: str, user: str):
@@ -4,15 +4,15 @@ 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,
7
+ from src.technologies.chatbot_connectors import (Chatbot, ChatbotRasa, ChatbotTaskyto, ChatbotMillionBot,
8
8
  ChatbotServiceform)
9
- from user_sim.core.data_extraction import DataExtraction
10
- from user_sim.core.role_structure import *
11
- from user_sim.core.user_simulator import UserSimulator
12
- from user_sim.utils.show_logs import *
13
- from user_sim.utils.utilities import *
14
- from user_sim.utils.token_cost_calculator import create_cost_dataset
15
- from user_sim.utils.register_management import clean_temp_files
9
+ from src.user_sim.core.data_extraction import DataExtraction
10
+ from src.user_sim.core.role_structure import *
11
+ from src.user_sim.core.user_simulator import UserSimulator
12
+ from src.user_sim.utils.show_logs import *
13
+ from src.user_sim.utils.utilities import *
14
+ from src.user_sim.utils.token_cost_calculator import create_cost_dataset
15
+ from src.user_sim.utils.register_management import clean_temp_files
16
16
 
17
17
  check_keys(["OPENAI_API_KEY"])
18
18
  current_script_dir = os.path.dirname(os.path.abspath(__file__))
@@ -79,7 +79,7 @@ def configure_project(project_path):
79
79
  config.custom_personalities_folder = os.path.join(project_path, "personalities")
80
80
 
81
81
  custom_types_path = os.path.join(project_path, "types")
82
- default_types_path = os.path.join(config.root_path, "config", "types")
82
+ default_types_path = os.path.join(config.root_path,"src", "config", "types")
83
83
 
84
84
  custom_types = load_yaml_files_from_folder(custom_types_path)
85
85
  default_types = load_yaml_files_from_folder(default_types_path, existing_keys=custom_types.keys())
@@ -6,11 +6,11 @@ import sys
6
6
  from pydantic import ValidationError
7
7
  from argparse import ArgumentParser
8
8
 
9
- from metamorphic.results import Result
10
- from metamorphic.rules import *
11
- from metamorphic.tests import Test
12
- from user_sim.utils.utilities import check_keys
13
- import user_sim.utils.errors as errors
9
+ from src.metamorphic.results import Result
10
+ from src.metamorphic.rules import *
11
+ from src.metamorphic.tests import Test
12
+ from src.user_sim.utils.utilities import check_keys
13
+ import src.user_sim.utils.errors as errors
14
14
 
15
15
  def __get_object_from_yaml_files(file_or_dir, operation, name):
16
16
  objects = []
@@ -8,8 +8,8 @@ from user_sim.utils.show_logs import *
8
8
  import logging
9
9
  from argparse import ArgumentParser
10
10
  from dataclasses import dataclass
11
- from user_sim.core.role_structure import RoleData
12
- from user_sim.utils.utilities import read_yaml
11
+ from src.user_sim.core.role_structure import RoleData
12
+ from src.user_sim.utils.utilities import read_yaml
13
13
 
14
14
 
15
15
  logger = logging.getLogger('Info Logger')
@@ -1,15 +1,15 @@
1
- from user_sim.utils.utilities import *
2
- from user_sim.utils.exceptions import *
1
+ from src.user_sim.utils.utilities import *
2
+ from src.user_sim.utils.exceptions import *
3
3
 
4
4
  import numpy as np
5
5
  import logging
6
6
  import random
7
7
 
8
- from user_sim.utils import config
8
+ from src.user_sim.utils import config
9
9
  from allpairspy import AllPairs
10
10
  from langchain_core.prompts import ChatPromptTemplate
11
- from user_sim.utils.utilities import init_model
12
- from user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed, max_output_tokens_allowed
11
+ from src.user_sim.utils.utilities import init_model
12
+ from src.user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed, max_output_tokens_allowed
13
13
 
14
14
  model = ""
15
15
  llm = None
@@ -2,9 +2,9 @@ import re
2
2
  import logging
3
3
  from dateutil import parser
4
4
  from langchain_core.prompts import ChatPromptTemplate
5
- from user_sim.utils.token_cost_calculator import calculate_cost
6
- from user_sim.utils import config
7
- from user_sim.utils.utilities import init_model
5
+ from src.user_sim.utils.token_cost_calculator import calculate_cost
6
+ from src.user_sim.utils import config
7
+ from src.user_sim.utils.utilities import init_model
8
8
  from datetime import date
9
9
 
10
10
 
@@ -1,10 +1,10 @@
1
1
  import ast
2
2
  import pandas as pd
3
- from user_sim.utils.token_cost_calculator import calculate_cost, max_output_tokens_allowed, max_input_tokens_allowed
3
+ from src.user_sim.utils.token_cost_calculator import calculate_cost, max_output_tokens_allowed, max_input_tokens_allowed
4
4
  import re
5
- from user_sim.utils.exceptions import *
6
- from user_sim.utils.utilities import init_model
7
- from user_sim.utils import config
5
+ from src.user_sim.utils.exceptions import *
6
+ from src.user_sim.utils.utilities import init_model
7
+ from src.user_sim.utils import config
8
8
  from langchain_core.prompts import ChatPromptTemplate
9
9
 
10
10
 
@@ -1,15 +1,15 @@
1
1
  import itertools
2
2
  from pydantic import BaseModel, ValidationError, field_validator
3
3
  from typing import List, Union, Dict, Optional
4
- from .interaction_styles import *
5
- from .ask_about import *
6
- from user_sim.utils.exceptions import *
7
- from user_sim.utils.languages import languages
8
- from user_sim.utils import config
4
+ from src.user_sim.core.interaction_styles import *
5
+ from src.user_sim.core.ask_about import *
6
+ from src.user_sim.utils.exceptions import *
7
+ from src.user_sim.utils.languages import languages
8
+ from src.user_sim.utils import config
9
9
  from dataclasses import dataclass
10
- from user_sim.handlers.image_recognition_module import init_vision_module
11
- from .data_gathering import init_data_gathering_module
12
- from .data_extraction import init_data_extraction_module
10
+ from src.user_sim.handlers.image_recognition_module import init_vision_module
11
+ from src.user_sim.core.data_gathering import init_data_gathering_module
12
+ from src.user_sim.core.data_extraction import init_data_extraction_module
13
13
  import logging
14
14
  logger = logging.getLogger('Info Logger')
15
15
 
@@ -281,7 +281,7 @@ class RoleData:
281
281
  custom_personalities_path = config.custom_personalities_folder
282
282
  path_list.append(custom_personalities_path)
283
283
 
284
- default_personalities_path = os.path.join(config.root_path, "config", "personalities")
284
+ default_personalities_path = os.path.join(config.root_path,"src", "config", "personalities")
285
285
  path_list.append(default_personalities_path)
286
286
 
287
287
  try:
@@ -1,11 +1,11 @@
1
- from .data_extraction import DataExtraction
1
+ from src.user_sim.core.data_extraction import DataExtraction
2
2
  from user_sim.utils.utilities import *
3
- from .data_gathering import *
3
+ from src.user_sim.core.data_gathering import *
4
4
  from langchain_core.prompts import PromptTemplate
5
5
  from langchain_core.output_parsers import StrOutputParser
6
6
  from langchain.chat_models import init_chat_model
7
- from user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed, max_output_tokens_allowed, invoke_llm
8
- from user_sim.utils import config
7
+ from src.user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed, max_output_tokens_allowed, invoke_llm
8
+ from src.user_sim.utils import config
9
9
 
10
10
  import logging
11
11
 
@@ -2,8 +2,8 @@ import speech_recognition as sr
2
2
  from pydantic import BaseModel, ValidationError
3
3
  from typing import List, Union, Dict, Optional
4
4
  import time
5
- from user_sim.utils.utilities import read_yaml
6
- from user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed
5
+ from src.user_sim.utils.utilities import read_yaml
6
+ from src.user_sim.utils.token_cost_calculator import calculate_cost, max_input_tokens_allowed
7
7
  from openai import OpenAI
8
8
  import warnings
9
9
  import pygame
@@ -12,9 +12,9 @@ from selenium.webdriver.firefox.service import Service as FirefoxService
12
12
  from webdriver_manager.chrome import ChromeDriverManager
13
13
  from webdriver_manager.microsoft import EdgeChromiumDriverManager
14
14
  from webdriver_manager.firefox import GeckoDriverManager
15
- from user_sim.handlers.image_recognition_module import image_description
16
- from user_sim.utils import config
17
- from user_sim.utils.register_management import save_register, load_register, hash_generate
15
+ from src.user_sim.handlers.image_recognition_module import image_description
16
+ from src.user_sim.utils import config
17
+ from src.user_sim.utils.register_management import save_register, load_register, hash_generate
18
18
 
19
19
 
20
20
  logger = logging.getLogger('Info Logger')
@@ -11,7 +11,7 @@ from user_sim.handlers.image_recognition_module import image_description
11
11
 
12
12
  logger = logging.getLogger('Info Logger')
13
13
  current_script_dir = os.path.dirname(os.path.abspath(__file__))
14
- project_root = os.path.abspath(os.path.join(current_script_dir, "../../.."))
14
+ project_root = os.path.abspath(os.path.join(current_script_dir, "../.."))
15
15
  pdf_register_name = "pdf_register.json"
16
16
 
17
17
 
@@ -3,7 +3,7 @@ import csv
3
3
  import pandas as pd
4
4
  import tiktoken
5
5
 
6
- from user_sim.utils import config
6
+ from src.user_sim.utils import config
7
7
  from datetime import datetime
8
8
  from typing import List, Union
9
9
  from langchain.callbacks.base import BaseCallbackHandler
@@ -7,7 +7,7 @@ import tiktoken
7
7
 
8
8
  from langchain.callbacks.base import BaseCallbackHandler
9
9
  from langchain.schema import LLMResult, ChatGeneration, ChatResult
10
- from user_sim.utils import config
10
+ from src.user_sim.utils import config
11
11
  import logging
12
12
 
13
13
  logger = logging.getLogger('Info Logger')
@@ -4,7 +4,7 @@ import hashlib
4
4
  import logging
5
5
 
6
6
  current_script_dir = os.path.dirname(os.path.abspath(__file__))
7
- project_root = os.path.abspath(os.path.join(current_script_dir, "../../..")) #change
7
+ project_root = os.path.abspath(os.path.join(current_script_dir, "../..")) #change
8
8
  temp_file_dir = os.path.join(project_root, "data/cache")
9
9
 
10
10
  logger = logging.getLogger('Info Logger')
@@ -8,8 +8,8 @@ import logging
8
8
  from io import BytesIO
9
9
  from PIL import Image
10
10
  from langchain_core.output_parsers import StrOutputParser
11
- from user_sim.utils import config
12
- from user_sim.utils.utilities import get_encoding
11
+ from src.user_sim.utils import config
12
+ from src.user_sim.utils.utilities import get_encoding
13
13
 
14
14
  logger = logging.getLogger('Info Logger')
15
15
 
@@ -1,8 +1,8 @@
1
1
  import re
2
2
  from typing import List, Dict
3
- from user_sim.handlers.pdf_parser_module import pdf_processor
4
- from user_sim.handlers.image_recognition_module import image_description
5
- from user_sim.handlers.html_parser_module import webpage_reader
3
+ from src.user_sim.handlers.pdf_parser_module import pdf_processor
4
+ from src.user_sim.handlers.image_recognition_module import image_description
5
+ from src.user_sim.handlers.html_parser_module import webpage_reader
6
6
 
7
7
 
8
8
  def classify_links(message: str) -> Dict[str, List[str]]:
@@ -12,8 +12,8 @@ import platform
12
12
  from datetime import datetime, timedelta, date
13
13
  from sklearn.feature_extraction.text import TfidfVectorizer
14
14
  from sklearn.metrics.pairwise import cosine_similarity
15
- from .exceptions import *
16
- from user_sim.utils import config
15
+ from src.user_sim.utils.exceptions import *
16
+ from src.user_sim.utils import config
17
17
  from langchain.chat_models import init_chat_model
18
18
  from charset_normalizer import detect
19
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: user-simulator
3
- Version: 0.1.0
3
+ Version: 0.1.2
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
@@ -0,0 +1,47 @@
1
+ metamorphic/__init__.py,sha256=BqyThH4lzS95P_YZ27b4K3rf5P9JgwHU9I3r99jSEiQ,135
2
+ metamorphic/results.py,sha256=kKeud02cNpehVmHRAkVO-uf1rd-H7D8cAkSeiKmU8Jg,2040
3
+ metamorphic/rule_utils.py,sha256=frm2IDxHEsYlvFVTQqFDEdfDVejNKtqhxreIOb7_Jrs,17978
4
+ metamorphic/rules.py,sha256=b0W-L1JDqflpuIiPI9OQNqSGunQ3aAeWnXDf9hiAWjU,9504
5
+ metamorphic/tests.py,sha256=aS_kzOXM4T4FomdXbJvPfEwP7ACRPGBgZHaXKcQuN0w,3214
6
+ metamorphic/text_comparison_utils.py,sha256=3SKhaMX1taQKzSNkkDkslabhJChIXFNcfWK6-97yu6Y,998
7
+ technologies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ technologies/chatbot_connectors.py,sha256=sXMyVyHXYfPjIC7H4LlHgtSnhI4oIhkTdvMR2JSn8DI,25398
9
+ technologies/chatbots.py,sha256=apTbCU2paYLgVLAXg2h0HAigazJxIo7L9vKQpcJpqyM,3047
10
+ technologies/taskyto.py,sha256=d-I45hE0xKrFsV6qDkAZ0b98NAnaARAiSM5RE781CVw,5194
11
+ user_sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ user_sim/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ user_sim/cli/gen_user_profile.py,sha256=2CyPOr3CDSVZuJephFc4sOnzS8PyBXz4O_r-iqW-eIU,1466
14
+ user_sim/cli/init_project.py,sha256=t4z4Omfo2_uh-mNjVOpFIxnnlWdtH9VUa3mD3q14v6A,1947
15
+ user_sim/cli/sensei_chat.py,sha256=g3eDgaWaT1qF_J5zS20UeHbFTU2nlv02OGwHMpNgy6k,20539
16
+ user_sim/cli/sensei_check.py,sha256=m4YLKLe1QpNsHXS6YTXE9a82InRpPZg4ztVHQQsh55s,3918
17
+ user_sim/cli/validation_check.py,sha256=XxXwo5-L3P5Q3nT7wZBv-l5rW1jt6cTrhyO7pGV_IUQ,5371
18
+ user_sim/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ user_sim/core/ask_about.py,sha256=E_3iUYBk73VSjgD0LZdN3HtTr0PmS9ek5IH2PeChRT8,28446
20
+ user_sim/core/data_extraction.py,sha256=cDgE5VWko7neR2uP0SSPncwFf3xvro1MYtX3kgF_PVU,9811
21
+ user_sim/core/data_gathering.py,sha256=mLTnBLmBYfHfSSDhhprl60c_w1mwCLTtKJbhpnQoZW8,4943
22
+ user_sim/core/interaction_styles.py,sha256=JmtvpUvVkMis7ON91IQsO8ISkV_Qf417KCMkxeXkdLY,4374
23
+ user_sim/core/role_structure.py,sha256=pl7JNSRNQ9Jl4-gsp2ZiBjjs0VPJqGD9XXiDH-_pxnU,24257
24
+ user_sim/core/user_simulator.py,sha256=zrg5jmVIthlsqgH3kxVr18GUr23T5_xKlm4Z6dFq4ms,11522
25
+ user_sim/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ user_sim/handlers/asr_module.py,sha256=LrOTM21sNCvMk8HHw_4jdRs3u9lQtMNiW8fCvFCxYLk,4146
27
+ user_sim/handlers/html_parser_module.py,sha256=C8w75ZFru9l54JAbwnxXCddI_AsutE2o0l9PBy3v8yc,6828
28
+ user_sim/handlers/image_recognition_module.py,sha256=68XtRRtymr_w4MYBJW1LX3ZTBAEQPpEH1vtj5oL5rxo,4572
29
+ user_sim/handlers/pdf_parser_module.py,sha256=2Fiu37wmpXYt--Cul9oSeoHG47feJyRpfgb6aiUdxQo,4011
30
+ user_sim/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ user_sim/utils/config.py,sha256=MWS1YiE9IV8qcFLArku_r5jdcEaF9-eQumYMnensNH0,1336
32
+ user_sim/utils/cost_tracker.py,sha256=0iV2uDs0O95iRAPkXsrFQheItNQmZ92txy5HI-q0hCs,5210
33
+ user_sim/utils/cost_tracker_v2.py,sha256=A-nfQpbrc0Bx_MsPBXUmXMG18FYWK5FtTkOJpnNErus,6422
34
+ user_sim/utils/errors.py,sha256=hY284HuSGiZNAzL5rfgbjy7wQdaIlkYD6xFKvAr0roU,438
35
+ user_sim/utils/exceptions.py,sha256=Y-vR9j1C3EUYhzqW2L4f6S7sVEIMCNZDjsGxSprpPIM,787
36
+ user_sim/utils/languages.py,sha256=TunF7POkW9x2Y-7KOH0M15I2tArad_CnORrWh5N51XA,2110
37
+ user_sim/utils/register_management.py,sha256=ZUmnPZLzNZQs17GezD5iM9hxMHNW1rZyeBzB1pQoniU,2097
38
+ user_sim/utils/show_logs.py,sha256=pqwksfYYFZEu3pb-4KJrV4OEaiAUrfc5-G1qz8akJmo,1754
39
+ user_sim/utils/token_cost_calculator.py,sha256=6jf8jqppq-Ao_pJJEdqvvUmI9aeDY-dYqqTHomqWEgc,12548
40
+ user_sim/utils/url_management.py,sha256=TnV4Qv09SVmjXrEa2sqRCFiqr3tyzMkqAhs1XpR7U4I,2010
41
+ user_sim/utils/utilities.py,sha256=IC6KlyZeRJOElOl-QfZLo1VPkWW6l_qjRHCazw4XZ-g,19774
42
+ user_simulator-0.1.2.dist-info/licenses/LICENSE.txt,sha256=Qv2ilebwoUtMJnRsZwRy729xS5JZQzLauJ0tQzkAkTA,1088
43
+ user_simulator-0.1.2.dist-info/METADATA,sha256=ZASmEgeyZYebBDAQ5SWmyTVLbe6CQXInbgJEPU2zFVU,31705
44
+ user_simulator-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
45
+ user_simulator-0.1.2.dist-info/entry_points.txt,sha256=Kib_IjI6nHiTeev6mZZvTkO1uMoFBGVVK_2DnOWzJ9c,303
46
+ user_simulator-0.1.2.dist-info/top_level.txt,sha256=IGlrGt_QHrM2G3Mlo76gMp8ArUR_F9k4RrzJd8YHpE4,34
47
+ user_simulator-0.1.2.dist-info/RECORD,,
@@ -0,0 +1,6 @@
1
+ [console_scripts]
2
+ sensei-chat = src.user_sim.cli.sensei_chat:main
3
+ sensei-check = src.user_sim.cli.sensei_check:main
4
+ sensei-gen-user-profile = src.user_sim.cli.gen_user_profile:main
5
+ sensei-init-project = src.user_sim.cli.init_project:main
6
+ sensei-validation-check = src.user_sim.cli.validation_check:main
@@ -0,0 +1,3 @@
1
+ metamorphic
2
+ technologies
3
+ user_sim
@@ -1,37 +0,0 @@
1
- user_sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- user_sim/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- user_sim/cli/gen_user_profile.py,sha256=PSm9wi2OhflLWHM1TNxL5W2xYFR82z2-24NhOQRye2M,1462
4
- user_sim/cli/init_project.py,sha256=t4z4Omfo2_uh-mNjVOpFIxnnlWdtH9VUa3mD3q14v6A,1947
5
- user_sim/cli/sensei_chat.py,sha256=-mJPN7L2G0jAMOl58JVkRCWGdARw9AuH_PrThib9jXY,20501
6
- user_sim/cli/sensei_check.py,sha256=l9k8fQb8d0Rg8Ss8CdwqOSIMHW0L_WXqbL8PlND4fto,3898
7
- user_sim/cli/validation_check.py,sha256=VUJlePbTfBJOgOx2sDamKD4cplvUlS7VKqr-v1rvFPE,5363
8
- user_sim/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- user_sim/core/ask_about.py,sha256=k4mJFoMle952QBjo_IlykyAY0zekkrxxiz7ScgDeaHk,28426
10
- user_sim/core/data_extraction.py,sha256=DNMO6ZV6x_EK4_4fqnAyIvYUDKPPyIV6Ozd5KLRc_Lw,9799
11
- user_sim/core/data_gathering.py,sha256=DX-CmPBo7cJ-sRlWt03CkbhyUEfbhYx79ALvZ2k_FP8,4927
12
- user_sim/core/interaction_styles.py,sha256=JmtvpUvVkMis7ON91IQsO8ISkV_Qf417KCMkxeXkdLY,4374
13
- user_sim/core/role_structure.py,sha256=A_gH77UTga0w4ON6gIk-rVlNWuzOSP2AvCF4HqNQDAI,24167
14
- user_sim/core/user_simulator.py,sha256=1Wm6JVN5qZaQQYeb_m1-Kmm-cZQRwxdpCxG4W7oC_nk,11480
15
- user_sim/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- user_sim/handlers/asr_module.py,sha256=vvx_G8IaOvOZRqGOIGIPJ5EJoN6yWp7weU3cojBe_-8,4138
17
- user_sim/handlers/html_parser_module.py,sha256=JS0J-RvAQrcX3JIuLdKFwKNDetaBPQMQLU7m6JftqeY,6816
18
- user_sim/handlers/image_recognition_module.py,sha256=68XtRRtymr_w4MYBJW1LX3ZTBAEQPpEH1vtj5oL5rxo,4572
19
- user_sim/handlers/pdf_parser_module.py,sha256=PZkco5E7aKDumP_9fMUiMQAb9lpvWm3dRTBZLDLuDSg,4014
20
- user_sim/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- user_sim/utils/config.py,sha256=MWS1YiE9IV8qcFLArku_r5jdcEaF9-eQumYMnensNH0,1336
22
- user_sim/utils/cost_tracker.py,sha256=DIP95SYeIsRl6Q4LboiNYr812c2xSEquHmbwqmWPlcs,5206
23
- user_sim/utils/cost_tracker_v2.py,sha256=dNcKxMgjGIq07cY4805k6qtiko6Tv-c_NpvhGK9WBGg,6418
24
- user_sim/utils/errors.py,sha256=hY284HuSGiZNAzL5rfgbjy7wQdaIlkYD6xFKvAr0roU,438
25
- user_sim/utils/exceptions.py,sha256=Y-vR9j1C3EUYhzqW2L4f6S7sVEIMCNZDjsGxSprpPIM,787
26
- user_sim/utils/languages.py,sha256=TunF7POkW9x2Y-7KOH0M15I2tArad_CnORrWh5N51XA,2110
27
- user_sim/utils/register_management.py,sha256=FfQx0vmHQnvbUUP0ZglyaMgqORD-tyIoy3RL-TUr4fA,2100
28
- user_sim/utils/show_logs.py,sha256=pqwksfYYFZEu3pb-4KJrV4OEaiAUrfc5-G1qz8akJmo,1754
29
- user_sim/utils/token_cost_calculator.py,sha256=4vFUh6OHgoZJcfxaRGARFUbyLkXPYUug6YJCM7luw6s,12540
30
- user_sim/utils/url_management.py,sha256=MeUoT-O7XCPWJJ-1r3T_n1zFjj3NyeJXRt_b9Nkpzdw,1998
31
- user_sim/utils/utilities.py,sha256=vp0e_lFHXv5aDc3RXTpAqPx_50e7HaK11kv_mNGatIQ,19752
32
- user_simulator-0.1.0.dist-info/licenses/LICENSE.txt,sha256=Qv2ilebwoUtMJnRsZwRy729xS5JZQzLauJ0tQzkAkTA,1088
33
- user_simulator-0.1.0.dist-info/METADATA,sha256=izierChCJbNk9MP1PD3zajp3z1KGkwga1cw83H9_0jQ,31705
34
- user_simulator-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
- user_simulator-0.1.0.dist-info/entry_points.txt,sha256=kfr0rD6mglTGGzYRfUwMTGfTtTOBnLjv3R-Uy61vvDQ,283
36
- user_simulator-0.1.0.dist-info/top_level.txt,sha256=434uVox8_5Xx3aB1st8msyNkMye78fRH0UF2_-8ZBVA,9
37
- user_simulator-0.1.0.dist-info/RECORD,,
@@ -1,6 +0,0 @@
1
- [console_scripts]
2
- sensei-chat = user_sim.cli.sensei_chat:main
3
- sensei-check = user_sim.cli.sensei_check:main
4
- sensei-gen-user-profile = user_sim.cli.gen_user_profile:main
5
- sensei-init-project = user_sim.cli.init_project:main
6
- sensei-validation-check = user_sim.cli.validation_check:main
@@ -1 +0,0 @@
1
- user_sim