cocoindex 0.1.46__tar.gz → 0.1.47__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 (241) hide show
  1. {cocoindex-0.1.46 → cocoindex-0.1.47}/Cargo.lock +1 -1
  2. {cocoindex-0.1.46 → cocoindex-0.1.47}/Cargo.toml +1 -1
  3. {cocoindex-0.1.46 → cocoindex-0.1.47}/PKG-INFO +1 -1
  4. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/main.py +15 -8
  5. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding_qdrant/main.py +12 -7
  6. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/storages.py +9 -2
  7. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/factory_bases.rs +9 -3
  8. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/registration.rs +2 -2
  9. cocoindex-0.1.47/src/ops/storages/qdrant.rs +543 -0
  10. cocoindex-0.1.46/src/ops/storages/qdrant.rs +0 -437
  11. {cocoindex-0.1.46 → cocoindex-0.1.47}/.cargo/config.toml +0 -0
  12. {cocoindex-0.1.46 → cocoindex-0.1.47}/.env.lib_debug +0 -0
  13. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  14. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  15. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/scripts/update_version.sh +0 -0
  16. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/workflows/CI.yml +0 -0
  17. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/workflows/_test.yml +0 -0
  18. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/workflows/docs.yml +0 -0
  19. {cocoindex-0.1.46 → cocoindex-0.1.47}/.github/workflows/release.yml +0 -0
  20. {cocoindex-0.1.46 → cocoindex-0.1.47}/.gitignore +0 -0
  21. {cocoindex-0.1.46 → cocoindex-0.1.47}/.vscode/settings.json +0 -0
  22. {cocoindex-0.1.46 → cocoindex-0.1.47}/CODE_OF_CONDUCT.md +0 -0
  23. {cocoindex-0.1.46 → cocoindex-0.1.47}/CONTRIBUTING.md +0 -0
  24. {cocoindex-0.1.46 → cocoindex-0.1.47}/LICENSE +0 -0
  25. {cocoindex-0.1.46 → cocoindex-0.1.47}/README.md +0 -0
  26. {cocoindex-0.1.46 → cocoindex-0.1.47}/dev/neo4j.yaml +0 -0
  27. {cocoindex-0.1.46 → cocoindex-0.1.47}/dev/postgres.yaml +0 -0
  28. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/.gitignore +0 -0
  29. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/README.md +0 -0
  30. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/about/community.md +0 -0
  31. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/about/contributing.md +0 -0
  32. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/ai/llm.mdx +0 -0
  33. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/basics.md +0 -0
  34. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/cli.mdx +0 -0
  35. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/custom_function.mdx +0 -0
  36. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/data_example.svg +0 -0
  37. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/data_types.mdx +0 -0
  38. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/flow_def.mdx +0 -0
  39. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/flow_example.svg +0 -0
  40. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/flow_methods.mdx +0 -0
  41. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/core/settings.mdx +0 -0
  42. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/getting_started/installation.md +0 -0
  43. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/getting_started/markdown_files.zip +0 -0
  44. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/getting_started/overview.md +0 -0
  45. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/getting_started/quickstart.md +0 -0
  46. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/ops/functions.md +0 -0
  47. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/ops/sources.md +0 -0
  48. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/ops/storages.md +0 -0
  49. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docs/query.mdx +0 -0
  50. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/docusaurus.config.ts +0 -0
  51. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/package.json +0 -0
  52. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/sidebars.ts +0 -0
  53. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/src/components/HomepageFeatures/index.tsx +0 -0
  54. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  55. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/src/css/custom.css +0 -0
  56. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/src/theme/Root.js +0 -0
  57. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/static/.nojekyll +0 -0
  58. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/static/img/docusaurus.png +0 -0
  59. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/static/img/favicon.ico +0 -0
  60. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/static/img/icon.svg +0 -0
  61. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/static/robots.txt +0 -0
  62. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/tsconfig.json +0 -0
  63. {cocoindex-0.1.46 → cocoindex-0.1.47}/docs/yarn.lock +0 -0
  64. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/amazon_s3_embedding/.env.example +0 -0
  65. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/amazon_s3_embedding/.gitignore +0 -0
  66. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/amazon_s3_embedding/README.md +0 -0
  67. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/amazon_s3_embedding/main.py +0 -0
  68. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/amazon_s3_embedding/pyproject.toml +0 -0
  69. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/code_embedding/.env +0 -0
  70. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/code_embedding/README.md +0 -0
  71. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/code_embedding/main.py +0 -0
  72. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/code_embedding/pyproject.toml +0 -0
  73. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/docs_to_knowledge_graph/.env +0 -0
  74. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/docs_to_knowledge_graph/README.md +0 -0
  75. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/docs_to_knowledge_graph/main.py +0 -0
  76. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
  77. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/.dockerignore +0 -0
  78. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/.env +0 -0
  79. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/README.md +0 -0
  80. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/compose.yaml +0 -0
  81. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/dockerfile +0 -0
  82. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  83. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/main.py +0 -0
  84. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/fastapi_server_docker/requirements.txt +0 -0
  85. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/gdrive_text_embedding/.env.example +0 -0
  86. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/gdrive_text_embedding/.gitignore +0 -0
  87. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/gdrive_text_embedding/README.md +0 -0
  88. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/gdrive_text_embedding/main.py +0 -0
  89. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/gdrive_text_embedding/pyproject.toml +0 -0
  90. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/.env +0 -0
  91. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/README.md +0 -0
  92. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/.gitignore +0 -0
  93. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/index.html +0 -0
  94. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/package-lock.json +0 -0
  95. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/package.json +0 -0
  96. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/src/App.jsx +0 -0
  97. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/src/main.jsx +0 -0
  98. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/src/style.css +0 -0
  99. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/frontend/vite.config.js +0 -0
  100. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/img/cat1.jpeg +0 -0
  101. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/img/dog1.jpeg +0 -0
  102. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/img/elephant1.jpg +0 -0
  103. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/img/giraffe.jpg +0 -0
  104. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/pyproject.toml +0 -0
  105. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/image_search/requirements.txt +0 -0
  106. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/.env +0 -0
  107. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/README.md +0 -0
  108. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/main.py +0 -0
  109. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  110. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  111. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  112. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  113. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/manuals_llm_extraction/pyproject.toml +0 -0
  114. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/.env +0 -0
  115. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/README.md +0 -0
  116. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/main.py +0 -0
  117. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  118. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  119. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  120. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/pdf_embedding/pyproject.toml +0 -0
  121. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/.env +0 -0
  122. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/README.md +0 -0
  123. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/img/cocoinsight.png +0 -0
  124. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/img/neo4j.png +0 -0
  125. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/main.py +0 -0
  126. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p1.json +0 -0
  127. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p2.json +0 -0
  128. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p3.json +0 -0
  129. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p4.json +0 -0
  130. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p5.json +0 -0
  131. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p6.json +0 -0
  132. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p7.json +0 -0
  133. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p8.json +0 -0
  134. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/products/p9.json +0 -0
  135. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/product_recommendation/pyproject.toml +0 -0
  136. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/.env +0 -0
  137. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/README.md +0 -0
  138. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  139. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/main.py +0 -0
  140. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  141. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  142. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  143. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding/pyproject.toml +0 -0
  144. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding_qdrant/.env +0 -0
  145. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding_qdrant/README.md +0 -0
  146. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  147. {cocoindex-0.1.46 → cocoindex-0.1.47}/examples/text_embedding_qdrant/pyproject.toml +0 -0
  148. {cocoindex-0.1.46 → cocoindex-0.1.47}/pyproject.toml +0 -0
  149. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/__init__.py +0 -0
  150. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/auth_registry.py +0 -0
  151. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/cli.py +0 -0
  152. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/convert.py +0 -0
  153. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/flow.py +0 -0
  154. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/functions.py +0 -0
  155. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/index.py +0 -0
  156. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/lib.py +0 -0
  157. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/llm.py +0 -0
  158. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/op.py +0 -0
  159. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/py.typed +0 -0
  160. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/query.py +0 -0
  161. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/runtime.py +0 -0
  162. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/setting.py +0 -0
  163. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/setup.py +0 -0
  164. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/sources.py +0 -0
  165. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/tests/__init__.py +0 -0
  166. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/tests/test_convert.py +0 -0
  167. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/typing.py +0 -0
  168. {cocoindex-0.1.46 → cocoindex-0.1.47}/python/cocoindex/utils.py +0 -0
  169. {cocoindex-0.1.46 → cocoindex-0.1.47}/ruff.toml +0 -0
  170. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/duration.rs +0 -0
  171. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/field_attrs.rs +0 -0
  172. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/json_schema.rs +0 -0
  173. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/mod.rs +0 -0
  174. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/schema.rs +0 -0
  175. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/spec.rs +0 -0
  176. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/base/value.rs +0 -0
  177. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/builder/analyzed_flow.rs +0 -0
  178. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/builder/analyzer.rs +0 -0
  179. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/builder/flow_builder.rs +0 -0
  180. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/builder/mod.rs +0 -0
  181. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/builder/plan.rs +0 -0
  182. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/db_tracking.rs +0 -0
  183. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/db_tracking_setup.rs +0 -0
  184. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/dumper.rs +0 -0
  185. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/evaluator.rs +0 -0
  186. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/indexing_status.rs +0 -0
  187. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/live_updater.rs +0 -0
  188. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/memoization.rs +0 -0
  189. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/mod.rs +0 -0
  190. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/query.rs +0 -0
  191. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/row_indexer.rs +0 -0
  192. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/source_indexer.rs +0 -0
  193. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/execution/stats.rs +0 -0
  194. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/lib.rs +0 -0
  195. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/lib_context.rs +0 -0
  196. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/llm/anthropic.rs +0 -0
  197. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/llm/gemini.rs +0 -0
  198. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/llm/mod.rs +0 -0
  199. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/llm/ollama.rs +0 -0
  200. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/llm/openai.rs +0 -0
  201. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/functions/extract_by_llm.rs +0 -0
  202. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/functions/mod.rs +0 -0
  203. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/functions/parse_json.rs +0 -0
  204. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/functions/split_recursively.rs +0 -0
  205. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/interface.rs +0 -0
  206. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/mod.rs +0 -0
  207. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/py_factory.rs +0 -0
  208. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/registry.rs +0 -0
  209. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/sdk.rs +0 -0
  210. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/sources/amazon_s3.rs +0 -0
  211. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/sources/google_drive.rs +0 -0
  212. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/sources/local_file.rs +0 -0
  213. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/sources/mod.rs +0 -0
  214. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/kuzu.rs +0 -0
  215. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/mod.rs +0 -0
  216. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/neo4j.rs +0 -0
  217. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/postgres.rs +0 -0
  218. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/shared/mod.rs +0 -0
  219. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/shared/property_graph.rs +0 -0
  220. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/ops/storages/shared/table_columns.rs +0 -0
  221. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/prelude.rs +0 -0
  222. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/py/convert.rs +0 -0
  223. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/py/mod.rs +0 -0
  224. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/server.rs +0 -0
  225. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/service/error.rs +0 -0
  226. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/service/flows.rs +0 -0
  227. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/service/mod.rs +0 -0
  228. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/service/search.rs +0 -0
  229. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/settings.rs +0 -0
  230. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/auth_registry.rs +0 -0
  231. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/components.rs +0 -0
  232. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/db_metadata.rs +0 -0
  233. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/driver.rs +0 -0
  234. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/mod.rs +0 -0
  235. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/setup/states.rs +0 -0
  236. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/db.rs +0 -0
  237. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/fingerprint.rs +0 -0
  238. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/immutable.rs +0 -0
  239. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/mod.rs +0 -0
  240. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/retryable.rs +0 -0
  241. {cocoindex-0.1.46 → cocoindex-0.1.47}/src/utils/yaml_ser.rs +0 -0
