ai-parrot 0.5.11__cp311-cp311-manylinux_2_28_x86_64.whl → 0.5.13__cp311-cp311-manylinux_2_28_x86_64.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.

Potentially problematic release.


This version of ai-parrot might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ai-parrot
3
- Version: 0.5.11
3
+ Version: 0.5.13
4
4
  Summary: Live Chatbots based on Langchain chatbots and Agents Integrated into Navigator Framework or used into any aiohttp applications.
5
5
  Home-page: https://github.com/phenobarbital/ai-parrot
6
6
  Author: Jesus Lara
@@ -1,12 +1,12 @@
1
1
  parrot/__init__.py,sha256=eTkAkHeJ5BBDG2fxrXA4M37ODBJoS1DQYpeBAWL2xeI,387
2
2
  parrot/conf.py,sha256=BBbArVYjcGGaNKw3_h1dOw_pl1qcYNuT6Sj6dINwJd8,5404
3
3
  parrot/exceptions.cpython-311-x86_64-linux-gnu.so,sha256=1tKBneucxl6ShNqI8KS4-pa9G-YQw9kXCnqUB-n2tbc,361184
4
- parrot/manager.py,sha256=E1OdoNnZh1qCqVgZzcp8rdRnE1-xRwyQ6d1nFcOmg3U,6527
4
+ parrot/manager.py,sha256=JNE6vY1H2PvpVeKzLv18uXTY9u5rb-JvmKSx-aIH1y4,6618
5
5
  parrot/models.py,sha256=MT88rYdITenwTuyCfeqHqaNf49rieAKz43R2TibN7G8,14314
6
6
  parrot/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- parrot/version.py,sha256=C4CZL3SltVkkn8Nf0SUBHRIqD7QqcJGmj5peRWKjzsM,378
7
+ parrot/version.py,sha256=aHBE_6_v6JpopyX_oKbxe3SHhZbdmyNey37ExnBxlCs,378
8
8
  parrot/bots/__init__.py,sha256=qD-WOn8n34VUCp7Mq6Mq1lZV8h_cKAeXQxn27UtBDP4,153
9
- parrot/bots/abstract.py,sha256=8Oq47Cjt5-TAAdeyS3-JQd9FwPOumT2U6IIFMFXp02k,35886
9
+ parrot/bots/abstract.py,sha256=IVEXthWe-hR17LsJ8-Fa-I37D2gye5AlJ7qZrtLugsM,36110
10
10
  parrot/bots/agent.py,sha256=2v_5hQ3XCvCPpwTne7t-NDUpX3na1LIwXfufT-cK9LU,13432
11
11
  parrot/bots/base.py,sha256=Wl2BXRzxdGsWdHltAi0jalIPPAiM0TkVIHkRc1HQ99I,13422
12
12
  parrot/bots/basic.py,sha256=dg2kT_ynMEtZ3cMTcSovmDwrOo7BhBwL1o-Nn_7I85A,235
@@ -24,7 +24,7 @@ parrot/bots/prompts/__init__.py,sha256=rm_rAX7ZIxDIpSVOjHVuHRLMI9wS3avsu5fUfwAsd
24
24
  parrot/bots/prompts/agents.py,sha256=nXmzmRG15jiTDnjhmZ8ljSYCB1xU4RwsayZThFSj0Zg,4310
25
25
  parrot/bots/retrievals/__init__.py,sha256=AgI0mTB27tZ0Oyr7RU63G-ZO1VyX-uCJ6lwxgP4baag,45
26
26
  parrot/bots/retrievals/constitutional.py,sha256=x7kFR0KpmkR0Wz6bXNOeU3Hesn_EXc6eOSd4TdXxb8o,600
27
- parrot/bots/retrievals/multi.py,sha256=gVsGIM6ynqDFdqryrEyQg6yYXIN3uGwAGby9fvacl_w,3667
27
+ parrot/bots/retrievals/multi.py,sha256=92exQXAU5B2gk0uA9dAJnZMwFldPcarcQzLo-iEZy6o,4990
28
28
  parrot/bots/retrievals/retrieval.py,sha256=wvMM53k76njV5b6t6CCKiYVk2o81JCHzCNmlHBKYFMg,20622
29
29
  parrot/chatbots/__init__.py,sha256=ypskCnME0xUv6psBEGCEyXCrD0J0ULHSllpVmSxqb4A,200
30
30
  parrot/chatbots/abstract.py,sha256=CmDn3k4r9uKImOZRN4L9zxLbCdC-1MPUAorDlfZT-kA,26421
@@ -144,8 +144,8 @@ resources/users/handlers.py,sha256=BGzqBvPY_OaIF_nONWX4b_B5OyyBrdGuSihIsdlFwjk,2
144
144
  resources/users/models.py,sha256=glk7Emv7QCi6i32xRFDrGc8UwK23_LPg0XUOJoHnwRU,6799
