cocoindex 0.1.43__tar.gz → 0.1.44__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 (237) hide show
  1. {cocoindex-0.1.43 → cocoindex-0.1.44}/Cargo.lock +1 -1
  2. {cocoindex-0.1.43 → cocoindex-0.1.44}/Cargo.toml +1 -1
  3. {cocoindex-0.1.43 → cocoindex-0.1.44}/PKG-INFO +1 -1
  4. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/main.py +4 -0
  5. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/README.md +23 -26
  6. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/main.py +26 -14
  7. cocoindex-0.1.44/examples/image_search/pyproject.toml +9 -0
  8. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/cli.py +1 -1
  9. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/flow.py +2 -2
  10. {cocoindex-0.1.43 → cocoindex-0.1.44}/.cargo/config.toml +0 -0
  11. {cocoindex-0.1.43 → cocoindex-0.1.44}/.env.lib_debug +0 -0
  12. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  13. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  14. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/scripts/update_version.sh +0 -0
  15. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/CI.yml +0 -0
  16. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/_test.yml +0 -0
  17. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/docs.yml +0 -0
  18. {cocoindex-0.1.43 → cocoindex-0.1.44}/.github/workflows/release.yml +0 -0
  19. {cocoindex-0.1.43 → cocoindex-0.1.44}/.gitignore +0 -0
  20. {cocoindex-0.1.43 → cocoindex-0.1.44}/.vscode/settings.json +0 -0
  21. {cocoindex-0.1.43 → cocoindex-0.1.44}/CODE_OF_CONDUCT.md +0 -0
  22. {cocoindex-0.1.43 → cocoindex-0.1.44}/CONTRIBUTING.md +0 -0
  23. {cocoindex-0.1.43 → cocoindex-0.1.44}/LICENSE +0 -0
  24. {cocoindex-0.1.43 → cocoindex-0.1.44}/README.md +0 -0
  25. {cocoindex-0.1.43 → cocoindex-0.1.44}/dev/neo4j.yaml +0 -0
  26. {cocoindex-0.1.43 → cocoindex-0.1.44}/dev/postgres.yaml +0 -0
  27. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/.gitignore +0 -0
  28. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/README.md +0 -0
  29. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/about/community.md +0 -0
  30. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/about/contributing.md +0 -0
  31. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ai/llm.mdx +0 -0
  32. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/basics.md +0 -0
  33. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/cli.mdx +0 -0
  34. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/custom_function.mdx +0 -0
  35. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/data_example.svg +0 -0
  36. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/data_types.mdx +0 -0
  37. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_def.mdx +0 -0
  38. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_example.svg +0 -0
  39. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/flow_methods.mdx +0 -0
  40. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/core/settings.mdx +0 -0
  41. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/installation.md +0 -0
  42. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/markdown_files.zip +0 -0
  43. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/overview.md +0 -0
  44. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/getting_started/quickstart.md +0 -0
  45. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/functions.md +0 -0
  46. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/sources.md +0 -0
  47. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/ops/storages.md +0 -0
  48. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docs/query.mdx +0 -0
  49. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/docusaurus.config.ts +0 -0
  50. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/package.json +0 -0
  51. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/sidebars.ts +0 -0
  52. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/components/HomepageFeatures/index.tsx +0 -0
  53. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  54. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/css/custom.css +0 -0
  55. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/src/theme/Root.js +0 -0
  56. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/.nojekyll +0 -0
  57. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/docusaurus.png +0 -0
  58. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/favicon.ico +0 -0
  59. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/img/icon.svg +0 -0
  60. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/static/robots.txt +0 -0
  61. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/tsconfig.json +0 -0
  62. {cocoindex-0.1.43 → cocoindex-0.1.44}/docs/yarn.lock +0 -0
  63. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/.env.example +0 -0
  64. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/.gitignore +0 -0
  65. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/README.md +0 -0
  66. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/main.py +0 -0
  67. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/amazon_s3_embedding/pyproject.toml +0 -0
  68. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/.env +0 -0
  69. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/README.md +0 -0
  70. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/code_embedding/pyproject.toml +0 -0
  71. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/.env +0 -0
  72. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/README.md +0 -0
  73. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/main.py +0 -0
  74. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
  75. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/.dockerignore +0 -0
  76. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/.env +0 -0
  77. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/README.md +0 -0
  78. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/compose.yaml +0 -0
  79. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/dockerfile +0 -0
  80. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/main.py +0 -0
  81. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/requirements.txt +0 -0
  82. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/sample_code/main.py +0 -0
  83. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/fastapi_server_docker/src/cocoindex_funs.py +0 -0
  84. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/.env.example +0 -0
  85. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/.gitignore +0 -0
  86. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/README.md +0 -0
  87. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/main.py +0 -0
  88. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/gdrive_text_embedding/pyproject.toml +0 -0
  89. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/.env +0 -0
  90. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/.gitignore +0 -0
  91. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/index.html +0 -0
  92. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/package-lock.json +0 -0
  93. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/package.json +0 -0
  94. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/App.jsx +0 -0
  95. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/main.jsx +0 -0
  96. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/src/style.css +0 -0
  97. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/frontend/vite.config.js +0 -0
  98. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/cat1.jpeg +0 -0
  99. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/dog1.jpeg +0 -0
  100. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/elephant1.jpg +0 -0
  101. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/img/giraffe.jpg +0 -0
  102. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/image_search/requirements.txt +0 -0
  103. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/.env +0 -0
  104. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/README.md +0 -0
  105. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/main.py +0 -0
  106. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  107. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  108. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  109. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  110. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/manuals_llm_extraction/pyproject.toml +0 -0
  111. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/.env +0 -0
  112. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/README.md +0 -0
  113. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/main.py +0 -0
  114. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  115. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  116. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  117. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/pdf_embedding/pyproject.toml +0 -0
  118. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/.env +0 -0
  119. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/README.md +0 -0
  120. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/img/cocoinsight.png +0 -0
  121. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/img/neo4j.png +0 -0
  122. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/main.py +0 -0
  123. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p1.json +0 -0
  124. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p2.json +0 -0
  125. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p3.json +0 -0
  126. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p4.json +0 -0
  127. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p5.json +0 -0
  128. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p6.json +0 -0
  129. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p7.json +0 -0
  130. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p8.json +0 -0
  131. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/products/p9.json +0 -0
  132. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/product_recommendation/pyproject.toml +0 -0
  133. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/.env +0 -0
  134. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/README.md +0 -0
  135. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  136. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/main.py +0 -0
  137. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  138. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  139. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  140. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding/pyproject.toml +0 -0
  141. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/.env +0 -0
  142. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/README.md +0 -0
  143. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/main.py +0 -0
  144. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  145. {cocoindex-0.1.43 → cocoindex-0.1.44}/examples/text_embedding_qdrant/pyproject.toml +0 -0
  146. {cocoindex-0.1.43 → cocoindex-0.1.44}/pyproject.toml +0 -0
  147. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/__init__.py +0 -0
  148. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/auth_registry.py +0 -0
  149. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/convert.py +0 -0
  150. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/functions.py +0 -0
  151. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/index.py +0 -0
  152. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/lib.py +0 -0
  153. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/llm.py +0 -0
  154. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/op.py +0 -0
  155. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/py.typed +0 -0
  156. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/query.py +0 -0
  157. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/runtime.py +0 -0
  158. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/setting.py +0 -0
  159. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/setup.py +0 -0
  160. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/sources.py +0 -0
  161. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/storages.py +0 -0
  162. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/tests/__init__.py +0 -0
  163. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/tests/test_convert.py +0 -0
  164. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/typing.py +0 -0
  165. {cocoindex-0.1.43 → cocoindex-0.1.44}/python/cocoindex/utils.py +0 -0
  166. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/duration.rs +0 -0
  167. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/field_attrs.rs +0 -0
  168. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/json_schema.rs +0 -0
  169. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/mod.rs +0 -0
  170. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/schema.rs +0 -0
  171. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/spec.rs +0 -0
  172. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/base/value.rs +0 -0
  173. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/analyzed_flow.rs +0 -0
  174. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/analyzer.rs +0 -0
  175. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/flow_builder.rs +0 -0
  176. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/mod.rs +0 -0
  177. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/builder/plan.rs +0 -0
  178. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/db_tracking.rs +0 -0
  179. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/db_tracking_setup.rs +0 -0
  180. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/dumper.rs +0 -0
  181. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/evaluator.rs +0 -0
  182. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/indexing_status.rs +0 -0
  183. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/live_updater.rs +0 -0
  184. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/memoization.rs +0 -0
  185. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/mod.rs +0 -0
  186. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/query.rs +0 -0
  187. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/row_indexer.rs +0 -0
  188. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/source_indexer.rs +0 -0
  189. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/execution/stats.rs +0 -0
  190. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/lib.rs +0 -0
  191. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/lib_context.rs +0 -0
  192. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/anthropic.rs +0 -0
  193. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/gemini.rs +0 -0
  194. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/mod.rs +0 -0
  195. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/ollama.rs +0 -0
  196. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/llm/openai.rs +0 -0
  197. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/factory_bases.rs +0 -0
  198. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/extract_by_llm.rs +0 -0
  199. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/mod.rs +0 -0
  200. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/parse_json.rs +0 -0
  201. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/functions/split_recursively.rs +0 -0
  202. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/interface.rs +0 -0
  203. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/mod.rs +0 -0
  204. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/py_factory.rs +0 -0
  205. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/registration.rs +0 -0
  206. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/registry.rs +0 -0
  207. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sdk.rs +0 -0
  208. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/amazon_s3.rs +0 -0
  209. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/google_drive.rs +0 -0
  210. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/local_file.rs +0 -0
  211. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/sources/mod.rs +0 -0
  212. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/mod.rs +0 -0
  213. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/neo4j.rs +0 -0
  214. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/postgres.rs +0 -0
  215. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/qdrant.rs +0 -0
  216. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/ops/storages/spec.rs +0 -0
  217. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/prelude.rs +0 -0
  218. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/py/convert.rs +0 -0
  219. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/py/mod.rs +0 -0
  220. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/server.rs +0 -0
  221. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/error.rs +0 -0
  222. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/flows.rs +0 -0
  223. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/mod.rs +0 -0
  224. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/service/search.rs +0 -0
  225. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/settings.rs +0 -0
  226. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/auth_registry.rs +0 -0
  227. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/components.rs +0 -0
  228. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/db_metadata.rs +0 -0
  229. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/driver.rs +0 -0
  230. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/mod.rs +0 -0
  231. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/setup/states.rs +0 -0
  232. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/db.rs +0 -0
  233. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/fingerprint.rs +0 -0
  234. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/immutable.rs +0 -0
  235. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/mod.rs +0 -0
  236. {cocoindex-0.1.43 → cocoindex-0.1.44}/src/utils/retryable.rs +0 -0
  237. {cocoindex-0.1.43 → cocoindex-0.1.44}/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.43"
