sonika-langchain-bot 0.0.6__tar.gz → 0.0.7__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.
Files changed (19) hide show
  1. {sonika_langchain_bot-0.0.6/src/sonika_langchain_bot.egg-info → sonika_langchain_bot-0.0.7}/PKG-INFO +17 -4
  2. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/README.md +16 -3
  3. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/setup.py +1 -1
  4. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_bot_agent_bdi.py +38 -76
  5. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_clasificator.py +4 -15
  6. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_class.py +4 -1
  7. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_models.py +14 -11
  8. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7/src/sonika_langchain_bot.egg-info}/PKG-INFO +17 -4
  9. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/test/test.py +14 -10
  10. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/LICENSE +0 -0
  11. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/setup.cfg +0 -0
  12. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/__init__.py +0 -0
  13. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_bdi.py +0 -0
  14. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_files.py +0 -0
  15. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot/langchain_tools.py +0 -0
  16. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot.egg-info/SOURCES.txt +0 -0
  17. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot.egg-info/dependency_links.txt +0 -0
  18. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot.egg-info/requires.txt +0 -0
  19. {sonika_langchain_bot-0.0.6 → sonika_langchain_bot-0.0.7}/src/sonika_langchain_bot.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sonika-langchain-bot
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Agente langchain con LLM
5
5
  Author: Erley Blanco Carvajal
6
6
  License: MIT License
@@ -69,7 +69,7 @@ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
69
69
  from langchain_openai import OpenAIEmbeddings
70
70
 
71
71
  # Inicializar el modelo de lenguaje
72
- language_model = OpenAILanguageModel(api_key, model_name='gpt-4-mini-2024-07-18', temperature=1)
72
+ language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini', temperature=1)
73
73
  embeddings = OpenAIEmbeddings(api_key=api_key)
74
74
 
75
75
  # Configurar herramientas propias o de terceros
@@ -91,6 +91,19 @@ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
91
91
 
92
92
  # Obtener respuesta
93
93
  response = bot.get_response("Hola como te llamas?")
94
+
95
+ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
96
+
97
+ user_message = 'Hola como me llamo?'
98
+
99
+ #Cargas la conversacion previa con el bot
100
+ bot.load_conversation_history([Message(content="Mi nombre es Erley", is_bot=False)])
101
+ # Obtener la respuesta del bot
102
+ response_model: ResponseModel = bot.get_response(user_message)
103
+ bot_response = response_model
104
+
105
+ print(bot_response)
106
+
94
107
  ```
95
108
 
96
109
  ### Ejemplo de Clasificación de Texto
@@ -113,8 +126,8 @@ class Classification(BaseModel):
113
126
  )
114
127
 
115
128
  # Inicializar clasificador
116
- model = OpenAIModel(api_key=api_key, validation_class=Classification)
117
- classifier = TextClassifier(api_key=api_key, llm=model, validation_class=Classification)
129
+ model = OpenAILanguageModel(api_key=api_key)
130
+ classifier = TextClassifier(llm=model, validation_class=Classification)
118
131
 
119
132
  # Clasificar texto
120
133
  result = classifier.classify("Tu texto aquí")
@@ -37,7 +37,7 @@ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
37
37
  from langchain_openai import OpenAIEmbeddings
38
38
 
39
39
  # Inicializar el modelo de lenguaje
40
- language_model = OpenAILanguageModel(api_key, model_name='gpt-4-mini-2024-07-18', temperature=1)
40
+ language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini', temperature=1)
41
41
  embeddings = OpenAIEmbeddings(api_key=api_key)
42
42
 
43
43
  # Configurar herramientas propias o de terceros
@@ -59,6 +59,19 @@ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
59
59
 
60
60
  # Obtener respuesta
61
61
  response = bot.get_response("Hola como te llamas?")
62
+
63
+ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
64
+
65
+ user_message = 'Hola como me llamo?'
66
+
67
+ #Cargas la conversacion previa con el bot
68
+ bot.load_conversation_history([Message(content="Mi nombre es Erley", is_bot=False)])
69
+ # Obtener la respuesta del bot
70
+ response_model: ResponseModel = bot.get_response(user_message)
71
+ bot_response = response_model
72
+
73
+ print(bot_response)
74
+
62
75
  ```
