docsmind 0.4.0__tar.gz → 0.7.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.
Files changed (497) hide show
  1. {docsmind-0.4.0 → docsmind-0.7.0}/CHANGELOG.md +78 -0
  2. {docsmind-0.4.0 → docsmind-0.7.0}/PKG-INFO +33 -6
  3. {docsmind-0.4.0 → docsmind-0.7.0}/README.md +30 -5
  4. {docsmind-0.4.0 → docsmind-0.7.0}/pyproject.toml +2 -1
  5. docsmind-0.7.0/src/docsmind/adapters/embeddings/__init__.py +22 -0
  6. docsmind-0.7.0/src/docsmind/adapters/embeddings/openai_embeddings.py +79 -0
  7. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/storage/postgres/repository.py +244 -16
  8. docsmind-0.7.0/src/docsmind/adapters/vision/__init__.py +29 -0
  9. docsmind-0.7.0/src/docsmind/adapters/vision/captioners.py +114 -0
  10. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/agent.py +91 -5
  11. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/prompts.py +11 -3
  12. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/subagents/specs.py +3 -2
  13. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/tools/__init__.py +5 -2
  14. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/tools/base.py +37 -1
  15. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/tools/delegate.py +6 -0
  16. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/tools/documents.py +17 -0
  17. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/tools/search.py +38 -7
  18. docsmind-0.7.0/src/docsmind/agent/tools/web.py +273 -0
  19. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/app.py +3 -0
  20. docsmind-0.7.0/src/docsmind/cli/enrich.py +95 -0
  21. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/config.py +22 -2
  22. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/errors.py +9 -0
  23. docsmind-0.7.0/src/docsmind/enrichment/__init__.py +9 -0
  24. docsmind-0.7.0/src/docsmind/enrichment/pricing.py +192 -0
  25. docsmind-0.7.0/src/docsmind/enrichment/service.py +331 -0
  26. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/ingestion/parsers/pdf.py +3 -0
  27. docsmind-0.7.0/src/docsmind/retrieval/fusion.py +31 -0
  28. docsmind-0.7.0/src/docsmind/retrieval/hybrid.py +45 -0
  29. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/retrieval/keyword.py +3 -1
  30. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/app.py +3 -2
  31. docsmind-0.7.0/src/docsmind/server/jobs.py +119 -0
  32. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/routes/documents.py +11 -1
  33. docsmind-0.7.0/src/docsmind/server/routes/enrichment.py +94 -0
  34. docsmind-0.7.0/src/docsmind/server/ui/assets/index-B1Hm9KMP.css +1 -0
  35. docsmind-0.4.0/src/docsmind/server/ui/assets/index-DvL2_fGF.js → docsmind-0.7.0/src/docsmind/server/ui/assets/index-CsNUfZkw.js +122 -120
  36. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/index.html +2 -2
  37. docsmind-0.4.0/src/docsmind/server/__init__.py +0 -0
  38. docsmind-0.4.0/src/docsmind/server/routes/__init__.py +0 -0
  39. docsmind-0.4.0/src/docsmind/server/ui/assets/index-ae6vf384.css +0 -1
  40. {docsmind-0.4.0 → docsmind-0.7.0}/.gitignore +0 -0
  41. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/__init__.py +0 -0
  42. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/__init__.py +0 -0
  43. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/blobs/__init__.py +0 -0
  44. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/blobs/filesystem.py +0 -0
  45. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/llm/__init__.py +0 -0
  46. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/llm/anthropic_llm.py +0 -0
  47. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/llm/openai_llm.py +0 -0
  48. {docsmind-0.4.0/src/docsmind/adapters/embeddings → docsmind-0.7.0/src/docsmind/adapters/storage}/__init__.py +0 -0
  49. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/storage/memory.py +0 -0
  50. {docsmind-0.4.0/src/docsmind/adapters/storage → docsmind-0.7.0/src/docsmind/adapters/storage/postgres}/__init__.py +0 -0
  51. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/storage/postgres/agent_store.py +0 -0
  52. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/storage/postgres/engine.py +0 -0
  53. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/adapters/storage/postgres/tables.py +0 -0
  54. {docsmind-0.4.0/src/docsmind/adapters/storage/postgres → docsmind-0.7.0/src/docsmind/adapters/tracing}/__init__.py +0 -0
  55. {docsmind-0.4.0/src/docsmind/adapters/tracing → docsmind-0.7.0/src/docsmind/agent}/__init__.py +0 -0
  56. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/catalog.py +0 -0
  57. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/harness/__init__.py +0 -0
  58. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/harness/context.py +0 -0
  59. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/harness/memory.py +0 -0
  60. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/harness/summarizer.py +0 -0
  61. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/harness/tokens.py +0 -0
  62. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/loop.py +0 -0
  63. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/orchestrator.py +0 -0
  64. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/planner.py +0 -0
  65. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/sources.py +0 -0
  66. {docsmind-0.4.0/src/docsmind/adapters/vision → docsmind-0.7.0/src/docsmind/agent/subagents}/__init__.py +0 -0
  67. {docsmind-0.4.0/src/docsmind/agent → docsmind-0.7.0/src/docsmind/agent/subagents/change_analysis}/__init__.py +0 -0
  68. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/agent/util.py +0 -0
  69. {docsmind-0.4.0/src/docsmind/agent/subagents → docsmind-0.7.0/src/docsmind/cli}/__init__.py +0 -0
  70. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/chat.py +0 -0
  71. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/db.py +0 -0
  72. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/diff.py +0 -0
  73. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/doctor.py +0 -0
  74. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/ingest.py +0 -0
  75. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/inspect.py +0 -0
  76. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/cli/serve.py +0 -0
  77. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/client.py +0 -0
  78. {docsmind-0.4.0/src/docsmind/agent/subagents/change_analysis → docsmind-0.7.0/src/docsmind/domain}/__init__.py +0 -0
  79. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/agent.py +0 -0
  80. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/changes.py +0 -0
  81. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/citations.py +0 -0
  82. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/documents.py +0 -0
  83. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/ports.py +0 -0
  84. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/domain/tables.py +0 -0
  85. {docsmind-0.4.0/src/docsmind/cli → docsmind-0.7.0/src/docsmind/ingestion}/__init__.py +0 -0
  86. {docsmind-0.4.0/src/docsmind/domain → docsmind-0.7.0/src/docsmind/ingestion/chunking}/__init__.py +0 -0
  87. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/ingestion/chunking/page.py +0 -0
  88. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/ingestion/chunking/structural.py +0 -0
  89. {docsmind-0.4.0/src/docsmind/ingestion → docsmind-0.7.0/src/docsmind/ingestion/enrichment}/__init__.py +0 -0
  90. {docsmind-0.4.0/src/docsmind/ingestion/chunking → docsmind-0.7.0/src/docsmind/ingestion/parsers}/__init__.py +0 -0
  91. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/ingestion/pipeline.py +0 -0
  92. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/py.typed +0 -0
  93. {docsmind-0.4.0/src/docsmind/ingestion/enrichment → docsmind-0.7.0/src/docsmind/retrieval}/__init__.py +0 -0
  94. {docsmind-0.4.0/src/docsmind/ingestion/parsers → docsmind-0.7.0/src/docsmind/server}/__init__.py +0 -0
  95. {docsmind-0.4.0/src/docsmind/retrieval → docsmind-0.7.0/src/docsmind/server/routes}/__init__.py +0 -0
  96. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/routes/chat.py +0 -0
  97. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/favicon.svg +0 -0
  98. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/LICENSE +0 -0
  99. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-EUC-H.bcmap +0 -0
  100. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-EUC-V.bcmap +0 -0
  101. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-H.bcmap +0 -0
  102. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-RKSJ-H.bcmap +0 -0
  103. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-RKSJ-V.bcmap +0 -0
  104. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78-V.bcmap +0 -0
  105. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap +0 -0
  106. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap +0 -0
  107. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap +0 -0
  108. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap +0 -0
  109. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap +0 -0
  110. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap +0 -0
  111. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap +0 -0
  112. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap +0 -0
  113. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap +0 -0
  114. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Add-H.bcmap +0 -0
  115. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Add-RKSJ-H.bcmap +0 -0
  116. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Add-RKSJ-V.bcmap +0 -0
  117. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Add-V.bcmap +0 -0
  118. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap +0 -0
  119. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap +0 -0
  120. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap +0 -0
  121. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap +0 -0
  122. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap +0 -0
  123. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap +0 -0
  124. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap +0 -0
  125. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  126. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-0.bcmap +0 -0
  127. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-1.bcmap +0 -0
  128. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-2.bcmap +0 -0
  129. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-3.bcmap +0 -0
  130. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-4.bcmap +0 -0
  131. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-5.bcmap +0 -0
  132. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  133. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap +0 -0
  134. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap +0 -0
  135. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap +0 -0
  136. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap +0 -0
  137. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap +0 -0
  138. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap +0 -0
  139. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap +0 -0
  140. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  141. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap +0 -0
  142. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap +0 -0
  143. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap +0 -0
  144. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  145. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/B5-H.bcmap +0 -0
  146. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/B5-V.bcmap +0 -0
  147. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/B5pc-H.bcmap +0 -0
  148. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/B5pc-V.bcmap +0 -0
  149. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS-EUC-H.bcmap +0 -0
  150. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS-EUC-V.bcmap +0 -0
  151. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS1-H.bcmap +0 -0
  152. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS1-V.bcmap +0 -0
  153. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS2-H.bcmap +0 -0
  154. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/CNS2-V.bcmap +0 -0
  155. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETHK-B5-H.bcmap +0 -0
  156. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETHK-B5-V.bcmap +0 -0
  157. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETen-B5-H.bcmap +0 -0
  158. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETen-B5-V.bcmap +0 -0
  159. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETenms-B5-H.bcmap +0 -0
  160. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/ETenms-B5-V.bcmap +0 -0
  161. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/EUC-H.bcmap +0 -0
  162. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/EUC-V.bcmap +0 -0
  163. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-H.bcmap +0 -0
  164. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap +0 -0
  165. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap +0 -0
  166. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Ext-V.bcmap +0 -0
  167. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GB-EUC-H.bcmap +0 -0
  168. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GB-EUC-V.bcmap +0 -0
  169. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GB-H.bcmap +0 -0
  170. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GB-V.bcmap +0 -0
  171. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBK-EUC-H.bcmap +0 -0
  172. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBK-EUC-V.bcmap +0 -0
  173. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBK2K-H.bcmap +0 -0
  174. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBK2K-V.bcmap +0 -0
  175. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBKp-EUC-H.bcmap +0 -0
  176. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBKp-EUC-V.bcmap +0 -0
  177. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-EUC-H.bcmap +0 -0
  178. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-EUC-V.bcmap +0 -0
  179. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-H.bcmap +0 -0
  180. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBT-V.bcmap +0 -0
  181. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap +0 -0
  182. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap +0 -0
  183. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBpc-EUC-H.bcmap +0 -0
  184. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/GBpc-EUC-V.bcmap +0 -0
  185. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/H.bcmap +0 -0
  186. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKdla-B5-H.bcmap +0 -0
  187. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKdla-B5-V.bcmap +0 -0
  188. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKdlb-B5-H.bcmap +0 -0
  189. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKdlb-B5-V.bcmap +0 -0
  190. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKgccs-B5-H.bcmap +0 -0
  191. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKgccs-B5-V.bcmap +0 -0
  192. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKm314-B5-H.bcmap +0 -0
  193. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKm314-B5-V.bcmap +0 -0
  194. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKm471-B5-H.bcmap +0 -0
  195. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKm471-B5-V.bcmap +0 -0
  196. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKscs-B5-H.bcmap +0 -0
  197. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/HKscs-B5-V.bcmap +0 -0
  198. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Hankaku.bcmap +0 -0
  199. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Hiragana.bcmap +0 -0
  200. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-EUC-H.bcmap +0 -0
  201. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-EUC-V.bcmap +0 -0
  202. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-H.bcmap +0 -0
  203. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-Johab-H.bcmap +0 -0
  204. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-Johab-V.bcmap +0 -0
  205. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSC-V.bcmap +0 -0
  206. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-H.bcmap +0 -0
  207. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  208. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  209. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCms-UHC-V.bcmap +0 -0
  210. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap +0 -0
  211. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap +0 -0
  212. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Katakana.bcmap +0 -0
  213. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/LICENSE +0 -0
  214. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/NWP-H.bcmap +0 -0
  215. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/NWP-V.bcmap +0 -0
  216. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/RKSJ-H.bcmap +0 -0
  217. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/RKSJ-V.bcmap +0 -0
  218. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/Roman.bcmap +0 -0
  219. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  220. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  221. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  222. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  223. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  224. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  225. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  226. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  227. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap +0 -0
  228. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap +0 -0
  229. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap +0 -0
  230. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap +0 -0
  231. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap +0 -0
  232. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap +0 -0
  233. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap +0 -0
  234. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap +0 -0
  235. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  236. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  237. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  238. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  239. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  240. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  241. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  242. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  243. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  244. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  245. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  246. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  247. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  248. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  249. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  250. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  251. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  252. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  253. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  254. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  255. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  256. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  257. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  258. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap +0 -0
  259. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap +0 -0
  260. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap +0 -0
  261. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap +0 -0
  262. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap +0 -0
  263. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap +0 -0
  264. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap +0 -0
  265. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap +0 -0
  266. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/V.bcmap +0 -0
  267. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/cmaps/WP-Symbol.bcmap +0 -0
  268. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/iccs/CGATS001Compat-v2-micro.icc +0 -0
  269. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/iccs/LICENSE +0 -0
  270. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/altText_add.svg +0 -0
  271. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/altText_disclaimer.svg +0 -0
  272. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/altText_done.svg +0 -0
  273. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/altText_spinner.svg +0 -0
  274. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/altText_warning.svg +0 -0
  275. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-check.svg +0 -0
  276. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-comment.svg +0 -0
  277. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-help.svg +0 -0
  278. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-insert.svg +0 -0
  279. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-key.svg +0 -0
  280. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-newparagraph.svg +0 -0
  281. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-noicon.svg +0 -0
  282. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-note.svg +0 -0
  283. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-paperclip.svg +0 -0
  284. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-paragraph.svg +0 -0
  285. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/annotation-pushpin.svg +0 -0
  286. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/checkmark.svg +0 -0
  287. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/comment-actionsButton.svg +0 -0
  288. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/comment-closeButton.svg +0 -0
  289. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/comment-editButton.svg +0 -0
  290. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/comment-popup-editButton.svg +0 -0
  291. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/cursor-editorFreeHighlight.svg +0 -0
  292. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/cursor-editorFreeText.svg +0 -0
  293. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/cursor-editorInk.svg +0 -0
  294. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/cursor-editorTextHighlight.svg +0 -0
  295. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/editor-toolbar-delete.svg +0 -0
  296. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/editor-toolbar-edit.svg +0 -0
  297. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/findbarButton-next.svg +0 -0
  298. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/findbarButton-previous.svg +0 -0
  299. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/gv-toolbarButton-download.svg +0 -0
  300. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/loading-icon.gif +0 -0
  301. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/loading.svg +0 -0
  302. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/messageBar_closingButton.svg +0 -0
  303. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/messageBar_info.svg +0 -0
  304. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/messageBar_warning.svg +0 -0
  305. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/pages_closeButton.svg +0 -0
  306. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/pages_selected.svg +0 -0
  307. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/pages_viewArrow.svg +0 -0
  308. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/pages_viewButton.svg +0 -0
  309. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg +0 -0
  310. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-firstPage.svg +0 -0
  311. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-handTool.svg +0 -0
  312. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-lastPage.svg +0 -0
  313. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg +0 -0
  314. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg +0 -0
  315. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg +0 -0
  316. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg +0 -0
  317. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg +0 -0
  318. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg +0 -0
  319. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-selectTool.svg +0 -0
  320. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg +0 -0
  321. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg +0 -0
  322. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg +0 -0
  323. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/signature-properties-row-check.svg +0 -0
  324. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-bookmark.svg +0 -0
  325. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-currentOutlineItem.svg +0 -0
  326. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-download.svg +0 -0
  327. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorFreeText.svg +0 -0
  328. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorHighlight.svg +0 -0
  329. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorInk.svg +0 -0
  330. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorSignature.svg +0 -0
  331. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-editorStamp.svg +0 -0
  332. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-menuArrow.svg +0 -0
  333. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-menuArrowNova.svg +0 -0
  334. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-openFile.svg +0 -0
  335. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-pageDown.svg +0 -0
  336. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-pageUp.svg +0 -0
  337. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-presentationMode.svg +0 -0
  338. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-print.svg +0 -0
  339. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-search.svg +0 -0
  340. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg +0 -0
  341. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-signaturePropertiesError.svg +0 -0
  342. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-signaturePropertiesVerified.svg +0 -0
  343. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewAttachments.svg +0 -0
  344. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewLayers.svg +0 -0
  345. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewOutline.svg +0 -0
  346. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewThumbnail.svg +0 -0
  347. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-viewsManagerToggle.svg +0 -0
  348. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-zoomIn.svg +0 -0
  349. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/toolbarButton-zoomOut.svg +0 -0
  350. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/treeitem-collapsed.svg +0 -0
  351. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/images/treeitem-expanded.svg +0 -0
  352. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ach/viewer.ftl +0 -0
  353. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/af/viewer.ftl +0 -0
  354. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/an/viewer.ftl +0 -0
  355. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ar/viewer.ftl +0 -0
  356. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ast/viewer.ftl +0 -0
  357. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/az/viewer.ftl +0 -0
  358. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/be/viewer.ftl +0 -0
  359. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/bg/viewer.ftl +0 -0
  360. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/bn/viewer.ftl +0 -0
  361. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/bo/viewer.ftl +0 -0
  362. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/bqi/viewer.ftl +0 -0
  363. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/br/viewer.ftl +0 -0
  364. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/brx/viewer.ftl +0 -0
  365. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/bs/viewer.ftl +0 -0
  366. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ca/viewer.ftl +0 -0
  367. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/cak/viewer.ftl +0 -0
  368. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ckb/viewer.ftl +0 -0
  369. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/cs/viewer.ftl +0 -0
  370. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/cy/viewer.ftl +0 -0
  371. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/da/viewer.ftl +0 -0
  372. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/de/viewer.ftl +0 -0
  373. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/dsb/viewer.ftl +0 -0
  374. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/el/viewer.ftl +0 -0
  375. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/en-CA/viewer.ftl +0 -0
  376. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/en-GB/viewer.ftl +0 -0
  377. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/en-US/viewer.ftl +0 -0
  378. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/eo/viewer.ftl +0 -0
  379. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/es-AR/viewer.ftl +0 -0
  380. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/es-CL/viewer.ftl +0 -0
  381. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/es-ES/viewer.ftl +0 -0
  382. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/es-MX/viewer.ftl +0 -0
  383. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/et/viewer.ftl +0 -0
  384. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/eu/viewer.ftl +0 -0
  385. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/fa/viewer.ftl +0 -0
  386. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ff/viewer.ftl +0 -0
  387. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/fi/viewer.ftl +0 -0
  388. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/fr/viewer.ftl +0 -0
  389. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/fur/viewer.ftl +0 -0
  390. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/fy-NL/viewer.ftl +0 -0
  391. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ga-IE/viewer.ftl +0 -0
  392. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/gd/viewer.ftl +0 -0
  393. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/gl/viewer.ftl +0 -0
  394. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/gn/viewer.ftl +0 -0
  395. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/gu-IN/viewer.ftl +0 -0
  396. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/he/viewer.ftl +0 -0
  397. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hi-IN/viewer.ftl +0 -0
  398. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hr/viewer.ftl +0 -0
  399. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hsb/viewer.ftl +0 -0
  400. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hu/viewer.ftl +0 -0
  401. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hy-AM/viewer.ftl +0 -0
  402. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/hye/viewer.ftl +0 -0
  403. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ia/viewer.ftl +0 -0
  404. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/id/viewer.ftl +0 -0
  405. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/is/viewer.ftl +0 -0
  406. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/it/viewer.ftl +0 -0
  407. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ja/viewer.ftl +0 -0
  408. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ka/viewer.ftl +0 -0
  409. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/kab/viewer.ftl +0 -0
  410. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/kk/viewer.ftl +0 -0
  411. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/km/viewer.ftl +0 -0
  412. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/kn/viewer.ftl +0 -0
  413. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ko/viewer.ftl +0 -0
  414. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/lij/viewer.ftl +0 -0
  415. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/lo/viewer.ftl +0 -0
  416. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/locale.json +0 -0
  417. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/lt/viewer.ftl +0 -0
  418. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ltg/viewer.ftl +0 -0
  419. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/lv/viewer.ftl +0 -0
  420. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/meh/viewer.ftl +0 -0
  421. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/mk/viewer.ftl +0 -0
  422. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ml/viewer.ftl +0 -0
  423. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/mr/viewer.ftl +0 -0
  424. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ms/viewer.ftl +0 -0
  425. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/my/viewer.ftl +0 -0
  426. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/nb-NO/viewer.ftl +0 -0
  427. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ne-NP/viewer.ftl +0 -0
  428. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/nl/viewer.ftl +0 -0
  429. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/nn-NO/viewer.ftl +0 -0
  430. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/oc/viewer.ftl +0 -0
  431. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/pa-IN/viewer.ftl +0 -0
  432. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/pl/viewer.ftl +0 -0
  433. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/pt-BR/viewer.ftl +0 -0
  434. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/pt-PT/viewer.ftl +0 -0
  435. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/rm/viewer.ftl +0 -0
  436. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ro/viewer.ftl +0 -0
  437. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ru/viewer.ftl +0 -0
  438. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sat/viewer.ftl +0 -0
  439. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sc/viewer.ftl +0 -0
  440. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/scn/viewer.ftl +0 -0
  441. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sco/viewer.ftl +0 -0
  442. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/si/viewer.ftl +0 -0
  443. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sk/viewer.ftl +0 -0
  444. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/skr/viewer.ftl +0 -0
  445. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sl/viewer.ftl +0 -0
  446. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/son/viewer.ftl +0 -0
  447. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sq/viewer.ftl +0 -0
  448. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sr/viewer.ftl +0 -0
  449. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/sv-SE/viewer.ftl +0 -0
  450. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/szl/viewer.ftl +0 -0
  451. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ta/viewer.ftl +0 -0
  452. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/te/viewer.ftl +0 -0
  453. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/tg/viewer.ftl +0 -0
  454. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/th/viewer.ftl +0 -0
  455. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/tl/viewer.ftl +0 -0
  456. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/tr/viewer.ftl +0 -0
  457. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/trs/viewer.ftl +0 -0
  458. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/uk/viewer.ftl +0 -0
  459. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/ur/viewer.ftl +0 -0
  460. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/uz/viewer.ftl +0 -0
  461. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/vi/viewer.ftl +0 -0
  462. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/wo/viewer.ftl +0 -0
  463. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/xh/viewer.ftl +0 -0
  464. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/zh-CN/viewer.ftl +0 -0
  465. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/locale/zh-TW/viewer.ftl +0 -0
  466. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitDingbats.pfb +0 -0
  467. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixed.pfb +0 -0
  468. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedBold.pfb +0 -0
  469. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  470. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb +0 -0
  471. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerif.pfb +0 -0
  472. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifBold.pfb +0 -0
  473. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  474. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb +0 -0
  475. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/FoxitSymbol.pfb +0 -0
  476. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LICENSE_FOXIT +0 -0
  477. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LICENSE_LIBERATION +0 -0
  478. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf +0 -0
  479. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  480. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf +0 -0
  481. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf +0 -0
  482. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/viewer.css +0 -0
  483. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/viewer.html +0 -0
  484. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/viewer.mjs +0 -0
  485. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_JBIG2 +0 -0
  486. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_OPENJPEG +0 -0
  487. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +0 -0
  488. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_OPENJPEG +0 -0
  489. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_PDFJS_QCMS +0 -0
  490. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/LICENSE_QCMS +0 -0
  491. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/jbig2.wasm +0 -0
  492. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/jbig2_nowasm_fallback.js +0 -0
  493. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/openjpeg.wasm +0 -0
  494. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/openjpeg_nowasm_fallback.js +0 -0
  495. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/qcms_bg.wasm +0 -0
  496. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/quickjs-eval.js +0 -0
  497. {docsmind-0.4.0 → docsmind-0.7.0}/src/docsmind/server/ui/pdfjs/web/wasm/quickjs-eval.wasm +0 -0
