sonika-langchain-bot 0.0.7__tar.gz → 0.0.9__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.7/src/sonika_langchain_bot.egg-info → sonika_langchain_bot-0.0.9}/PKG-INFO +10 -3
  2. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/README.md +9 -2
  3. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/setup.py +1 -1
  4. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_bot_agent_bdi.py +21 -0
  5. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_models.py +16 -3
  6. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9/src/sonika_langchain_bot.egg-info}/PKG-INFO +10 -3
  7. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/test/test.py +24 -2
  8. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/LICENSE +0 -0
  9. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/setup.cfg +0 -0
  10. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/__init__.py +0 -0
  11. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_bdi.py +0 -0
  12. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_clasificator.py +0 -0
  13. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_class.py +0 -0
  14. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_files.py +0 -0
  15. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot/langchain_tools.py +0 -0
  16. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot.egg-info/SOURCES.txt +0 -0
  17. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot.egg-info/dependency_links.txt +0 -0
  18. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/src/sonika_langchain_bot.egg-info/requires.txt +0 -0
  19. {sonika_langchain_bot-0.0.7 → sonika_langchain_bot-0.0.9}/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.7
3
+ Version: 0.0.9
4
4
  Summary: Agente langchain con LLM
5
5
  Author: Erley Blanco Carvajal
6
6
  License: MIT License
@@ -30,7 +30,8 @@ Provides-Extra: dev
30
30
  Requires-Dist: sphinx<9.0.0,>=8.1.3; extra == "dev"
31
31
  Requires-Dist: sphinx-rtd-theme<4.0.0,>=3.0.1; extra == "dev"
32
32
 
33
- # Sonika LangChain Bot
33
+ # Sonika LangChain Bot <a href="https://pepy.tech/projects/sonika-langchain-bot"><img src="https://static.pepy.tech/badge/sonika-langchain-bot" alt="PyPI Downloads"></a>
34
+
34
35
 
35
36
  Una librería Python que implementa un bot conversacional utilizando LangChain con capacidades BDI (Belief-Desire-Intention) y clasificación de texto.
36
37
 
@@ -104,12 +105,17 @@ bot_response = response_model
104
105
 
105
106
  print(bot_response)
106
107
 
108
+ #o por streaming
109
+ for chunk in bot.get_response_stream(user_message):
110
+ print(chunk)
111
+
107
112
  ```
108
113
 
109
114
  ### Ejemplo de Clasificación de Texto
110
115
 
111
116
  ```python
112
- from sonika_langchain_bot.langchain_clasificator import OpenAIModel, TextClassifier
117
+ from sonika_langchain_bot.langchain_clasificator import TextClassifier
118
+ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
113
119
  from pydantic import BaseModel, Field
114
120
 
115
121
  # Definir estructura de clasificación
@@ -136,3 +142,4 @@ result = classifier.classify("Tu texto aquí")
136
142
  ## Contribución
137
143
 
138
144
  Las contribuciones son bienvenidas. Por favor, abre un issue para discutir los cambios importantes que te gustaría hacer.
145
+
@@ -1,4 +1,5 @@
1
- # Sonika LangChain Bot
1
+ # Sonika LangChain Bot <a href="https://pepy.tech/projects/sonika-langchain-bot"><img src="https://static.pepy.tech/badge/sonika-langchain-bot" alt="PyPI Downloads"></a>
2
+
2
3
 
3
4
  Una librería Python que implementa un bot conversacional utilizando LangChain con capacidades BDI (Belief-Desire-Intention) y clasificación de texto.
4
5
 
@@ -72,12 +73,17 @@ bot_response = response_model
72
73
 
73
74
  print(bot_response)
74
75
 
76
+ #o por streaming
77
+ for chunk in bot.get_response_stream(user_message):
78
+ print(chunk)
79
+
75
80
  ```
76
81
 
77
82
  ### Ejemplo de Clasificación de Texto
78
83
 
79
84
  ```python
80
- from sonika_langchain_bot.langchain_clasificator import OpenAIModel, TextClassifier
85
+ from sonika_langchain_bot.langchain_clasificator import TextClassifier
86
+ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
81
87
  from pydantic import BaseModel, Field
82
88
 
83
89
  # Definir estructura de clasificación
@@ -104,3 +110,4 @@ result = classifier.classify("Tu texto aquí")
104
110
  ## Contribución
105
111
 
106
112
  Las contribuciones son bienvenidas. Por favor, abre un issue para discutir los cambios importantes que te gustaría hacer.
113
+
@@ -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.7",
5
+ version="0.0.9",
6
6
  description="Agente langchain con LLM",
7
7
  author="Erley Blanco Carvajal",
8
8
  license="MIT License",
@@ -1,3 +1,4 @@
1
+ from typing import Generator
1
2
  from typing import List
2
3
  from langchain.memory import ConversationBufferMemory
3
4
  from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder, SystemMessagePromptTemplate, HumanMessagePromptTemplate
@@ -128,6 +129,26 @@ class LangChainBot:
128
129
  self.save_messages(user_input, bot_response)
129
130
 
130
131
  return ResponseModel(user_tokens=user_tokens, bot_tokens=bot_tokens, response=bot_response)
132
+
133
+ def get_response_stream(self, user_input: str) -> Generator[str, None, None]:
134
+ """
135
+ Genera una respuesta en streaming para la entrada del usuario, procesando el contexto.
136
+
137
+ Args:
138
+ user_input (str): Entrada del usuario
139
+
140
+ Yields:
141
+ str: Fragmentos de la respuesta generada por el modelo en tiempo real
142
+ """
143
+ context = self._get_context(user_input)
144
+ augmented_input = f"User question: {user_input}"
145
+ if context:
146
+ augmented_input = f"Context from attached files:\n{context}\n\nUser question: {user_input}"
147
+
148
+ result_stream = self.conversation.stream({"input": augmented_input, "history": self.memory.chat_memory.messages})
149
+ for response in result_stream:
150
+ yield response.content
151
+
131
152
 
132
153
  def _get_context(self, query: str) -> str:
133
154
  """
@@ -1,8 +1,7 @@
1
1
  from langchain_openai import ChatOpenAI
2
2
  from sonika_langchain_bot.langchain_class import ILanguageModel
3
3
  from langchain_core.messages import HumanMessage
4
- from typing import Type
5
- from pydantic import BaseModel
4
+ from typing import Generator
6
5
 
7
6
 
8
7
  class OpenAILanguageModel(ILanguageModel):
@@ -46,4 +45,18 @@ class OpenAILanguageModel(ILanguageModel):
46
45
  """
47
46
  message = HumanMessage(content=prompt)
48
47
  response = self.model.invoke([message])
49
- return response
48
+ return response
49
+
50
+ def stream_response(self, prompt: str) -> Generator[str, None, None]:
51
+ """
52
+ Genera una respuesta en streaming basada en el prompt proporcionado.
53
+
54
+ Args:
55
+ prompt (str): Texto de entrada para generar la respuesta
56
+
57
+ Yields:
58
+ str: Fragmentos de la respuesta generada por el modelo en tiempo real
59
+ """
60
+ message = HumanMessage(content=prompt)
61
+ for chunk in self.model.stream([message]):
62
+ yield chunk.content
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sonika-langchain-bot
3
- Version: 0.0.7
3
+ Version: 0.0.9
4
4
  Summary: Agente langchain con LLM
5
5
  Author: Erley Blanco Carvajal
6
6
  License: MIT License
@@ -30,7 +30,8 @@ Provides-Extra: dev
30
30
  Requires-Dist: sphinx<9.0.0,>=8.1.3; extra == "dev"
31
31
  Requires-Dist: sphinx-rtd-theme<4.0.0,>=3.0.1; extra == "dev"
32
32
 
33
- # Sonika LangChain Bot
33
+ # Sonika LangChain Bot <a href="https://pepy.tech/projects/sonika-langchain-bot"><img src="https://static.pepy.tech/badge/sonika-langchain-bot" alt="PyPI Downloads"></a>
34
+
34
35
 
35
36
  Una librería Python que implementa un bot conversacional utilizando LangChain con capacidades BDI (Belief-Desire-Intention) y clasificación de texto.
36
37
 
@@ -104,12 +105,17 @@ bot_response = response_model
104
105
 
105
106
  print(bot_response)
106
107
 
108
+ #o por streaming
109
+ for chunk in bot.get_response_stream(user_message):
110
+ print(chunk)
111
+
107
112
  ```
108
113
 
109
114
  ### Ejemplo de Clasificación de Texto
110
115
 
111
116
  ```python
112
- from sonika_langchain_bot.langchain_clasificator import OpenAIModel, TextClassifier
117
+ from sonika_langchain_bot.langchain_clasificator import TextClassifier
118
+ from sonika_langchain_bot.langchain_models import OpenAILanguageModel
113
119
  from pydantic import BaseModel, Field
114
120
 
115
121
  # Definir estructura de clasificación
@@ -136,3 +142,4 @@ result = classifier.classify("Tu texto aquí")
136
142
  ## Contribución
137
143
 
138
144
  Las contribuciones son bienvenidas. Por favor, abre un issue para discutir los cambios importantes que te gustaría hacer.
145
+
@@ -40,8 +40,29 @@ def bot_bdi():
40
40
 
41
41
  print(bot_response)
42
42
 
43
+ def bot_bdi_streaming():
44
+ # Obtener claves de API desde el archivo .env
45
+ api_key = os.getenv("OPENAI_API_KEY")
46
+ api_key_tavily = os.getenv("TAVILY_API_KEY")
47
+
48
+ language_model = OpenAILanguageModel(api_key, model_name='gpt-4o-mini-2024-07-18', temperature=1)
49
+ embeddings = OpenAIEmbeddings(api_key=api_key)
50
+
51
+ # Configuración de herramientas y bots
52
+ search = TavilySearchResults(max_results=2, api_key=api_key_tavily)
53
+ email_tool = EmailTool()
54
+
55
+ tools =[search, email_tool]
56
+ beliefs = [Belief(content="Eres un asistente de chat", type=BeliefType.PERSONALITY, confidence=1, source='personality')]
57
+ bot = LangChainBot(language_model, embeddings, beliefs=beliefs, tools=tools)
43
58
 
59
+ user_message = 'Hola como me llamo?'
60
+
61
+ bot.load_conversation_history([Message(content="Mi nombre es Erley", is_bot=False)])
62
+ for chunk in bot.get_response_stream(user_message):
63
+ print(chunk)
44
64
 
65
+
45
66
 
46
67
  # Definir la clase 'Classification' con Pydantic para validar la estructura
47
68
  class Classification(BaseModel):
@@ -63,5 +84,6 @@ def clasification():
63
84
  result = classifier.classify("how are you?")
64
85
  print(result)
65
86
 
66
- #bot_bdi()
67
- clasification()
87
+ bot_bdi()
88
+ #bot_bdi_streaming()
89
+ #clasification()