63
76
 
64
77
  ### Ejemplo de Clasificación de Texto
@@ -81,8 +94,8 @@ class Classification(BaseModel):
81
94
  )
82
95
 
83
96
  # Inicializar clasificador
84
- model = OpenAIModel(api_key=api_key, validation_class=Classification)
85
- classifier = TextClassifier(api_key=api_key, llm=model, validation_class=Classification)
97
+ model = OpenAILanguageModel(api_key=api_key)
98
+ classifier = TextClassifier(llm=model, validation_class=Classification)
86
99
 
87
100
  # Clasificar texto
88
101
  result = classifier.classify("Tu texto aquí")
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="sonika-langchain-bot",
5
- version="0.0.6",
5
+ version="0.0.7",
6
6
  description="Agente langchain con LLM",
7
7
  author="Erley Blanco Carvajal",
8
8
  license="MIT License",
@@ -1,23 +1,16 @@
1
1
  from typing import List
2
- import tiktoken
3
2
  from langchain.memory import ConversationBufferMemory
4
3
  from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder, SystemMessagePromptTemplate, HumanMessagePromptTemplate
5
4
  from langchain.schema import AIMessage, HumanMessage
6
5
  from langchain.text_splitter import CharacterTextSplitter
7
6
  from langchain_community.vectorstores import FAISS
8
- from langchain.chains import LLMChain
9
7
  from sonika_langchain_bot.langchain_bdi import Belief, BotBeliefSystem
10
8
  from sonika_langchain_bot.langchain_class import FileProcessorInterface, IEmbeddings, ILanguageModel, Message, ResponseModel
11
- from langchain.tools import Tool
12
9
  from langgraph.checkpoint.memory import MemorySaver
13
10
  from langgraph.prebuilt import create_react_agent
14
11
  from langchain_community.tools import BaseTool
15
- import inspect
16
12
  import re
17
13
 
18
-
19
-
20
-
21
14
  class LangChainBot:
22
15
  """
23
16
  Implementación principal del bot conversacional con capacidades de procesamiento de archivos,
@@ -27,11 +20,11 @@ class LangChainBot:
27
20
  def __init__(self, language_model: ILanguageModel, embeddings: IEmbeddings, beliefs: List[Belief], tools: List[BaseTool]):
28
21
  """
29
22
  Inicializa el bot con el modelo de lenguaje, embeddings y herramientas necesarias.
30
-
23
+
31
24
  Args:
32
25
  language_model (ILanguageModel): Modelo de lenguaje a utilizar
33
26
  embeddings (IEmbeddings): Modelo de embeddings para procesamiento de texto
34
- instructions (List[str]): Lista de instrucciones para el bot
27
+ beliefs (List[Belief]): Lista de creencias iniciales
35
28
  tools (List[BaseTool]): Lista de herramientas disponibles
36
29
  """
37
30
  self.language_model = language_model
@@ -41,34 +34,11 @@ class LangChainBot:
41
34
  self.vector_store = None
42
35
  self.tools = tools
43
36
  self.beliefs = beliefs
44
- self.belief_system = BotBeliefSystem('Hal9000', '1.0.0',beliefs_init=beliefs,tools=tools )
45
- self.conversation = self.create_conversation_chain()
46
- self.agent_executor = self.create_agent_executor()
47
-
48
- def generate_prompt_tools(self, tools: List[BaseTool]):
49
- """
50
- Carga y procesa las herramientas disponibles para el bot.
51
-
52
- Args:
53
- tools (List[BaseTool]): Lista de herramientas a cargar
54
- """
55
- text_tools = ""
56
- for tool in tools:
57
- tool_name = tool.name
58
- tool_description = tool.description
59
- text_tools += f"Tool Name: {tool_name}\nDescription: {tool_description}\n"
60
- run_method = getattr(tool, '_run', None)
61
-
62
- if run_method:
63
- params = inspect.signature(run_method)
64
- text_tools += f"Parameters: {params}\n"
65
- else:
66
- text_tools += "No _run method found.\n"
67
- text_tools += "\n---\n"
68
-
69
- return text_tools
37
+ self.belief_system = BotBeliefSystem('Hal9000', '1.0.0', beliefs_init=beliefs, tools=tools)
38
+ self.conversation = self._create_conversation_chain()
39
+ self.agent_executor = self._create_agent_executor()
70
40
 
71
- def create_conversation_chain(self):
41
+ def _create_conversation_chain(self):
72
42
  """