@@ -2,6 +2,84 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [0.7.0] - 2026-11-12
6
+
7
+ ### Added
8
+
9
+ - Change Analyzer can now look for a published changelog online when the documents themselves
10
+ contain none, using two new subagent-only tools:
11
+ - `web_search`: searches the web via Tavily, optionally limited to given domains. Only offered
12
+ when `DOCSMIND_WEB_SEARCH_API_KEY` is set.
13
+ - `fetch_url`: reads a public web page as text. Hardened for model-supplied URLs (http(s) on
14
+ ports 80/443 only, no credentials, no private/loopback addresses on any redirect hop,
15
+ bounded size and time).
16
+ - Config: `web_search_api_key`, `web_timeout_s`, `web_fetch_max_bytes` (documented in
17
+ `.env.example`).
18
+ - Implementation brief for the Change Analyzer (`docs/`) and unit tests for the web tools.
19
+
20
+ ### Changed
21
+
22
+ - Change Analyzer prompt and tool list updated to use the web tools as a fallback, preferring
23
+ the publisher's own domain.
24
+ - Rebuilt the bundled frontend UI assets.
25
+
26
+ ## [0.6.0] - 2026-11-10
27
+
28
+ ### Added
29
+
30
+ - Workspace: clicking a source card or citation chip opens the cited PDF page in a side panel
31
+ next to the chat.
32
+ - Images/Tables galleries: full-view lightbox (blurred backdrop, arrow-key navigation) with
33
+ the full image caption beneath.
34
+ - Chunk preview shows the embedding vector on one truncated line, expandable to the full
35
+ vector (`GET /api/documents/{version_id}/chunks/{chunk_id}/embedding`; chunk list now
36
+ includes `embedding_model`, `embedding_dims`, `embedding_preview`).
37
+ - Agents: clicking a node opens a details panel next to the graph, like the source panel in the
38
+ Workspace. For an agent (the Mind, subagents, router and planner) it shows the description,
39
+ model, step budget, tools, the full system prompt (formatted or raw, with copy), the context
40
+ blocks the harness adds and a description of the user prompt. For a tool it shows the
41
+ description the model reads, which agents can use it and its arguments (type, required,
42
+ default, constraints) with the JSON Schema. Tool chips and "Available to" chips navigate
43
+ between panels; Escape or clicking the empty graph closes it.
44
+
45
+ ### Changed
46
+
47
+ - `GET /api/agent`: every agent and stage now includes `system_prompt`, `context` (blocks with
48
+ `label`, `text`, `cached`) and `user_prompt`; every tool now includes `instructions` (the
49
+ description sent to the model) and `parameters` (its JSON Schema), in addition to `name` and
50
+ `description`.
51
+
52
+ ### Fixed
53
+
54
+ - Image captions are now shown in the gallery and refresh when a captioning job finishes.
55
+ - Captioning prompt no longer marks logos and banners as "decorative".
56
+
57
+ ## [0.5.0] - 2026-11-02
58
+
59
+ ### Changed
60
+
61
+ - Agents view is now an interactive graph: the Mind in the centre, its tools around it, and the
62
+ subagents with their own tools beyond. Hover (or tap) a node for its description. Names are
63
+ shown as "Change Analyzer", not `change_analyzer`; the router and planner appear as dashed
64
+ stages of the Mind (one model call, no tools), not as subagents.
65
+ - `GET /api/agent`: `tools` are now `{name, description}` objects (plain-language summaries),
66
+ and a new `stages` list describes the router and planner.
67
+
68
+ ### Added
69
+
70
+ - On-demand enrichment for both pending roadmap items:
71
+ - Embeddings: estimate by token count, confirmation step, resumable run (`docsmind embed`,
72
+ `POST /api/enrichment/embeddings/{estimate,run}`).
73
+ - Image captioning: estimate by image count/resolution + output-token range, confirmation step,
74
+ resumable run (`docsmind caption`, `POST /api/enrichment/captions/{estimate,run}`).
75
+ - Enrichment status + background jobs API:
76
+ `GET /api/enrichment/status`, `GET /api/enrichment/jobs/{job_id}`,
77
+ `POST /api/enrichment/jobs/{job_id}/cancel`.
78
+ - Frontend Document details now shows "not embedded yet" / "not captioned yet" alerts with
79
+ estimate-and-proceed dialogs and job progress/cancel controls.
80
+ - Hybrid retrieval path: keyword search fused with vector similarity when embeddings are present,
81
+ with automatic fallback to keyword-only when embeddings or API access are unavailable.
82
+
5
83
  ## [0.4.0] - 2026-10-31
