biblicus 1.0.0__py3-none-any.whl → 1.1.1__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 (51) hide show
  1. biblicus/__init__.py +5 -5
  2. biblicus/analysis/__init__.py +1 -1
  3. biblicus/analysis/base.py +10 -10
  4. biblicus/analysis/markov.py +78 -68
  5. biblicus/analysis/models.py +47 -47
  6. biblicus/analysis/profiling.py +58 -48
  7. biblicus/analysis/topic_modeling.py +56 -51
  8. biblicus/cli.py +224 -177
  9. biblicus/{recipes.py → configuration.py} +14 -14
  10. biblicus/constants.py +2 -2
  11. biblicus/context_engine/assembler.py +49 -19
  12. biblicus/context_engine/retrieval.py +46 -42
  13. biblicus/corpus.py +116 -108
  14. biblicus/errors.py +3 -3
  15. biblicus/evaluation.py +27 -25
  16. biblicus/extraction.py +103 -98
  17. biblicus/extraction_evaluation.py +26 -26
  18. biblicus/extractors/deepgram_stt.py +7 -7
  19. biblicus/extractors/docling_granite_text.py +11 -11
  20. biblicus/extractors/docling_smol_text.py +11 -11
  21. biblicus/extractors/markitdown_text.py +4 -4
  22. biblicus/extractors/openai_stt.py +7 -7
  23. biblicus/extractors/paddleocr_vl_text.py +20 -18
  24. biblicus/extractors/pipeline.py +8 -8
  25. biblicus/extractors/rapidocr_text.py +3 -3
  26. biblicus/extractors/unstructured_text.py +3 -3
  27. biblicus/hooks.py +4 -4
  28. biblicus/knowledge_base.py +33 -31
  29. biblicus/models.py +78 -78
  30. biblicus/retrieval.py +47 -40
  31. biblicus/retrievers/__init__.py +50 -0
  32. biblicus/retrievers/base.py +65 -0
  33. biblicus/{backends → retrievers}/embedding_index_common.py +44 -41
  34. biblicus/{backends → retrievers}/embedding_index_file.py +87 -58
  35. biblicus/{backends → retrievers}/embedding_index_inmemory.py +88 -59
  36. biblicus/retrievers/hybrid.py +301 -0
  37. biblicus/{backends → retrievers}/scan.py +83 -73
  38. biblicus/{backends → retrievers}/sqlite_full_text_search.py +115 -101
  39. biblicus/{backends → retrievers}/tf_vector.py +87 -77
  40. biblicus/text/prompts.py +16 -8
  41. biblicus/text/tool_loop.py +63 -5
  42. {biblicus-1.0.0.dist-info → biblicus-1.1.1.dist-info}/METADATA +52 -43
  43. biblicus-1.1.1.dist-info/RECORD +91 -0
  44. biblicus/backends/__init__.py +0 -50
  45. biblicus/backends/base.py +0 -65
  46. biblicus/backends/hybrid.py +0 -292
  47. biblicus-1.0.0.dist-info/RECORD +0 -91
  48. {biblicus-1.0.0.dist-info → biblicus-1.1.1.dist-info}/WHEEL +0 -0
  49. {biblicus-1.0.0.dist-info → biblicus-1.1.1.dist-info}/entry_points.txt +0 -0
  50. {biblicus-1.0.0.dist-info → biblicus-1.1.1.dist-info}/licenses/LICENSE +0 -0
  51. {biblicus-1.0.0.dist-info → biblicus-1.1.1.dist-info}/top_level.txt +0 -0