145
145
  settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  settings/settings.py,sha256=9ueEvyLNurUX-AaIeRPV8GKX1c4YjDLbksUAeqEq6Ck,1854
147
- ai_parrot-0.5.11.dist-info/LICENSE,sha256=vRKOoa7onTsLNvSzJtGtMaNhWWh8B3YAT733Tlu6M4o,1070
148
- ai_parrot-0.5.11.dist-info/METADATA,sha256=3cT8zN64WE4sXyaO5CwVAe5WkLs7-UHsrojIY7jy3bU,9716
149
- ai_parrot-0.5.11.dist-info/WHEEL,sha256=lNWVJ6q28SO2kTKDIyc1kQ-4wE2w5snxBQXSv06oiUw,113
150
- ai_parrot-0.5.11.dist-info/top_level.txt,sha256=VCLpdIu_5wkShgIQjK85jFzL9HEVVjAqlQa_gupLekI,17
151
- ai_parrot-0.5.11.dist-info/RECORD,,
147
+ ai_parrot-0.5.13.dist-info/LICENSE,sha256=vRKOoa7onTsLNvSzJtGtMaNhWWh8B3YAT733Tlu6M4o,1070
148
+ ai_parrot-0.5.13.dist-info/METADATA,sha256=vE_oi59f13e6dPb2wr1E5sv609OsORHePqtOfV9wRoY,9716
149
+ ai_parrot-0.5.13.dist-info/WHEEL,sha256=lNWVJ6q28SO2kTKDIyc1kQ-4wE2w5snxBQXSv06oiUw,113
150
+ ai_parrot-0.5.13.dist-info/top_level.txt,sha256=VCLpdIu_5wkShgIQjK85jFzL9HEVVjAqlQa_gupLekI,17
151
+ ai_parrot-0.5.13.dist-info/RECORD,,
parrot/bots/abstract.py CHANGED
@@ -477,6 +477,7 @@ class AbstractBot(DBInterface, ABC):
477
477
  except ImportError:
478
478
  continue
479
479
  elif isinstance(self._vector_store, dict):
480
+ print('< ENTERING HERE > ', )
480
481
  # Is a single vector store instance:
481
482
  store_cls = self._get_database_store(self._vector_store)
482
483
  store_cls.use_database = self._use_vector
@@ -485,9 +486,15 @@ class AbstractBot(DBInterface, ABC):
485
486
  raise ValueError(
486
487
  f"Invalid Vector Store Config: {self._vector_store}"
487
488
  )
488
- self.logger.info(f"Configured Vector Stores: {self.stores}")
489
+ self.logger.info(
490
+ f"Configured Vector Stores: {self.stores}"
491
+ )
489
492
  if self.stores:
490
493
  self.store = self.stores[0]
494
+ print('=================================')
495
+ print('END STORES >> ', self.stores, self.store)
496
+ print('=================================')
497
+
491
498
 
492
499
  def get_memory(
493
500
  self,
@@ -1,8 +1,9 @@
1
1
  from typing import List, Dict, Any, Optional
2
+ from collections.abc import Callable
2
3
  from langchain_core.retrievers import BaseRetriever
3
4
  from langchain_core.callbacks import CallbackManagerForRetrieverRun
4
5
  from langchain_core.documents import Document
5
-
6
+ from pydantic import Field
6
7
 
7
8
  class MultiVectorStoreRetriever(BaseRetriever):
8
9
  """
@@ -10,11 +11,15 @@ class MultiVectorStoreRetriever(BaseRetriever):
10
11
  and merges the results into a single list.
11
12
  """
12
13
 
13
- stores: List[Any]
14
- search_kwargs: Dict[str, Any]
15
- chain_type: str
16
- search_type: str
17
- metric_type: str
14
+ # Define class attributes with default values
15
+ stores: List[Any] = Field(description="List of vector stores that provide an as_retriever() method")
16
+ search_kwargs: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Dict to pass to each store's retrieve method (like 'k' for top_k)")
17
+ chain_type: Optional[str] = Field(default="stuff", description="Chain type for the retriever")
18
+ search_type: Optional[str] = Field(default="similarity", description="Search type (similarity, mmr)")
19
+ metric_type: Optional[str] = Field(default="COSINE", description="Similarity metric (COSINE, EUCLIDEAN, DOT_PRODUCT)")
20
+ class Config:
21
+ """Configuration for this pydantic object."""
22
+ arbitrary_types_allowed = True
18
23
 
19
24
  def __init__(
20
25
  self,
@@ -23,6 +28,7 @@ class MultiVectorStoreRetriever(BaseRetriever):
23
28
  chain_type: str = 'stuff',
24
29
  search_type: str = 'similarity',
25
30
  search_kwargs: Optional[Dict[str, Any]] = None,
31
+ **kwargs
26
32
  ):
27
33
  """
28
34
  Initialize the MultiVectorStoreRetriever.
@@ -34,12 +40,18 @@ class MultiVectorStoreRetriever(BaseRetriever):
34
40
  search_type: Search type (similarity, mmr)
35
41
  search_kwargs: Dict to pass to each store's retrieve method (like 'k' for top_k)
36
42
  """
37
- super().__init__()
38
- self.stores = stores
39
- self.search_kwargs = search_kwargs or {}
40
- self.chain_type = chain_type
41
- self.search_type = search_type
42
- self.metric_type = metric_type
43
+ # Initialize with default values
44
+ search_kwargs = search_kwargs or {}
45
+
46
+ # Call super().__init__ with all properties
47
+ super().__init__(
48
+ stores=stores,
49
+ search_kwargs=search_kwargs,
50
+ chain_type=chain_type,
51
+ search_type=search_type,
52
+ metric_type=metric_type,
53
+ **kwargs
54
+ )
43
55
 
44
56
  def _get_relevant_documents(
45
57
  self, query: str, *, run_manager: CallbackManagerForRetrieverRun
@@ -57,18 +69,22 @@ class MultiVectorStoreRetriever(BaseRetriever):
57
69
  """
58
70
  all_results = []
59
71
  for store in self.stores:
60
- retriever = store.as_retriever(
61
- search_type=self.search_type,
62
- search_kwargs=self.search_kwargs,
63
- chain_type=self.chain_type
64
- )
65
- # Pass the run_manager to the sub-retrievers if they support it
66
- if hasattr(retriever, "_get_relevant_documents"):
67
- callback_manager = run_manager.get_child()
68
- docs = retriever._get_relevant_documents(query, run_manager=callback_manager)
69
- else:
70
- docs = retriever.get_relevant_documents(query)
71
- all_results.extend(docs)
72
+ try:
73
+ retriever = store.as_retriever(
74
+ search_type=self.search_type,
75
+ search_kwargs=self.search_kwargs,
76
+ )
77
+ # Pass the run_manager to the sub-retrievers if they support it
78
+ if hasattr(retriever, "_get_relevant_documents"):
79
+ callback_manager = run_manager.get_child()
80
+ docs = retriever._get_relevant_documents(query, run_manager=callback_manager)
81
+ else:
82
+ docs = retriever.get_relevant_documents(query)
83
+ all_results.extend(docs)
84
+ except Exception as e:
85
+ # Log the error but continue with other stores
86
+ run_manager.on_retriever_error(f"Error retrieving from store: {str(e)}")
87
+ continue
72
88
  return all_results
73
89
 
74
90
  async def _aget_relevant_documents(
@@ -87,16 +103,20 @@ class MultiVectorStoreRetriever(BaseRetriever):
87
103
  """
88
104
  all_results = []
89
105
  for store in self.stores:
90
- retriever = store.as_retriever(
91
- search_type=self.search_type,
92
- search_kwargs=self.search_kwargs,
93
- chain_type=self.chain_type
94
- )
95
- # Pass the run_manager to the sub-retrievers if they support it
96
- if hasattr(retriever, "_aget_relevant_documents"):
97
- callback_manager = run_manager.get_child()
98
- docs = await retriever._aget_relevant_documents(query, run_manager=callback_manager)
99
- else:
100
- docs = await retriever.aget_relevant_documents(query)
101
- all_results.extend(docs)
106
+ try:
107
+ retriever = store.as_retriever(
108
+ search_type=self.search_type,
109
+ search_kwargs=self.search_kwargs,
110
+ )
111
+ # Pass the run_manager to the sub-retrievers if they support it
112
+ if hasattr(retriever, "_aget_relevant_documents"):
113
+ callback_manager = run_manager.get_child()
114
+ docs = await retriever._aget_relevant_documents(query, run_manager=callback_manager)
115
+ else:
116
+ docs = await retriever.aget_relevant_documents(query)
117
+ all_results.extend(docs)
118
+ except Exception as e:
119
+ # Log the error but continue with other stores
120
+ run_manager.on_retriever_error(f"Error retrieving from store: {str(e)}")
121
+ continue
102
122
  return all_results
parrot/manager.py CHANGED
@@ -61,7 +61,9 @@ class BotManager:
61
61
  f"Failed to load chatbots from DB: {e}"
62
62
  )
63
63
  return
64
+ print('HERE >>>>>> ', len(bots))
64
65
  for bot in bots:
66
+ print('CREATING BOT > ', bot)
65
67
  if bot.bot_type == 'chatbot':
66
68
  self.logger.notice(
67
69
  f"Loading chatbot '{bot.name}'..."
parrot/version.py CHANGED
@@ -3,7 +3,7 @@
3
3
  __title__ = "ai-parrot"
4
4
  __description__ = "Live Chatbots based on Langchain chatbots and Agents \
5
5
  Integrated into Navigator Framework or used into any aiohttp applications."
6
- __version__ = "0.5.11"
6
+ __version__ = "0.5.13"
7
7
  __author__ = "Jesus Lara"
8
8
  __author_email__ = "jesuslarag@gmail.com"
9
9
  __license__ = "MIT"