996
+ version = "0.1.44"
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.43"
5
+ version = "0.1.44"
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.43
3
+ Version: 0.1.44
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
@@ -66,6 +66,10 @@ def search(pool: ConnectionPool, query: str, top_k: int = 5):
66
66
  ]
67
67
 
68
68
  def _main():
69
+ # Make sure the flow is built and up-to-date.
70
+ stats = code_embedding_flow.update()
71
+ print("Updated index: ", stats)
72
+
69
73
  # Initialize the database connection pool.
70
74
  pool = ConnectionPool(os.getenv("COCOINDEX_DATABASE_URL"))
71
75
  # Run queries in a loop to demonstrate the query capabilities.
@@ -2,23 +2,22 @@
2
2
 
3
3
  ![image](https://github.com/user-attachments/assets/3a696344-c9b4-46e8-9413-6229dbb8672a)
4
4
 
5
- - QDrant for Vector Storage
5
+ - Qdrant for Vector Storage
6
6
  - Ollama Gemma3 (Image to Text)
7
7
  - CLIP ViT-L/14 - Embeddings Model
8
8
  - Live Update
9
9
 
10
10
  ## Make sure Postgres and Qdrant are running
11
11
  ```
12
- docker run -d --name qdrant -p 6334:6334 qdrant/qdrant:latest
12
+ docker run -d -p 6334:6334 -p 6333:6333 qdrant/qdrant
13
13
  export COCOINDEX_DATABASE_URL="postgres://cocoindex:cocoindex@localhost/cocoindex"
14
14
  ```
15
15
 
16
- ## Create QDrant Collection
16
+ ## Create Qdrant Collection
17
17
  ```
18
- curl -X PUT
19
- 'http://localhost:6333/collections/image_search' \
20
- --header 'Content-Type: application/json' \
21
- --data-raw '{
18
+ curl -X PUT 'http://localhost:6333/collections/image_search' \
19
+ -H 'Content-Type: application/json' \
20
+ -d '{
22
21
  "vectors": {
23
22
  "embedding": {
24
23
  "size": 768,
@@ -26,7 +25,6 @@ curl -X PUT
26
25
  }
27
26
  }
28
27
  }'
29
-
30
28
  ```
31
29
 
32
30
  ## Run Ollama
@@ -35,29 +33,28 @@ ollama pull gemma3
35
33
  ollama serve
36
34
  ```
37
35
 
38
- ## Create virtual environment and install dependencies
39
- ```
40
- python -m venv .venv
41
- source .venv/bin/activate
42
- pip install -r requirements.txt
43
- ```
44
-
45
36
  ### Place your images in the `img` directory.
46
37
  - No need to update manually. CocoIndex will automatically update the index as new images are added to the directory.
47
38
 
48
39
 
49
40
  ## Run Backend
50
- ```
51
- cocoindex setup main.py
52
- uvicorn main:app --reload --host 0.0.0.0 --port 8000
53
- ```
54
-
55
- ## Run Frontend
56
- ```
57
- cd frontend
58
- npm install
59
- npm run dev
60
- ```
41
+ - Install dependencies:
42
+ ```
43
+ pip install -e .
44
+ ```
45
+
46
+ - Run Backend
47
+ ```
48
+ cocoindex setup main.py
49
+ uvicorn main:app --reload --host 0.0.0.0 --port 8000
50
+ ```
51
+
52
+ - Run Frontend
53
+ ```
54
+ cd frontend
55
+ npm install
56
+ npm run dev
57
+ ```
61
58
 
62
59
  Go to `http://localhost:5174` to search.
63
60
 
@@ -7,9 +7,11 @@ import base64
7
7
  from fastapi import FastAPI, Query
8
8
  from fastapi.middleware.cors import CORSMiddleware
9
9
  from fastapi.staticfiles import StaticFiles
10
+ from qdrant_client import QdrantClient
10
11
 
11
12
  OLLAMA_URL = "http://localhost:11434/api/generate"
12
13
  OLLAMA_MODEL = "gemma3"
14
+ QDRANT_GRPC_URL = os.getenv("QDRANT_GRPC_URL", "http://localhost:6334/")
13
15
 
14
16
  # 1. Extract caption from image using Ollama vision model
15
17
  @cocoindex.op.function(cache=True, behavior_version=1)
@@ -42,7 +44,12 @@ def get_image_caption(img_bytes: bytes) -> str:
42
44
 
43
45
 
44
46
  # 2. Embed the caption string
45
- def caption_to_embedding(caption: cocoindex.DataSlice) -> cocoindex.DataSlice:
47
+ @cocoindex.transform_flow()
48
+ def caption_to_embedding(caption: cocoindex.DataSlice[str]) -> cocoindex.DataSlice[list[float]]:
49
+ """
50
+ Embed the caption using a CLIP model.
51
+ This is shared logic between indexing and querying.
52
+ """
46
53
  return caption.transform(
47
54
  cocoindex.functions.SentenceTransformerEmbed(
48
55
  model="clip-ViT-L-14",
@@ -70,7 +77,7 @@ def image_object_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope:
70
77
  "img_embeddings",
71
78
  cocoindex.storages.Qdrant(
72
79
  collection_name="image_search",
73
- grpc_url=os.getenv("QDRANT_GRPC_URL", "http://localhost:6334/"),
80
+ grpc_url=QDRANT_GRPC_URL,
74
81
  ),
75
82
  primary_key_fields=["id"],
76
83
  setup_by_user=True,
@@ -93,26 +100,31 @@ app.mount("/img", StaticFiles(directory="img"), name="img")
93
100
  def startup_event():
94
101
  load_dotenv()
95
102
  cocoindex.init()
96
- app.state.query_handler = cocoindex.query.SimpleSemanticsQueryHandler(
97
- name="ImageObjectSearch",
98
- flow=image_object_embedding_flow,
99
- target_name="img_embeddings",
100
- query_transform_flow=caption_to_embedding,
101
- default_similarity_metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY,
103
+ # Initialize Qdrant client
104
+ app.state.qdrant_client = QdrantClient(
105
+ url=QDRANT_GRPC_URL,
106
+ prefer_grpc=True
102
107
  )
103
108
  app.state.live_updater = cocoindex.FlowLiveUpdater(image_object_embedding_flow)
104
109
  app.state.live_updater.start()
105
110
 
106
111
  @app.get("/search")
107
112
  def search(q: str = Query(..., description="Search query"), limit: int = Query(5, description="Number of results")):
108
- query_handler = app.state.query_handler
109
- results, _ = query_handler.search(q, limit, "embedding")
113
+ # Get the embedding for the query
114
+ query_embedding = caption_to_embedding.eval(q)
115
+
116
+ # Search in Qdrant
117
+ search_results = app.state.qdrant_client.search(
118
+ collection_name="image_search",
119
+ query_vector=("embedding", query_embedding),
120
+ limit=limit
121
+ )
122
+
123
+ # Format results
110
124
  out = []
111
- for result in results:
112
- row = dict(result.data)
113
- # Only include filename and score
125
+ for result in search_results:
114
126
  out.append({
115
- "filename": row["filename"],
127
+ "filename": result.payload["filename"],
116
128
  "score": result.score
117
129
  })
118
130
  return {"results": out}
@@ -0,0 +1,9 @@
1
+ [project]
2
+ name = "image-search"
3
+ version = "0.1.0"
4
+ description = "Simple example for cocoindex: build embedding index based on images."
5
+ requires-python = ">=3.11"
6
+ dependencies = ["cocoindex>=0.1.42", "python-dotenv>=1.0.1", "fastapi>=0.100.0"]
7
+
8
+ [tool.setuptools]
9
+ packages = []
@@ -354,7 +354,7 @@ def evaluate(app_flow_specifier: str, output_dir: str | None, cache: bool = True
354
354
 
355
355
  fl = _flow_by_name(flow_ref)
356
356
  if output_dir is None:
357
- output_dir = f"eval_{setting.get_app_namespace(trailing_delimiter='_')}{flow_name}_{datetime.datetime.now().strftime('%y%m%d_%H%M%S')}"
357
+ output_dir = f"eval_{setting.get_app_namespace(trailing_delimiter='_')}{fl.name}_{datetime.datetime.now().strftime('%y%m%d_%H%M%S')}"
358
358
  options = flow.EvaluateAndDumpOptions(output_dir=output_dir, use_cache=cache)
359
359
  fl.evaluate_and_dump(options)
360
360
 
@@ -538,8 +538,8 @@ class Flow:
538
538
  Update the index defined by the flow.
539
539
  Once the function returns, the index is fresh up to the moment when the function is called.
540
540
  """
541
- updater = await FlowLiveUpdater.create_async(self, FlowLiveUpdaterOptions(live_mode=False))
542
- await updater.wait_async()
541
+ async with FlowLiveUpdater(self, FlowLiveUpdaterOptions(live_mode=False)) as updater:
542
+ await updater.wait_async()
543
543
  return updater.update_stats()
544
544
 
545
545
  def evaluate_and_dump(self, options: EvaluateAndDumpOptions):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes