cocoindex 0.1.66__tar.gz → 0.1.68__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 (275) hide show
  1. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/_test.yml +1 -1
  2. {cocoindex-0.1.66 → cocoindex-0.1.68}/.pre-commit-config.yaml +1 -1
  3. {cocoindex-0.1.66 → cocoindex-0.1.68}/Cargo.lock +1 -1
  4. {cocoindex-0.1.66 → cocoindex-0.1.68}/Cargo.toml +1 -1
  5. cocoindex-0.1.66/README.md → cocoindex-0.1.68/PKG-INFO +48 -2
  6. cocoindex-0.1.66/PKG-INFO → cocoindex-0.1.68/README.md +22 -26
  7. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/about/contributing.md +2 -2
  8. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/data_types.mdx +0 -2
  9. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/flow_def.mdx +1 -2
  10. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/flow_methods.mdx +53 -10
  11. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/ops/sources.md +1 -1
  12. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/src/css/custom.css +1 -0
  13. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/amazon_s3_embedding/main.py +7 -1
  14. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/amazon_s3_embedding/pyproject.toml +1 -1
  15. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/azure_blob_embedding/pyproject.toml +1 -1
  16. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/code_embedding/pyproject.toml +1 -1
  17. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/pyproject.toml +1 -1
  18. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/gdrive_text_embedding/pyproject.toml +1 -1
  19. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/pyproject.toml +1 -1
  20. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/pyproject.toml +1 -1
  21. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/pyproject.toml +1 -1
  22. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/pyproject.toml +2 -2
  23. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/pyproject.toml +1 -1
  24. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/pyproject.toml +1 -1
  25. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/pyproject.toml +1 -1
  26. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding_qdrant/pyproject.toml +1 -1
  27. {cocoindex-0.1.66 → cocoindex-0.1.68}/pyproject.toml +2 -2
  28. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/__init__.py +2 -1
  29. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/flow.py +35 -7
  30. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/functions.py +7 -13
  31. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/runtime.py +5 -2
  32. cocoindex-0.1.68/src/execution/live_updater.rs +399 -0
  33. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/source_indexer.rs +57 -55
  34. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/lib_context.rs +2 -0
  35. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sources/amazon_s3.rs +13 -1
  36. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/qdrant.rs +0 -5
  37. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/py/mod.rs +33 -15
  38. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/service/flows.rs +1 -1
  39. cocoindex-0.1.66/src/execution/live_updater.rs +0 -269
  40. {cocoindex-0.1.66 → cocoindex-0.1.68}/.cargo/config.toml +0 -0
  41. {cocoindex-0.1.66 → cocoindex-0.1.68}/.env.lib_debug +0 -0
  42. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  43. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  44. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/scripts/update_version.sh +0 -0
  45. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/CI.yml +0 -0
  46. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/_doc_release.yml +0 -0
  47. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/docs.yml +0 -0
  48. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/format.yml +0 -0
  49. {cocoindex-0.1.66 → cocoindex-0.1.68}/.github/workflows/release.yml +0 -0
  50. {cocoindex-0.1.66 → cocoindex-0.1.68}/.gitignore +0 -0
  51. {cocoindex-0.1.66 → cocoindex-0.1.68}/CODE_OF_CONDUCT.md +0 -0
  52. {cocoindex-0.1.66 → cocoindex-0.1.68}/CONTRIBUTING.md +0 -0
  53. {cocoindex-0.1.66 → cocoindex-0.1.68}/LICENSE +0 -0
  54. {cocoindex-0.1.66 → cocoindex-0.1.68}/dev/neo4j.yaml +0 -0
  55. {cocoindex-0.1.66 → cocoindex-0.1.68}/dev/postgres.yaml +0 -0
  56. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/.gitignore +0 -0
  57. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/README.md +0 -0
  58. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/about/community.md +0 -0
  59. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/ai/llm.mdx +0 -0
  60. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/basics.md +0 -0
  61. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/cli.mdx +0 -0
  62. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/custom_function.mdx +0 -0
  63. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/data_example.svg +0 -0
  64. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/flow_example.svg +0 -0
  65. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/core/settings.mdx +0 -0
  66. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/getting_started/installation.md +0 -0
  67. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/getting_started/markdown_files.zip +0 -0
  68. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/getting_started/overview.md +0 -0
  69. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/getting_started/quickstart.md +0 -0
  70. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/ops/functions.md +0 -0
  71. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/ops/targets.md +0 -0
  72. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docs/query.mdx +0 -0
  73. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/docusaurus.config.ts +0 -0
  74. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/package.json +0 -0
  75. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/sidebars.ts +0 -0
  76. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/src/components/HomepageFeatures/index.tsx +0 -0
  77. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  78. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/src/theme/Root.js +0 -0
  79. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/.nojekyll +0 -0
  80. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/img/docusaurus.png +0 -0
  81. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/img/favicon.ico +0 -0
  82. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/img/icon.svg +0 -0
  83. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/img/incremental-etl.gif +0 -0
  84. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/static/robots.txt +0 -0
  85. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/tsconfig.json +0 -0
  86. {cocoindex-0.1.66 → cocoindex-0.1.68}/docs/yarn.lock +0 -0
  87. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/amazon_s3_embedding/.env.example +0 -0
  88. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/amazon_s3_embedding/.gitignore +0 -0
  89. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/amazon_s3_embedding/README.md +0 -0
  90. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/azure_blob_embedding/.env.example +0 -0
  91. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/azure_blob_embedding/.gitignore +0 -0
  92. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/azure_blob_embedding/README.md +0 -0
  93. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/azure_blob_embedding/main.py +0 -0
  94. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/code_embedding/.env +0 -0
  95. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/code_embedding/README.md +0 -0
  96. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/code_embedding/main.py +0 -0
  97. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/.env +0 -0
  98. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/README.md +0 -0
  99. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/docs_to_knowledge_graph/main.py +0 -0
  100. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/.dockerignore +0 -0
  101. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/.env +0 -0
  102. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/README.md +0 -0
  103. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/compose.yaml +0 -0
  104. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/dockerfile +0 -0
  105. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  106. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/main.py +0 -0
  107. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/fastapi_server_docker/requirements.txt +0 -0
  108. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/gdrive_text_embedding/.env.example +0 -0
  109. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/gdrive_text_embedding/.gitignore +0 -0
  110. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/gdrive_text_embedding/README.md +0 -0
  111. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/gdrive_text_embedding/main.py +0 -0
  112. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/.env +0 -0
  113. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/README.md +0 -0
  114. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/.gitignore +0 -0
  115. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/index.html +0 -0
  116. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/package-lock.json +0 -0
  117. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/package.json +0 -0
  118. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/src/App.jsx +0 -0
  119. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/src/main.jsx +0 -0
  120. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/src/style.css +0 -0
  121. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/frontend/vite.config.js +0 -0
  122. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/img/cat1.jpeg +0 -0
  123. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/img/dog1.jpeg +0 -0
  124. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/img/elephant1.jpg +0 -0
  125. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/img/giraffe.jpg +0 -0
  126. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/image_search/main.py +0 -0
  127. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/.env +0 -0
  128. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/README.md +0 -0
  129. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/main.py +0 -0
  130. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  131. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  132. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  133. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  134. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/.env.example +0 -0
  135. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/.gitignore +0 -0
  136. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/README.md +0 -0
  137. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/main.py +0 -0
  138. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
  139. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
  140. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
  141. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
  142. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/.env.example +0 -0
  143. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/README.md +0 -0
  144. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/README.md +0 -0
  145. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  146. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  147. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  148. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  149. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/patient_intake_extraction/main.py +0 -0
  150. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/.env +0 -0
  151. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/README.md +0 -0
  152. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/main.py +0 -0
  153. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  154. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  155. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  156. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/.env +0 -0
  157. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/README.md +0 -0
  158. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/img/cocoinsight.png +0 -0
  159. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/img/neo4j.png +0 -0
  160. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/main.py +0 -0
  161. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p1.json +0 -0
  162. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p2.json +0 -0
  163. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p3.json +0 -0
  164. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p4.json +0 -0
  165. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p5.json +0 -0
  166. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p6.json +0 -0
  167. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p7.json +0 -0
  168. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p8.json +0 -0
  169. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/product_recommendation/products/p9.json +0 -0
  170. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/.env +0 -0
  171. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/README.md +0 -0
  172. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  173. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/main.py +0 -0
  174. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  175. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  176. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  177. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding_qdrant/.env +0 -0
  178. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding_qdrant/README.md +0 -0
  179. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding_qdrant/main.py +0 -0
  180. {cocoindex-0.1.66 → cocoindex-0.1.68}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  181. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/auth_registry.py +0 -0
  182. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/cli.py +0 -0
  183. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/convert.py +0 -0
  184. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/index.py +0 -0
  185. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/lib.py +0 -0
  186. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/llm.py +0 -0
  187. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/op.py +0 -0
  188. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/py.typed +0 -0
  189. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/setting.py +0 -0
  190. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/setup.py +0 -0
  191. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/sources.py +0 -0
  192. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/targets.py +0 -0
  193. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/tests/__init__.py +0 -0
  194. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/tests/test_convert.py +0 -0
  195. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/tests/test_optional_database.py +0 -0
  196. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/tests/test_typing.py +0 -0
  197. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/typing.py +0 -0
  198. {cocoindex-0.1.66 → cocoindex-0.1.68}/python/cocoindex/utils.py +0 -0
  199. {cocoindex-0.1.66 → cocoindex-0.1.68}/ruff.toml +0 -0
  200. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/duration.rs +0 -0
  201. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/field_attrs.rs +0 -0
  202. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/json_schema.rs +0 -0
  203. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/mod.rs +0 -0
  204. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/schema.rs +0 -0
  205. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/spec.rs +0 -0
  206. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/base/value.rs +0 -0
  207. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/analyzed_flow.rs +0 -0
  208. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/analyzer.rs +0 -0
  209. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/exec_ctx.rs +0 -0
  210. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/flow_builder.rs +0 -0
  211. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/mod.rs +0 -0
  212. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/builder/plan.rs +0 -0
  213. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/db_tracking.rs +0 -0
  214. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/db_tracking_setup.rs +0 -0
  215. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/dumper.rs +0 -0
  216. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/evaluator.rs +0 -0
  217. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/indexing_status.rs +0 -0
  218. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/memoization.rs +0 -0
  219. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/mod.rs +0 -0
  220. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/row_indexer.rs +0 -0
  221. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/execution/stats.rs +0 -0
  222. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/lib.rs +0 -0
  223. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/anthropic.rs +0 -0
  224. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/gemini.rs +0 -0
  225. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/litellm.rs +0 -0
  226. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/mod.rs +0 -0
  227. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/ollama.rs +0 -0
  228. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/openai.rs +0 -0
  229. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/openrouter.rs +0 -0
  230. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/vertex_ai.rs +0 -0
  231. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/vllm.rs +0 -0
  232. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/llm/voyage.rs +0 -0
  233. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/factory_bases.rs +0 -0
  234. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/embed_text.rs +0 -0
  235. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/extract_by_llm.rs +0 -0
  236. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/mod.rs +0 -0
  237. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/parse_json.rs +0 -0
  238. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/split_recursively.rs +0 -0
  239. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/functions/test_utils.rs +0 -0
  240. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/interface.rs +0 -0
  241. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/mod.rs +0 -0
  242. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/py_factory.rs +0 -0
  243. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/registration.rs +0 -0
  244. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/registry.rs +0 -0
  245. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sdk.rs +0 -0
  246. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sources/azure_blob.rs +0 -0
  247. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sources/google_drive.rs +0 -0
  248. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sources/local_file.rs +0 -0
  249. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/sources/mod.rs +0 -0
  250. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/kuzu.rs +0 -0
  251. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/mod.rs +0 -0
  252. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/neo4j.rs +0 -0
  253. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/postgres.rs +0 -0
  254. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/shared/mod.rs +0 -0
  255. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/shared/property_graph.rs +0 -0
  256. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/ops/targets/shared/table_columns.rs +0 -0
  257. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/prelude.rs +0 -0
  258. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/py/convert.rs +0 -0
  259. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/server.rs +0 -0
  260. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/service/error.rs +0 -0
  261. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/service/mod.rs +0 -0
  262. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/settings.rs +0 -0
  263. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/auth_registry.rs +0 -0
  264. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/components.rs +0 -0
  265. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/db_metadata.rs +0 -0
  266. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/driver.rs +0 -0
  267. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/mod.rs +0 -0
  268. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/setup/states.rs +0 -0
  269. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/concur_control.rs +0 -0
  270. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/db.rs +0 -0
  271. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/fingerprint.rs +0 -0
  272. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/immutable.rs +0 -0
  273. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/mod.rs +0 -0
  274. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/retryable.rs +0 -0
  275. {cocoindex-0.1.66 → cocoindex-0.1.68}/src/utils/yaml_ser.rs +0 -0