@@ -1,292 +0,0 @@
1
- """
2
- Hybrid retrieval backend combining lexical and vector results.
3
- """
4
-
5
- from __future__ import annotations
6
-
7
- from typing import Dict, List, Optional
8
-
9
- from pydantic import BaseModel, ConfigDict, Field, model_validator
10
-
11
- from ..corpus import Corpus
12
- from ..models import Evidence, QueryBudget, RetrievalResult, RetrievalRun
13
- from ..retrieval import apply_budget, create_recipe_manifest, create_run_manifest
14
- from ..time import utc_now_iso
15
-
16
-
17
- class HybridRecipeConfig(BaseModel):
18
- """
19
- Configuration for hybrid retrieval fusion.
20
-
21
- :ivar lexical_backend: Backend identifier for lexical retrieval.
22
- :vartype lexical_backend: str
23
- :ivar embedding_backend: Backend identifier for embedding retrieval.
24
- :vartype embedding_backend: str
25
- :ivar lexical_weight: Weight for lexical scores.
26
- :vartype lexical_weight: float
27
- :ivar embedding_weight: Weight for embedding scores.
28
- :vartype embedding_weight: float
29
- :ivar lexical_config: Optional lexical backend configuration.
30
- :vartype lexical_config: dict[str, object]
31
- :ivar embedding_config: Optional embedding backend configuration.
32
- :vartype embedding_config: dict[str, object]
33
- """
34
-
35
- model_config = ConfigDict(extra="forbid")
36
-
37
- lexical_backend: str = Field(default="sqlite-full-text-search", min_length=1)
38
- embedding_backend: str = Field(default="tf-vector", min_length=1)
39
- lexical_weight: float = Field(default=0.5, ge=0, le=1)
40
- embedding_weight: float = Field(default=0.5, ge=0, le=1)
41
- lexical_config: Dict[str, object] = Field(default_factory=dict)
42
- embedding_config: Dict[str, object] = Field(default_factory=dict)
43
-
44
- @model_validator(mode="after")
45
- def _validate_weights(self) -> "HybridRecipeConfig":
46
- if abs((self.lexical_weight + self.embedding_weight) - 1.0) > 1e-6:
47
- raise ValueError("weights must sum to 1")
48
- return self
49
-
50
-
51
- class HybridBackend:
52
- """
53
- Hybrid backend that fuses lexical and embedding retrieval.
54
-
55
- :ivar backend_id: Backend identifier.
56
- :vartype backend_id: str
57
- """
58
-
59
- backend_id = "hybrid"
60
-
61
- def build_run(
62
- self, corpus: Corpus, *, recipe_name: str, config: Dict[str, object]
63
- ) -> RetrievalRun:
64
- """
65
- Build or register a hybrid retrieval run.
66
-
67
- :param corpus: Corpus to build against.
68
- :type corpus: Corpus
69
- :param recipe_name: Human-readable recipe name.
70
- :type recipe_name: str
71
- :param config: Backend-specific configuration values.
72
- :type config: dict[str, object]
73
- :return: Run manifest describing the build.
74
- :rtype: RetrievalRun
75
- """
76
- recipe_config = HybridRecipeConfig.model_validate(config)
77
- _ensure_backend_supported(recipe_config)
78
- lexical_backend = _resolve_backend(recipe_config.lexical_backend)
79
- embedding_backend = _resolve_backend(recipe_config.embedding_backend)
80
- lexical_run = lexical_backend.build_run(
81
- corpus, recipe_name=f"{recipe_name}-lexical", config=recipe_config.lexical_config
82
- )
83
- embedding_run = embedding_backend.build_run(
84
- corpus, recipe_name=f"{recipe_name}-embedding", config=recipe_config.embedding_config
85
- )
86
- recipe = create_recipe_manifest(
87
- backend_id=self.backend_id,
88
- name=recipe_name,
89
- config=recipe_config.model_dump(),
90
- )
91
- stats = {
92
- "lexical_run_id": lexical_run.run_id,
93
- "embedding_run_id": embedding_run.run_id,
94
- }
95
- run = create_run_manifest(corpus, recipe=recipe, stats=stats, artifact_paths=[])
96
- corpus.write_run(run)
97
- return run
98
-
99
- def query(
100
- self,
101
- corpus: Corpus,
102
- *,
103
- run: RetrievalRun,
104
- query_text: str,
105
- budget: QueryBudget,
106
- ) -> RetrievalResult:
107
- """
108
- Query using both lexical and embedding backends and fuse scores.
109
-
110
- :param corpus: Corpus associated with the run.
111
- :type corpus: Corpus
112
- :param run: Run manifest to use for querying.
113
- :type run: RetrievalRun
114
- :param query_text: Query text to execute.
115
- :type query_text: str
116
- :param budget: Evidence selection budget.
117
- :type budget: QueryBudget
118
- :return: Retrieval results containing evidence.
119
- :rtype: RetrievalResult
120
- """
121
- recipe_config = HybridRecipeConfig.model_validate(run.recipe.config)
122
- _ensure_backend_supported(recipe_config)
123
- lexical_backend = _resolve_backend(recipe_config.lexical_backend)
124
- embedding_backend = _resolve_backend(recipe_config.embedding_backend)
125
- lexical_run_id = run.stats.get("lexical_run_id")
126
- embedding_run_id = run.stats.get("embedding_run_id")
127
- if not lexical_run_id or not embedding_run_id:
128
- raise ValueError("Hybrid run missing lexical or embedding run identifiers")
129
- lexical_run = corpus.load_run(str(lexical_run_id))
130
- embedding_run = corpus.load_run(str(embedding_run_id))
131
- component_budget = _expand_component_budget(budget)
132
- lexical_result = lexical_backend.query(
133
- corpus, run=lexical_run, query_text=query_text, budget=component_budget
134
- )
135
- embedding_result = embedding_backend.query(
136
- corpus, run=embedding_run, query_text=query_text, budget=component_budget
137
- )
138
- candidates = _fuse_evidence(
139
- lexical_result.evidence,
140
- embedding_result.evidence,
141
- lexical_weight=recipe_config.lexical_weight,
142
- embedding_weight=recipe_config.embedding_weight,
143
- )
144
- sorted_candidates = sorted(
145
- candidates,
146
- key=lambda evidence_item: (-evidence_item.score, evidence_item.item_id),
147
- )
148
- ranked = [
149
- evidence_item.model_copy(
150
- update={
151
- "rank": index,
152
- "recipe_id": run.recipe.recipe_id,
153
- "run_id": run.run_id,
154
- }
155
- )
156
- for index, evidence_item in enumerate(sorted_candidates, start=1)
157
- ]
158
- evidence = apply_budget(ranked, budget)
159
- stats = {
160
- "candidates": len(sorted_candidates),
161
- "returned": len(evidence),
162
- "fusion_weights": {
163
- "lexical": recipe_config.lexical_weight,
164
- "embedding": recipe_config.embedding_weight,
165
- },
166
- }
167
- return RetrievalResult(
168
- query_text=query_text,
169
- budget=budget,
170
- run_id=run.run_id,
171
- recipe_id=run.recipe.recipe_id,
172
- backend_id=self.backend_id,
173
- generated_at=utc_now_iso(),
174
- evidence=evidence,
175
- stats=stats,
176
- )
177
-
178
-
179
- def _ensure_backend_supported(recipe_config: HybridRecipeConfig) -> None:
180
- """
181
- Validate that hybrid backends do not reference the hybrid backend itself.
182
-
183
- :param recipe_config: Parsed hybrid recipe configuration.
184
- :type recipe_config: HybridRecipeConfig
185
- :return: None.
186
- :rtype: None
187
- :raises ValueError: If hybrid is used as a component backend.
188
- """
189
- if recipe_config.lexical_backend == HybridBackend.backend_id:
190
- raise ValueError("Hybrid backend cannot use itself as the lexical backend")
191
- if recipe_config.embedding_backend == HybridBackend.backend_id:
192
- raise ValueError("Hybrid backend cannot use itself as the embedding backend")
193
-
194
-
195
- def _resolve_backend(backend_id: str):
196
- """
197
- Resolve a backend by identifier.
198
-
199
- :param backend_id: Backend identifier.
200
- :type backend_id: str
201
- :return: Backend instance.
202
- :rtype: object
203
- """
204
- from . import get_backend
205
-
206
- return get_backend(backend_id)
207
-
208
-
209
- def _expand_component_budget(budget: QueryBudget, *, multiplier: int = 5) -> QueryBudget:
210
- """
211
- Expand a final budget to collect more candidates for fusion.
212
-
213
- :param budget: Final evidence budget.
214
- :type budget: QueryBudget
215
- :param multiplier: Candidate expansion multiplier.
216
- :type multiplier: int
217
- :return: Expanded budget for component backends.
218
- :rtype: QueryBudget
219
- """
220
- maximum_total_characters = budget.maximum_total_characters
221
- expanded_characters = (
222
- maximum_total_characters * multiplier if maximum_total_characters is not None else None
223
- )
224
- expanded_max_items_per_source = (
225
- budget.max_items_per_source * multiplier
226
- if budget.max_items_per_source is not None
227
- else None
228
- )
229
- requested_items = budget.max_total_items + budget.offset
230
- return QueryBudget(
231
- max_total_items=requested_items * multiplier,
232
- offset=0,
233
- maximum_total_characters=expanded_characters,
234
- max_items_per_source=expanded_max_items_per_source,
235
- )
236
-
237
-
238
- def _fuse_evidence(
239
- lexical: List[Evidence],
240
- embedding: List[Evidence],
241
- *,
242
- lexical_weight: float,
243
- embedding_weight: float,
244
- ) -> List[Evidence]:
245
- """
246
- Fuse lexical and embedding evidence lists into hybrid candidates.
247
-
248
- :param lexical: Lexical evidence list.
249
- :type lexical: list[Evidence]
250
- :param embedding: Embedding evidence list.
251
- :type embedding: list[Evidence]
252
- :param lexical_weight: Lexical score weight.
253
- :type lexical_weight: float
254
- :param embedding_weight: Embedding score weight.
255
- :type embedding_weight: float
256
- :return: Hybrid evidence list.
257
- :rtype: list[Evidence]
258
- """
259
- merged: Dict[str, Dict[str, Optional[Evidence]]] = {}
260
- for evidence_item in lexical:
261
- merged.setdefault(evidence_item.item_id, {})["lexical"] = evidence_item
262
- for evidence_item in embedding:
263
- merged.setdefault(evidence_item.item_id, {})["embedding"] = evidence_item
264
-
265
- candidates: List[Evidence] = []
266
- for item_id, sources in merged.items():
267
- lexical_evidence = sources.get("lexical")
268
- embedding_evidence = sources.get("embedding")
269
- lexical_score = lexical_evidence.score if lexical_evidence else 0.0
270
- embedding_score = embedding_evidence.score if embedding_evidence else 0.0
271
- combined_score = (lexical_score * lexical_weight) + (embedding_score * embedding_weight)
272
- base_evidence = lexical_evidence or embedding_evidence
273
- candidates.append(
274
- Evidence(
275
- item_id=item_id,
276
- source_uri=base_evidence.source_uri,
277
- media_type=base_evidence.media_type,
278
- score=combined_score,
279
- rank=1,
280
- text=base_evidence.text,
281
- content_ref=base_evidence.content_ref,
282
- span_start=base_evidence.span_start,
283
- span_end=base_evidence.span_end,
284
- stage="hybrid",
285
- stage_scores={"lexical": lexical_score, "embedding": embedding_score},
286
- recipe_id="",
287
- run_id="",
288
- metadata=base_evidence.metadata,
289
- hash=base_evidence.hash,
290
- )
291
- )
292
- return candidates
@@ -1,91 +0,0 @@
1
- biblicus/__init__.py,sha256=z9Wif5-ZzIrptsUS8OELW5zG5_R3-4ZcSuVUkfqKbaA,989
2
- biblicus/__main__.py,sha256=ipfkUoTlocVnrQDM69C7TeBqQxmHVeiWMRaT3G9rtnk,117
3
- biblicus/chunking.py,sha256=GdJr0skAAI0Su99mr7dXqCgR7eJ0sJu8n2XesVGyddY,13206
4
- biblicus/cli.py,sha256=DdEL8Uvl38Zn2w4egCxQ4zWNelrI3QDs4qh4tGWGuAI,43793
5
- biblicus/constants.py,sha256=gAlEVJhxdFj-eWWJrlYbP7H1X3c5gwhrIBq9NQ1Vq_E,371
6
- biblicus/context.py,sha256=I7L86ag2AbNr_QgiP5YSt1uwwULGx1cH73eR2nE9T3g,10842
7
- biblicus/corpus.py,sha256=LySjqBpTF_B19nMyGBoeB8AMDlqohcgsBfmJILm3P5c,59546
8
- biblicus/crawl.py,sha256=n8rXBMnziBK9vtKQQCXYOpBzqsPCswj2PzVJUb370KY,6250
9
- biblicus/embedding_providers.py,sha256=phWEsq1vryyTFRRs6uZ0sx9FhrqWIkDsS3I52I64zqM,3839
10
- biblicus/errors.py,sha256=g5TRPdO2XGi-7Wi1C4CXMJ6dTQKYAyP--EWKCv6FGKs,1362
11
- biblicus/evaluation.py,sha256=5xWpb-8f49Osh9aHzo1ab3AXOmls3Imc5rdnEC0pN-8,8143
12
- biblicus/evidence_processing.py,sha256=sJe6T1nLxvU0xs9yMH8JZZS19zHXMR-Fpr5lWi5ndUM,6120
13
- biblicus/extraction.py,sha256=qvrsq6zSz2Kg-cap-18HPHC9pQlqEGo7pyID2uKCyBo,19760
14
- biblicus/extraction_evaluation.py,sha256=cBC2B1nQCtXmOcVWUhHyO2NJRX8QSDuqhVjEc8PXrOA,10400
15
- biblicus/frontmatter.py,sha256=uFC4iIrgpnTDiP1gvAnT_CbFYdNuUVtETX7tZ3a9g-Y,2517
16
- biblicus/hook_logging.py,sha256=IMvde-JhVWrx9tNz3eDJ1CY_rr5Sj7DZ2YNomYCZbz0,5366
17
- biblicus/hook_manager.py,sha256=ZCAkE5wLvn4lnQz8jho_o0HGEC9KdQd9qitkAEUQRcw,6997
18
- biblicus/hooks.py,sha256=OHQOmOi7rUcQqYWVeod4oPe8nVLepD7F_SlN7O_-BsE,7863
19
- biblicus/ignore.py,sha256=fyjt34E6tWNNrm1FseOhgH2MgryyVBQVzxhKL5s4aio,1800
20
- biblicus/inference.py,sha256=_k00AIPoXD2lruiTB-JUagtY4f_WKcdzA3axwiq1tck,3512
21
- biblicus/knowledge_base.py,sha256=jpFEvo8gbEuwRUVYRRgQFvRTJZQml0WCHWSeY-CS4ag,6658
22
- biblicus/models.py,sha256=nvuq5Y96hHvuhMCuHff38wNITyQJam6zFrgFxH5Kh7g,16475
23
- biblicus/recipes.py,sha256=rqU66QnjOup6O8Y9Yq7XszmpoM0Pyrjw3RrfdnlVqgE,4210
24
- biblicus/retrieval.py,sha256=qAauHbnQcxtWZzonyOuwgSsffPyZ--0Z8wW-dEYk0z4,4287
25
- biblicus/sources.py,sha256=FNwW1FWts0jxWIL3AHon7D6c5ZatyG9AGFqzn1Id5mE,8504
26
- biblicus/time.py,sha256=3BSKOSo7R10K-0Dzrbdtl3fh5_yShTYqfdlKvvdkx7M,485
27
- biblicus/uris.py,sha256=xXD77lqsT9NxbyzI1spX9Y5a3-U6sLYMnpeSAV7g-nM,2013
28
- biblicus/user_config.py,sha256=UXUYBNUN4FR37ggZGJG1wv3K8XzsMR8pXW1T18lrivw,6495
29
- biblicus/_vendor/dotyaml/__init__.py,sha256=OVv6IsuCvsjaUznLzuit4UbSLVg4TiTVm9cOPY1Y2Cs,409
30
- biblicus/_vendor/dotyaml/interpolation.py,sha256=FVUkdQr_KbXjoFPvGTv6I5v0X5iZkJe5yhZtYKRbYzI,1991
31
- biblicus/_vendor/dotyaml/loader.py,sha256=vFfnhbvHYYyOKzl5iq2FH97GSHH2GvEHmGiPnE0g0kA,6954
32
- biblicus/_vendor/dotyaml/transformer.py,sha256=RWNrm_KAsanG409HEIWquTH9i_jz-ZFK9fM86emXeF4,3724
33
- biblicus/ai/__init__.py,sha256=HY8PKhqRLIDYJYlL9A2JjqKxQaujITNLYgIytNUhnrU,1161
34
- biblicus/ai/embeddings.py,sha256=n2xlonZOHcmDrP1XMhGcja5Hzr8r87PF-IecH-Yhu98,3703
35
- biblicus/ai/llm.py,sha256=g724_UAxmicB_W-Z7Uu9SRsI9-aVNZUlYIjvnlE17VE,4712
36
- biblicus/ai/models.py,sha256=6newnT0NJf3uf9FvWXVC-9Gkk5xRB-PjXDZpeBHA04Y,7857
37
- biblicus/analysis/__init__.py,sha256=I4LqxfKPKF3DEVmAyagQ8J1RN-ia3fyfKJ9frCllZQE,1385
38
- biblicus/analysis/base.py,sha256=gB4ilvyMpiWU1m_ydy2dIHGP96ZFIFvVUL9iVDZKPJM,1265
39
- biblicus/analysis/markov.py,sha256=1OESAJYUkk1F3l3DUryrV8Hx1aa6OTPiXCDdgfAg6pU,63168
40
- biblicus/analysis/models.py,sha256=FnUAO6n1yjagYlhe2ocRtfb3IZT3W03rrEZ9LdCx7Kc,56214
41
- biblicus/analysis/profiling.py,sha256=v2B4Tn9WiXRRP_wIADBPRQVKkMc92KXCas7OBa7n0LU,10670
42
- biblicus/analysis/schema.py,sha256=MCiAQJmijVk8iM8rOUYbzyaDwsMR-Oo86iZU5NCbDMM,435
43
- biblicus/analysis/topic_modeling.py,sha256=mNBiRMpY5Jtyz8Aj-WXYY8guEghx9jozTfgveinJLoc,22135
44
- biblicus/backends/__init__.py,sha256=WJSvXc6boEj8PeFr__AC6l_0lfBPJpaVgMbVq30vtZU,1669
45
- biblicus/backends/base.py,sha256=Erfj9dXg0nkRKnEcNjHR9_0Ddb2B1NvbmRksVm_g1dU,1776
46
- biblicus/backends/embedding_index_common.py,sha256=wwvp6DjcaAwq-cp2jaO9TvnxDM7JDi-kpgT9uQG9Cxs,11552
47
- biblicus/backends/embedding_index_file.py,sha256=vibYEWa12Gx-Pm8WnuBnMfBaKiwlAvVW1dEzWJc6JO4,9856
48
- biblicus/backends/embedding_index_inmemory.py,sha256=LYiNBRmnh4DB8hmlBxMrm_uNmWi46Jt2EvjCuJGm2DI,9711
49
- biblicus/backends/hybrid.py,sha256=vlsN9N6FZ5A3dQtGXy0W89L4qNQX5EYJNvUuj2-Uqaw,10897
50
- biblicus/backends/scan.py,sha256=NBlfFHkDS3vdv70bgggK-jHykQC3W_i-RDaa97LEwKE,12548
51
- biblicus/backends/sqlite_full_text_search.py,sha256=tkFYdKwH6WvAF3En1fvGN_03Ud0_Z1igGxhUW4meCbA,24496
52
- biblicus/backends/tf_vector.py,sha256=Z5MiEpbZ7A4UtRLYPEU1g8ubjWV5vuyPG40FpElEVzA,15119
53
- biblicus/context_engine/__init__.py,sha256=cIJWTUwOewW1x13a2n0YKfr4-XU0IwlVdAH_0pckfKk,1337
54
- biblicus/context_engine/assembler.py,sha256=ot5mdGJTA1nO8uUP_J_yGXgfVqQhFuEQJ3BH-HF4ZaY,42336
55
- biblicus/context_engine/compaction.py,sha256=2bLaCpT48d1TL7vt9rrcRCgfdHeWWp9LX85Cgij12o0,2921
56
- biblicus/context_engine/models.py,sha256=jesVd83ZQcatO-7yNlzwKkactSQ-e1znYuWof4rxVFg,12762
57
- biblicus/context_engine/retrieval.py,sha256=au_mN8VYc_MhIlbMGHfDf2IK0UWAigj7R5NFXFZ0Kz8,4143
58
- biblicus/extractors/__init__.py,sha256=ci3oldbdQZ8meAfHccM48CqQtZsPSRg3HkPrBSZF15M,2673
59
- biblicus/extractors/base.py,sha256=ka-nz_1zHPr4TS9sU4JfOoY-PJh7lbHPBOEBrbQFGSc,2171
60
- biblicus/extractors/deepgram_stt.py,sha256=VI71i4lbE-EFHcvpNcCPRpT8z7A5IuaSrT1UaPyZ8UY,6323
61
- biblicus/extractors/docling_granite_text.py,sha256=aFNx-HubvaMmVJHbNqk3CR_ilSwN96-phkaENT6E2B0,6879
62
- biblicus/extractors/docling_smol_text.py,sha256=cSbQcT4O47MMcM6_pmQCvqgC5ferLvaxJnm3v9EQd0A,6811
63
- biblicus/extractors/markitdown_text.py,sha256=ZvN2TFh65icTTdzCe7L-ZB8zTPP2mxQ4MhOOqSc81Z0,4547
64
- biblicus/extractors/metadata_text.py,sha256=7FbEPp0K1mXc7FH1_c0KhPhPexF9U6eLd3TVY1vTp1s,3537
65
- biblicus/extractors/openai_stt.py,sha256=fggErIu6YN6tXbleNTuROhfYi7zDgMd2vD_ecXZ7eXs,7162
66
- biblicus/extractors/paddleocr_vl_text.py,sha256=59csxihkqK0lELpAtK2YLcfbSUvNGiuOw7CwPa_0l_c,11692
67
- biblicus/extractors/pass_through_text.py,sha256=DNxkCwpH2bbXjPGPEQwsx8kfqXi6rIxXNY_n3TU2-WI,2777
68
- biblicus/extractors/pdf_text.py,sha256=YtUphgLVxyWJXew6ZsJ8wBRh67Y5ri4ZTRlMmq3g1Bk,3255
69
- biblicus/extractors/pipeline.py,sha256=LY6eM3ypw50MDB2cPEQqZrjxkhVvIc6sv4UEhHdNDrE,3208
70
- biblicus/extractors/rapidocr_text.py,sha256=StvizEha5BkEG7i5KJmnOUtji89p5pghF4w8iQ-WwFk,4776
71
- biblicus/extractors/select_longest_text.py,sha256=wRveXAfYLdj7CpGuo4RoD7zE6SIfylRCbv40z2azO0k,3702
72
- biblicus/extractors/select_override.py,sha256=gSpffFmn1ux9pGtFvHD5Uu_LO8TmmJC4L_mvjehiSec,4014
73
- biblicus/extractors/select_smart_override.py,sha256=-sLMnNoeXbCB3dO9zflQq324eHuLbd6hpveSwduXP-U,6763
74
- biblicus/extractors/select_text.py,sha256=w0ATmDy3tWWbOObzW87jGZuHbgXllUhotX5XyySLs-o,3395
75
- biblicus/extractors/unstructured_text.py,sha256=l2S_wD_htu7ZHoJQNQtP-kGlEgOeKV_w2IzAC93lePE,3564
76
- biblicus/text/__init__.py,sha256=MiaGAY7xWlUCeBzDzNz6pJnSMiU_Ge5EmlSiEzhqTRo,947
77
- biblicus/text/annotate.py,sha256=asmpj3_s_t8hl6stEg99apmqxAhDTkoPzHhZNggYE3Y,8355
78
- biblicus/text/extract.py,sha256=pdnUiZWtfCUj7kZK5zhd-tjqokgmhYYheWhyN3iShRU,7669
79
- biblicus/text/link.py,sha256=2IdOi3WgyBKPFau0bpS1eToV1q2v_6wq5RK5_P_qUDg,20448
80
- biblicus/text/markup.py,sha256=8jj9aX03HiZTOWdPs_VC4JLpQ7TlPHgGuXj_QUQIHVw,6265
81
- biblicus/text/models.py,sha256=REp6RowUWFdV-6y437JENP7XtGKt57BOvVtF91KmUqI,10853
82
- biblicus/text/prompts.py,sha256=-M-8sQ7Dfm1k4j6Kn4ekAuiYe_TkIwLu2VSgpas9rUU,6881
83
- biblicus/text/redact.py,sha256=tkDRmA0VvOZwMryEmBPLEHf3Z6VHJkkaWjBaNIMyGZ0,8415
84
- biblicus/text/slice.py,sha256=dlHxGO8c5P8BszXGwlNQoQ-cyWjJf6PfS1LUBJXXGEE,5762
85
- biblicus/text/tool_loop.py,sha256=w1PGLBvIemOdi6l0ArdYDVL7zgx-RC76bBOO0PKqpt0,11831
86
- biblicus-1.0.0.dist-info/licenses/LICENSE,sha256=lw44GXFG_Q0fS8m5VoEvv_xtdBXK26pBcbSPUCXee_Q,1078
87
- biblicus-1.0.0.dist-info/METADATA,sha256=oyWd6igX6I3o46-VjOAUVskj1pLzZ8DovsTV1mqpPoY,30940
88
- biblicus-1.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
89
- biblicus-1.0.0.dist-info/entry_points.txt,sha256=BZmO4H8Uz00fyi1RAFryOCGfZgX7eHWkY2NE-G54U5A,47
90
- biblicus-1.0.0.dist-info/top_level.txt,sha256=sUD_XVZwDxZ29-FBv1MknTGh4mgDXznGuP28KJY_WKc,9
91
- biblicus-1.0.0.dist-info/RECORD,,