ragbits-core 0.16.0__py3-none-any.whl → 1.4.0.dev202512021005__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 (63) hide show
  1. ragbits/core/__init__.py +21 -2
  2. ragbits/core/audit/__init__.py +15 -157
  3. ragbits/core/audit/metrics/__init__.py +83 -0
  4. ragbits/core/audit/metrics/base.py +198 -0
  5. ragbits/core/audit/metrics/logfire.py +19 -0
  6. ragbits/core/audit/metrics/otel.py +65 -0
  7. ragbits/core/audit/traces/__init__.py +171 -0
  8. ragbits/core/audit/{base.py → traces/base.py} +9 -5
  9. ragbits/core/audit/{cli.py → traces/cli.py} +8 -4
  10. ragbits/core/audit/traces/logfire.py +18 -0
  11. ragbits/core/audit/{otel.py → traces/otel.py} +5 -8
  12. ragbits/core/config.py +15 -0
  13. ragbits/core/embeddings/__init__.py +2 -1
  14. ragbits/core/embeddings/base.py +19 -0
  15. ragbits/core/embeddings/dense/base.py +10 -1
  16. ragbits/core/embeddings/dense/fastembed.py +22 -1
  17. ragbits/core/embeddings/dense/litellm.py +37 -10
  18. ragbits/core/embeddings/dense/local.py +15 -1
  19. ragbits/core/embeddings/dense/noop.py +11 -1
  20. ragbits/core/embeddings/dense/vertex_multimodal.py +14 -1
  21. ragbits/core/embeddings/sparse/bag_of_tokens.py +47 -17
  22. ragbits/core/embeddings/sparse/base.py +10 -1
  23. ragbits/core/embeddings/sparse/fastembed.py +25 -2
  24. ragbits/core/llms/__init__.py +3 -3
  25. ragbits/core/llms/base.py +612 -88
  26. ragbits/core/llms/exceptions.py +27 -0
  27. ragbits/core/llms/litellm.py +408 -83
  28. ragbits/core/llms/local.py +180 -41
  29. ragbits/core/llms/mock.py +88 -23
  30. ragbits/core/prompt/__init__.py +2 -2
  31. ragbits/core/prompt/_cli.py +32 -19
  32. ragbits/core/prompt/base.py +105 -19
  33. ragbits/core/prompt/{discovery/prompt_discovery.py → discovery.py} +1 -1
  34. ragbits/core/prompt/exceptions.py +22 -6
  35. ragbits/core/prompt/prompt.py +180 -98
  36. ragbits/core/sources/__init__.py +2 -0
  37. ragbits/core/sources/azure.py +1 -1
  38. ragbits/core/sources/base.py +8 -1
  39. ragbits/core/sources/gcs.py +1 -1
  40. ragbits/core/sources/git.py +1 -1
  41. ragbits/core/sources/google_drive.py +595 -0
  42. ragbits/core/sources/hf.py +71 -31
  43. ragbits/core/sources/local.py +1 -1
  44. ragbits/core/sources/s3.py +1 -1
  45. ragbits/core/utils/config_handling.py +13 -2
  46. ragbits/core/utils/function_schema.py +220 -0
  47. ragbits/core/utils/helpers.py +22 -0
  48. ragbits/core/utils/lazy_litellm.py +44 -0
  49. ragbits/core/vector_stores/base.py +18 -1
  50. ragbits/core/vector_stores/chroma.py +28 -11
  51. ragbits/core/vector_stores/hybrid.py +1 -1
  52. ragbits/core/vector_stores/hybrid_strategies.py +21 -8
  53. ragbits/core/vector_stores/in_memory.py +13 -4
  54. ragbits/core/vector_stores/pgvector.py +123 -47
  55. ragbits/core/vector_stores/qdrant.py +15 -7
  56. ragbits/core/vector_stores/weaviate.py +440 -0
  57. {ragbits_core-0.16.0.dist-info → ragbits_core-1.4.0.dev202512021005.dist-info}/METADATA +22 -6
  58. ragbits_core-1.4.0.dev202512021005.dist-info/RECORD +79 -0
  59. {ragbits_core-0.16.0.dist-info → ragbits_core-1.4.0.dev202512021005.dist-info}/WHEEL +1 -1
  60. ragbits/core/prompt/discovery/__init__.py +0 -3
  61. ragbits/core/prompt/lab/__init__.py +0 -0
  62. ragbits/core/prompt/lab/app.py +0 -262
  63. ragbits_core-0.16.0.dist-info/RECORD +0 -72
