beekeeper-core 1.0.2__py3-none-any.whl → 1.0.12__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.
@@ -1,6 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from enum import Enum
3
- from typing import List
3
+ from typing import List, Union
4
4
 
5
5
  import numpy as np
6
6
  from beekeeper.core.document import Document
@@ -43,17 +43,20 @@ class BaseEmbedding(TransformerComponent, ABC):
43
43
  return "BaseEmbedding"
44
44
 
45
45
  @abstractmethod
46
- def embed_texts(self, texts: List[str]) -> List[Embedding]:
47
- """Embed a list of text strings."""
48
-
49
- def embed_text(self, query: str) -> Embedding:
50
- """Embed a single text string."""
51
- return self.embed_texts([query])[0]
46
+ def embed_text(
47
+ self, input: Union[str, List[str]]
48
+ ) -> Union[Embedding, List[Embedding]]:
49
+ """Embed one or more text strings."""
52
50
 
53
51
  def embed_documents(self, documents: List[Document]) -> List[Document]:
54
- """Embed a list of documents and set them in the 'embedding' attribute."""
52
+ """
53
+ Embed a list of documents and assign the computed embeddings to the 'embedding' attribute.
54
+
55
+ Args:
56
+ documents (List[Document]): List of documents to compute embeddings.
57
+ """
55
58
  texts = [document.get_content() for document in documents]
56
- embeddings = self.embed_texts(texts)
59
+ embeddings = self.embed_text(texts)
57
60
 
58
61
  for document, embedding in zip(documents, embeddings):
59
62
  document.embedding = embedding
@@ -61,7 +64,15 @@ class BaseEmbedding(TransformerComponent, ABC):
61
64
  return documents
62
65
 
63
66
  @deprecated(
64
- reason="'get_text_embedding()' is deprecated and will be removed in a future version. Use 'embed_text' instead.",
67
+ reason="'embed_texts()' is deprecated and will be removed in a future version. Use 'embed_text()' instead.",
68
+ version="1.0.3",
69
+ action="always",
70
+ )
71
+ def embed_texts(self, texts: List[str]) -> List[Embedding]:
72
+ return self.embed_text(texts)
73
+
74
+ @deprecated(
75
+ reason="'get_text_embedding()' is deprecated and will be removed in a future version. Use 'embed_text()' instead.",
65
76
  version="1.0.2",
66
77
  action="always",
67
78
  )
@@ -69,7 +80,7 @@ class BaseEmbedding(TransformerComponent, ABC):
69
80
  return self.embed_text(query)
70
81
 
71
82
  @deprecated(
72
- reason="'get_texts_embedding()' is deprecated and will be removed in a future version. Use 'embed_texts' instead.",
83
+ reason="'get_texts_embedding()' is deprecated and will be removed in a future version. Use 'embed_texts()' instead.",
73
84
  version="1.0.2",
74
85
  action="always",
75
86
  )
@@ -77,7 +88,7 @@ class BaseEmbedding(TransformerComponent, ABC):
77
88
  return self.embed_texts(texts)
78
89
 
79
90
  @deprecated(
80
- reason="'get_documents_embedding()' is deprecated and will be removed in a future version. Use 'embed_documents' instead.",
91
+ reason="'get_documents_embedding()' is deprecated and will be removed in a future version. Use 'embed_documents()' instead.",
81
92
  version="1.0.2",
82
93
  action="always",
83
94
  )
@@ -53,10 +53,10 @@ class ContextSimilarityEvaluator(BaseModel):
53
53
  )
54
54
 
55
55
  evaluation_result = {"contexts_score": [], "score": 0}
56
- candidate_embedding = self.embed_model.get_text_embedding(generated_text)
56
+ candidate_embedding = self.embed_model.embed_text(generated_text)
57
57
 
58
58
  for context in contexts:
59
- context_embedding = self.embed_model.get_text_embedding(context)
59
+ context_embedding = self.embed_model.embed_text(context)
60
60
  evaluation_result["contexts_score"].append(
61
61
  self.embed_model.similarity(
62
62
  candidate_embedding,
@@ -0,0 +1,4 @@
1
+ from beekeeper.core.guardrails.base import BaseGuardrail
2
+ from beekeeper.core.guardrails.types import GuardrailResponse
3
+
4
+ __all__ = ["BaseGuardrail", "GuardrailResponse"]
@@ -0,0 +1,15 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ from beekeeper.core.guardrails.types import GuardrailResponse
4
+
5
+
6
+ class BaseGuardrail(ABC):
7
+ """Abstract base class defining the interface for LLMs."""
8
+
9
+ @classmethod
10
+ def class_name(cls) -> str:
11
+ return "BaseGuardrail"
12
+
13
+ @abstractmethod
14
+ def enforce(self, text: str, direction: str) -> GuardrailResponse:
15
+ """Runs policies enforcement to specified guardrail."""
@@ -0,0 +1,13 @@
1
+ from typing import Any, Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class GuardrailResponse(BaseModel):
7
+ """Guardrail response."""
8
+
9
+ text: str = Field(..., description="Generated text response")
10
+ action: Optional[str] = Field(
11
+ default=None, description="Action taken by the guardrail"
12
+ )
13
+ raw: Optional[Any] = Field(default=None)
@@ -6,6 +6,4 @@ from beekeeper.core.llms.types import (
6
6
  MessageRole,
7
7
  )
8
8
 
9
- __all__ = (
10
- ["BaseLLM", "ChatMessage", "ChatResponse", "GenerateResponse", "MessageRole"],
11
- )
9
+ __all__ = ["BaseLLM", "ChatMessage", "ChatResponse", "GenerateResponse", "MessageRole"]
@@ -1,35 +1,40 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Any, List, Optional
2
+ from typing import Any, Optional
3
3
 
4
4
  from beekeeper.core.llms.types import ChatMessage, ChatResponse, GenerateResponse
5
- from beekeeper.core.observers import BaseObserver
5
+ from beekeeper.core.monitors import BaseMonitor
6
6
  from pydantic import BaseModel
7
7
 
8
8
 
9
- class BaseLLM(ABC, BaseModel):
9
+ class BaseLLM(BaseModel, ABC):
10
10
  """Abstract base class defining the interface for LLMs."""
11
11
 
12
12
  model_config = {"arbitrary_types_allowed": True}
13
- callback_manager: Optional[BaseObserver] = None
13
+ model: str
14
+ callback_manager: Optional[BaseMonitor] = None
14
15
 
15
16
  @classmethod
16
17
  def class_name(cls) -> str:
17
18
  return "BaseLLM"
18
19
 
19
- def convert_chat_messages(self, messages: List[ChatMessage]) -> List[dict]:
20
- """Convert chat messages to LLM message format."""
21
- return [message.model_dump() for message in messages]
20
+ def text_completion(self, prompt: str, **kwargs: Any) -> str:
21
+ """
22
+ Generates a chat completion for LLM. Using OpenAI's standard endpoint (/completions).
23
+
24
+ Args:
25
+ prompt (str): The input prompt to generate a completion for.
26
+ **kwargs (Any): Additional keyword arguments to customize the LLM completion request.
27
+ """
28
+ response = self.completion(prompt=prompt, **kwargs)
29
+
30
+ return response.text
22
31
 
23
32
  @abstractmethod
24
33
  def completion(self, prompt: str, **kwargs: Any) -> GenerateResponse:
25
34
  """Generates a completion for LLM."""
26
35
 
27
- @abstractmethod
28
- def text_completion(self, prompt: str, **kwargs: Any) -> str:
29
- """Generates a text completion for LLM."""
30
-
31
36
  @abstractmethod
32
37
  def chat_completion(
33
- self, messages: List[ChatMessage], **kwargs: Any
38
+ self, messages: list[ChatMessage | dict], **kwargs: Any
34
39
  ) -> ChatResponse:
35
40
  """Generates a chat completion for LLM."""
@@ -5,12 +5,13 @@ from logging import getLogger
5
5
  from typing import Callable
6
6
 
7
7
  from beekeeper.core.llms.types import ChatMessage
8
- from beekeeper.core.observers.types import PayloadRecord
8
+ from beekeeper.core.monitors.types import PayloadRecord
9
+ from beekeeper.core.prompts.utils import extract_template_vars
9
10
 
10
11
  logger = getLogger(__name__)
11
12
 
12
13
 
13
- def llm_chat_observer() -> Callable:
14
+ def llm_chat_monitor() -> Callable:
14
15
  """
15
16
  Decorator to wrap a method with llm handler logic.
16
17
  Looks for observability instances in `self.callback_manager`.
@@ -54,16 +55,29 @@ def llm_chat_observer() -> Callable:
54
55
  system_messages[0].content if system_messages else None
55
56
  )
56
57
 
58
+ # Extract template variables values from the prompt template if available
59
+ template_var_values = (
60
+ extract_template_vars(
61
+ callback_manager_fns.prompt_template.template,
62
+ (system_message or ""),
63
+ )
64
+ if callback_manager_fns.prompt_template
65
+ else {}
66
+ )
67
+
57
68
  callback = callback_manager_fns(
58
69
  payload=PayloadRecord(
59
- input_text=(system_message or "") + last_user_message,
70
+ system_prompt=(system_message or ""),
71
+ input_text=last_user_message,
72
+ prompt_variables=list(template_var_values.keys()),
73
+ prompt_variable_values=template_var_values,
60
74
  generated_text=llm_return_val.message.content,
61
- generated_token_count=llm_return_val.raw["usage"][
62
- "completion_tokens"
63
- ],
64
75
  input_token_count=llm_return_val.raw["usage"][
65
76
  "prompt_tokens"
66
77
  ],
78
+ generated_token_count=llm_return_val.raw["usage"][
79
+ "completion_tokens"
80
+ ],
67
81
  response_time=response_time,
68
82
  )
69
83
  )
@@ -72,7 +86,7 @@ def llm_chat_observer() -> Callable:
72
86
  asyncio.run(callback)
73
87
 
74
88
  except Exception as e:
75
- logger.error(f"Observability callback error: {e}")
89
+ logger.error(f"Observability callback: {e}")
76
90
 
77
91
  threading.Thread(target=async_callback_thread).start()
78
92
 
@@ -18,6 +18,30 @@ class ChatMessage(BaseModel):
18
18
  role: MessageRole = Field(default=MessageRole.USER)
19
19
  content: Optional[str] = Field(default=None)
20
20
 
21
+ def to_dict(self) -> dict:
22
+ """Convert ChatMessage to dict."""
23
+ return self.model_dump(exclude_none=True)
24
+
25
+ @classmethod
26
+ def from_value(cls, value: dict) -> "ChatMessage":
27
+ if value is None:
28
+ raise ValueError("Invalid 'ChatMessage', cannot be None")
29
+
30
+ if isinstance(value, cls):
31
+ return value
32
+
33
+ if isinstance(value, dict):
34
+ try:
35
+ return cls.model_validate(value)
36
+ except Exception as e:
37
+ raise ValueError(
38
+ "Invalid 'ChatMessage' dict. Received: '{}'.".format(e)
39
+ )
40
+
41
+ raise TypeError(
42
+ f"Invalid 'ChatMessage' type. Expected dict or ChatMessage, but received {type(value).__name__}."
43
+ )
44
+
21
45
 
22
46
  class GenerateResponse(BaseModel):
23
47
  """Generate response."""
@@ -0,0 +1,3 @@
1
+ from beekeeper.core.monitors.base import BaseMonitor, PromptMonitor
2
+
3
+ __all__ = ["BaseMonitor", "PromptMonitor"]
@@ -0,0 +1,36 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Optional
3
+
4
+ from beekeeper.core.monitors.types import PayloadRecord
5
+ from beekeeper.core.prompts import PromptTemplate
6
+
7
+
8
+ class BaseMonitor(ABC):
9
+ """Abstract base class defining the interface for monitors."""
10
+
11
+ @classmethod
12
+ def class_name(cls) -> str:
13
+ return "BaseMonitor"
14
+
15
+
16
+ class PromptMonitor(BaseMonitor):
17
+ """Abstract base class defining the interface for prompt observability."""
18
+
19
+ def __init__(self, prompt_template: Optional[PromptTemplate] = None) -> None:
20
+ self.prompt_template = PromptTemplate.from_value(prompt_template)
21
+
22
+ @classmethod
23
+ def class_name(cls) -> str:
24
+ return "PromptMonitor"
25
+
26
+ @abstractmethod
27
+ def __call__(self, payload: PayloadRecord) -> None:
28
+ """PromptMonitor."""
29
+
30
+
31
+ class TelemetryMonitor(BaseMonitor):
32
+ """Abstract base class defining the interface for telemetry observability."""
33
+
34
+ @classmethod
35
+ def class_name(cls) -> str:
36
+ return "TelemetryMonitor"
@@ -0,0 +1,14 @@
1
+ from pydantic import BaseModel
2
+
3
+
4
+ class PayloadRecord(BaseModel):
5
+ """Payload record."""
6
+
7
+ system_prompt: str | None = None
8
+ input_text: str
9
+ prompt_variables: list[str] | None = None
10
+ prompt_variable_values: dict[str, str] | None = None
11
+ generated_text: str
12
+ input_token_count: int
13
+ generated_token_count: int
14
+ response_time: int
@@ -1,3 +1,3 @@
1
- from beekeeper.core.observers.base import BaseObserver, ModelObserver
1
+ from beekeeper.core.observers.base import BaseObserver, ModelObserver, PromptObserver
2
2
 
3
- __all__ = (["BaseObserver", "ModelObserver"],)
3
+ __all__ = ["BaseObserver", "ModelObserver", "PromptObserver"]
@@ -1,36 +1,33 @@
1
- from abc import ABC, abstractmethod
2
- from typing import Optional
1
+ from beekeeper.core.monitors import BaseMonitor, PromptMonitor
2
+ from deprecated import deprecated
3
3
 
4
- from beekeeper.core.observers.types import PayloadRecord
5
- from beekeeper.core.prompts import PromptTemplate
6
4
 
5
+ class BaseObserver(BaseMonitor):
6
+ """DEPRECATED: An interface for observability."""
7
7
 
8
- class BaseObserver(ABC):
9
- """An interface for observability."""
10
8
 
11
- @classmethod
12
- def class_name(cls) -> str:
13
- return "BaseObserver"
9
+ @deprecated(
10
+ reason="'PromptObserver()' is deprecated and will be removed in a future version. Use 'PromptMonitor()' from 'beekeeper.core.monitors' instead.",
11
+ version="1.0.4",
12
+ action="always",
13
+ )
14
+ class PromptObserver(PromptMonitor):
15
+ """DEPRECATED: Abstract base class defining the interface for prompt observability."""
14
16
 
15
17
 
16
- class ModelObserver(BaseObserver):
17
- """Abstract base class defining the interface for prompt observability."""
18
+ @deprecated(
19
+ reason="'ModelObserver()' is deprecated and will be removed in a future version. Use 'PromptMonitor()' from 'beekeeper.core.monitors' instead.",
20
+ version="1.0.3",
21
+ action="always",
22
+ )
23
+ class ModelObserver(PromptMonitor):
24
+ """DEPRECATED: This class is deprecated and kept only for backward compatibility."""
18
25
 
19
- def __init__(self, prompt_template: Optional[PromptTemplate] = None) -> None:
20
- self.prompt_template = prompt_template
21
26
 
22
- @classmethod
23
- def class_name(cls) -> str:
24
- return "ModelObserver"
25
-
26
- @abstractmethod
27
- def __call__(self, payload: PayloadRecord) -> None:
28
- """ModelObserver."""
29
-
30
-
31
- class TelemetryObserver(BaseObserver):
32
- """Abstract base class defining the interface for telemetry observability."""
33
-
34
- @classmethod
35
- def class_name(cls) -> str:
36
- return "TelemetryObserver"
27
+ @deprecated(
28
+ reason="'TelemetryObserver()' is deprecated and will be removed in a future version. Use 'TelemetryMonitor()' from 'beekeeper.core.monitors' instead.",
29
+ version="1.0.4",
30
+ action="always",
31
+ )
32
+ class TelemetryObserver(BaseMonitor):
33
+ """DEPRECATED: Abstract base class defining the interface for telemetry observability."""
@@ -1,3 +1,3 @@
1
1
  from beekeeper.core.prompts.base import PromptTemplate
2
2
 
3
- __all__ = (["PromptTemplate"],)
3
+ __all__ = ["PromptTemplate"]
@@ -22,6 +22,18 @@ class PromptTemplate(BaseModel):
22
22
  def __init__(self, template: str):
23
23
  super().__init__(template=template)
24
24
 
25
+ @classmethod
26
+ def from_value(cls, value: str) -> "PromptTemplate":
27
+ if isinstance(value, cls):
28
+ return value
29
+
30
+ if isinstance(value, str):
31
+ return cls(value)
32
+
33
+ raise TypeError(
34
+ f"Invalid type for parameter 'prompt_template'. Expected str or PromptTemplate, but received {type(value).__name__}."
35
+ )
36
+
25
37
  def format(self, **kwargs):
26
38
  """
27
39
  Formats the template using the provided dynamic variables.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beekeeper-core
3
- Version: 1.0.2
3
+ Version: 1.0.12
4
4
  Summary: Load any data in one line of code and connect with AI applications
5
5
  Project-URL: Repository, https://github.com/beekeeper-ai/beekeeper
6
6
  Author-email: Leonardo Furnielis <leonardofurnielis@outlook.com>
@@ -9,14 +9,14 @@ Keywords: AI,LLM,QA,RAG,data,observability,retrieval,semantic-search
9
9
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
10
10
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
11
11
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
12
- Requires-Python: <4.0,>=3.10
13
- Requires-Dist: deprecated<2.0.0,>=1.2.18
12
+ Requires-Python: <3.14,>=3.11
13
+ Requires-Dist: deprecated<2.0.0,>=1.3.1
14
14
  Requires-Dist: nltk<4.0.0,>=3.9.2
15
15
  Requires-Dist: numpy<1.27.0,>=1.26.4
16
- Requires-Dist: pydantic<3.0.0,>=2.11.10
17
- Requires-Dist: tiktoken<0.10.0,>=0.9.0
16
+ Requires-Dist: pydantic<3.0.0,>=2.12.5
17
+ Requires-Dist: tiktoken<0.13.0,>=0.12.0
18
18
  Provides-Extra: dev
19
- Requires-Dist: ruff>=0.11.13; extra == 'dev'
19
+ Requires-Dist: ruff>=0.14.9; extra == 'dev'
20
20
  Description-Content-Type: text/markdown
21
21
 
22
22
  # Beekeeper Core
@@ -3,20 +3,26 @@ beekeeper/core/schema.py,sha256=8OZkRVDry6nglof38w4AvWaRDpf0zOUtqGyfWBhj8lk,267
3
3
  beekeeper/core/document/__init__.py,sha256=nCN0CNee1v-28W5a26Ca6iAVefcr_KAieAH6QfN4eyw,144
4
4
  beekeeper/core/document/base.py,sha256=NBlyj8C0uvvsiElU1wFcXU27LOb3VP0U11nMgOR6cgY,2635
5
5
  beekeeper/core/embeddings/__init__.py,sha256=4AzGUtoL7wComtQ-bEVwzoMQgahBhpxcF_4M5rQ0ClQ,159
6
- beekeeper/core/embeddings/base.py,sha256=FerdOZt-U3SD8LwlXbLlo-oyCs5zoA4tVqa3bcj6bhg,3116
6
+ beekeeper/core/embeddings/base.py,sha256=3r_gr9ceezuAXexkeS5Bq23778BeF7h--IDEvL5pLjE,3464
7
7
  beekeeper/core/evaluation/__init__.py,sha256=FyZGpbTXcIM3BynssiS6wUm2KZkMnLVmKF50D7iqkXM,135
8
- beekeeper/core/evaluation/context_similarity.py,sha256=SX4__MBClfBWpH1ZbgOMksQakhg9Fz5RUlKGEjkZDb0,2706
8
+ beekeeper/core/evaluation/context_similarity.py,sha256=kT1J3HUgF51HHQA5Sew9ahbSV_jhgbCBMRYqPLKlljQ,2690
9
9
  beekeeper/core/flows/__init__.py,sha256=v6VLJ309l5bHYcG1JLUu6_kRoOwIZazonH4-n_UQzYQ,91
10
10
  beekeeper/core/flows/ingestion_flow.py,sha256=lfZM6lHF9rBTviimSlptHm_1htaA5qLLhE-Sm_7fwGY,6110
11
- beekeeper/core/llms/__init__.py,sha256=8fPQqw9vYdQJtQlYyFF9YskFSQBHBstmqurPOyEb0rA,259
12
- beekeeper/core/llms/base.py,sha256=5q7MsFcm__1NgGRsLiear-24bfdELl2y7gvZ0TKSCjc,1174
13
- beekeeper/core/llms/decorators.py,sha256=lPfrQPFiCLAp468mVsiX6DIxSIvmrHjz3urnV9-q54U,3284
14
- beekeeper/core/llms/types.py,sha256=CqLsB78y6-y8actABp87nHQh3AhHcE5i4IjeUxaXyA4,722
15
- beekeeper/core/observers/__init__.py,sha256=O2TNVupW0UKBDnhPAoz1YB6uQXws7YdDPi-GOGw2il0,118
16
- beekeeper/core/observers/base.py,sha256=9fnPCuwPc7Krialv4Ooq6uCiempkKHdFEwbiAF4UWvw,962
11
+ beekeeper/core/guardrails/__init__.py,sha256=onznwYWAyOaxOVeYZle7oDtj3QJODQvJHcf5td_laZg,169
12
+ beekeeper/core/guardrails/base.py,sha256=T-Ywr80iTL0EFYarCymFEEI3QkMsrw27JVh_0407sEU,427
13
+ beekeeper/core/guardrails/types.py,sha256=7sgw1S5BZY0OqO-n04pHXPU7sG-NEZJlQyIeb2Fsq9Q,359
14
+ beekeeper/core/llms/__init__.py,sha256=PN-5Y_Km_l2vO8v9d7iJ6_5xPCZJBh8UzwqRvQZlmTo,250
15
+ beekeeper/core/llms/base.py,sha256=fxjOJJR3pNJxtvkICr0Nq9A9wnqf3SMM4cm4sAhA9-o,1308
16
+ beekeeper/core/llms/decorators.py,sha256=KzU5VrHrXpJBHWqDl0lUxeqrUHmaPiJovEeUTM_RNeU,4036
17
+ beekeeper/core/llms/types.py,sha256=ttPCZ3VYtY6tx-E6VIOTicflYMJ3m0aw1znZeYAEVu8,1489
18
+ beekeeper/core/monitors/__init__.py,sha256=TvoiIUJtWRO_4zqCICsFaGl_v4Tpvft1M542Bi13pOI,112
19
+ beekeeper/core/monitors/base.py,sha256=_MY0AXCqlLpptwBEOpIfw-lCfRog4rXe_WALPvkHFNk,1007
20
+ beekeeper/core/monitors/types.py,sha256=kAA0g6YT_Menlc0HLPl87Rk9o4r2TybGfLlzuGlL40Y,357
21
+ beekeeper/core/observers/__init__.py,sha256=Z5sDAajai4QLdGIrjq-vr5eJEBhriMMCw5u46j6xHvA,149
22
+ beekeeper/core/observers/base.py,sha256=y1SE_0WQusKhVomFuZCkk42Jb7r93ZS6r_j8vs_Y_r4,1203
17
23
  beekeeper/core/observers/types.py,sha256=s-4tB8OdeaCUIRvi6FLuib2u4Yl9evqQdCundNREXQY,217
18
- beekeeper/core/prompts/__init__.py,sha256=MKVxQKhA72Pm4oaVMDIRYE3fB70A2Jd2Re0UZSmFIoE,88
19
- beekeeper/core/prompts/base.py,sha256=cuRSv30aromymNO2wuuprrrWFm5PxRTymYoVqscK4Us,739
24
+ beekeeper/core/prompts/__init__.py,sha256=kFp2N5giNEMA4hc3eZqstqaZu0c0BRAnP0NuF5aUaqI,85
25
+ beekeeper/core/prompts/base.py,sha256=Edh77DuYm8lDhJvHazC5hgaiQEit-R4M-TWLX8-gIU0,1106
20
26
  beekeeper/core/prompts/utils.py,sha256=Cqpefzzxd6DxPbOKVyUCsIs-ibBGKhYU6ppYqhPT9vM,1378
21
27
  beekeeper/core/readers/__init__.py,sha256=vPCmWmK92LYL-R0LFcPqjOKFHqxW0xUP5r6M9GNxoqY,157
22
28
  beekeeper/core/readers/base.py,sha256=46VRNkCmKP2RWJT1-kRTSHG9SjY1xbhKUy1a7-OrgPg,418
@@ -32,6 +38,6 @@ beekeeper/core/tools/base.py,sha256=A6TXn7g3DAZMREYAobfVlyOBuJn_8mIeCByc5412L9Y,
32
38
  beekeeper/core/utils/pairwise.py,sha256=cpi8GItPFSYP4sjB5zgTFHi6JfBVWsMnNu8koA9VYQU,536
33
39
  beekeeper/core/vector_stores/__init__.py,sha256=R5SRG3YpOZqRwIfBLB8KVV6FALWqhIzIhCjRGj-bwPc,93
34
40
  beekeeper/core/vector_stores/base.py,sha256=YFW1ioZbFEcJovAh0ZCpHnj0eiXtZvqy_pj2lxPS92k,1652
35
- beekeeper_core-1.0.2.dist-info/METADATA,sha256=axLwH-NNoKs7_KuaEvyJCSNlXFVRRPYy6U0T66eto9Y,1331
36
- beekeeper_core-1.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
37
- beekeeper_core-1.0.2.dist-info/RECORD,,
41
+ beekeeper_core-1.0.12.dist-info/METADATA,sha256=6ZkWc4BXq7HnmKUADUKCmRGR2QRPLHVd1dxegvYUj-k,1331
42
+ beekeeper_core-1.0.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
43
+ beekeeper_core-1.0.12.dist-info/RECORD,,