73
43
  Crea la cadena de conversación con el prompt template y la memoria.
74
44
  Ahora incluye el contexto del sistema de creencias.
@@ -76,71 +46,72 @@ class LangChainBot:
76
46
  beliefs_context = self.belief_system.generate_prompt_context()
77
47
  full_system_prompt = f"{beliefs_context}\n\n"
78
48
 
79
- print(full_system_prompt)
80
-
81
49
  prompt = ChatPromptTemplate.from_messages([
82
50
  SystemMessagePromptTemplate.from_template(full_system_prompt),
83
51
  MessagesPlaceholder(variable_name="history"),
84
52
  HumanMessagePromptTemplate.from_template("{input}")
85
53
  ])
86
- return LLMChain(llm=self.language_model.model, prompt=prompt, memory=self.memory)
87
54
 
88
- def create_agent_executor(self):
55
+ # Usando RunnableSequence para reemplazar LLMChain
56
+ return prompt | self.language_model.model
57
+
58
+ def _create_agent_executor(self):
89
59
  """
90
60
  Crea el ejecutor del agente con las herramientas configuradas.
91
-
61
+
92
62
  Returns:
93
63
  Agent: Agente configurado con las herramientas
94
64
  """
95
65
  return create_react_agent(self.language_model.model, self.tools, checkpointer=self.memory_agent)
96
-
97
- def getInstruccionTool(self, bot_response):
66
+
67
+ def _getInstruccionTool(self, bot_response):
98
68
  """
99
69
  Extrae las instrucciones para herramientas del texto de respuesta del bot.
100
-
70
+
101
71
  Args:
102
72
  bot_response (str): Respuesta del bot a analizar
103
-
73
+
104
74
  Returns:
105
75
  str: Instrucción extraída o cadena vacía si no se encuentra
106
76
  """
107
77
  patron = r'\*\*\*(.*?)\*\*\*'
108
78
  coincidencia = re.search(patron, bot_response)
109
- if coincidencia:
110
- return coincidencia.group(1).strip()
111
- else:
112
- return ''
79
+ return coincidencia.group(1).strip() if coincidencia else ''
113
80
 
114
81
  def get_response(self, user_input: str) -> ResponseModel:
115
82
  """
116
83
  Genera una respuesta para la entrada del usuario, procesando el contexto y ejecutando herramientas si es necesario.
117
-
84
+
118
85
  Args:
119
86
  user_input (str): Entrada del usuario
120
-
87
+
121
88
  Returns:
122
89
  ResponseModel: Modelo de respuesta con tokens y texto
123
90
  """
124
91
  context = self._get_context(user_input)
125
92
  augmented_input = f"User question: {user_input}"
126
- if(context):
93
+ if context:
127
94
  augmented_input = f"Context from attached files:\n{context}\n\nUser question: {user_input}"
95
+
96
+ bot_response = self.conversation.invoke({"input": augmented_input, "history": self.memory.chat_memory.messages})
97
+
98
+ token_usage= bot_response.response_metadata['token_usage']
99
+ bot_response = bot_response.content
128
100
 
129
- bot_response = self.conversation.predict(input=augmented_input)
130
- instruction_tool = self.getInstruccionTool(bot_response)
101
+ instruction_tool = self._getInstruccionTool(bot_response)
131
102
 
132
103
  if instruction_tool:
133
104
  messages = [HumanMessage(content=instruction_tool)]
134
105
  thread_id = "abc123"
135
106
  config = {"configurable": {"thread_id": thread_id}}
136
-
107
+
137
108
  result_stream = self.agent_executor.stream(
138
109
  {"messages": messages}, config
139
110
  )
140
111
 
141
112
  tool_response = ""
142
113
  agent_response = ""
143
-
114
+
144
115
  for response in result_stream:
145
116
  if 'tools' in response:
146
117
  for message in response['tools']['messages']:
@@ -148,23 +119,23 @@ class LangChainBot:
148
119
  if 'agent' in response:
149
120
  for message in response['agent']['messages']:
150
121
  agent_response = message.content
151
-
122
+
152
123
  bot_response = agent_response if agent_response else tool_response
153
-
154
- user_tokens = self.language_model.count_tokens(augmented_input)
155
- bot_tokens = self.language_model.count_tokens(bot_response)
156
124
 
157
- self.save_messages(user_input,bot_response)
125
+ user_tokens = token_usage['prompt_tokens']
126
+ bot_tokens = token_usage['completion_tokens']
127
+
128
+ self.save_messages(user_input, bot_response)
158
129
 
159
130
  return ResponseModel(user_tokens=user_tokens, bot_tokens=bot_tokens, response=bot_response)
160
131
 
161
132
  def _get_context(self, query: str) -> str:
162
133
  """
163
134
  Obtiene el contexto relevante para una consulta del almacén de vectores.
164
-
135
+
165
136
  Args:
166
137
  query (str): Consulta para buscar contexto
167
-
138
+
168
139
  Returns:
169
140
  str: Contexto encontrado o cadena vacía
170
141
  """
@@ -180,7 +151,7 @@ class LangChainBot:
180
151
  self.memory.clear()
181
152
  self.vector_store = None
182
153
 
183
- def load_conversation_history(self, messages: list[Message]):
154
+ def load_conversation_history(self, messages: List[Message]):
184
155
  """
185
156
  Carga el historial de conversación previo usando la estructura de mensajes simplificada.
186
157
 
@@ -196,7 +167,7 @@ class LangChainBot:
196
167
  def save_messages(self, user_message: str, bot_response: str):
197
168
  """
198
169
  Guarda los mensajes en la memoria de conversación.
199
-
170
+
200
171
  Args:
201
172
  user_message (str): Mensaje del usuario
202
173
  bot_response (str): Respuesta del bot
@@ -207,24 +178,15 @@ class LangChainBot:
207
178
  def process_file(self, file: FileProcessorInterface):
208
179
  """
209
180
  Procesa un archivo y lo añade al almacén de vectores.
210
-
181
+
211
182
  Args:
212
183
  file (FileProcessorInterface): Archivo a procesar
213
184
  """
214
185
  document = file.getText()
215
186
  text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
216
187
  texts = text_splitter.split_documents(document)
217
-
188
+
218
189
  if self.vector_store is None:
219
190
  self.vector_store = FAISS.from_texts([doc.page_content for doc in texts], self.embeddings)
220
191
  else:
221
192
  self.vector_store.add_texts([doc.page_content for doc in texts])
222
-
223
- def get_total_tokens(self):
224
- """
225
- Obtiene el total de tokens utilizados en la conversación.
226
-
227
- Returns:
228
- int: Total de tokens
229
- """
230
- return self.language_model.count_tokens(self.memory.chat_memory.get_messages())
@@ -1,25 +1,14 @@
1
1
  from pydantic import BaseModel
2
- from langchain_openai import ChatOpenAI
3
- from langchain_core.messages import HumanMessage
4
2
  from typing import Dict, Any, Type
5
3
  from sonika_langchain_bot.langchain_class import ILanguageModel
6
4
 
7
-
8
- class OpenAIModel(ILanguageModel):
9
- def __init__(self, api_key: str, model_name: str = "gpt-4o-mini", temperature: float = 0.7, validation_class: Type[BaseModel] = None,):
10
- self.model = ChatOpenAI(api_key=api_key, temperature=temperature, model=model_name).with_structured_output(validation_class)
11
-
12
- def get_response(self, prompt: str) -> str:
13
- message = HumanMessage(content=prompt)
14
- # Invocar el modelo con el mensaje creado
15
- response = self.model.invoke([message])
16
- return response
17
-
18
5
  # Clase para realizar la clasificación de texto
19
6
  class TextClassifier:
20
- def __init__(self, api_key: str, validation_class: Type[BaseModel], llm: ILanguageModel, temperature: float = 0):
7
+ def __init__(self, validation_class: Type[BaseModel], llm: ILanguageModel):
21
8
  self.llm =llm
22
9
  self.validation_class = validation_class
10
+ #configuramos el modelo para que tenga una estructura de salida
11
+ self.llm.model = self.llm.model.with_structured_output(validation_class)
23
12
 
24
13
  def classify(self, text: str) -> Dict[str, Any]:
25
14
  # Crear el template del prompt
@@ -30,7 +19,7 @@ class TextClassifier:
30
19
 
31
20
  Only extract the properties mentioned in the validation class.
32
21
  """
33
- response = self.llm.get_response(prompt=prompt)
22
+ response = self.llm.invoke(prompt=prompt)
34
23
 
35
24
  # Asegurarse de que el `response` es de la clase de validación proporcionada
36
25
  if isinstance(response, self.validation_class):
@@ -7,6 +7,9 @@ class ResponseModel():
7
7
  self.user_tokens = user_tokens
8
8
  self.bot_tokens = bot_tokens
9
9
  self.response = response
10
+ def __repr__(self):
11
+ return (f"ResponseModel(user_tokens={self.user_tokens}, "
12
+ f"bot_tokens={self.bot_tokens}, response={self.response})")
10
13
 
11
14
  # Definir la interfaz para procesar archivos
12
15
  class FileProcessorInterface(ABC):
@@ -16,7 +19,7 @@ class FileProcessorInterface(ABC):
16
19
 
17
20
  class ILanguageModel(ABC):
18
21
  @abstractmethod
19
- def get_response(self, prompt: str) -> str:
22
+ def predict(self, prompt: str) -> str:
20
23
  pass
21
24
 
22
25
  class IEmbeddings(ABC):
@@ -1,6 +1,8 @@
1
1
  from langchain_openai import ChatOpenAI
2
- import tiktoken
3
2
  from sonika_langchain_bot.langchain_class import ILanguageModel
3
+ from langchain_core.messages import HumanMessage
4
+ from typing import Type
5
+ from pydantic import BaseModel
4
6
 
5
7
 
6
8
  class OpenAILanguageModel(ILanguageModel):
@@ -19,9 +21,8 @@ class OpenAILanguageModel(ILanguageModel):
19
21
  temperature (float): Temperatura para la generación de respuestas
20
22
  """
21
23
  self.model = ChatOpenAI(temperature=temperature, model_name=model_name, api_key=api_key)
22
- self.tokenizer = tiktoken.encoding_for_model(model_name)
23
24
 
24
- def get_response(self, prompt: str) -> str:
25
+ def predict(self, prompt: str) -> str:
25
26
  """
26
27
  Genera una respuesta basada en el prompt proporcionado.
27
28
 
@@ -32,15 +33,17 @@ class OpenAILanguageModel(ILanguageModel):
32
33
  str: Respuesta generada por el modelo
33
34
  """
34
35
  return self.model.predict(prompt)
35
-
36
- def count_tokens(self, text: str) -> int:
36
+
37
+ def invoke(self, prompt: str) -> str:
37
38
  """
38
- Cuenta el número de tokens en un texto dado.
39
-
39
+ Invokes the language model with a given prompt and returns the generated response.
40
+
40
41
  Args:
41
- text (str): Texto para contar tokens
42
-
42
+ prompt (str): The input text to be processed by the language model.
43
+
43
44
  Returns:
44
- int: Número de tokens en el texto
45
+ str: The response generated by the language model based on the provided prompt.
45
46
  """
46
- return len(self.tokenizer.encode(text))
47
+ message = HumanMessage(content=prompt)
48
+ response = self.model.invoke([message])
49
+ return response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sonika-langchain-bot
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Agente langchain con LLM
5
5
  Author: Erley Blanco Carvajal
6
6
  License: MIT License
@@ -69,7 +69,7 @@ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
69
69
  from langchain_openai import OpenAIEmbeddings
70
70
 
71
71
  # Inicializar el modelo de lenguaje
72
- language_model = OpenAILanguageModel(api_key, model_name='gpt-4-mini-2024-07-18', temperature=1)
72
+ language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini', temperature=1)
73
73
  embeddings = OpenAIEmbeddings(api_key=api_key)