@@ -1,262 +0,0 @@
1
- import asyncio
2
- from dataclasses import dataclass, field, replace
3
- from typing import Any, cast
4
-
5
- try:
6
- import gradio as gr
7
-
8
- HAS_GRADIO = True
9
- except ImportError:
10
- HAS_GRADIO = False
11
-
12
- import jinja2
13
- from pydantic import BaseModel
14
- from rich.console import Console
15
-
16
- from ragbits.core.config import core_config
17
- from ragbits.core.llms import LLM
18
- from ragbits.core.llms.base import LLMType
19
- from ragbits.core.prompt import Prompt
20
- from ragbits.core.prompt.discovery import PromptDiscovery
21
-
22
-
23
- @dataclass(frozen=True)
24
- class PromptState:
25
- """
26
- Class to store the current state of the application.
27
-
28
- This class holds various data structures used throughout the application's lifecycle.
29
-
30
- Attributes:
31
- prompts (list): A list containing discovered prompts.
32
- rendered_prompt (Prompt): The most recently rendered Prompt instance.
33
- llm (LLM): The LLM instance to be used for generating responses.
34
- """
35
-
36
- prompts: list = field(default_factory=list)
37
- rendered_prompt: Prompt | None = None
38
- llm: LLM | None = None
39
-
40
-
41
- def render_prompt(index: int, system_prompt: str, user_prompt: str, state: PromptState, *args: Any) -> PromptState: # noqa: ANN401
42
- """
43
- Renders a prompt based on the provided key, system prompt, user prompt, and input variables.
44
-
45
- This function constructs a Prompt object using the prompt constructor and input constructor
46
- associated with the given key. It then updates the current prompt in the application state.
47
-
48
- Args:
49
- index (int): The index of the prompt to render in the prompts state.
50
- system_prompt (str): The system prompt template for the prompt.
51
- user_prompt (str): The user prompt template for the prompt.
52
- state (PromptState): The application state object.
53
- args (tuple): A tuple of input values for the prompt.
54
-
55
- Returns:
56
- PromptState: The updated application state object.
57
- """
58
- prompt_class = state.prompts[index]
59
- prompt_class.system_prompt_template = jinja2.Template(system_prompt)
60
- prompt_class.user_prompt_template = jinja2.Template(user_prompt)
61
-
62
- input_type = prompt_class.input_type
63
- input_fields = get_input_type_fields(input_type)
64
- variables = {field["field_name"]: value for field, value in zip(input_fields, args, strict=False)}
65
- input_data = input_type(**variables) if input_type is not None else None
66
- prompt_object = prompt_class(input_data=input_data)
67
- state = replace(state, rendered_prompt=prompt_object)
68
-
69
- return state
70
-
71
-
72
- def list_prompt_choices(state: PromptState) -> list[tuple[str, int]]:
73
- """
74
- Returns a list of prompt choices based on the discovered prompts.
75
-
76
- This function generates a list of tuples containing the names of discovered prompts and their
77
- corresponding indices.
78
-
79
- Args:
80
- state (PromptState): The application state object.
81
-
82
- Returns:
83
- list[tuple[str, int]]: A list of tuples containing prompt names and their indices.
84
- """
85
- return [(prompt.__name__, idx) for idx, prompt in enumerate(state.prompts)]
86
-
87
-
88
- def send_prompt_to_llm(state: PromptState) -> str:
89
- """
90
- Sends the current prompt to the LLM and returns the response.
91
-
92
- This function creates a LiteLLM client using the LLM model name and API key stored in the
93
- application state. It then calls the LLM client to generate a response based on the current prompt.
94
-
95
- Args:
96
- state (PromptState): The application state object.
97
-
98
- Returns:
99
- str: The response generated by the LLM.
100
-
101
- Raises:
102
- ValueError: If the LLM model is not configured.
103
- """
104
- assert state.rendered_prompt is not None, "Prompt has not been rendered yet." # noqa: S101
105
-
106
- if state.llm is None:
107
- raise ValueError("LLM model is not configured.")
108
-
109
- try:
110
- response = cast(str, asyncio.run(state.llm.generate_raw(prompt=state.rendered_prompt))["response"])
111
- except Exception as e: # pylint: disable=broad-except
112
- response = str(e)
113
-
114
- return response
115
-
116
-
117
- def get_input_type_fields(obj: BaseModel | None) -> list[dict]:
118
- """
119
- Retrieves the field names and default values from the input type of a prompt.
120
-
121
- This function inspects the input type object associated with a prompt and extracts information
122
- about its fields, including their names and default values.
123
-
124
- Args:
125
- obj (BaseModel): The input type object of the prompt.
126
-
127
- Returns:
128
- list[dict]: A list of dictionaries, each containing a field name and its default value.
129
- """
130
- if obj is None:
131
- return []
132
- return [
133
- {"field_name": k, "field_default_value": v["schema"].get("default", None)}
134
- for (k, v) in obj.__pydantic_core_schema__["schema"]["fields"].items()
135
- ]
136
-
137
-
138
- def lab_app( # pylint: disable=missing-param-doc
139
- file_pattern: str = core_config.prompt_path_pattern,
140
- llm_factory: str | None = core_config.llm_preference_factories[LLMType.TEXT],
141
- ) -> None:
142
- """
143
- Launches the interactive application for listing, rendering, and testing prompts
144
- defined within the current project.
145
- """
146
- if not HAS_GRADIO:
147
- Console(stderr=True).print(
148
- "To use Prompt Lab, you need the Gradio library. Please install it using the following command:\n"
149
- r"[b]pip install ragbits-core\[lab][/b]"
150
- )
151
- return
152
-
153
- prompts = PromptDiscovery(file_pattern=file_pattern).discover()
154
-
155
- if not prompts:
156
- Console(stderr=True).print(
157
- f"""No prompts were found for the given file pattern: [b]{file_pattern}[/b].
158
-
159
- Please make sure that you are executing the command from the correct directory \
160
- or provide a custom file pattern using the [b]--file-pattern[/b] flag."""
161
- )
162
- return
163
-
164
- with gr.Blocks() as gr_app:
165
- prompts_state = gr.State(
166
- PromptState(
167
- prompts=list(prompts),
168
- llm=LLM.subclass_from_factory(llm_factory) if llm_factory else None,
169
- )
170
- )
171
-
172
- prompt_selection_dropdown = gr.Dropdown(
173
- choices=list_prompt_choices(prompts_state.value),
174
- value=0,
175
- label="Select Prompt",
176
- )
177
-
178
- @gr.render(inputs=[prompt_selection_dropdown, prompts_state])
179
- def show_split(index: int, state: gr.State) -> None:
180
- prompt = state.prompts[index]
181
- list_of_vars = []
182
- with gr.Row():
183
- with gr.Column(scale=1), gr.Tab("Inputs"):
184
- input_fields: list = get_input_type_fields(prompt.input_type)
185
- for entry in input_fields:
186
- with gr.Row():
187
- var = gr.Textbox(
188
- label=entry["field_name"],
189
- value=entry["field_default_value"],
190
- interactive=True,
191
- )
192
- list_of_vars.append(var)
193
-
194
- render_prompt_button = gr.Button(value="Render prompts")
195
-
196
- with gr.Column(scale=4), gr.Tab("Prompt"):
197
- with gr.Row():
198
- with gr.Column():
199
- prompt_details_system_prompt = gr.Textbox(
200
- label="System Prompt",
201
- value=prompt.system_prompt,
202
- interactive=True,
203
- )
204
-
205
- with gr.Column():
206
- rendered_system_prompt = (
207
- state.rendered_prompt.rendered_system_prompt if state.rendered_prompt else ""
208
- )
209
- gr.Textbox(
210
- label="Rendered System Prompt",
211
- value=rendered_system_prompt,
212
- interactive=False,
213
- )
214
-
215
- with gr.Row():
216
- with gr.Column():
217
- prompt_details_user_prompt = gr.Textbox(
218
- label="User Prompt",
219
- value=prompt.user_prompt,
220
- interactive=True,
221
- )
222
-
223
- with gr.Column():
224
- rendered_user_prompt = (
225
- state.rendered_prompt.rendered_user_prompt if state.rendered_prompt else ""
226
- )
227
- gr.Textbox(
228
- label="Rendered User Prompt",
229
- value=rendered_user_prompt,
230
- interactive=False,
231
- )
232
-
233
- llm_enabled = state.llm is not None
234
- prompt_ready = state.rendered_prompt is not None
235
- llm_request_button = gr.Button(
236
- value="Send to LLM",
237
- interactive=llm_enabled and prompt_ready,
238
- )
239
- gr.Markdown(
240
- "To enable this button set an LLM factory function in CLI options or your pyproject.toml",
241
- visible=not llm_enabled,
242
- )
243
- gr.Markdown(
244
- "To enable this button, render a prompt first.",
245
- visible=llm_enabled and not prompt_ready,
246
- )
247
- llm_prompt_response = gr.Textbox(lines=10, label="LLM response")
248
-
249
- render_prompt_button.click(
250
- render_prompt,
251
- [
252
- prompt_selection_dropdown,
253
- prompt_details_system_prompt,
254
- prompt_details_user_prompt,
255
- prompts_state,
256
- *list_of_vars,
257
- ],
258
- [prompts_state],
259
- )
260
- llm_request_button.click(send_prompt_to_llm, prompts_state, llm_prompt_response)
261
-
262
- gr_app.launch()
@@ -1,72 +0,0 @@
1
- ragbits/core/__init__.py,sha256=j41mAvtD3DsKRDr3JZwOFMxtBv2Zq62oWN1G3BjqS-k,225
2
- ragbits/core/cli.py,sha256=dl6qCjT0VN4075Xf5CaxccavhPmuJIsDlpfLPdiEvao,489
3
- ragbits/core/config.py,sha256=jwhGQo5J6ZbPoIG-3Vx6OC9UWBkRsjDLaNKU5Vsjnyc,1832
4
- ragbits/core/options.py,sha256=TKdUaD2y-sCyQOJh6hxnxa70RYtsaE9rINJdAi4i_80,1666
5
- ragbits/core/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- ragbits/core/types.py,sha256=nmEhQFCwLv33g6Mj5ntXeo9_d6YZLdKf7Nk3hfzCYgE,757
7
- ragbits/core/audit/__init__.py,sha256=M_cUdFBhXNCWqP76RN9MIiuk-wFoQR65leRCnjbgBUM,4822
8
- ragbits/core/audit/base.py,sha256=wBPMOHY6jWBPTeekY9KcTru_lF2KM2-MRUZQHG0dS_E,13754
9
- ragbits/core/audit/cli.py,sha256=gChtMFC-AHEN0abRH3Jkjw2Ovf_hbB-vXvJXieaVF7g,9617
10
- ragbits/core/audit/otel.py,sha256=Iv09-UhkoodKMR1Z-qpegooH3ABN2LJYGd_qI72EZH4,2211
11
- ragbits/core/embeddings/__init__.py,sha256=LbVWIwkRBaMyLObmoZ2qxj8ooQk8tkonx4evb-YeUR8,451
12
- ragbits/core/embeddings/base.py,sha256=LZNTuWplpqUULRp48hF10YJp0bKzENSNGMgdWkUy1pk,2265
13
- ragbits/core/embeddings/exceptions.py,sha256=7DT-aT66Zd0l5K_HFvBmrs8_CuI4K46U4cQot0JQZcc,1222
14
- ragbits/core/embeddings/dense/__init__.py,sha256=gYtKXiGQ9LycnONWkxSuwlABzH4YDUF48q7gzR1fH-M,233
15
- ragbits/core/embeddings/dense/base.py,sha256=IYo-gX-QN-vy1Mbm-Tt2yW2uDOT5Uk2Pftyycbs_5Zc,1167
16
- ragbits/core/embeddings/dense/fastembed.py,sha256=dEgEnHrxUpROTkXDX5Eqddn_TE5ndpN4_5wUeZY4BNg,2426
17
- ragbits/core/embeddings/dense/litellm.py,sha256=JahshBZkpsoczwr9KPiY_L1KIco4pinD0QN3TXrXVvw,5763
18
- ragbits/core/embeddings/dense/local.py,sha256=Ct1YnBmAHZ0KUkKC1yj5Ul60FHL1945UgY5fgRLb_MQ,2562
19
- ragbits/core/embeddings/dense/noop.py,sha256=IrkFCobd6lvAFfxxSmT_uYOkwcSpvrNs3RNHhiRU4aY,4190
20
- ragbits/core/embeddings/dense/vertex_multimodal.py,sha256=Yb7mFHzxlHEh0FHO0aZbSPf2PqoHueDe5m4E-uUQ-zk,7293
21
- ragbits/core/embeddings/sparse/__init__.py,sha256=v04VqbGtr9TA3qpWJBtvTzGOlIbjadXdHe-Wv-w3q9w,280
22
- ragbits/core/embeddings/sparse/bag_of_tokens.py,sha256=5aK8N3V0kz3W_DtV4ilFLeO1OB9pJyzrB19sWIZ82DQ,2685
23
- ragbits/core/embeddings/sparse/base.py,sha256=GKt-U3Y5Tpn7DKH0zxjjhpBNHvpNgVtbxQqcUMYDJ6o,1242
24
- ragbits/core/embeddings/sparse/fastembed.py,sha256=8ruYkIiO0oL0Dvw68dAy8urlJnbRCbDNcptITrfb34w,2457
25
- ragbits/core/llms/__init__.py,sha256=mrpsrahvfXSvk1zarNd_Mf3xzfzma-CYI83_cY39oFk,169
26
- ragbits/core/llms/base.py,sha256=-5REsWIj5ztV2i_R1p07fFYLpijGMuAPvP_Sq5MuDoY,9352
27
- ragbits/core/llms/exceptions.py,sha256=aQkeiz-HireoYDjZhyLGxPcaE-Tc0A4jfsJnMX__qDM,1437
28
- ragbits/core/llms/factory.py,sha256=T-heeY_7Llp5bOl6u9ycKK8ZwFnUE1ry4Q4X-O68hEQ,1506
29
- ragbits/core/llms/litellm.py,sha256=DKBRzbLK16w8WPXqugwoGhtAwfiJrTUphc-ikdCaAbw,11976
30
- ragbits/core/llms/local.py,sha256=FK0NgFcqoA2k2V4HqGnpUyJHX6sUcITSHaK8agWaUig,5766
31
- ragbits/core/llms/mock.py,sha256=lRDgbdJUPugJIDOPqyCzMBpwln2sk3BE5uxO7hJjvuI,2410
32
- ragbits/core/prompt/__init__.py,sha256=FYbstvqrhW4g0FTwjfw-rKO_OjJPHTNQWFT1FE4wll8,94
33
- ragbits/core/prompt/_cli.py,sha256=TD7wrn8_RmVH6Q30FNgoSefHv9jXndg3qKhCbsVf-xg,3122
34
- ragbits/core/prompt/base.py,sha256=4jOgYj1HErvwO5SbSj_BZub5rY8Ys6X3Kivw3BQBatQ,2499
35
- ragbits/core/prompt/exceptions.py,sha256=-zOn5sbthLJWXrQ_1QBWFmb_046LL20TizdI58L5Dv4,558
36
- ragbits/core/prompt/parsers.py,sha256=UP8RDQN0fr0yWh9fdTTofm4ugX6rDJLrwChihPv3ig4,3005
37
- ragbits/core/prompt/prompt.py,sha256=2yPI84CN7mIv08b0HbtMzud7QiGZifxEAIqeRfN1_WU,14474
38
- ragbits/core/prompt/promptfoo.py,sha256=P7UQ8zF0e_jsb_D4lglL5xKZe9hmOz2S0LLPx9Su1oo,1768
39
- ragbits/core/prompt/discovery/__init__.py,sha256=0b_wbvKqHi--kRJ2BOuWLZ4QIpEQGow4Z2CuMrnaaHg,77
40
- ragbits/core/prompt/discovery/prompt_discovery.py,sha256=yWXdBWOelbkBP79pj72auHC6JZOVGz2Jcz0UVL1bwv0,2826
41
- ragbits/core/prompt/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- ragbits/core/prompt/lab/app.py,sha256=n9hgbRX8BX02kEUrjH8jLlYU-SbzXyRQ68p_NeDxJpc,9828
43
- ragbits/core/sources/__init__.py,sha256=c_zdvfk_JD1pVwEGcjWyPEJJ9_J5dsBmglTQL_3PTqU,590
44
- ragbits/core/sources/azure.py,sha256=C8tzC1PsuNfzLhWW5el19N_dqEE4Q_LND-m92jTBkIg,7512
45
- ragbits/core/sources/base.py,sha256=E_wHUr1Txrej9Q1KqLt2o7AE-sDMr459zl2mQykONJ4,6579
46
- ragbits/core/sources/exceptions.py,sha256=gv1d0kX304_kqLye6OfZ9szKTwaqLRszMYJCHRQuPRY,969
47
- ragbits/core/sources/gcs.py,sha256=8cLsB0CG3pEAN86jaxqXyutN_aUl5s8sLFXFGQ85KAM,4837
48
- ragbits/core/sources/git.py,sha256=Sf78EtKjwSLmJPt8ltj1MkvQRXsFAPBfN4wesTWCxoo,7608
49
- ragbits/core/sources/hf.py,sha256=HrxMUqEm-FYL-fi-nqCoiS2T_W9LZ0B9UPFtxCYKtSs,4042
50
- ragbits/core/sources/local.py,sha256=Nft4sBCsTtRv94LTGeZkkI0yqNRSB2MbfH315n-wdyU,2720
51
- ragbits/core/sources/s3.py,sha256=MWRlVa1XA_aQV5iJg6FG4uuEA74Kf5HENNaAXbXGC9c,7339
52
- ragbits/core/sources/web.py,sha256=daxifFHTBFK8QoCdtBWTWuoQ_D-LcQKoX2eHRje58DY,2717
53
- ragbits/core/utils/__init__.py,sha256=kn8ht1kb2aWZ0c6Z_bn4tOpQFfr-ctJxkpKBZkN7vZ8,66
54
- ragbits/core/utils/_pyproject.py,sha256=1I0VIDgUxsy4E7mNc09HVUrVDITSiytagIX6y0GfIYI,3608
55
- ragbits/core/utils/config_handling.py,sha256=Wz78cM9fM_ohm65mRas9bZyOnxt-5M8DrKPcF9Vzdzk,7841
56
- ragbits/core/utils/decorators.py,sha256=yZUwpI8cXLqNUEVMwN7JnlkvmhDvX4NNqgC6fKN-Pk4,1862
57
- ragbits/core/utils/dict_transformations.py,sha256=RK4ANrpXwXv3DjA1DcsDRYPHhNkt_StGxUJkLKW_psA,9103
58
- ragbits/core/utils/helpers.py,sha256=zTySnPGV8OEXHRYdLPtiOnHmazVFIPdJPSU2JlE_Dbs,349
59
- ragbits/core/utils/pydantic.py,sha256=Wlqn1Jt1kS2zNsPAfzaixw1XTOa_-FO_tsvE7r2pIr4,704
60
- ragbits/core/utils/secrets.py,sha256=Pjs6Tn1aBHY5vVerDkm9DBTgl8xawAuGPXX74xxs2Mw,1558
61
- ragbits/core/vector_stores/__init__.py,sha256=UUeJ2nat1lU3irP7svCx0R_1ffAlaWG4H-X88z0i-Dg,281
62
- ragbits/core/vector_stores/_cli.py,sha256=oI2JBp4HHtyCv85Ou5bZLBr12B2_0SjCQvrsR4KWdnk,3834
63
- ragbits/core/vector_stores/base.py,sha256=JQeEj6R8ngLbs0UI5YbuGMHmfJ5Q6097eQ1pNqbLQgg,10649
64
- ragbits/core/vector_stores/chroma.py,sha256=s96mP3XfhUPFxuQRUZDLHRYzk555QuFP1EleJvtqqB0,11319
65
- ragbits/core/vector_stores/hybrid.py,sha256=x8ak3jn6nHHokSIrdUzufZA1Jv6k7SRaEwR8K5ZyX0U,4085
66
- ragbits/core/vector_stores/hybrid_strategies.py,sha256=WreabPO5S7d1He-x8FjDJcFoIW77GIrdLeoYM-GwWrw,7554
67
- ragbits/core/vector_stores/in_memory.py,sha256=y74el3h6JV3uRfg8nu0w9Zseu64ejHfziViQFqWYxNM,5928
68
- ragbits/core/vector_stores/pgvector.py,sha256=xOPf51323oHTbxX-V1TwqYiiFsMas-qIiBrlAAndp-A,16805
69
- ragbits/core/vector_stores/qdrant.py,sha256=SejPISannqEqyMoz--mOrNk_To4QDCi4VtzL0TtKucA,12569
70
- ragbits_core-0.16.0.dist-info/METADATA,sha256=iwHBIzdkCKgybiL6lG6mSWVgZ5o1S43SJcVntLV7zgk,4289
71
- ragbits_core-0.16.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
72
- ragbits_core-0.16.0.dist-info/RECORD,,