docsmind 0.2.0__tar.gz → 0.4.0__tar.gz
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.
- {docsmind-0.2.0 → docsmind-0.4.0}/CHANGELOG.md +48 -3
- {docsmind-0.2.0 → docsmind-0.4.0}/PKG-INFO +112 -22
- {docsmind-0.2.0 → docsmind-0.4.0}/README.md +108 -21
- {docsmind-0.2.0 → docsmind-0.4.0}/pyproject.toml +13 -3
- docsmind-0.4.0/src/docsmind/adapters/llm/__init__.py +31 -0
- docsmind-0.4.0/src/docsmind/adapters/llm/anthropic_llm.py +152 -0
- docsmind-0.4.0/src/docsmind/adapters/llm/openai_llm.py +182 -0
- docsmind-0.4.0/src/docsmind/adapters/storage/memory.py +83 -0
- docsmind-0.4.0/src/docsmind/adapters/storage/postgres/agent_store.py +190 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/storage/postgres/repository.py +242 -1
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/storage/postgres/tables.py +54 -0
- docsmind-0.4.0/src/docsmind/agent/agent.py +432 -0
- docsmind-0.4.0/src/docsmind/agent/catalog.py +85 -0
- docsmind-0.4.0/src/docsmind/agent/harness/__init__.py +2 -0
- docsmind-0.4.0/src/docsmind/agent/harness/context.py +154 -0
- docsmind-0.4.0/src/docsmind/agent/harness/memory.py +119 -0
- docsmind-0.4.0/src/docsmind/agent/harness/summarizer.py +67 -0
- docsmind-0.4.0/src/docsmind/agent/harness/tokens.py +36 -0
- docsmind-0.4.0/src/docsmind/agent/loop.py +131 -0
- docsmind-0.4.0/src/docsmind/agent/orchestrator.py +41 -0
- docsmind-0.4.0/src/docsmind/agent/planner.py +38 -0
- docsmind-0.4.0/src/docsmind/agent/prompts.py +93 -0
- docsmind-0.4.0/src/docsmind/agent/sources.py +95 -0
- docsmind-0.4.0/src/docsmind/agent/subagents/specs.py +44 -0
- docsmind-0.4.0/src/docsmind/agent/tools/__init__.py +25 -0
- docsmind-0.4.0/src/docsmind/agent/tools/base.py +130 -0
- docsmind-0.4.0/src/docsmind/agent/tools/delegate.py +48 -0
- docsmind-0.4.0/src/docsmind/agent/tools/documents.py +109 -0
- docsmind-0.4.0/src/docsmind/agent/tools/search.py +126 -0
- docsmind-0.4.0/src/docsmind/agent/util.py +53 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/app.py +3 -0
- docsmind-0.4.0/src/docsmind/cli/chat.py +44 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/ingest.py +6 -1
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/inspect.py +37 -0
- docsmind-0.4.0/src/docsmind/cli/serve.py +29 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/client.py +44 -5
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/config.py +20 -0
- docsmind-0.4.0/src/docsmind/domain/agent.py +147 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/domain/citations.py +5 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/domain/documents.py +36 -7
- docsmind-0.4.0/src/docsmind/domain/errors.py +51 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/domain/ports.py +63 -6
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/ingestion/chunking/page.py +53 -0
- docsmind-0.4.0/src/docsmind/ingestion/parsers/pdf.py +590 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/ingestion/pipeline.py +31 -1
- docsmind-0.4.0/src/docsmind/retrieval/keyword.py +48 -0
- docsmind-0.4.0/src/docsmind/server/app.py +89 -0
- docsmind-0.4.0/src/docsmind/server/routes/chat.py +161 -0
- docsmind-0.4.0/src/docsmind/server/routes/documents.py +196 -0
- docsmind-0.4.0/src/docsmind/server/ui/assets/index-DvL2_fGF.js +5423 -0
- docsmind-0.4.0/src/docsmind/server/ui/assets/index-ae6vf384.css +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/favicon.svg +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/index.html +14 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/LICENSE +177 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Add-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Add-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Add-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Add-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-0.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-1.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-3.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-4.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-5.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/B5pc-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/B5pc-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS1-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS1-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS2-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/CNS2-V.bcmap +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETHK-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETHK-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETen-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETen-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETenms-B5-H.bcmap +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/ETenms-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GB-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GB-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GB-H.bcmap +4 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GB-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBK-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBK-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBK2K-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBK2K-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBKp-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBKp-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBpc-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/GBpc-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKdla-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKdla-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKdlb-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKdlb-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKgccs-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKgccs-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKm314-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKm314-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKm471-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKm471-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKscs-B5-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/HKscs-B5-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Hankaku.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Hiragana.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-Johab-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-Johab-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Katakana.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/LICENSE +36 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/NWP-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/NWP-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/RKSJ-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/RKSJ-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/Roman.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/V.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/cmaps/WP-Symbol.bcmap +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/iccs/CGATS001Compat-v2-micro.icc +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/iccs/LICENSE +116 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/altText_add.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/altText_disclaimer.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/altText_done.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/altText_spinner.svg +30 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/altText_warning.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-check.svg +11 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-comment.svg +16 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-help.svg +26 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-insert.svg +10 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-key.svg +11 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-newparagraph.svg +11 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-noicon.svg +7 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-note.svg +42 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-paperclip.svg +6 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-paragraph.svg +16 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/annotation-pushpin.svg +7 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/checkmark.svg +5 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/comment-actionsButton.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/comment-closeButton.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/comment-editButton.svg +8 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/comment-popup-editButton.svg +5 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/cursor-editorFreeHighlight.svg +6 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/cursor-editorFreeText.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/cursor-editorInk.svg +4 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/cursor-editorTextHighlight.svg +8 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/editor-toolbar-delete.svg +5 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/editor-toolbar-edit.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/findbarButton-next.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/findbarButton-previous.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/gv-toolbarButton-download.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/loading-icon.gif +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/loading.svg +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/messageBar_closingButton.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/messageBar_info.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/messageBar_warning.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/pages_closeButton.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/pages_selected.svg +7 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/pages_viewArrow.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/pages_viewButton.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-firstPage.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-handTool.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-lastPage.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-selectTool.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/signature-properties-row-check.svg +4 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-bookmark.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-currentOutlineItem.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-download.svg +4 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorFreeText.svg +5 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorHighlight.svg +6 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorInk.svg +4 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorSignature.svg +6 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorStamp.svg +8 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-menuArrow.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-menuArrowNova.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-openFile.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-pageDown.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-pageUp.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-presentationMode.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-print.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-search.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-signaturePropertiesError.svg +7 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-signaturePropertiesVerified.svg +7 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewAttachments.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewLayers.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewOutline.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewThumbnail.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewsManagerToggle.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-zoomIn.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-zoomOut.svg +3 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/treeitem-collapsed.svg +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/images/treeitem-expanded.svg +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ach/viewer.ftl +184 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/af/viewer.ftl +163 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/an/viewer.ftl +207 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ar/viewer.ftl +807 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ast/viewer.ftl +156 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/az/viewer.ftl +207 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/be/viewer.ftl +822 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/bg/viewer.ftl +392 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/bn/viewer.ftl +202 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/bo/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/bqi/viewer.ftl +307 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/br/viewer.ftl +299 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/brx/viewer.ftl +175 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/bs/viewer.ftl +560 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ca/viewer.ftl +563 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/cak/viewer.ftl +243 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ckb/viewer.ftl +198 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/cs/viewer.ftl +836 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/cy/viewer.ftl +864 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/da/viewer.ftl +711 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/de/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/dsb/viewer.ftl +836 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/el/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/en-CA/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/en-GB/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/en-US/viewer.ftl +873 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/eo/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/es-AR/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/es-CL/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/es-ES/viewer.ftl +783 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/es-MX/viewer.ftl +720 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/et/viewer.ftl +221 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/eu/viewer.ftl +812 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/fa/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ff/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/fi/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/fr/viewer.ftl +804 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/fur/viewer.ftl +620 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/fy-NL/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ga-IE/viewer.ftl +164 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/gd/viewer.ftl +245 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/gl/viewer.ftl +563 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/gn/viewer.ftl +788 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/gu-IN/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/he/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hi-IN/viewer.ftl +205 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hr/viewer.ftl +695 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hsb/viewer.ftl +836 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hu/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hy-AM/viewer.ftl +618 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/hye/viewer.ftl +221 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ia/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/id/viewer.ftl +561 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/is/viewer.ftl +544 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/it/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ja/viewer.ftl +752 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ka/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/kab/viewer.ftl +599 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/kk/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/km/viewer.ftl +222 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/kn/viewer.ftl +166 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ko/viewer.ftl +752 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/lij/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/lo/viewer.ftl +245 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/locale.json +1 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/lt/viewer.ftl +221 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ltg/viewer.ftl +205 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/lv/viewer.ftl +269 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/meh/viewer.ftl +48 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/mk/viewer.ftl +719 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ml/viewer.ftl +489 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/mr/viewer.ftl +194 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ms/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/my/viewer.ftl +157 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/nb-NO/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ne-NP/viewer.ftl +185 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/nl/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/nn-NO/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/oc/viewer.ftl +372 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/pa-IN/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/pl/viewer.ftl +821 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/pt-BR/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/pt-PT/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/rm/viewer.ftl +611 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ro/viewer.ftl +822 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ru/viewer.ftl +822 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sat/viewer.ftl +257 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sc/viewer.ftl +442 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/scn/viewer.ftl +32 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sco/viewer.ftl +217 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/si/viewer.ftl +214 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sk/viewer.ftl +836 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/skr/viewer.ftl +437 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sl/viewer.ftl +836 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/son/viewer.ftl +157 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sq/viewer.ftl +707 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sr/viewer.ftl +822 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/sv-SE/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/szl/viewer.ftl +207 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ta/viewer.ftl +182 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/te/viewer.ftl +196 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/tg/viewer.ftl +713 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/th/viewer.ftl +687 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/tl/viewer.ftl +207 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/tr/viewer.ftl +808 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/trs/viewer.ftl +160 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/uk/viewer.ftl +699 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/ur/viewer.ftl +206 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/uz/viewer.ftl +140 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/vi/viewer.ftl +752 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/wo/viewer.ftl +93 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/xh/viewer.ftl +163 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/zh-CN/viewer.ftl +733 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/locale/zh-TW/viewer.ftl +752 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitDingbats.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixed.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedBold.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerif.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifBold.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSymbol.pfb +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LICENSE_FOXIT +27 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LICENSE_LIBERATION +363 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/viewer.css +8265 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/viewer.html +1236 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/viewer.mjs +26437 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_OPENJPEG +39 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_QCMS +19 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_QCMS +21 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/jbig2.wasm +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/jbig2_nowasm_fallback.js +15 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/openjpeg.wasm +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/openjpeg_nowasm_fallback.js +17 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/qcms_bg.wasm +0 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/quickjs-eval.js +16 -0
- docsmind-0.4.0/src/docsmind/server/ui/pdfjs/web/wasm/quickjs-eval.wasm +0 -0
- docsmind-0.2.0/.env.example +0 -29
- docsmind-0.2.0/.github/workflows/publish.yml +0 -49
- docsmind-0.2.0/.github/workflows/test.yml +0 -59
- docsmind-0.2.0/.python-version +0 -1
- docsmind-0.2.0/alembic/env.py +0 -83
- docsmind-0.2.0/alembic/script.py.mako +0 -26
- docsmind-0.2.0/alembic/versions/0001_initial_schema.py +0 -173
- docsmind-0.2.0/alembic/versions/0002_full_text_and_stats.py +0 -36
- docsmind-0.2.0/alembic.ini +0 -43
- docsmind-0.2.0/docker-compose.yml +0 -20
- docsmind-0.2.0/examples/NIST.SP.800-171r2.pdf +0 -0
- docsmind-0.2.0/examples/NIST.SP.800-171r3.pdf +0 -0
- docsmind-0.2.0/examples/parse_pdf_demo.py +0 -77
- docsmind-0.2.0/examples/sample.pdf +0 -0
- docsmind-0.2.0/scripts/make_test_pdf.py +0 -118
- docsmind-0.2.0/src/docsmind/cli/chat.py +0 -26
- docsmind-0.2.0/src/docsmind/ingestion/parsers/pdf.py +0 -255
- docsmind-0.2.0/src/docsmind/server/__init__.py +0 -0
- docsmind-0.2.0/src/docsmind/server/routes/__init__.py +0 -0
- docsmind-0.2.0/tests/unit/test_pdf_parser.py +0 -292
- docsmind-0.2.0/uv.lock +0 -5722
- {docsmind-0.2.0 → docsmind-0.4.0}/.gitignore +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/blobs/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/blobs/filesystem.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/embeddings/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/adapters/llm → docsmind-0.4.0/src/docsmind/adapters/storage}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/adapters/storage → docsmind-0.4.0/src/docsmind/adapters/storage/postgres}/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/adapters/storage/postgres/engine.py +0 -0
- {docsmind-0.2.0/src/docsmind/adapters/storage/postgres → docsmind-0.4.0/src/docsmind/adapters/tracing}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/adapters/tracing → docsmind-0.4.0/src/docsmind/adapters/vision}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/adapters/vision → docsmind-0.4.0/src/docsmind/agent}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/agent → docsmind-0.4.0/src/docsmind/agent/subagents}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/agent/subagents → docsmind-0.4.0/src/docsmind/agent/subagents/change_analysis}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/agent/subagents/change_analysis → docsmind-0.4.0/src/docsmind/cli}/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/db.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/diff.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/cli/doctor.py +0 -0
- {docsmind-0.2.0/src/docsmind/agent/tools → docsmind-0.4.0/src/docsmind/domain}/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/domain/changes.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/domain/tables.py +0 -0
- {docsmind-0.2.0/src/docsmind/cli → docsmind-0.4.0/src/docsmind/ingestion}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/domain → docsmind-0.4.0/src/docsmind/ingestion/chunking}/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/ingestion/chunking/structural.py +0 -0
- {docsmind-0.2.0/src/docsmind/ingestion → docsmind-0.4.0/src/docsmind/ingestion/enrichment}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/ingestion/chunking → docsmind-0.4.0/src/docsmind/ingestion/parsers}/__init__.py +0 -0
- {docsmind-0.2.0 → docsmind-0.4.0}/src/docsmind/py.typed +0 -0
- {docsmind-0.2.0/src/docsmind/ingestion/enrichment → docsmind-0.4.0/src/docsmind/retrieval}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/ingestion/parsers → docsmind-0.4.0/src/docsmind/server}/__init__.py +0 -0
- {docsmind-0.2.0/src/docsmind/retrieval → docsmind-0.4.0/src/docsmind/server/routes}/__init__.py +0 -0
|
@@ -2,6 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.4.0] - 2026-10-31
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- The Mind: a chat agent (orchestrator, planner, tool-using executor, parallel subagents)
|
|
10
|
+
with a deterministic harness (context builder with prompt-cache breakpoint, summarizer,
|
|
11
|
+
memory writer). Answers carry verified `[S#]` citations.
|
|
12
|
+
- Provider-neutral LLM layer with OpenAI and Anthropic streaming adapters.
|
|
13
|
+
- Tools: `search`, `grep`, `read_pages`, `get_outline`, `list_documents`, `delegate`;
|
|
14
|
+
subagents: `researcher`, `change_analyzer`.
|
|
15
|
+
- Migration `0004`: `conversations`, `messages`, `agent_memory` tables (run `docsmind db upgrade`).
|
|
16
|
+
- HTTP: `POST /api/chat` (SSE), `GET/DELETE /api/conversations`, `GET /api/agent`.
|
|
17
|
+
- UI: streaming chat in Workspace with live agent activity, markdown answers, citation chips
|
|
18
|
+
and source cards that open the PDF at the cited page; Activity lists saved conversations;
|
|
19
|
+
Agents reads the real registry. New frontend deps: `react-markdown`, `remark-gfm`.
|
|
20
|
+
- `Docsmind.chat_result()`; `chat`/`achat` accept `conversation_id`; `docsmind chat` REPL keeps
|
|
21
|
+
the conversation.
|
|
22
|
+
- Config: `agent_*` settings, `openai_base_url`, `openai_reasoning_effort`.
|
|
23
|
+
|
|
24
|
+
## [0.3.0] - 2026-10-03
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- Bundled frontend UI in the Python package: release UI assets are copied into
|
|
29
|
+
`src/docsmind/server/ui` and served by `docsmind serve` at `/`.
|
|
30
|
+
- `scripts/bundle_frontend.py` helper to copy `../frontend/dist` into the package
|
|
31
|
+
before publishing.
|
|
32
|
+
- `docsmind delete <version-id> [-y]` command to remove one ingested version and
|
|
33
|
+
its derived sections/chunks/images/tables.
|
|
34
|
+
- HTTP `DELETE /api/documents/{version_id}` endpoint.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- `docsmind serve` now serves the bundled SPA (when present), in addition to
|
|
39
|
+
`/api/*` and `/blobs/*`.
|
|
40
|
+
- Ingestion now checks `content_hash` before parsing and raises a friendly
|
|
41
|
+
"already ingested" error instead of surfacing a raw Postgres unique-constraint
|
|
42
|
+
failure.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Image extraction de-duplicates repeated embedded images (e.g. page logo reused
|
|
47
|
+
across many pages) using perceptual hash, preventing inflated image counts.
|
|
48
|
+
- API duplicate-ingest responses now return HTTP 409 with structured details.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
5
52
|
## [0.2.0] - 2026-09-27
|
|
6
53
|
|
|
7
54
|
First functional release: documents can now be ingested from PDF into
|
|
@@ -70,9 +117,7 @@ implemented" below).
|
|
|
70
117
|
- Embeddings and hybrid vector/keyword search. Chunks are stored without
|
|
71
118
|
embeddings, and `hybrid_search` raises `NotImplementedError`.
|
|
72
119
|
- Image captioning with a vision model.
|
|
73
|
-
- The chat agent behind `docsmind chat
|
|
74
|
-
behind `docsmind diff`. Both commands exist but have no implementation
|
|
75
|
-
behind them yet.
|
|
120
|
+
- The chat agent behind `docsmind chat`.
|
|
76
121
|
- DOCX and plain-text parsers, S3/Supabase blob storage, and the server/UI.
|
|
77
122
|
- Multi-column reading order: PDFs with genuine multi-column layouts may have
|
|
78
123
|
their text interleaved in the saved full text.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: docsmind
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Chat with your documents. Version-aware retrieval, change analysis, and an editable table workspace, backed by Postgres/pgvector.
|
|
5
5
|
Project-URL: Homepage, https://github.com/yauheniya-ai/docsmind
|
|
6
6
|
Project-URL: Repository, https://github.com/yauheniya-ai/docsmind
|
|
@@ -29,11 +29,13 @@ Requires-Dist: pydantic>=2.6
|
|
|
29
29
|
Requires-Dist: pymupdf>=1.24
|
|
30
30
|
Requires-Dist: rich>=13.7
|
|
31
31
|
Requires-Dist: sqlalchemy[asyncio]>=2.0
|
|
32
|
+
Requires-Dist: tiktoken>=0.7
|
|
32
33
|
Requires-Dist: typer>=0.12
|
|
33
34
|
Provides-Extra: all
|
|
34
35
|
Requires-Dist: anthropic>=0.34; extra == 'all'
|
|
35
36
|
Requires-Dist: fastapi>=0.111; extra == 'all'
|
|
36
37
|
Requires-Dist: openai>=1.30; extra == 'all'
|
|
38
|
+
Requires-Dist: python-multipart>=0.0.9; extra == 'all'
|
|
37
39
|
Requires-Dist: uvicorn[standard]>=0.30; extra == 'all'
|
|
38
40
|
Provides-Extra: anthropic
|
|
39
41
|
Requires-Dist: anthropic>=0.34; extra == 'anthropic'
|
|
@@ -49,6 +51,7 @@ Provides-Extra: openai
|
|
|
49
51
|
Requires-Dist: openai>=1.30; extra == 'openai'
|
|
50
52
|
Provides-Extra: server
|
|
51
53
|
Requires-Dist: fastapi>=0.111; extra == 'server'
|
|
54
|
+
Requires-Dist: python-multipart>=0.0.9; extra == 'server'
|
|
52
55
|
Requires-Dist: uvicorn[standard]>=0.30; extra == 'server'
|
|
53
56
|
Description-Content-Type: text/markdown
|
|
54
57
|
|
|
@@ -58,8 +61,6 @@ Description-Content-Type: text/markdown
|
|
|
58
61
|
[](https://pypi.org/project/docsmind/)
|
|
59
62
|
[](https://pepy.tech/project/docsmind)
|
|
60
63
|
[](https://pepy.tech/project/docsmind)
|
|
61
|
-
[](https://github.com/yauheniya-ai/docsmind/actions/workflows/test.yml)
|
|
62
|
-
[](https://github.com/yauheniya-ai/docsmind/actions/workflows/test.yml)
|
|
63
64
|
[](https://github.com/yauheniya-ai/docsmind/blob/main/LICENSE)
|
|
64
65
|
[](https://github.com/astral-sh/ruff)
|
|
65
66
|
[](#status)
|
|
@@ -67,9 +68,8 @@ Description-Content-Type: text/markdown
|
|
|
67
68
|
Chat with your documents. Track what changed between versions, and why it matters.
|
|
68
69
|
|
|
69
70
|
`docsmind` ingests PDFs (and soon DOCX/text) into a version-aware Postgres/pgvector
|
|
70
|
-
store, and gives you an agent, **the Mind**, to
|
|
71
|
-
|
|
72
|
-
its compliance implications, with citations back to exact pages.
|
|
71
|
+
store, and gives you an agent, **the Mind**, to analyze them. Built-in subagents
|
|
72
|
+
will perform specialized tasks.
|
|
73
73
|
|
|
74
74
|
> **Alpha.** Ingestion and inspection work today. Embeddings, chat and change analysis
|
|
75
75
|
> are designed and scaffolded but not implemented yet; see [What works today](#what-works-today).
|
|
@@ -82,11 +82,13 @@ its compliance implications, with citations back to exact pages.
|
|
|
82
82
|
| ✅ Postgres + pgvector storage | Local Docker, or any Postgres with pgvector (Neon, Supabase) |
|
|
83
83
|
| ✅ Inspection CLI | `versions`, `fulltext`, `outline`, `chunks` read back exactly what was saved |
|
|
84
84
|
| ✅ `docsmind doctor` | Checks database, blob storage and API keys, and tells you what to fix |
|
|
85
|
-
|
|
|
85
|
+
| ✅ Table extraction | Extract and store tables skipping repeating ones (e.g. headers or footers) |
|
|
86
|
+
| ✅ server + UI | FastAPI backend (`docsmind serve`) + React UI (`frontend/`): add documents, browse indexed content, image and table galleries |
|
|
87
|
+
| ✅ Chat agent (the Mind) | Routes each question, plans complex ones, searches/reads your documents with tools, delegates to subagents, and answers with verified `[S#]` citations. Streams to the UI over SSE; conversations are saved |
|
|
86
88
|
| 🚧 Image captioning | Images are extracted and stored; vision captioning is next |
|
|
87
|
-
| 🚧
|
|
89
|
+
| 🚧 Embeddings + hybrid search | Chunks are stored without embeddings for now |
|
|
88
90
|
| 🚧 Change analysis (diffra) | `docsmind diff` exists as a command, without an implementation yet |
|
|
89
|
-
| 🚧 DOCX/text parsers, S3/Supabase blob storage
|
|
91
|
+
| 🚧 DOCX/text parsers, S3/Supabase blob storage | Planned |
|
|
90
92
|
|
|
91
93
|
## Install
|
|
92
94
|
|
|
@@ -96,7 +98,7 @@ pip install docsmind
|
|
|
96
98
|
pip install "docsmind[all]"
|
|
97
99
|
```
|
|
98
100
|
|
|
99
|
-
Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI,
|
|
101
|
+
Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI, serves the bundled UI),
|
|
100
102
|
`docsmind[mlflow]` (tracing/eval export). Requires Python 3.10+.
|
|
101
103
|
|
|
102
104
|
## Quickstart
|
|
@@ -127,8 +129,9 @@ docsmind doctor
|
|
|
127
129
|
```
|
|
128
130
|
|
|
129
131
|
Configuration is environment-driven (`DOCSMIND_*`, or a `.env` file). Copy
|
|
130
|
-
`.env.example` to `.env` to see every option.
|
|
131
|
-
|
|
132
|
+
`.env.example` to `.env` to see every option. Chat needs an LLM key
|
|
133
|
+
(`DOCSMIND_LLM_PROVIDER` plus `DOCSMIND_ANTHROPIC_API_KEY` or `DOCSMIND_OPENAI_API_KEY`);
|
|
134
|
+
ingestion and browsing don't.
|
|
132
135
|
|
|
133
136
|
### 2. Ingest a PDF
|
|
134
137
|
|
|
@@ -158,13 +161,81 @@ docsmind chunks <version-id> --page 12 # the chunk(s) saved for one page
|
|
|
158
161
|
|
|
159
162
|
You can also inspect the tables directly with `docsmind db psql`.
|
|
160
163
|
|
|
161
|
-
### 4.
|
|
164
|
+
### 4. Browse it in the UI
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
pip install "docsmind[server]"
|
|
168
|
+
docsmind serve # FastAPI backend on http://127.0.0.1:8000
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Open `http://127.0.0.1:8000`.
|
|
172
|
+
|
|
173
|
+
The React UI is bundled into the Python package and served directly by `docsmind serve`
|
|
174
|
+
from `docsmind/src/docsmind/server/ui`.
|
|
175
|
+
|
|
176
|
+
Clicking **+ Add Document** in the UI runs the same `docsmind ingest` pipeline on the
|
|
177
|
+
uploaded PDF. Selecting a document shows its saved full text/outline (**Content**), and
|
|
178
|
+
galleries of everything extracted from it (**Images**, **Tables**).
|
|
179
|
+
|
|
180
|
+
For contributors refreshing bundled UI assets before a release:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
cd ../frontend
|
|
184
|
+
npm install
|
|
185
|
+
npm run build
|
|
186
|
+
cd ../docsmind
|
|
187
|
+
python scripts/bundle_frontend.py
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 5. Ask the Mind
|
|
191
|
+
|
|
192
|
+
In the UI, open **Workspace** and ask a question (needs `docsmind[openai]` or `docsmind[anthropic]`
|
|
193
|
+
plus an API key). From the terminal or Python:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
docsmind chat "What are our data retention obligations?" # one-shot
|
|
197
|
+
docsmind chat # REPL, keeps the conversation
|
|
198
|
+
```
|
|
162
199
|
|
|
163
200
|
```python
|
|
164
|
-
|
|
165
|
-
|
|
201
|
+
result = dm.chat_result("What are our data retention obligations?")
|
|
202
|
+
print(result.answer, result.citations)
|
|
203
|
+
change_set = dm.compare(v1.id, v2.id) # planned (diffra)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## How the Mind works
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
Question -> Orchestrator --simple--> Executor <-> Tools / Subagents -> Answer
|
|
210
|
+
| ^
|
|
211
|
+
+--complex--> Planner --+ Harness feeds every role:
|
|
212
|
+
context builder, prompt cache,
|
|
213
|
+
summarizer, memory
|
|
166
214
|
```
|
|
167
215
|
|
|
216
|
+
- **Orchestrator**: one cheap call that routes the question (`simple` or `complex`) and rewrites
|
|
217
|
+
it as a standalone question using the conversation so far.
|
|
218
|
+
- **Planner** (complex only): a short list of steps the executor follows.
|
|
219
|
+
- **Executor**: a bounded tool loop (`search`, `grep`, `read_pages`, `get_outline`,
|
|
220
|
+
`list_documents`, `delegate`). The last step forces an answer; tool errors go back to the
|
|
221
|
+
model, not the user; old tool results are elided when the context grows.
|
|
222
|
+
- **Subagents** (`researcher`, `change_analyzer`): fresh context, a subset of the tools, run in
|
|
223
|
+
parallel, cannot delegate further.
|
|
224
|
+
- **Harness**: deterministic code, not another agent. It orders the prompt stable-first so the
|
|
225
|
+
prefix caches, summarizes long histories, and saves durable notes to memory after each answer.
|
|
226
|
+
- **Citations**: tools register passages as `S1, S2, ...`; the model cites `[S#]`; invented
|
|
227
|
+
handles are dropped and the rest renumbered by first appearance. Document text is treated as
|
|
228
|
+
untrusted data, never as instructions.
|
|
229
|
+
- **Search** is Postgres full-text (ranked) plus exact-text grep until embeddings land.
|
|
230
|
+
|
|
231
|
+
Tuning (all `DOCSMIND_*`): `AGENT_FAST_MODEL` (router/summarizer/memory model, defaults to
|
|
232
|
+
`LLM_MODEL`), `AGENT_MAX_STEPS`, `AGENT_SUBAGENT_MAX_STEPS`, `AGENT_MEMORY_ENABLED`,
|
|
233
|
+
`OPENAI_REASONING_EFFORT`, `OPENAI_BASE_URL`. See `.env.example`.
|
|
234
|
+
|
|
235
|
+
HTTP: `POST /api/chat` streams Server-Sent Events (`route`, `plan`, `tool_start`, `tool_end`,
|
|
236
|
+
`subagent_start`, `subagent_end`, `token`, `note`, `answer`, `error`, `done`);
|
|
237
|
+
`GET /api/conversations[/{id}]`, `DELETE /api/conversations/{id}`, `GET /api/agent`.
|
|
238
|
+
|
|
168
239
|
## How ingestion works
|
|
169
240
|
|
|
170
241
|
Ingestion is deliberately simple and predictable. There's no layout guessing, because
|
|
@@ -180,6 +251,9 @@ heuristics that work on one PDF break on the next.
|
|
|
180
251
|
reconstruct structure.
|
|
181
252
|
- **Images** are extracted with their page and position, skipping tiny icons, and saved
|
|
182
253
|
under a readable path: `images/<collection>/<title>/<version>-<id>/`.
|
|
254
|
+
Visually repeated images (e.g. logo on every page) are de-duplicated by perceptual hash.
|
|
255
|
+
- **Tables** are detected with PyMuPDF and rendered as PNG snippets, saved under
|
|
256
|
+
`tables/<collection>/<title>/<version>-<id>/`.
|
|
183
257
|
|
|
184
258
|
## CLI reference
|
|
185
259
|
|
|
@@ -190,9 +264,12 @@ heuristics that work on one PDF break on the next.
|
|
|
190
264
|
| `docsmind fulltext <id> [--full]` | Print the saved full text |
|
|
191
265
|
| `docsmind outline <id>` | Print the saved outline |
|
|
192
266
|
| `docsmind chunks <id> [--page N] [--full]` | Print saved chunks |
|
|
267
|
+
| `docsmind delete <id> [-y]` | Delete one version and its derived chunks/images/tables |
|
|
193
268
|
| `docsmind db up` / `upgrade` / `psql` | Start local Postgres, apply migrations, open psql |
|
|
194
269
|
| `docsmind doctor` | Check your setup |
|
|
195
|
-
| `docsmind
|
|
270
|
+
| `docsmind serve [--host] [--port] [--reload]` | Run the FastAPI backend for the `frontend/` UI |
|
|
271
|
+
| `docsmind chat [question] [-c <collection>]` | Ask the Mind once, or start a REPL that keeps the conversation |
|
|
272
|
+
| `docsmind diff` | Planned |
|
|
196
273
|
|
|
197
274
|
## Architecture
|
|
198
275
|
|
|
@@ -204,7 +281,7 @@ src/docsmind/
|
|
|
204
281
|
│
|
|
205
282
|
├── domain/ # pure data + interfaces, no I/O
|
|
206
283
|
│ ├── documents.py # Document, DocumentVersion, Section, Chunk, Image, ParsedDocument
|
|
207
|
-
│ ├── changes.py # Change, ChangeSet, ImpactAssessment
|
|
284
|
+
│ ├── changes.py # Change, ChangeSet, ImpactAssessment
|
|
208
285
|
│ ├── citations.py # Citation
|
|
209
286
|
│ ├── tables.py # AgentTable, TableRevision
|
|
210
287
|
│ └── ports.py # LLM, Embedder, VisionCaptioner, VectorStore, BlobStore, Parser
|
|
@@ -221,13 +298,24 @@ src/docsmind/
|
|
|
221
298
|
│ ├── llm/ embeddings/ vision/ tracing/ # planned
|
|
222
299
|
│
|
|
223
300
|
├── cli/ # Typer app: ingest, versions, fulltext, outline, chunks, db, doctor
|
|
224
|
-
├── retrieval/ #
|
|
225
|
-
├── agent/ # the Mind
|
|
226
|
-
└── server/ # FastAPI +
|
|
301
|
+
├── retrieval/ # keyword (full-text) search helpers; vector search planned
|
|
302
|
+
├── agent/ # the Mind: orchestrator, planner, tool loop, tools, subagents, harness
|
|
303
|
+
└── server/ # FastAPI app + routes backing frontend/ (documents, chat SSE, conversations)
|
|
227
304
|
|
|
228
|
-
alembic/ tests/ examples/ docs/
|
|
305
|
+
alembic/ tests/ examples/ docs/
|
|
229
306
|
```
|
|
230
307
|
|
|
308
|
+
The UI source lives one level up as a sibling project: `frontend/` (React + TypeScript +
|
|
309
|
+
TailwindCSS, see the repo-root `CLAUDE.md`). Release builds are bundled into
|
|
310
|
+
`src/docsmind/server/ui` and served by `server/app.py` at `/`. The UI talks to `server/`
|
|
311
|
+
over `/api/*`, and loads extracted images/tables straight from disk via `/blobs/*`.
|
|
312
|
+
|
|
313
|
+
## Artwork attribution
|
|
314
|
+
|
|
315
|
+
- Workspace 3D graph artwork inspiration: Angela Galliat,
|
|
316
|
+
"Neural nervous system of a brain" (CodePen):
|
|
317
|
+
https://codepen.io/agalliat/pen/vYGXJxQ
|
|
318
|
+
|
|
231
319
|
### Design notes
|
|
232
320
|
|
|
233
321
|
- **Ports and adapters, once.** `domain/ports.py` defines every external dependency as a
|
|
@@ -242,7 +330,9 @@ alembic/ tests/ examples/ docs/ ui/
|
|
|
242
330
|
Outline paths (e.g. `03.13.11`) give version comparison something stable to align on
|
|
243
331
|
where a document has a table of contents.
|
|
244
332
|
- **Tables are shared state, not a UI feature.** `AgentTable` is a domain object that
|
|
245
|
-
both the agent and the user write to (append-only revisions).
|
|
333
|
+
both the agent and the user write to (append-only revisions). This is distinct from
|
|
334
|
+
the `tables` storage table (extracted PDF table *regions*, rendered as images
|
|
335
|
+
alongside `images` — browsable read-only in the UI's **Tables** gallery).
|
|
246
336
|
|
|
247
337
|
## Development
|
|
248
338
|
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
[](https://pypi.org/project/docsmind/)
|
|
5
5
|
[](https://pepy.tech/project/docsmind)
|
|
6
6
|
[](https://pepy.tech/project/docsmind)
|
|
7
|
-
[](https://github.com/yauheniya-ai/docsmind/actions/workflows/test.yml)
|
|
8
|
-
[](https://github.com/yauheniya-ai/docsmind/actions/workflows/test.yml)
|
|
9
7
|
[](https://github.com/yauheniya-ai/docsmind/blob/main/LICENSE)
|
|
10
8
|
[](https://github.com/astral-sh/ruff)
|
|
11
9
|
[](#status)
|
|
@@ -13,9 +11,8 @@
|
|
|
13
11
|
Chat with your documents. Track what changed between versions, and why it matters.
|
|
14
12
|
|
|
15
13
|
`docsmind` ingests PDFs (and soon DOCX/text) into a version-aware Postgres/pgvector
|
|
16
|
-
store, and gives you an agent, **the Mind**, to
|
|
17
|
-
|
|
18
|
-
its compliance implications, with citations back to exact pages.
|
|
14
|
+
store, and gives you an agent, **the Mind**, to analyze them. Built-in subagents
|
|
15
|
+
will perform specialized tasks.
|
|
19
16
|
|
|
20
17
|
> **Alpha.** Ingestion and inspection work today. Embeddings, chat and change analysis
|
|
21
18
|
> are designed and scaffolded but not implemented yet; see [What works today](#what-works-today).
|
|
@@ -28,11 +25,13 @@ its compliance implications, with citations back to exact pages.
|
|
|
28
25
|
| ✅ Postgres + pgvector storage | Local Docker, or any Postgres with pgvector (Neon, Supabase) |
|
|
29
26
|
| ✅ Inspection CLI | `versions`, `fulltext`, `outline`, `chunks` read back exactly what was saved |
|
|
30
27
|
| ✅ `docsmind doctor` | Checks database, blob storage and API keys, and tells you what to fix |
|
|
31
|
-
|
|
|
28
|
+
| ✅ Table extraction | Extract and store tables skipping repeating ones (e.g. headers or footers) |
|
|
29
|
+
| ✅ server + UI | FastAPI backend (`docsmind serve`) + React UI (`frontend/`): add documents, browse indexed content, image and table galleries |
|
|
30
|
+
| ✅ Chat agent (the Mind) | Routes each question, plans complex ones, searches/reads your documents with tools, delegates to subagents, and answers with verified `[S#]` citations. Streams to the UI over SSE; conversations are saved |
|
|
32
31
|
| 🚧 Image captioning | Images are extracted and stored; vision captioning is next |
|
|
33
|
-
| 🚧
|
|
32
|
+
| 🚧 Embeddings + hybrid search | Chunks are stored without embeddings for now |
|
|
34
33
|
| 🚧 Change analysis (diffra) | `docsmind diff` exists as a command, without an implementation yet |
|
|
35
|
-
| 🚧 DOCX/text parsers, S3/Supabase blob storage
|
|
34
|
+
| 🚧 DOCX/text parsers, S3/Supabase blob storage | Planned |
|
|
36
35
|
|
|
37
36
|
## Install
|
|
38
37
|
|
|
@@ -42,7 +41,7 @@ pip install docsmind
|
|
|
42
41
|
pip install "docsmind[all]"
|
|
43
42
|
```
|
|
44
43
|
|
|
45
|
-
Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI,
|
|
44
|
+
Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI, serves the bundled UI),
|
|
46
45
|
`docsmind[mlflow]` (tracing/eval export). Requires Python 3.10+.
|
|
47
46
|
|
|
48
47
|
## Quickstart
|
|
@@ -73,8 +72,9 @@ docsmind doctor
|
|
|
73
72
|
```
|
|
74
73
|
|
|
75
74
|
Configuration is environment-driven (`DOCSMIND_*`, or a `.env` file). Copy
|
|
76
|
-
`.env.example` to `.env` to see every option.
|
|
77
|
-
|
|
75
|
+
`.env.example` to `.env` to see every option. Chat needs an LLM key
|
|
76
|
+
(`DOCSMIND_LLM_PROVIDER` plus `DOCSMIND_ANTHROPIC_API_KEY` or `DOCSMIND_OPENAI_API_KEY`);
|
|
77
|
+
ingestion and browsing don't.
|
|
78
78
|
|
|
79
79
|
### 2. Ingest a PDF
|
|
80
80
|
|
|
@@ -104,13 +104,81 @@ docsmind chunks <version-id> --page 12 # the chunk(s) saved for one page
|
|
|
104
104
|
|
|
105
105
|
You can also inspect the tables directly with `docsmind db psql`.
|
|
106
106
|
|
|
107
|
-
### 4.
|
|
107
|
+
### 4. Browse it in the UI
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pip install "docsmind[server]"
|
|
111
|
+
docsmind serve # FastAPI backend on http://127.0.0.1:8000
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Open `http://127.0.0.1:8000`.
|
|
115
|
+
|
|
116
|
+
The React UI is bundled into the Python package and served directly by `docsmind serve`
|
|
117
|
+
from `docsmind/src/docsmind/server/ui`.
|
|
118
|
+
|
|
119
|
+
Clicking **+ Add Document** in the UI runs the same `docsmind ingest` pipeline on the
|
|
120
|
+
uploaded PDF. Selecting a document shows its saved full text/outline (**Content**), and
|
|
121
|
+
galleries of everything extracted from it (**Images**, **Tables**).
|
|
122
|
+
|
|
123
|
+
For contributors refreshing bundled UI assets before a release:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
cd ../frontend
|
|
127
|
+
npm install
|
|
128
|
+
npm run build
|
|
129
|
+
cd ../docsmind
|
|
130
|
+
python scripts/bundle_frontend.py
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 5. Ask the Mind
|
|
134
|
+
|
|
135
|
+
In the UI, open **Workspace** and ask a question (needs `docsmind[openai]` or `docsmind[anthropic]`
|
|
136
|
+
plus an API key). From the terminal or Python:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
docsmind chat "What are our data retention obligations?" # one-shot
|
|
140
|
+
docsmind chat # REPL, keeps the conversation
|
|
141
|
+
```
|
|
108
142
|
|
|
109
143
|
```python
|
|
110
|
-
|
|
111
|
-
|
|
144
|
+
result = dm.chat_result("What are our data retention obligations?")
|
|
145
|
+
print(result.answer, result.citations)
|
|
146
|
+
change_set = dm.compare(v1.id, v2.id) # planned (diffra)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## How the Mind works
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
Question -> Orchestrator --simple--> Executor <-> Tools / Subagents -> Answer
|
|
153
|
+
| ^
|
|
154
|
+
+--complex--> Planner --+ Harness feeds every role:
|
|
155
|
+
context builder, prompt cache,
|
|
156
|
+
summarizer, memory
|
|
112
157
|
```
|
|
113
158
|
|
|
159
|
+
- **Orchestrator**: one cheap call that routes the question (`simple` or `complex`) and rewrites
|
|
160
|
+
it as a standalone question using the conversation so far.
|
|
161
|
+
- **Planner** (complex only): a short list of steps the executor follows.
|
|
162
|
+
- **Executor**: a bounded tool loop (`search`, `grep`, `read_pages`, `get_outline`,
|
|
163
|
+
`list_documents`, `delegate`). The last step forces an answer; tool errors go back to the
|
|
164
|
+
model, not the user; old tool results are elided when the context grows.
|
|
165
|
+
- **Subagents** (`researcher`, `change_analyzer`): fresh context, a subset of the tools, run in
|
|
166
|
+
parallel, cannot delegate further.
|
|
167
|
+
- **Harness**: deterministic code, not another agent. It orders the prompt stable-first so the
|
|
168
|
+
prefix caches, summarizes long histories, and saves durable notes to memory after each answer.
|
|
169
|
+
- **Citations**: tools register passages as `S1, S2, ...`; the model cites `[S#]`; invented
|
|
170
|
+
handles are dropped and the rest renumbered by first appearance. Document text is treated as
|
|
171
|
+
untrusted data, never as instructions.
|
|
172
|
+
- **Search** is Postgres full-text (ranked) plus exact-text grep until embeddings land.
|
|
173
|
+
|
|
174
|
+
Tuning (all `DOCSMIND_*`): `AGENT_FAST_MODEL` (router/summarizer/memory model, defaults to
|
|
175
|
+
`LLM_MODEL`), `AGENT_MAX_STEPS`, `AGENT_SUBAGENT_MAX_STEPS`, `AGENT_MEMORY_ENABLED`,
|
|
176
|
+
`OPENAI_REASONING_EFFORT`, `OPENAI_BASE_URL`. See `.env.example`.
|
|
177
|
+
|
|
178
|
+
HTTP: `POST /api/chat` streams Server-Sent Events (`route`, `plan`, `tool_start`, `tool_end`,
|
|
179
|
+
`subagent_start`, `subagent_end`, `token`, `note`, `answer`, `error`, `done`);
|
|
180
|
+
`GET /api/conversations[/{id}]`, `DELETE /api/conversations/{id}`, `GET /api/agent`.
|
|
181
|
+
|
|
114
182
|
## How ingestion works
|
|
115
183
|
|
|
116
184
|
Ingestion is deliberately simple and predictable. There's no layout guessing, because
|
|
@@ -126,6 +194,9 @@ heuristics that work on one PDF break on the next.
|
|
|
126
194
|
reconstruct structure.
|
|
127
195
|
- **Images** are extracted with their page and position, skipping tiny icons, and saved
|
|
128
196
|
under a readable path: `images/<collection>/<title>/<version>-<id>/`.
|
|
197
|
+
Visually repeated images (e.g. logo on every page) are de-duplicated by perceptual hash.
|
|
198
|
+
- **Tables** are detected with PyMuPDF and rendered as PNG snippets, saved under
|
|
199
|
+
`tables/<collection>/<title>/<version>-<id>/`.
|
|
129
200
|
|
|
130
201
|
## CLI reference
|
|
131
202
|
|
|
@@ -136,9 +207,12 @@ heuristics that work on one PDF break on the next.
|
|
|
136
207
|
| `docsmind fulltext <id> [--full]` | Print the saved full text |
|
|
137
208
|
| `docsmind outline <id>` | Print the saved outline |
|
|
138
209
|
| `docsmind chunks <id> [--page N] [--full]` | Print saved chunks |
|
|
210
|
+
| `docsmind delete <id> [-y]` | Delete one version and its derived chunks/images/tables |
|
|
139
211
|
| `docsmind db up` / `upgrade` / `psql` | Start local Postgres, apply migrations, open psql |
|
|
140
212
|
| `docsmind doctor` | Check your setup |
|
|
141
|
-
| `docsmind
|
|
213
|
+
| `docsmind serve [--host] [--port] [--reload]` | Run the FastAPI backend for the `frontend/` UI |
|
|
214
|
+
| `docsmind chat [question] [-c <collection>]` | Ask the Mind once, or start a REPL that keeps the conversation |
|
|
215
|
+
| `docsmind diff` | Planned |
|
|
142
216
|
|
|
143
217
|
## Architecture
|
|
144
218
|
|
|
@@ -150,7 +224,7 @@ src/docsmind/
|
|
|
150
224
|
│
|
|
151
225
|
├── domain/ # pure data + interfaces, no I/O
|
|
152
226
|
│ ├── documents.py # Document, DocumentVersion, Section, Chunk, Image, ParsedDocument
|
|
153
|
-
│ ├── changes.py # Change, ChangeSet, ImpactAssessment
|
|
227
|
+
│ ├── changes.py # Change, ChangeSet, ImpactAssessment
|
|
154
228
|
│ ├── citations.py # Citation
|
|
155
229
|
│ ├── tables.py # AgentTable, TableRevision
|
|
156
230
|
│ └── ports.py # LLM, Embedder, VisionCaptioner, VectorStore, BlobStore, Parser
|
|
@@ -167,13 +241,24 @@ src/docsmind/
|
|
|
167
241
|
│ ├── llm/ embeddings/ vision/ tracing/ # planned
|
|
168
242
|
│
|
|
169
243
|
├── cli/ # Typer app: ingest, versions, fulltext, outline, chunks, db, doctor
|
|
170
|
-
├── retrieval/ #
|
|
171
|
-
├── agent/ # the Mind
|
|
172
|
-
└── server/ # FastAPI +
|
|
244
|
+
├── retrieval/ # keyword (full-text) search helpers; vector search planned
|
|
245
|
+
├── agent/ # the Mind: orchestrator, planner, tool loop, tools, subagents, harness
|
|
246
|
+
└── server/ # FastAPI app + routes backing frontend/ (documents, chat SSE, conversations)
|
|
173
247
|
|
|
174
|
-
alembic/ tests/ examples/ docs/
|
|
248
|
+
alembic/ tests/ examples/ docs/
|
|
175
249
|
```
|
|
176
250
|
|
|
251
|
+
The UI source lives one level up as a sibling project: `frontend/` (React + TypeScript +
|
|
252
|
+
TailwindCSS, see the repo-root `CLAUDE.md`). Release builds are bundled into
|
|
253
|
+
`src/docsmind/server/ui` and served by `server/app.py` at `/`. The UI talks to `server/`
|
|
254
|
+
over `/api/*`, and loads extracted images/tables straight from disk via `/blobs/*`.
|
|
255
|
+
|
|
256
|
+
## Artwork attribution
|
|
257
|
+
|
|
258
|
+
- Workspace 3D graph artwork inspiration: Angela Galliat,
|
|
259
|
+
"Neural nervous system of a brain" (CodePen):
|
|
260
|
+
https://codepen.io/agalliat/pen/vYGXJxQ
|
|
261
|
+
|
|
177
262
|
### Design notes
|
|
178
263
|
|
|
179
264
|
- **Ports and adapters, once.** `domain/ports.py` defines every external dependency as a
|
|
@@ -188,7 +273,9 @@ alembic/ tests/ examples/ docs/ ui/
|
|
|
188
273
|
Outline paths (e.g. `03.13.11`) give version comparison something stable to align on
|
|
189
274
|
where a document has a table of contents.
|
|
190
275
|
- **Tables are shared state, not a UI feature.** `AgentTable` is a domain object that
|
|
191
|
-
both the agent and the user write to (append-only revisions).
|
|
276
|
+
both the agent and the user write to (append-only revisions). This is distinct from
|
|
277
|
+
the `tables` storage table (extracted PDF table *regions*, rendered as images
|
|
278
|
+
alongside `images` — browsable read-only in the UI's **Tables** gallery).
|
|
192
279
|
|
|
193
280
|
## Development
|
|
194
281
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "docsmind"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
description = "Chat with your documents. Version-aware retrieval, change analysis, and an editable table workspace, backed by Postgres/pgvector."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -38,12 +38,13 @@ dependencies = [
|
|
|
38
38
|
"pillow>=10.0",
|
|
39
39
|
"imagehash>=4.3",
|
|
40
40
|
"rich>=13.7",
|
|
41
|
+
"tiktoken>=0.7",
|
|
41
42
|
]
|
|
42
43
|
|
|
43
44
|
[project.optional-dependencies]
|
|
44
45
|
openai = ["openai>=1.30"]
|
|
45
46
|
anthropic = ["anthropic>=0.34"]
|
|
46
|
-
server = ["fastapi>=0.111", "uvicorn[standard]>=0.30"]
|
|
47
|
+
server = ["fastapi>=0.111", "uvicorn[standard]>=0.30", "python-multipart>=0.0.9"]
|
|
47
48
|
mlflow = ["mlflow>=2.14"]
|
|
48
49
|
dev = ["pytest>=8.0", "pytest-asyncio>=0.23", "testcontainers[postgres]>=4.4", "ruff>=0.5", "mypy>=1.10"]
|
|
49
50
|
all = ["docsmind[openai,anthropic,server]"]
|
|
@@ -61,6 +62,15 @@ Issues = "https://github.com/yauheniya-ai/docsmind/issues"
|
|
|
61
62
|
|
|
62
63
|
[tool.hatch.build.targets.wheel]
|
|
63
64
|
packages = ["src/docsmind"]
|
|
65
|
+
include = ["src/docsmind/server/ui/**"]
|
|
66
|
+
|
|
67
|
+
[tool.hatch.build.targets.sdist]
|
|
68
|
+
include = [
|
|
69
|
+
"src/docsmind/**",
|
|
70
|
+
"README.md",
|
|
71
|
+
"CHANGELOG.md",
|
|
72
|
+
"scripts/bundle_frontend.py",
|
|
73
|
+
]
|
|
64
74
|
|
|
65
75
|
[tool.pytest.ini_options]
|
|
66
76
|
asyncio_mode = "auto"
|
|
@@ -79,4 +89,4 @@ target-version = "py310"
|
|
|
79
89
|
# image is corrupt" — and a single malformed image in an otherwise-fine PDF
|
|
80
90
|
# shouldn't abort the whole ingest, so we deliberately catch broadly here and
|
|
81
91
|
# skip the one image rather than propagate.
|
|
82
|
-
"src/docsmind/ingestion/parsers/pdf.py" = ["BLE001"]
|
|
92
|
+
"src/docsmind/ingestion/parsers/pdf.py" = ["BLE001"]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""LLM adapter registry. SDKs are imported lazily inside each adapter, so a
|
|
2
|
+
bare `pip install docsmind` never needs openai/anthropic installed."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from docsmind.config import DocsmindConfig
|
|
7
|
+
from docsmind.domain.errors import LLMConfigurationError
|
|
8
|
+
from docsmind.domain.ports import LLM
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def create_llm(config: DocsmindConfig, *, model: str | None = None) -> LLM:
|
|
12
|
+
"""Build the configured LLM. `model` overrides `config.llm_model` (used
|
|
13
|
+
for the fast model that routes, summarizes and writes memory)."""
|
|
14
|
+
provider = config.llm_provider.lower()
|
|
15
|
+
model = model or config.llm_model
|
|
16
|
+
if provider == "openai":
|
|
17
|
+
from docsmind.adapters.llm.openai_llm import OpenAILLM
|
|
18
|
+
|
|
19
|
+
return OpenAILLM(
|
|
20
|
+
api_key=config.openai_api_key,
|
|
21
|
+
model=model,
|
|
22
|
+
base_url=config.openai_base_url,
|
|
23
|
+
reasoning_effort=config.openai_reasoning_effort,
|
|
24
|
+
)
|
|
25
|
+
if provider == "anthropic":
|
|
26
|
+
from docsmind.adapters.llm.anthropic_llm import AnthropicLLM
|
|
27
|
+
|
|
28
|
+
return AnthropicLLM(api_key=config.anthropic_api_key, model=model)
|
|
29
|
+
raise LLMConfigurationError(
|
|
30
|
+
f"Unknown DOCSMIND_LLM_PROVIDER '{config.llm_provider}'. Use 'anthropic' or 'openai'."
|
|
31
|
+
)
|