@@ -47,7 +47,7 @@ jobs:
47
47
  - name: Python build
48
48
  run: |
49
49
  source .venv/bin/activate
50
- maturin develop
50
+ maturin develop -E all
51
51
  - name: Python type check (mypy)
52
52
  run: |
53
53
  source .venv/bin/activate
@@ -28,7 +28,7 @@ repos:
28
28
  hooks:
29
29
  - id: maturin-develop
30
30
  name: maturin develop
31
- entry: maturin develop
31
+ entry: maturin develop -E all,dev
32
32
  language: system
33
33
  files: ^(python/|src/|Cargo\.toml|pyproject\.toml)
34
34
  pass_filenames: false
@@ -1297,7 +1297,7 @@ dependencies = [
1297
1297
 
1298
1298
  [[package]]
1299
1299
  name = "cocoindex"
1300
- version = "0.1.66"
1300
+ version = "0.1.68"
1301
1301
  dependencies = [
1302
1302
  "anyhow",
1303
1303
  "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.66"
5
+ version = "0.1.68"
6
6
  edition = "2024"
7
7
  rust-version = "1.88"
8
8
 
@@ -1,3 +1,28 @@
1
+ Metadata-Version: 2.4
2
+ Name: cocoindex
3
+ Version: 0.1.68
4
+ Requires-Dist: click>=8.1.8
5
+ Requires-Dist: rich>=14.0.0
6
+ Requires-Dist: python-dotenv>=1.1.0
7
+ Requires-Dist: watchfiles>=1.1.0
8
+ Requires-Dist: numpy>=1.23.2
9
+ Requires-Dist: pytest ; extra == 'dev'
10
+ Requires-Dist: ruff ; extra == 'dev'
11
+ Requires-Dist: mypy ; extra == 'dev'
12
+ Requires-Dist: pre-commit ; extra == 'dev'
13
+ Requires-Dist: sentence-transformers>=3.3.1 ; extra == 'embeddings'
14
+ Requires-Dist: cocoindex[embeddings] ; extra == 'all'
15
+ Provides-Extra: dev
16
+ Provides-Extra: embeddings
17
+ Provides-Extra: all
18
+ License-File: LICENSE
19
+ Summary: With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes.
20
+ Author-email: CocoIndex <cocoindex.io@gmail.com>
21
+ License: Apache-2.0
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
24
+ Project-URL: Homepage, https://cocoindex.io/
25
+
1
26
  <p align="center">
2
27
  <img src="https://cocoindex.io/images/github.svg" alt="CocoIndex">
3
28
  </p>
@@ -11,16 +36,36 @@
11
36
  [![License](https://img.shields.io/badge/license-Apache%202.0-5B5BD6?logoColor=white)](https://opensource.org/licenses/Apache-2.0)
12
37
  [![PyPI version](https://img.shields.io/pypi/v/cocoindex?color=5B5BD6)](https://pypi.org/project/cocoindex/)
13
38
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/cocoindex)](https://pypistats.org/packages/cocoindex)
14
-
15
39
  [![CI](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml)
16
40
  [![release](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml)
17
41
  [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s)
42
+
43
+ </div>
44
+
45
+ <div align="center">
46
+ <a href="https://trendshift.io/repositories/13939" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13939" alt="cocoindex-io%2Fcocoindex | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
18
47
  </div>
19
48
 
49
+
20
50
  Ultra performant data transformation framework for AI, with core engine written in Rust. Support incremental processing and data lineage out-of-box. Exceptional developer velocity. Production-ready at day 0.
21
51
 
22
52
  ⭐ Drop a star to help us grow!
23
53
 
54
+ <div align="center">
55
+
56
+ <!-- Keep these links. Translations will automatically update with the README. -->
57
+ [Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex?lang=de) |
58
+ [English](https://readme-i18n.com/cocoindex-io/cocoindex?lang=en) |
59
+ [Español](https://readme-i18n.com/cocoindex-io/cocoindex?lang=es) |
60
+ [français](https://readme-i18n.com/cocoindex-io/cocoindex?lang=fr) |
61
+ [日本語](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ja) |
62
+ [한국어](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ko) |
63
+ [Português](https://readme-i18n.com/cocoindex-io/cocoindex?lang=pt) |
64
+ [Русский](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ru) |
65
+ [中文](https://readme-i18n.com/cocoindex-io/cocoindex?lang=zh)
66
+
67
+ </div>
68
+
24
69
  </br>
25
70
 
26
71
  <p align="center">
@@ -34,7 +79,7 @@ CocoIndex makes it super easy to transform data with AI workloads, and keep sour
34
79
  </br>
35
80
 
36
81
  <p align="center">
37
- <img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='480'>
82
+ <img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='400'>
38
83
  </p>
39
84
 
40
85
  </br>
@@ -188,3 +233,4 @@ We are constantly improving, and more features and examples are coming soon. If
188
233
 
189
234
  ## License
190
235
  CocoIndex is Apache 2.0 licensed.
236
+
@@ -1,26 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: cocoindex
3
- Version: 0.1.66
4
- Requires-Dist: click>=8.1.8
5
- Requires-Dist: rich>=14.0.0
6
- Requires-Dist: python-dotenv>=1.1.0
7
- Requires-Dist: watchfiles>=1.1.0
8
- Requires-Dist: numpy>=1.23.2
9
- Requires-Dist: pytest ; extra == 'test'
10
- Requires-Dist: ruff ; extra == 'dev'
11
- Requires-Dist: pre-commit ; extra == 'dev'
12
- Requires-Dist: sentence-transformers>=3.3.1 ; extra == 'embeddings'
13
- Provides-Extra: test
14
- Provides-Extra: dev
15
- Provides-Extra: embeddings
16
- License-File: LICENSE
17
- Summary: With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes.
18
- Author-email: CocoIndex <cocoindex.io@gmail.com>
19
- License: Apache-2.0
20
- Requires-Python: >=3.11
21
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
22
- Project-URL: Homepage, https://cocoindex.io/
23
-
24
1
  <p align="center">
25
2
  <img src="https://cocoindex.io/images/github.svg" alt="CocoIndex">
26
3
  </p>
@@ -34,16 +11,36 @@ Project-URL: Homepage, https://cocoindex.io/
34
11
  [![License](https://img.shields.io/badge/license-Apache%202.0-5B5BD6?logoColor=white)](https://opensource.org/licenses/Apache-2.0)
35
12
  [![PyPI version](https://img.shields.io/pypi/v/cocoindex?color=5B5BD6)](https://pypi.org/project/cocoindex/)
36
13
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/cocoindex)](https://pypistats.org/packages/cocoindex)
37
-
38
14
  [![CI](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml)
39
15
  [![release](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml/badge.svg?event=push&color=5B5BD6)](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml)
40
16
  [![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s)
17
+
18
+ </div>
19
+
20
+ <div align="center">
21
+ <a href="https://trendshift.io/repositories/13939" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13939" alt="cocoindex-io%2Fcocoindex | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
41
22
  </div>
42
23
 
24
+
43
25
  Ultra performant data transformation framework for AI, with core engine written in Rust. Support incremental processing and data lineage out-of-box. Exceptional developer velocity. Production-ready at day 0.
44
26
 
45
27
  ⭐ Drop a star to help us grow!
46
28
 
29
+ <div align="center">
30
+
31
+ <!-- Keep these links. Translations will automatically update with the README. -->
32
+ [Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex?lang=de) |
33
+ [English](https://readme-i18n.com/cocoindex-io/cocoindex?lang=en) |
34
+ [Español](https://readme-i18n.com/cocoindex-io/cocoindex?lang=es) |
35
+ [français](https://readme-i18n.com/cocoindex-io/cocoindex?lang=fr) |
36
+ [日本語](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ja) |
37
+ [한국어](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ko) |
38
+ [Português](https://readme-i18n.com/cocoindex-io/cocoindex?lang=pt) |
39
+ [Русский](https://readme-i18n.com/cocoindex-io/cocoindex?lang=ru) |
40
+ [中文](https://readme-i18n.com/cocoindex-io/cocoindex?lang=zh)
41
+
42
+ </div>
43
+
47
44
  </br>
48
45
 
49
46
  <p align="center">
@@ -57,7 +54,7 @@ CocoIndex makes it super easy to transform data with AI workloads, and keep sour
57
54
  </br>
58
55
 
59
56
  <p align="center">
60
- <img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='480'>
57
+ <img src="https://cocoindex.io/images/venn-features.png" alt="CocoIndex Features" width='400'>
61
58
  </p>
62
59
 
63
60
  </br>
@@ -211,4 +208,3 @@ We are constantly improving, and more features and examples are coming soon. If
211
208
 
212
209
  ## License
213
210
  CocoIndex is Apache 2.0 licensed.
214
-
@@ -46,12 +46,12 @@ Following the steps below to get cocoindex build on latest codebase locally - if
46
46
 
47
47
  - Install required tools:
48
48
  ```sh
49
- pip install maturin mypy pre-commit
49
+ pip install maturin
50
50
  ```
51
51
 
52
52
  - Build the library. Run at the root of cocoindex directory:
53
53
  ```sh
54
- maturin develop
54
+ maturin develop -E all,dev
55
55
  ```
56
56
 
57
57
  - Install and enable pre-commit hooks. This ensures all checks run automatically before each commit:
@@ -28,8 +28,6 @@ When you define a [custom function](/docs/core/custom_function), you need to ann
28
28
  we use the type annotation as a guidance to construct the Python value.
29
29
  Type annotation is optional for basic types and struct types, and required for table types.
30
30
 
31
- * When you define a [custom function](/docs/core/custom_function), type annotation is required for arguments and return values.
32
-
33
31
  ### Basic Types
34
32
 
35
33
  #### Primitive Types
@@ -57,8 +57,7 @@ After it's called, `demo_flow` becomes an invalid object, and you should not cal
57
57
  :::note
58
58
 
59
59
  This only removes states of the flow from the current process, and it won't affect the persistent states.
60
-
61
- If you w
60
+ See [Setup / drop flow](/docs/core/flow_methods#setup--drop-flow) if you want to clean up the persistent states.
62
61
 
63
62
  :::
64
63
 
@@ -241,13 +241,27 @@ A `FlowLiveUpdater` object supports the following methods:
241
241
 
242
242
  * `start()`: Start the updater.
243
243
  CocoIndex will continuously capture changes from the source data and update the target data accordingly in background threads managed by the engine.
244
+
244
245
  * `abort()`: Abort the updater.
246
+
245
247
  * `wait()`: Wait for the updater to finish. It only unblocks in one of the following cases:
246
248
  * The updater was aborted.
247
249
  * A one time update is done, and live update is not enabled:
248
250
  either `live_mode` is `False`, or all data sources have no change capture mechanisms enabled.
251
+
252
+ * `next_status_updates()`: Get the next status updates.
253
+ It blocks until there's a new status updates, including the processing finishes for a bunch of source updates, and live updater stops (aborted, or no more sources to process).
254
+ You can continuously call this method in a loop to get the latest status updates and react accordingly.
255
+
256
+ It returns a `cocoindex.FlowUpdaterStatusUpdates` object, with the following properties:
257
+ * `active_sources`: Names of sources that are still active, i.e. not stopped processing. If it's empty, it means the updater is stopped.
258
+ * `updated_sources`: Names of sources with updates since last time.
259
+ You can check this to see which sources have recent updates and get processed.
260
+
249
261
  * `update_stats()`: It returns the stats of the updater.
250
262
 
263
+ This snippets shows the lifecycle of a live updater:
264
+
251
265
  ```python
252
266
  my_updater = cocoindex.FlowLiveUpdater(demo_flow)
253
267
  # Start the updater.
@@ -256,14 +270,37 @@ my_updater.start()
256
270
  # Perform your own logic (e.g. a query loop).
257
271
  ...
258
272
 
259
- # Print the update stats.
260
- print(my_updater.update_stats())
261
- # Abort the updater.
262
- my_updater.abort()
273
+ ...
263
274
  # Wait for the updater to finish.
264
275
  my_updater.wait()
276
+ # Print the update stats.
277
+ print(my_updater.update_stats())
265
278
  ```
266
279
 
280
+ Somewhere (in the same or other threads) you can also continuously call `next_status_updates()` to get the latest status updates and react accordingly, e.g.
281
+
282
+ ```python
283
+ while True:
284
+ updates = my_updater.next_status_updates()
285
+
286
+ for source in updates.updated_sources:
287
+ # Perform downstream operations on the target of the source.
288
+ run_your_downstream_operations_for(source)
289
+
290
+ # Break the loop if there's no more active sources.
291
+ if not updates.active_sources:
292
+ break
293
+ ```
294
+
295
+ :::info
296
+
297
+ `next_status_updates()` automatically combines multiple status updates if more than one arrives between two calls,
298
+ e.g. your downstream operations may take more time, or you don't need to process too frequently (in which case you can explicitly sleep for a while).
299
+
300
+ So you don't need to worry about the status updates piling up.
301
+
302
+ :::
303
+
267
304
  Python SDK also allows you to use the updater as a context manager.
268
305
  It will automatically start the updater during the context entry, and abort and wait for the updater to finish automatically when the context is exited.
269
306
  The following code is equivalent to the code above (if no early return happens):
@@ -272,7 +309,6 @@ The following code is equivalent to the code above (if no early return happens):
272
309
  with cocoindex.FlowLiveUpdater(demo_flow) as my_updater:
273
310
  # Perform your own logic (e.g. a query loop).
274
311
  ...
275
- print(my_updater.update_stats())
276
312
  ```
277
313
 
278
314
  CocoIndex also provides asynchronous versions of APIs for blocking operations, including:
@@ -287,20 +323,27 @@ CocoIndex also provides asynchronous versions of APIs for blocking operations, i
287
323
  # Perform your own logic (e.g. a query loop).
288
324
  ...
289
325
 
290
- # Print the update stats.
291
- print(my_updater.update_stats())
292
- # Abort the updater.
293
- my_updater.abort()
294
326
  # Wait for the updater to finish.
295
327
  await my_updater.wait_async()
328
+ # Print the update stats.
329
+ print(my_updater.update_stats())
330
+ ```
331
+
332
+ * `next_status_updates_async()`, e.g.
333
+
334
+ ```python
335
+ while True:
336
+ updates = await my_updater.next_status_updates_async()
337
+
338
+ ...
296
339
  ```
340
+
297
341
  * Async context manager, e.g.
298
342
 
299
343
  ```python
300
344
  async with cocoindex.FlowLiveUpdater(demo_flow) as my_updater:
301
345
  # Perform your own logic (e.g. a query loop).
302
346
  ...
303
- print(my_updater.update_stats())
304
347
  ```
305
348
 
306
349
  </TabItem>
@@ -167,7 +167,7 @@ These are actions you need to take:
167
167
  * Create a storage account in the [Azure Portal](https://portal.azure.com/).
168
168
  * Create a container in the storage account.
169
169
  * Upload your files to the container.
170
- * Grant the user / identity / service principal (depends on your authentication method, see below) access to the container. At minimum, a **Storage Blob Data Reader** role is needed. See [this doc](https://learn.microsoft.com/en-us/azure/storage/blobs/authorize-data-operations-portal) for reference.
170
+ * Grant the user / identity / service principal (depends on your authentication method, see below) access to the storage account. At minimum, a **Storage Blob Data Reader** role is needed. See [this doc](https://learn.microsoft.com/en-us/azure/storage/blobs/authorize-data-operations-portal) for reference.
171
171
 
172
172
  #### Authentication
173
173
 
@@ -66,6 +66,7 @@
66
66
 
67
67
  code {
68
68
  font-size: var(--ifm-code-font-size);
69
+ border: none;
69
70
  }
70
71
 
71
72
  a {
@@ -101,7 +101,13 @@ def _main() -> None:
101
101
  pool = ConnectionPool(os.getenv("COCOINDEX_DATABASE_URL"))
102
102
 
103
103
  amazon_s3_text_embedding_flow.setup()
104
- with cocoindex.FlowLiveUpdater(amazon_s3_text_embedding_flow):
104
+ with cocoindex.FlowLiveUpdater(amazon_s3_text_embedding_flow) as updater:
105
+ while True:
106
+ updates = updater.next_status_updates()
107
+ print(f"Updates: {updates}")
108
+ if not updates.active_sources:
109
+ break
110
+
105
111
  # Run queries in a loop to demonstrate the query capabilities.
106
112
  while True:
107
113
  query = input("Enter search query (or Enter to quit): ")
@@ -3,7 +3,7 @@ name = "amazon-s3-text-embedding"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Amazon S3 files."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex[embeddings]>=0.1.63", "python-dotenv>=1.0.1"]
6
+ dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "azure-blob-text-embedding"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Azure Blob Storage files."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex[embeddings]>=0.1.63", "python-dotenv>=1.0.1"]
6
+ dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "code-embedding"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on source code."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex[embeddings]>=0.1.63", "python-dotenv>=1.0.1"]
6
+ dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "manuals-to-kg"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: extract triples from files and build knowledge graph."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.1.63"]
6
+ dependencies = ["cocoindex>=0.1.67"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -3,7 +3,7 @@ name = "gdrive-text-embedding"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on Google Drive files."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex[embeddings]>=0.1.63", "python-dotenv>=1.0.1"]
6
+ dependencies = ["cocoindex[embeddings]>=0.1.67", "python-dotenv>=1.0.1"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on images."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex>=0.1.63",
7
+ "cocoindex>=0.1.67",
8
8
  "python-dotenv>=1.0.1",
9
9
  "fastapi>=0.100.0",
10
10
  "torch>=2.0.0",
@@ -3,7 +3,7 @@ name = "manuals-llm-extraction"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for cocoindex: extract structured information from a Markdown file using LLM."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.1.63", "marker-pdf>=1.5.2"]
6
+ dependencies = ["cocoindex>=0.1.67", "marker-pdf>=1.5.2"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Build index for papers with both metadata and content embeddings"
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.1.63",
7
+ "cocoindex[embeddings]>=0.1.67",
8
8
  "pypdf>=5.7.0",
9
9
  "marker-pdf>=1.5.2",
10
10
  ]
@@ -4,8 +4,8 @@ version = "0.1.0"
4
4
  description = "Extract structured information from patient intake forms using LLM."
5
5
  requires-python = ">=3.10"
6
6
  dependencies = [
7
- "cocoindex>=0.1.63",
7
+ "cocoindex>=0.1.67",
8
8
  "python-dotenv>=1.0.1",
9
9
  "markitdown>=0.1.2",
10
- "openai>=1.68.2"
10
+ "openai>=1.68.2",
11
11
  ]
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local PDF files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.1.63",
7
+ "cocoindex[embeddings]>=0.1.67",
8
8
  "python-dotenv>=1.0.1",
9
9
  "marker-pdf>=1.5.2",
10
10
  ]
@@ -3,7 +3,7 @@ name = "cocoindex-ecommerce-taxonomy"
3
3
  version = "0.1.0"
4
4
  description = "Simple example for CocoIndex: extract taxonomy from e-commerce products and build knowledge graph."
5
5
  requires-python = ">=3.11"
6
- dependencies = ["cocoindex>=0.1.63", "jinja2>=3.1.6"]
6
+ dependencies = ["cocoindex>=0.1.67", "jinja2>=3.1.6"]
7
7
 
8
8
  [tool.setuptools]
9
9
  packages = []
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local text files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.1.63",
7
+ "cocoindex[embeddings]>=0.1.67",
8
8
  "python-dotenv>=1.0.1",
9
9
  "pgvector>=0.4.1",
10
10
  "psycopg[binary,pool]",
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "Simple example for cocoindex: build embedding index based on local text files."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "cocoindex[embeddings]>=0.1.63",
7
+ "cocoindex[embeddings]>=0.1.67",
8
8
  "python-dotenv>=1.0.1",
9
9
  "qdrant-client>=1.6.0",
10
10
  ]
@@ -29,9 +29,9 @@ module-name = "cocoindex._engine"
29
29
  features = ["pyo3/extension-module"]
30
30
 
31
31
  [project.optional-dependencies]
32
- test = ["pytest"]
33
- dev = ["ruff", "pre-commit"]
32
+ dev = ["pytest", "ruff", "mypy", "pre-commit"]
34
33
  embeddings = ["sentence-transformers>=3.3.1"]
34
+ all = ["cocoindex[embeddings]"]
35
35
 
36
36
  [tool.mypy]
37
37
  python_version = "3.11"
@@ -10,7 +10,7 @@ from .auth_registry import AuthEntryReference, add_auth_entry, ref_auth_entry
10
10
  from .flow import FlowBuilder, DataScope, DataSlice, Flow, transform_flow
11
11
  from .flow import flow_def
12
12
  from .flow import EvaluateAndDumpOptions, GeneratedField
13
- from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions
13
+ from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions, FlowUpdaterStatusUpdates
14
14
  from .flow import add_flow_def, remove_flow
15
15
  from .flow import update_all_flows_async, setup_all_flows, drop_all_flows
16
16
  from .lib import init, start_server, stop
@@ -54,6 +54,7 @@ __all__ = [
54
54
  "GeneratedField",
55
55
  "FlowLiveUpdater",
56
56
  "FlowLiveUpdaterOptions",
57
+ "FlowUpdaterStatusUpdates",
57
58
  "add_flow_def",
58
59
  "remove_flow",
59
60
  "update_all_flows_async",
@@ -534,6 +534,18 @@ class FlowLiveUpdaterOptions:
534
534
  print_stats: bool = False
535
535
 
536
536
 
537
+ class FlowUpdaterStatusUpdates(NamedTuple):
538
+ """
539
+ Status updates for a flow updater.
540
+ """
541
+
542
+ # Sources that are still active, i.e. not stopped processing.
543
+ active_sources: list[str]
544
+
545
+ # Sources with updates since last time.
546
+ updated_sources: list[str]
547
+
548
+
537
549
  class FlowLiveUpdater:
538
550
  """
539
551
  A live updater for a flow.
@@ -587,7 +599,26 @@ class FlowLiveUpdater:
587
599
  """
588
600
  Wait for the live updater to finish. Async version.
589
601
  """
590
- await self._get_engine_live_updater().wait()
602
+ await self._get_engine_live_updater().wait_async()
603
+
604
+ def next_status_updates(self) -> FlowUpdaterStatusUpdates:
605
+ """
606
+ Get the next status updates.
607
+
608
+ It blocks until there's a new status updates, including the processing finishes for a bunch of source updates,
609
+ and live updater stops (aborted, or no more sources to process).
610
+ """
611
+ return execution_context.run(self.next_status_updates_async())
612
+
613
+ async def next_status_updates_async(self) -> FlowUpdaterStatusUpdates:
614
+ """
615
+ Get the next status updates. Async version.
616
+ """
617
+ updates = await self._get_engine_live_updater().next_status_updates_async()
618
+ return FlowUpdaterStatusUpdates(
619
+ active_sources=updates.active_sources,
620
+ updated_sources=updates.updated_sources,
621
+ )
591
622
 
592
623
  def abort(self) -> None:
593
624
  """
@@ -879,10 +910,7 @@ def update_all_flows(
879
910
  """
880
911
  Update all flows.
881
912
  """
882
- return cast(
883
- dict[str, _engine.IndexUpdateInfo],
884
- execution_context.run(update_all_flows_async(options)),
885
- )
913
+ return execution_context.run(update_all_flows_async(options))
886
914
 
887
915
 
888
916
  async def update_all_flows_async(
@@ -958,7 +986,7 @@ class TransformFlow(Generic[T]):
958
986
  def _flow_info(self) -> TransformFlowInfo:
959
987
  if self._lazy_flow_info is not None:
960
988
  return self._lazy_flow_info
961
- return cast(TransformFlowInfo, execution_context.run(self._flow_info_async()))
989
+ return execution_context.run(self._flow_info_async())
962
990
 
963
991
  async def _flow_info_async(self) -> TransformFlowInfo:
964
992
  if self._lazy_flow_info is not None:
@@ -1037,7 +1065,7 @@ class TransformFlow(Generic[T]):
1037
1065
  """
1038
1066
  Evaluate the transform flow.
1039
1067
  """
1040
- return cast(T, execution_context.run(self.eval_async(*args, **kwargs)))
1068
+ return execution_context.run(self.eval_async(*args, **kwargs))
1041
1069
 
1042
1070
  async def eval_async(self, *args: Any, **kwargs: Any) -> T:
1043
1071
  """