74
74
 
75
75
  # Configurar herramientas propias o de terceros
@@ -91,6 +91,19 @@ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
91
91
 
92
92
  # Obtener respuesta
93
93
  response = bot.get_response("Hola como te llamas?")
94
+
95
+ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
96
+
97
+ user_message = 'Hola como me llamo?'
98
+
99
+ #Cargas la conversacion previa con el bot
100
+ bot.load_conversation_history([Message(content="Mi nombre es Erley", is_bot=False)])
101
+ # Obtener la respuesta del bot
102
+ response_model: ResponseModel = bot.get_response(user_message)
103
+ bot_response = response_model
104
+
105
+ print(bot_response)
106
+
94
107
  ```
95
108
 
96
109
  ### Ejemplo de Clasificación de Texto
@@ -113,8 +126,8 @@ class Classification(BaseModel):
113
126
  )
114
127
 
115
128
  # Inicializar clasificador
116
- model = OpenAIModel(api_key=api_key, validation_class=Classification)
117
- classifier = TextClassifier(api_key=api_key, llm=model, validation_class=Classification)
129
+ model = OpenAILanguageModel(api_key=api_key)
130
+ classifier = TextClassifier(llm=model, validation_class=Classification)
118
131
 
119
132
  # Clasificar texto
120
133
  result = classifier.classify("Tu texto aquí")
@@ -5,12 +5,11 @@ from langchain_openai import OpenAIEmbeddings
5
5
  from sonika_langchain_bot.langchain_tools import EmailTool
6
6
  from sonika_langchain_bot.langchain_bdi import Belief, BeliefType
7
7
  from sonika_langchain_bot.langchain_bot_agent_bdi import LangChainBot
8
- from sonika_langchain_bot.langchain_clasificator import OpenAIModel, TextClassifier
9
- from sonika_langchain_bot.langchain_class import ResponseModel
8
+ from sonika_langchain_bot.langchain_clasificator import TextClassifier
9
+ from sonika_langchain_bot.langchain_class import Message, ResponseModel
10
10
  from sonika_langchain_bot.langchain_models import OpenAILanguageModel
11
11
  from langchain_community.tools.tavily_search import TavilySearchResults
12
12
  from pydantic import BaseModel, Field
13
- from sonika_langchain_bot.langchain_models import OpenAIModel
14
13
 
15
14
 
16
15
  env_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
@@ -32,13 +31,18 @@ def bot_bdi():
32
31
  beliefs = [Belief(content="Eres un asistente de chat", type=BeliefType.PERSONALITY, confidence=1, source='personality')]
33
32
  bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
34
33
 
35
- user_message = 'Hola como te llamas?'
34
+ user_message = 'Hola como me llamo?'
35
+
36
+ bot.load_conversation_history([Message(content="Mi nombre es Erley", is_bot=False)])
36
37
  # Obtener la respuesta del bot
37
38
  response_model: ResponseModel = bot.get_response(user_message)
38
- bot_response = response_model.response
39
+ bot_response = response_model
39
40
 
40
41
  print(bot_response)
41
42
 
43
+
44
+
45
+
42
46
  # Definir la clase 'Classification' con Pydantic para validar la estructura
43
47
  class Classification(BaseModel):
44
48
  intention: str = Field()
@@ -54,10 +58,10 @@ class Classification(BaseModel):
54
58
 
55
59
  def clasification():
56
60
  api_key = os.getenv("OPENAI_API_KEY")
57
- model = OpenAIModel(api_key=api_key,validation_class=Classification)
58
- classifier = TextClassifier(api_key=api_key,llm=model, validation_class=Classification)
59
- result = classifier.classify("venga, quiero que vengas a mi casa y nos tomamos un vino tu y yo solos, en mi cuarto sin ropa, que dices")
61
+ model = OpenAILanguageModel(api_key=api_key)
62
+ classifier = TextClassifier(llm=model, validation_class=Classification)
63
+ result = classifier.classify("how are you?")
60
64
  print(result)
61
65
 
62
- bot_bdi()
63
- #clasification()
66
+ #bot_bdi()
67
+ clasification()