6
84
 
7
85
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: docsmind
3
- Version: 0.4.0
3
+ Version: 0.7.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
@@ -45,6 +45,8 @@ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
45
45
  Requires-Dist: pytest>=8.0; extra == 'dev'
46
46
  Requires-Dist: ruff>=0.5; extra == 'dev'
47
47
  Requires-Dist: testcontainers[postgres]>=4.4; extra == 'dev'
48
+ Provides-Extra: langfuse
49
+ Requires-Dist: langfuse>=2.0; extra == 'langfuse'
48
50
  Provides-Extra: mlflow
49
51
  Requires-Dist: mlflow>=2.14; extra == 'mlflow'
50
52
  Provides-Extra: openai
@@ -85,8 +87,8 @@ will perform specialized tasks.
85
87
  | ✅ Table extraction | Extract and store tables skipping repeating ones (e.g. headers or footers) |
86
88
  | ✅ server + UI | FastAPI backend (`docsmind serve`) + React UI (`frontend/`): add documents, browse indexed content, image and table galleries |
87
89
  | ✅ 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 |
88
- | 🚧 Image captioning | Images are extracted and stored; vision captioning is next |
89
- | 🚧 Embeddings + hybrid search | Chunks are stored without embeddings for now |
90
+ | ✅ Image captioning (on demand) | The UI/CLI shows what's uncaptioned, estimates cost from image count/resolution, asks for confirmation, then captions only what's missing |
91
+ | ✅ Embeddings + hybrid search (on demand) | The UI/CLI shows what's unembedded, estimates cost from token counts, asks for confirmation, then embeds only what's missing; search uses keyword+semantic fusion when available |
90
92
  | 🚧 Change analysis (diffra) | `docsmind diff` exists as a command, without an implementation yet |