@@ -993,7 +993,7 @@ dependencies = [
993
993
 
994
994
  [[package]]
995
995
  name = "cocoindex"
996
- version = "0.1.46"
996
+ version = "0.1.47"
997
997
  dependencies = [
998
998
  "anyhow",
999
999
  "async-openai",
@@ -2,7 +2,7 @@
2
2
  name = "cocoindex"
3
3
  # Version used for local development is always higher than others to take precedence.
4
4
  # Will be overridden for specific release versions.
5
- version = "0.1.46"
5
+ version = "0.1.47"
6
6
  edition = "2024"
7
7
 
8
8
  [profile.release]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.1.46
3
+ Version: 0.1.47
4
4
  Requires-Dist: sentence-transformers>=3.3.1
5
5
  Requires-Dist: click>=8.1.8
6
6
  Requires-Dist: rich>=14.0.0
@@ -17,8 +17,10 @@ from PIL import Image
17
17
  from transformers import CLIPModel, CLIPProcessor
18
18
 
19
19
 
20
- QDRANT_GRPC_URL = os.getenv("QDRANT_GRPC_URL", "http://localhost:6334/")
20
+ QDRANT_URL = os.getenv("QDRANT_URL", "http://localhost:6334/")
21
+ QDRANT_COLLECTION = "cocoindex_image_search"
21
22
  CLIP_MODEL_NAME = "openai/clip-vit-large-patch14"
23
+ CLIP_MODEL_DIMENSION = 768
22
24
 
23
25
 
24
26
  @functools.cache
@@ -40,7 +42,9 @@ def embed_query(text: str) -> list[float]:
40
42
 
41
43
 
42
44
  @cocoindex.op.function(cache=True, behavior_version=1, gpu=True)
43
- def embed_image(img_bytes: bytes) -> cocoindex.Vector[cocoindex.Float32, Literal[384]]:
45
+ def embed_image(
46
+ img_bytes: bytes,
47
+ ) -> cocoindex.Vector[cocoindex.Float32, Literal[CLIP_MODEL_DIMENSION]]:
44
48
  """
45
49
  Convert image to embedding using CLIP model.
46
50
  """
@@ -56,7 +60,7 @@ def embed_image(img_bytes: bytes) -> cocoindex.Vector[cocoindex.Float32, Literal
56
60
  @cocoindex.flow_def(name="ImageObjectEmbedding")
57
61
  def image_object_embedding_flow(
58
62
  flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope
59
- ):
63
+ ) -> None:
60
64
  data_scope["images"] = flow_builder.add_source(
61
65
  cocoindex.sources.LocalFile(
62
66
  path="img", included_patterns=["*.jpg", "*.jpeg", "*.png"], binary=True
@@ -73,14 +77,17 @@ def image_object_embedding_flow(
73
77
  filename=img["filename"],
74
78
  embedding=img["embedding"],
75
79
  )
80
+
81
+ qdrant_conn = cocoindex.add_auth_entry(
82
+ "Qdrant", cocoindex.storages.QdrantConnection(url=QDRANT_URL)
83
+ )
76
84
  img_embeddings.export(
77
85
  "img_embeddings",
78
86
  cocoindex.storages.Qdrant(
79
- collection_name="image_search",
80
- grpc_url=QDRANT_GRPC_URL,
87
+ connection=qdrant_conn,
88
+ collection_name=QDRANT_COLLECTION,
81
89
  ),
82
90
  primary_key_fields=["id"],
83
- setup_by_user=True,
84
91
  )
85
92
 
86
93
 
@@ -103,7 +110,7 @@ def startup_event():
103
110
  load_dotenv()
104
111
  cocoindex.init()
105
112
  # Initialize Qdrant client
106
- app.state.qdrant_client = QdrantClient(url=QDRANT_GRPC_URL, prefer_grpc=True)
113
+ app.state.qdrant_client = QdrantClient(url=QDRANT_URL, prefer_grpc=True)
107
114
  app.state.live_updater = cocoindex.FlowLiveUpdater(image_object_embedding_flow)
108
115
  app.state.live_updater.start()
109
116
 
@@ -118,7 +125,7 @@ def search(
118
125
 
119
126
  # Search in Qdrant
120
127
  search_results = app.state.qdrant_client.search(
121
- collection_name="image_search",
128
+ collection_name=QDRANT_COLLECTION,
122
129
  query_vector=("embedding", query_embedding),
123
130
  limit=limit,
124
131
  )
@@ -4,8 +4,8 @@ from qdrant_client.http.models import Filter, FieldCondition, MatchValue
4
4
  import cocoindex
5
5
 
6
6
  # Define Qdrant connection constants
7
- QDRANT_GRPC_URL = "http://localhost:6334"
8
- QDRANT_COLLECTION = "cocoindex"
7
+ QDRANT_URL = "http://localhost:6334"
8
+ QDRANT_COLLECTION = "cocoindex_text_embedding"
9
9
 
10
10
 
11
11
  @cocoindex.transform_flow()
@@ -26,7 +26,7 @@ def text_to_embedding(
26
26
  @cocoindex.flow_def(name="TextEmbeddingWithQdrant")
27
27
  def text_embedding_flow(
28
28
  flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope
29
- ):
29
+ ) -> None:
30
30
  """
31
31
  Define an example flow that embeds text into a vector database.
32
32
  """
@@ -55,19 +55,22 @@ def text_embedding_flow(
55
55
  text_embedding=chunk["embedding"],
56
56
  )
57
57
 
58
+ qdrant_conn = cocoindex.add_auth_entry(
59
+ "Qdrant", cocoindex.storages.QdrantConnection(url=QDRANT_URL)
60
+ )
58
61
  doc_embeddings.export(
59
62
  "doc_embeddings",
60
63
  cocoindex.storages.Qdrant(
61
- collection_name=QDRANT_COLLECTION, grpc_url=QDRANT_GRPC_URL
64
+ connection=qdrant_conn,
65
+ collection_name=QDRANT_COLLECTION,
62
66
  ),
63
67
  primary_key_fields=["id"],
64
- setup_by_user=True,
65
68
  )
66
69
 
67
70
 
68
- def _main():
71
+ def _main() -> None:
69
72
  # Initialize Qdrant client
70
- client = QdrantClient(url=QDRANT_GRPC_URL, prefer_grpc=True)
73
+ client = QdrantClient(url=QDRANT_URL, prefer_grpc=True)
71
74
 
72
75
  # Run queries in a loop to demonstrate the query capabilities.
73
76
  while True:
@@ -87,6 +90,8 @@ def _main():
87
90
  for result in search_results:
88
91
  score = result.score
89
92
  payload = result.payload
93
+ if payload is None:
94
+ continue
90
95
  print(f"[{score:.3f}] {payload['filename']}")
91
96
  print(f" {payload['text']}")
92
97
  print("---")
@@ -16,13 +16,20 @@ class Postgres(op.StorageSpec):
16
16
  table_name: str | None = None
17
17
 
18
18
 
19
+ @dataclass
20
+ class QdrantConnection:
21
+ """Connection spec for Qdrant."""
22
+
23
+ url: str
24
+ api_key: str | None = None
25
+
26
+
19
27
  @dataclass
20
28
  class Qdrant(op.StorageSpec):
21
29
  """Storage powered by Qdrant - https://qdrant.tech/."""
22
30
 
31
+ connection: AuthEntryReference[QdrantConnection]
23
32
  collection_name: str
24
- grpc_url: str = "http://localhost:6334/"
25
- api_key: str | None = None
26
33
 
27
34
 
28
35
  @dataclass
@@ -309,6 +309,12 @@ pub trait StorageFactoryBase: ExportTargetFactory + Send + Sync + 'static {
309
309
  Vec<(Self::Key, Self::SetupState)>,
310
310
  )>;
311
311
 
312
+ /// Deserialize the setup key from a JSON value.
313
+ /// You can override this method to provide a custom deserialization logic, e.g. to perform backward compatible deserialization.
314
+ fn deserialize_setup_key(key: serde_json::Value) -> Result<Self::Key> {
315
+ Ok(serde_json::from_value(key)?)
316
+ }
317
+
312
318
  /// Will not be called if it's setup by user.
313
319
  /// It returns an error if the target only supports setup by user.
314
320
  async fn check_setup_status(
@@ -421,7 +427,7 @@ impl<T: StorageFactoryBase> ExportTargetFactory for T {
421
427
  existing_states: setup::CombinedState<serde_json::Value>,
422
428
  auth_registry: &Arc<AuthRegistry>,
423
429
  ) -> Result<Box<dyn setup::ResourceSetupStatus>> {
424
- let key: T::Key = serde_json::from_value(key.clone())?;
430
+ let key: T::Key = Self::deserialize_setup_key(key.clone())?;
425
431
  let desired_state: Option<T::SetupState> = desired_state
426
432
  .map(|v| serde_json::from_value(v.clone()))
427
433
  .transpose()?;
@@ -438,12 +444,12 @@ impl<T: StorageFactoryBase> ExportTargetFactory for T {
438
444
  }
439
445
 
440
446
  fn describe_resource(&self, key: &serde_json::Value) -> Result<String> {
441
- let key: T::Key = serde_json::from_value(key.clone())?;
447
+ let key: T::Key = Self::deserialize_setup_key(key.clone())?;
442
448
  StorageFactoryBase::describe_resource(self, &key)
443
449
  }
444
450
 
445
451
  fn normalize_setup_key(&self, key: &serde_json::Value) -> Result<serde_json::Value> {
446
- let key: T::Key = serde_json::from_value(key.clone())?;
452
+ let key: T::Key = Self::deserialize_setup_key(key.clone())?;
447
453
  Ok(serde_json::to_value(key)?)
448
454
  }
449
455
 
@@ -3,7 +3,7 @@ use super::{
3
3
  storages,
4
4
  };
5
5
  use anyhow::Result;
6
- use std::sync::{Arc, LazyLock, RwLock, RwLockReadGuard};
6
+ use std::sync::{LazyLock, RwLock, RwLockReadGuard};
7
7
 
8
8
  fn register_executor_factories(registry: &mut ExecutorFactoryRegistry) -> Result<()> {
9
9
  let reqwest_client = reqwest::Client::new();
@@ -17,7 +17,7 @@ fn register_executor_factories(registry: &mut ExecutorFactoryRegistry) -> Result
17
17
  functions::extract_by_llm::Factory.register(registry)?;
18
18
 
19
19
  storages::postgres::Factory::default().register(registry)?;
20
- Arc::new(storages::qdrant::Factory::default()).register(registry)?;
20
+ storages::qdrant::register(registry)?;
21
21
  storages::kuzu::register(registry, reqwest_client)?;
22
22
 
23
23
  storages::neo4j::Factory::new().register(registry)?;