biblicus 0.16.0__py3-none-any.whl → 1.1.0__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 (57) hide show
  1. biblicus/__init__.py +25 -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 +248 -191
  9. biblicus/{recipes.py → configuration.py} +14 -14
  10. biblicus/constants.py +2 -2
  11. biblicus/context.py +27 -12
  12. biblicus/context_engine/__init__.py +53 -0
  13. biblicus/context_engine/assembler.py +1090 -0
  14. biblicus/context_engine/compaction.py +110 -0
  15. biblicus/context_engine/models.py +423 -0
  16. biblicus/context_engine/retrieval.py +133 -0
  17. biblicus/corpus.py +233 -124
  18. biblicus/errors.py +27 -3
  19. biblicus/evaluation.py +27 -25
  20. biblicus/extraction.py +103 -98
  21. biblicus/extraction_evaluation.py +26 -26
  22. biblicus/extractors/deepgram_stt.py +7 -7
  23. biblicus/extractors/docling_granite_text.py +11 -11
  24. biblicus/extractors/docling_smol_text.py +11 -11
  25. biblicus/extractors/markitdown_text.py +4 -4
  26. biblicus/extractors/openai_stt.py +7 -7
  27. biblicus/extractors/paddleocr_vl_text.py +20 -18
  28. biblicus/extractors/pipeline.py +8 -8
  29. biblicus/extractors/rapidocr_text.py +3 -3
  30. biblicus/extractors/unstructured_text.py +3 -3
  31. biblicus/hooks.py +4 -4
  32. biblicus/knowledge_base.py +34 -32
  33. biblicus/models.py +84 -81
  34. biblicus/retrieval.py +49 -42
  35. biblicus/retrievers/__init__.py +50 -0
  36. biblicus/retrievers/base.py +65 -0
  37. biblicus/{backends → retrievers}/embedding_index_common.py +80 -44
  38. biblicus/{backends → retrievers}/embedding_index_file.py +96 -61
  39. biblicus/{backends → retrievers}/embedding_index_inmemory.py +100 -69
  40. biblicus/retrievers/hybrid.py +301 -0
  41. biblicus/{backends → retrievers}/scan.py +84 -73
  42. biblicus/{backends → retrievers}/sqlite_full_text_search.py +115 -101
  43. biblicus/{backends → retrievers}/tf_vector.py +103 -100
  44. biblicus/sources.py +46 -11
  45. biblicus/text/link.py +6 -0
  46. biblicus/text/prompts.py +18 -8
  47. biblicus/text/tool_loop.py +63 -5
  48. {biblicus-0.16.0.dist-info → biblicus-1.1.0.dist-info}/METADATA +32 -23
  49. biblicus-1.1.0.dist-info/RECORD +91 -0
  50. biblicus/backends/__init__.py +0 -50
  51. biblicus/backends/base.py +0 -65
  52. biblicus/backends/hybrid.py +0 -291
  53. biblicus-0.16.0.dist-info/RECORD +0 -86
  54. {biblicus-0.16.0.dist-info → biblicus-1.1.0.dist-info}/WHEEL +0 -0
  55. {biblicus-0.16.0.dist-info → biblicus-1.1.0.dist-info}/entry_points.txt +0 -0
  56. {biblicus-0.16.0.dist-info → biblicus-1.1.0.dist-info}/licenses/LICENSE +0 -0
  57. {biblicus-0.16.0.dist-info → biblicus-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,291 +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
- max_total_characters = budget.max_total_characters
221
- expanded_characters = (
222
- max_total_characters * multiplier if max_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
- max_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
- hash=base_evidence.hash,
289
- )
290
- )
291
- return candidates
@@ -1,86 +0,0 @@
1
- biblicus/__init__.py,sha256=VK1nvxxf1NI1u5Ad94yyMpC5Xc_HJ7-3F_TnJdhItbA,496
2
- biblicus/__main__.py,sha256=ipfkUoTlocVnrQDM69C7TeBqQxmHVeiWMRaT3G9rtnk,117
3
- biblicus/chunking.py,sha256=GdJr0skAAI0Su99mr7dXqCgR7eJ0sJu8n2XesVGyddY,13206
4
- biblicus/cli.py,sha256=x3bbtg_nzvIZlHmiPp-4L2EtV6wugTMueFTkXQy9y1s,43372
5
- biblicus/constants.py,sha256=gAlEVJhxdFj-eWWJrlYbP7H1X3c5gwhrIBq9NQ1Vq_E,371
6
- biblicus/context.py,sha256=iXRFGpf_5YDPsDsm_iTK6nCvtUWDoYVI7op-l2QU3uA,10189
7
- biblicus/corpus.py,sha256=qSDnYJXhWlF2p_BbFLl6xtI53lIIPxwyKLLGLC432Sg,55612
8
- biblicus/crawl.py,sha256=n8rXBMnziBK9vtKQQCXYOpBzqsPCswj2PzVJUb370KY,6250
9
- biblicus/embedding_providers.py,sha256=phWEsq1vryyTFRRs6uZ0sx9FhrqWIkDsS3I52I64zqM,3839
10
- biblicus/errors.py,sha256=uMajd5DvgnJ_-jq5sbeom1GV8DPUc-kojBaECFi6CsY,467
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=JmlJw8WD_fgstuq1PyWVzU9kzvVzyv7_xOvhS70xwUw,6654
22
- biblicus/models.py,sha256=5AQ6oXK_KJyU0Kyv5ff8yD8nevNKb_6Hjr2_vlRSlK0,16297
23
- biblicus/recipes.py,sha256=rqU66QnjOup6O8Y9Yq7XszmpoM0Pyrjw3RrfdnlVqgE,4210
24
- biblicus/retrieval.py,sha256=GXYT_3RPdqZEYdBQ4F4lIXDOhWw0nfL9bd781bgrn_4,4279
25
- biblicus/sources.py,sha256=EFy8-rQNLsyzz-98mH-z8gEHMYbqigcNFKLaR92KfDE,7241
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=WdmnOr8-QaLZH9b7TNmiWg_5auIqDYviXc-twOd7WsM,10216
47
- biblicus/backends/embedding_index_file.py,sha256=igwlWHuqQD72qyJ3OZ9uyBGeha7AMg6uA3Uu9QD_2_M,9552
48
- biblicus/backends/embedding_index_inmemory.py,sha256=oZCNS1kMajEj8u9C5iOjs_dAwhZ8ajU_br0F_8onRLY,9457
49
- biblicus/backends/hybrid.py,sha256=_kqpvD9V6oFdFSXE7K_rTN8qqH-vDIigPDX0uQxFhaM,10828
50
- biblicus/backends/scan.py,sha256=hdNnQWqi5IH6j95w30BZHxLJ0W9PTaOkqfWJuxCCEMI,12478
51
- biblicus/backends/sqlite_full_text_search.py,sha256=tkFYdKwH6WvAF3En1fvGN_03Ud0_Z1igGxhUW4meCbA,24496
52
- biblicus/backends/tf_vector.py,sha256=HFV2aj1i4uxFYBd4GOv2M665ZcaQNgHWA4qmLbpIc4k,15220
53
- biblicus/extractors/__init__.py,sha256=ci3oldbdQZ8meAfHccM48CqQtZsPSRg3HkPrBSZF15M,2673
54
- biblicus/extractors/base.py,sha256=ka-nz_1zHPr4TS9sU4JfOoY-PJh7lbHPBOEBrbQFGSc,2171
55
- biblicus/extractors/deepgram_stt.py,sha256=VI71i4lbE-EFHcvpNcCPRpT8z7A5IuaSrT1UaPyZ8UY,6323
56
- biblicus/extractors/docling_granite_text.py,sha256=aFNx-HubvaMmVJHbNqk3CR_ilSwN96-phkaENT6E2B0,6879
57
- biblicus/extractors/docling_smol_text.py,sha256=cSbQcT4O47MMcM6_pmQCvqgC5ferLvaxJnm3v9EQd0A,6811
58
- biblicus/extractors/markitdown_text.py,sha256=ZvN2TFh65icTTdzCe7L-ZB8zTPP2mxQ4MhOOqSc81Z0,4547
59
- biblicus/extractors/metadata_text.py,sha256=7FbEPp0K1mXc7FH1_c0KhPhPexF9U6eLd3TVY1vTp1s,3537
60
- biblicus/extractors/openai_stt.py,sha256=fggErIu6YN6tXbleNTuROhfYi7zDgMd2vD_ecXZ7eXs,7162
61
- biblicus/extractors/paddleocr_vl_text.py,sha256=59csxihkqK0lELpAtK2YLcfbSUvNGiuOw7CwPa_0l_c,11692
62
- biblicus/extractors/pass_through_text.py,sha256=DNxkCwpH2bbXjPGPEQwsx8kfqXi6rIxXNY_n3TU2-WI,2777
63
- biblicus/extractors/pdf_text.py,sha256=YtUphgLVxyWJXew6ZsJ8wBRh67Y5ri4ZTRlMmq3g1Bk,3255
64
- biblicus/extractors/pipeline.py,sha256=LY6eM3ypw50MDB2cPEQqZrjxkhVvIc6sv4UEhHdNDrE,3208
65
- biblicus/extractors/rapidocr_text.py,sha256=StvizEha5BkEG7i5KJmnOUtji89p5pghF4w8iQ-WwFk,4776
66
- biblicus/extractors/select_longest_text.py,sha256=wRveXAfYLdj7CpGuo4RoD7zE6SIfylRCbv40z2azO0k,3702
67
- biblicus/extractors/select_override.py,sha256=gSpffFmn1ux9pGtFvHD5Uu_LO8TmmJC4L_mvjehiSec,4014
68
- biblicus/extractors/select_smart_override.py,sha256=-sLMnNoeXbCB3dO9zflQq324eHuLbd6hpveSwduXP-U,6763
69
- biblicus/extractors/select_text.py,sha256=w0ATmDy3tWWbOObzW87jGZuHbgXllUhotX5XyySLs-o,3395
70
- biblicus/extractors/unstructured_text.py,sha256=l2S_wD_htu7ZHoJQNQtP-kGlEgOeKV_w2IzAC93lePE,3564
71
- biblicus/text/__init__.py,sha256=MiaGAY7xWlUCeBzDzNz6pJnSMiU_Ge5EmlSiEzhqTRo,947
72
- biblicus/text/annotate.py,sha256=asmpj3_s_t8hl6stEg99apmqxAhDTkoPzHhZNggYE3Y,8355
73
- biblicus/text/extract.py,sha256=pdnUiZWtfCUj7kZK5zhd-tjqokgmhYYheWhyN3iShRU,7669
74
- biblicus/text/link.py,sha256=Xl0yxD1rvbRJRVdWG_ZP6zgmbpgWSJYcUcNM06-OUWU,20077
75
- biblicus/text/markup.py,sha256=8jj9aX03HiZTOWdPs_VC4JLpQ7TlPHgGuXj_QUQIHVw,6265
76
- biblicus/text/models.py,sha256=REp6RowUWFdV-6y437JENP7XtGKt57BOvVtF91KmUqI,10853
77
- biblicus/text/prompts.py,sha256=Z5fSsy1Xzr0rCI0WZ3djiEQlbRDncyNBQ7_ZoWVPL4g,6704
78
- biblicus/text/redact.py,sha256=tkDRmA0VvOZwMryEmBPLEHf3Z6VHJkkaWjBaNIMyGZ0,8415
79
- biblicus/text/slice.py,sha256=dlHxGO8c5P8BszXGwlNQoQ-cyWjJf6PfS1LUBJXXGEE,5762
80
- biblicus/text/tool_loop.py,sha256=w1PGLBvIemOdi6l0ArdYDVL7zgx-RC76bBOO0PKqpt0,11831
81
- biblicus-0.16.0.dist-info/licenses/LICENSE,sha256=lw44GXFG_Q0fS8m5VoEvv_xtdBXK26pBcbSPUCXee_Q,1078
82
- biblicus-0.16.0.dist-info/METADATA,sha256=D_qXRDdM_7LnOD-GBtnqwldEWOKjt_uV-TfqvnL8MAU,30933
83
- biblicus-0.16.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
84
- biblicus-0.16.0.dist-info/entry_points.txt,sha256=BZmO4H8Uz00fyi1RAFryOCGfZgX7eHWkY2NE-G54U5A,47
85
- biblicus-0.16.0.dist-info/top_level.txt,sha256=sUD_XVZwDxZ29-FBv1MknTGh4mgDXznGuP28KJY_WKc,9
86
- biblicus-0.16.0.dist-info/RECORD,,