91
93
  | 🚧 DOCX/text parsers, S3/Supabase blob storage | Planned |
92
94
 
@@ -99,7 +101,7 @@ pip install "docsmind[all]"
99
101
  ```
100
102
 
101
103
  Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI, serves the bundled UI),
102
- `docsmind[mlflow]` (tracing/eval export). Requires Python 3.10+.
104
+ `docsmind[mlflow]` / `docsmind[langfuse]` (tracing/eval export, planned). Requires Python 3.10+.
103
105
 
104
106
  ## Quickstart
105
107
 
@@ -226,7 +228,30 @@ Question -> Orchestrator --simple--> Executor <-> Tools / Subagents -> Answer
226
228
  - **Citations**: tools register passages as `S1, S2, ...`; the model cites `[S#]`; invented
227
229
  handles are dropped and the rest renumbered by first appearance. Document text is treated as
228
230
  untrusted data, never as instructions.
229
- - **Search** is Postgres full-text (ranked) plus exact-text grep until embeddings land.
231
+ - **Search** is Postgres full-text (ranked) plus exact-text grep; when embeddings exist, semantic vector matches are fused in via reciprocal rank fusion.
232
+
233
+ ### On-demand enrichment
234
+
235
+ Embeddings and image captions are **not** created during ingest. They are opt-in because they call paid APIs.
236
+
237
+ - In the **Document details** page, warning cards show what's missing ("not embedded yet" / "not captioned yet").
238
+ - Clicking **Estimate & run** opens a confirmation dialog with model, token/image counts, and estimated USD cost.
239
+ - Running is idempotent and resumable: it only processes missing rows; cancel/retry is safe.
240
+
241
+ From CLI:
242
+
243
+ ```bash
244
+ docsmind embed [--version-id <id>] [-y]
245
+ docsmind caption [--version-id <id>] [-y]
246
+ ```
247
+
248
+ HTTP:
249
+
250
+ - `GET /api/enrichment/status`
251
+ - `POST /api/enrichment/{embeddings|captions}/estimate`
252
+ - `POST /api/enrichment/{embeddings|captions}/run`
253
+ - `GET /api/enrichment/jobs/{job_id}`
254
+ - `POST /api/enrichment/jobs/{job_id}/cancel`
230
255
 
231
256
  Tuning (all `DOCSMIND_*`): `AGENT_FAST_MODEL` (router/summarizer/memory model, defaults to
232
257
  `LLM_MODEL`), `AGENT_MAX_STEPS`, `AGENT_SUBAGENT_MAX_STEPS`, `AGENT_MEMORY_ENABLED`,
@@ -269,6 +294,8 @@ heuristics that work on one PDF break on the next.
269
294
  | `docsmind doctor` | Check your setup |
270
295
  | `docsmind serve [--host] [--port] [--reload]` | Run the FastAPI backend for the `frontend/` UI |
271
296
  | `docsmind chat [question] [-c <collection>]` | Ask the Mind once, or start a REPL that keeps the conversation |
297
+ | `docsmind embed [--version-id <id>] [-y]` | Estimate cost and create missing embeddings on demand |
298
+ | `docsmind caption [--version-id <id>] [-y]` | Estimate cost and create missing image captions on demand |
272
299
  | `docsmind diff` | Planned |
273
300
 
274
301
  ## Architecture
@@ -319,7 +346,7 @@ over `/api/*`, and loads extracted images/tables straight from disk via `/blobs/
319
346
  ### Design notes
320
347
 
321
348
  - **Ports and adapters, once.** `domain/ports.py` defines every external dependency as a
322
- `Protocol`. The core never imports `openai`, `anthropic` or `mlflow` directly. Only
349
+ `Protocol`. The core never imports `openai`, `anthropic`, `mlflow` or `langfuse` directly. Only
323
350
  adapters do, and lazily, so a bare `pip install docsmind` doesn't pull in SDKs you're
324
351
  not using.
325
352
  - **Text and images share one retrieval path.** An image becomes a chunk
@@ -28,8 +28,8 @@ will perform specialized tasks.
28
28
  | ✅ Table extraction | Extract and store tables skipping repeating ones (e.g. headers or footers) |
29
29
  | ✅ server + UI | FastAPI backend (`docsmind serve`) + React UI (`frontend/`): add documents, browse indexed content, image and table galleries |
30
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 |
31
- | 🚧 Image captioning | Images are extracted and stored; vision captioning is next |
32
- | 🚧 Embeddings + hybrid search | Chunks are stored without embeddings for now |
31
+ | ✅ Image captioning (on demand) | The UI/CLI shows what's uncaptioned, estimates cost from image count/resolution, asks for confirmation, then captions only what's missing |
32
+ | ✅ Embeddings + hybrid search (on demand) | The UI/CLI shows what's unembedded, estimates cost from token counts, asks for confirmation, then embeds only what's missing; search uses keyword+semantic fusion when available |
33
33
  | 🚧 Change analysis (diffra) | `docsmind diff` exists as a command, without an implementation yet |
34
34
  | 🚧 DOCX/text parsers, S3/Supabase blob storage | Planned |
35
35
 
@@ -42,7 +42,7 @@ pip install "docsmind[all]"
42
42
  ```
43
43
 
44
44
  Extras: `docsmind[openai]`, `docsmind[anthropic]`, `docsmind[server]` (FastAPI, serves the bundled UI),
45
- `docsmind[mlflow]` (tracing/eval export). Requires Python 3.10+.
45
+ `docsmind[mlflow]` / `docsmind[langfuse]` (tracing/eval export, planned). Requires Python 3.10+.
46
46
 
47
47
  ## Quickstart
48
48
 
@@ -169,7 +169,30 @@ Question -> Orchestrator --simple--> Executor <-> Tools / Subagents -> Answer
169
169
  - **Citations**: tools register passages as `S1, S2, ...`; the model cites `[S#]`; invented
170
170
  handles are dropped and the rest renumbered by first appearance. Document text is treated as
171
171
  untrusted data, never as instructions.
172
- - **Search** is Postgres full-text (ranked) plus exact-text grep until embeddings land.
172
+ - **Search** is Postgres full-text (ranked) plus exact-text grep; when embeddings exist, semantic vector matches are fused in via reciprocal rank fusion.
173
+
174
+ ### On-demand enrichment
175
+
176
+ Embeddings and image captions are **not** created during ingest. They are opt-in because they call paid APIs.
177
+
178
+ - In the **Document details** page, warning cards show what's missing ("not embedded yet" / "not captioned yet").
179
+ - Clicking **Estimate & run** opens a confirmation dialog with model, token/image counts, and estimated USD cost.
180
+ - Running is idempotent and resumable: it only processes missing rows; cancel/retry is safe.
181
+
182
+ From CLI:
183
+
184
+ ```bash
185
+ docsmind embed [--version-id <id>] [-y]
186
+ docsmind caption [--version-id <id>] [-y]
187
+ ```
188
+
189
+ HTTP:
190
+
191
+ - `GET /api/enrichment/status`
192
+ - `POST /api/enrichment/{embeddings|captions}/estimate`
193
+ - `POST /api/enrichment/{embeddings|captions}/run`
194
+ - `GET /api/enrichment/jobs/{job_id}`
195
+ - `POST /api/enrichment/jobs/{job_id}/cancel`
173
196
 
174
197
  Tuning (all `DOCSMIND_*`): `AGENT_FAST_MODEL` (router/summarizer/memory model, defaults to
175
198
  `LLM_MODEL`), `AGENT_MAX_STEPS`, `AGENT_SUBAGENT_MAX_STEPS`, `AGENT_MEMORY_ENABLED`,
@@ -212,6 +235,8 @@ heuristics that work on one PDF break on the next.
212
235
  | `docsmind doctor` | Check your setup |
213
236
  | `docsmind serve [--host] [--port] [--reload]` | Run the FastAPI backend for the `frontend/` UI |
214
237
  | `docsmind chat [question] [-c <collection>]` | Ask the Mind once, or start a REPL that keeps the conversation |
238
+ | `docsmind embed [--version-id <id>] [-y]` | Estimate cost and create missing embeddings on demand |
239
+ | `docsmind caption [--version-id <id>] [-y]` | Estimate cost and create missing image captions on demand |
215
240
  | `docsmind diff` | Planned |
216
241
 
217
242
  ## Architecture
@@ -262,7 +287,7 @@ over `/api/*`, and loads extracted images/tables straight from disk via `/blobs/
262
287
  ### Design notes
263
288
 
264
289
  - **Ports and adapters, once.** `domain/ports.py` defines every external dependency as a
265
- `Protocol`. The core never imports `openai`, `anthropic` or `mlflow` directly. Only
290
+ `Protocol`. The core never imports `openai`, `anthropic`, `mlflow` or `langfuse` directly. Only
266
291
  adapters do, and lazily, so a bare `pip install docsmind` doesn't pull in SDKs you're
267
292
  not using.
268
293
  - **Text and images share one retrieval path.** An image becomes a chunk
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "docsmind"
7
- version = "0.4.0"
7
+ version = "0.7.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"
@@ -46,6 +46,7 @@ openai = ["openai>=1.30"]
46
46
  anthropic = ["anthropic>=0.34"]
47
47
  server = ["fastapi>=0.111", "uvicorn[standard]>=0.30", "python-multipart>=0.0.9"]
48
48
  mlflow = ["mlflow>=2.14"]
49
+ langfuse = ["langfuse>=2.0"]
49
50
  dev = ["pytest>=8.0", "pytest-asyncio>=0.23", "testcontainers[postgres]>=4.4", "ruff>=0.5", "mypy>=1.10"]
50
51
  all = ["docsmind[openai,anthropic,server]"]
51
52
 
@@ -0,0 +1,22 @@
1
+ """Embedding providers. Today: OpenAI (and OpenAI-compatible gateways)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from docsmind.config import DocsmindConfig
6
+ from docsmind.domain.errors import EnrichmentConfigurationError
7
+
8
+
9
+ def create_embedder(config: DocsmindConfig):
10
+ if config.embedding_provider == "openai":
11
+ from docsmind.adapters.embeddings.openai_embeddings import OpenAIEmbedder
12
+
13
+ return OpenAIEmbedder(
14
+ api_key=config.openai_api_key,
15
+ model=config.embedding_model,
16
+ dimensions=config.embedding_dimensions,
17
+ base_url=config.openai_base_url,
18
+ batch_size=config.embedding_batch_size,
19
+ )
20
+ raise EnrichmentConfigurationError(
21
+ f"Unknown embedding_provider {config.embedding_provider!r}. Supported: openai."
22
+ )
@@ -0,0 +1,79 @@
1
+ """OpenAI (and OpenAI-compatible) embeddings adapter. Satisfies `domain.ports.Embedder`."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from docsmind.domain.errors import EnrichmentConfigurationError
6
+
7
+ # The API rejects inputs over 8191 tokens; page chunks are far smaller, but a
8
+ # dense page of tiny text can get there. Truncate rather than fail the batch.
9
+ MAX_INPUT_TOKENS = 8000
10
+ _MAX_REQUEST_TOKENS = 250_000 # API limit is 300k tokens per request
11
+
12
+
13
+ class OpenAIEmbedder:
14
+ def __init__(
15
+ self,
16
+ *,
17
+ api_key: str | None,
18
+ model: str,
19
+ dimensions: int,
20
+ base_url: str | None = None,
21
+ batch_size: int = 64,
22
+ timeout: float = 120.0,
23
+ ) -> None:
24
+ if not api_key:
25
+ raise EnrichmentConfigurationError(
26
+ "OpenAI API key is not set. Add DOCSMIND_OPENAI_API_KEY to your .env to create embeddings."
27
+ )
28
+ try:
29
+ from openai import AsyncOpenAI
30
+ except ImportError as exc: # pragma: no cover - import guard
31
+ raise EnrichmentConfigurationError(
32
+ 'The openai package is not installed. Run `pip install "docsmind[openai]"`.'
33
+ ) from exc
34
+ self.model_name = model
35
+ self.dimensions = dimensions
36
+ self._batch_size = max(1, batch_size)
37
+ self._client = AsyncOpenAI(api_key=api_key, base_url=base_url, max_retries=4, timeout=timeout)
38
+
39
+ async def embed(self, texts: list[str]) -> list[list[float]]:
40
+ vectors: list[list[float]] = []
41
+ for batch in self._batches([_truncate(t) for t in texts]):
42
+ kwargs: dict = {"model": self.model_name, "input": batch}
43
+ # Only the v3 models accept (and need) a `dimensions` argument.
44
+ if "text-embedding-3" in self.model_name:
45
+ kwargs["dimensions"] = self.dimensions
46
+ response = await self._client.embeddings.create(**kwargs)
47
+ ordered = sorted(response.data, key=lambda d: d.index)
48
+ vectors.extend([list(d.embedding) for d in ordered])
49
+ if len(vectors) != len(texts):
50
+ raise RuntimeError(f"Embeddings API returned {len(vectors)} vectors for {len(texts)} inputs.")
51
+ return vectors
52
+
53
+ def _batches(self, texts: list[str]):
54
+ batch: list[str] = []
55
+ tokens = 0
56
+ for text in texts:
57
+ estimate = max(1, len(text) // 3) # conservative: ~3 chars/token
58
+ if batch and (len(batch) >= self._batch_size or tokens + estimate > _MAX_REQUEST_TOKENS):
59
+ yield batch
60
+ batch, tokens = [], 0
61
+ batch.append(text)
62
+ tokens += estimate
63
+ if batch:
64
+ yield batch
65
+
66
+
67
+ def _truncate(text: str) -> str:
68
+ # The API also rejects empty strings; a single space embeds harmlessly.
69
+ text = text if text.strip() else " "
70
+ try:
71
+ import tiktoken
72
+
73
+ encoding = tiktoken.get_encoding("cl100k_base")
74
+ tokens = encoding.encode(text, disallowed_special=())
75
+ if len(tokens) > MAX_INPUT_TOKENS:
76
+ return encoding.decode(tokens[:MAX_INPUT_TOKENS])
77
+ return text
78
+ except Exception: # noqa: BLE001 - fall back to a character cap
79
+ return text[: MAX_INPUT_TOKENS * 3]