cocoindex 0.1.80__tar.gz → 0.1.81__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 (324) hide show
  1. {cocoindex-0.1.80 → cocoindex-0.1.81}/Cargo.lock +1 -1
  2. {cocoindex-0.1.80 → cocoindex-0.1.81}/Cargo.toml +1 -1
  3. {cocoindex-0.1.80 → cocoindex-0.1.81}/PKG-INFO +1 -1
  4. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ai/llm.mdx +24 -1
  5. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/custom_ops/custom_targets.mdx +89 -0
  6. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/.env.example +4 -0
  7. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/.env.example +4 -0
  8. cocoindex-0.1.81/examples/code_embedding/.env +6 -0
  9. cocoindex-0.1.81/examples/face_recognition/.env +6 -0
  10. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/.env +4 -0
  11. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/.env.example +4 -0
  12. cocoindex-0.1.81/examples/image_search/.env +5 -0
  13. cocoindex-0.1.81/examples/manuals_llm_extraction/.env +6 -0
  14. cocoindex-0.1.81/examples/multi_format_indexing/.env +6 -0
  15. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/README.md +2 -0
  16. {cocoindex-0.1.80/examples/patient_intake_extraction → cocoindex-0.1.81/examples/paper_metadata}/.env.example +4 -0
  17. cocoindex-0.1.81/examples/pdf_embedding/.env +6 -0
  18. cocoindex-0.1.81/examples/text_embedding/.env +6 -0
  19. cocoindex-0.1.81/examples/text_embedding_qdrant/.env +6 -0
  20. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/evaluator.rs +25 -18
  21. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/live_updater.rs +9 -3
  22. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/source_indexer.rs +18 -9
  23. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/error.rs +1 -1
  24. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/flow_features.rs +1 -1
  25. cocoindex-0.1.80/examples/face_recognition/.env +0 -2
  26. cocoindex-0.1.80/examples/image_search/.env +0 -1
  27. cocoindex-0.1.80/examples/manuals_llm_extraction/.env +0 -2
  28. cocoindex-0.1.80/examples/multi_format_indexing/.env +0 -2
  29. cocoindex-0.1.80/examples/pdf_embedding/.env +0 -2
  30. cocoindex-0.1.80/examples/product_recommendation/.env +0 -2
  31. cocoindex-0.1.80/examples/text_embedding/.env +0 -2
  32. cocoindex-0.1.80/examples/text_embedding_qdrant/.env +0 -2
  33. {cocoindex-0.1.80 → cocoindex-0.1.81}/.cargo/config.toml +0 -0
  34. {cocoindex-0.1.80 → cocoindex-0.1.81}/.env.lib_debug +0 -0
  35. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/220/233-bug-report.md" +0 -0
  36. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/ISSUE_TEMPLATE//360/237/222/241-feature-request.md" +0 -0
  37. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/scripts/update_version.sh +0 -0
  38. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/CI.yml +0 -0
  39. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/_doc_release.yml +0 -0
  40. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/_test.yml +0 -0
  41. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/docs.yml +0 -0
  42. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/format.yml +0 -0
  43. {cocoindex-0.1.80 → cocoindex-0.1.81}/.github/workflows/release.yml +0 -0
  44. {cocoindex-0.1.80 → cocoindex-0.1.81}/.gitignore +0 -0
  45. {cocoindex-0.1.80 → cocoindex-0.1.81}/.pre-commit-config.yaml +0 -0
  46. {cocoindex-0.1.80 → cocoindex-0.1.81}/CODE_OF_CONDUCT.md +0 -0
  47. {cocoindex-0.1.80 → cocoindex-0.1.81}/CONTRIBUTING.md +0 -0
  48. {cocoindex-0.1.80 → cocoindex-0.1.81}/LICENSE +0 -0
  49. {cocoindex-0.1.80 → cocoindex-0.1.81}/README.md +0 -0
  50. {cocoindex-0.1.80 → cocoindex-0.1.81}/dev/neo4j.yaml +0 -0
  51. {cocoindex-0.1.80 → cocoindex-0.1.81}/dev/postgres.yaml +0 -0
  52. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/.gitignore +0 -0
  53. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/README.md +0 -0
  54. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/about/community.md +0 -0
  55. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/about/contributing.md +0 -0
  56. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/basics.md +0 -0
  57. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/cli.mdx +0 -0
  58. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/data_example.svg +0 -0
  59. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/data_types.mdx +0 -0
  60. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_def.mdx +0 -0
  61. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_example.svg +0 -0
  62. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/flow_methods.mdx +0 -0
  63. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/core/settings.mdx +0 -0
  64. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/custom_ops/custom_functions.mdx +0 -0
  65. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/installation.md +0 -0
  66. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/markdown_files.zip +0 -0
  67. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/overview.md +0 -0
  68. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/getting_started/quickstart.md +0 -0
  69. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/functions.md +0 -0
  70. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/sources.md +0 -0
  71. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/ops/targets.md +0 -0
  72. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/query.mdx +0 -0
  73. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/tutorials/live_updates.md +0 -0
  74. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docs/tutorials/manage_flow_dynamically.mdx +0 -0
  75. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/docusaurus.config.ts +0 -0
  76. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/package.json +0 -0
  77. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/sidebars.ts +0 -0
  78. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/components/HomepageFeatures/index.tsx +0 -0
  79. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  80. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/css/custom.css +0 -0
  81. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/src/theme/Root.js +0 -0
  82. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/.nojekyll +0 -0
  83. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/docusaurus.png +0 -0
  84. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/favicon.ico +0 -0
  85. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/icon.svg +0 -0
  86. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/img/incremental-etl.gif +0 -0
  87. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/static/robots.txt +0 -0
  88. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/tsconfig.json +0 -0
  89. {cocoindex-0.1.80 → cocoindex-0.1.81}/docs/yarn.lock +0 -0
  90. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/.gitignore +0 -0
  91. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/README.md +0 -0
  92. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/main.py +0 -0
  93. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/amazon_s3_embedding/pyproject.toml +0 -0
  94. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/.gitignore +0 -0
  95. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/README.md +0 -0
  96. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/main.py +0 -0
  97. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/azure_blob_embedding/pyproject.toml +0 -0
  98. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/README.md +0 -0
  99. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/main.py +0 -0
  100. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/code_embedding/pyproject.toml +0 -0
  101. {cocoindex-0.1.80/examples/code_embedding → cocoindex-0.1.81/examples/custom_output_files}/.env +0 -0
  102. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/.gitignore +0 -0
  103. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/README.md +0 -0
  104. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/data/bizarre_animals.md +0 -0
  105. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/data/chunk_norris.md +0 -0
  106. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/main.py +0 -0
  107. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/custom_output_files/pyproject.toml +0 -0
  108. {cocoindex-0.1.80/examples/custom_output_files → cocoindex-0.1.81/examples/docs_to_knowledge_graph}/.env +0 -0
  109. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/README.md +0 -0
  110. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/main.py +0 -0
  111. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/docs_to_knowledge_graph/pyproject.toml +0 -0
  112. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/README.md +0 -0
  113. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Carter_welcomes_Reagan.jpg +0 -0
  114. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Solvay_conference_1927.jpg +0 -0
  115. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/Steve_Jobs_and_Bill_Gates_(522695099).jpg +0 -0
  116. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/images/einplanck3.jpg +0 -0
  117. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/main.py +0 -0
  118. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/face_recognition/pyproject.toml +0 -0
  119. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/.dockerignore +0 -0
  120. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/README.md +0 -0
  121. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/compose.yaml +0 -0
  122. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/dockerfile +0 -0
  123. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/files/1810.04805v2.md +0 -0
  124. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/main.py +0 -0
  125. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/fastapi_server_docker/requirements.txt +0 -0
  126. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/.gitignore +0 -0
  127. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/README.md +0 -0
  128. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/main.py +0 -0
  129. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/gdrive_text_embedding/pyproject.toml +0 -0
  130. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/README.md +0 -0
  131. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/colpali_main.py +0 -0
  132. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/.gitignore +0 -0
  133. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/index.html +0 -0
  134. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/package-lock.json +0 -0
  135. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/package.json +0 -0
  136. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/App.jsx +0 -0
  137. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/main.jsx +0 -0
  138. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/src/style.css +0 -0
  139. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/frontend/vite.config.js +0 -0
  140. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/cat1.jpeg +0 -0
  141. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/dog1.jpeg +0 -0
  142. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/elephant1.jpg +0 -0
  143. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/img/giraffe.jpg +0 -0
  144. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/main.py +0 -0
  145. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/image_search/pyproject.toml +0 -0
  146. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/.env +0 -0
  147. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/README.md +0 -0
  148. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/data/bizarre_animals.md +0 -0
  149. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/data/chunk_norris.md +0 -0
  150. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/main.py +0 -0
  151. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/live_updates/pyproject.toml +0 -0
  152. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/README.md +0 -0
  153. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/main.py +0 -0
  154. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/array.pdf +0 -0
  155. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/base64.pdf +0 -0
  156. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/copy.pdf +0 -0
  157. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/manuals/glob.pdf +0 -0
  158. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/manuals_llm_extraction/pyproject.toml +0 -0
  159. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/main.py +0 -0
  160. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/pyproject.toml +0 -0
  161. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/1706.03762v7.pdf +0 -0
  162. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/1810.04805v2.pdf +0 -0
  163. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/2502.06786v3.pdf +0 -0
  164. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p101.jpg +0 -0
  165. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p86.jpg +0 -0
  166. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/healthcare_industry_test_p9.jpg +0 -0
  167. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/restaurant_brands_international_2023.jpg +0 -0
  168. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/multi_format_indexing/source_files/sweetgreen_2023.jpg +0 -0
  169. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/.gitignore +0 -0
  170. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/README.md +0 -0
  171. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/main.py +0 -0
  172. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/1706.03762v7.pdf +0 -0
  173. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/1810.04805v2.pdf +0 -0
  174. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/2502.06786v3.pdf +0 -0
  175. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/papers/2502.20346v1.pdf +0 -0
  176. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/paper_metadata/pyproject.toml +0 -0
  177. {cocoindex-0.1.80/examples/paper_metadata → cocoindex-0.1.81/examples/patient_intake_extraction}/.env.example +0 -0
  178. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/README.md +0 -0
  179. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/README.md +0 -0
  180. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_David_Artificial.docx +0 -0
  181. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Emily_Artificial.pdf +0 -0
  182. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_Form_Joe_Artificial.pdf +0 -0
  183. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/data/patient_forms/Patient_Intake_From_Jane_Artificial.docx +0 -0
  184. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/main.py +0 -0
  185. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/patient_intake_extraction/pyproject.toml +0 -0
  186. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/README.md +0 -0
  187. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/main.py +0 -0
  188. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/1706.03762v7.pdf +0 -0
  189. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/1810.04805v2.pdf +0 -0
  190. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pdf_files/rfc8259.pdf +0 -0
  191. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/pdf_embedding/pyproject.toml +0 -0
  192. {cocoindex-0.1.80/examples/docs_to_knowledge_graph → cocoindex-0.1.81/examples/product_recommendation}/.env +0 -0
  193. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/README.md +0 -0
  194. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/img/cocoinsight.png +0 -0
  195. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/img/neo4j.png +0 -0
  196. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/main.py +0 -0
  197. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p1.json +0 -0
  198. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p2.json +0 -0
  199. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p3.json +0 -0
  200. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p4.json +0 -0
  201. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p5.json +0 -0
  202. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p6.json +0 -0
  203. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p7.json +0 -0
  204. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p8.json +0 -0
  205. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/products/p9.json +0 -0
  206. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/product_recommendation/pyproject.toml +0 -0
  207. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/README.md +0 -0
  208. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/Text_Embedding.ipynb +0 -0
  209. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/main.py +0 -0
  210. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/1706.03762v7.md +0 -0
  211. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/1810.04805v2.md +0 -0
  212. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/markdown_files/rfc8259.md +0 -0
  213. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding/pyproject.toml +0 -0
  214. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/README.md +0 -0
  215. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/main.py +0 -0
  216. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/markdown_files/rfc8259.md +0 -0
  217. {cocoindex-0.1.80 → cocoindex-0.1.81}/examples/text_embedding_qdrant/pyproject.toml +0 -0
  218. {cocoindex-0.1.80 → cocoindex-0.1.81}/pyproject.toml +0 -0
  219. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/__init__.py +0 -0
  220. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/auth_registry.py +0 -0
  221. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/cli.py +0 -0
  222. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/convert.py +0 -0
  223. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/flow.py +0 -0
  224. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/functions.py +0 -0
  225. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/index.py +0 -0
  226. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/lib.py +0 -0
  227. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/llm.py +0 -0
  228. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/op.py +0 -0
  229. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/py.typed +0 -0
  230. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/runtime.py +0 -0
  231. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/setting.py +0 -0
  232. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/setup.py +0 -0
  233. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/sources.py +0 -0
  234. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/targets.py +0 -0
  235. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/__init__.py +0 -0
  236. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_convert.py +0 -0
  237. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_optional_database.py +0 -0
  238. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_transform_flow.py +0 -0
  239. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_typing.py +0 -0
  240. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/tests/test_validation.py +0 -0
  241. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/typing.py +0 -0
  242. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/utils.py +0 -0
  243. {cocoindex-0.1.80 → cocoindex-0.1.81}/python/cocoindex/validation.py +0 -0
  244. {cocoindex-0.1.80 → cocoindex-0.1.81}/ruff.toml +0 -0
  245. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/duration.rs +0 -0
  246. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/field_attrs.rs +0 -0
  247. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/json_schema.rs +0 -0
  248. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/mod.rs +0 -0
  249. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/schema.rs +0 -0
  250. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/spec.rs +0 -0
  251. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/base/value.rs +0 -0
  252. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/analyzed_flow.rs +0 -0
  253. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/analyzer.rs +0 -0
  254. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/exec_ctx.rs +0 -0
  255. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/flow_builder.rs +0 -0
  256. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/mod.rs +0 -0
  257. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/builder/plan.rs +0 -0
  258. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/db_tracking.rs +0 -0
  259. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/db_tracking_setup.rs +0 -0
  260. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/dumper.rs +0 -0
  261. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/indexing_status.rs +0 -0
  262. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/memoization.rs +0 -0
  263. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/mod.rs +0 -0
  264. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/row_indexer.rs +0 -0
  265. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/execution/stats.rs +0 -0
  266. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/lib.rs +0 -0
  267. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/lib_context.rs +0 -0
  268. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/anthropic.rs +0 -0
  269. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/gemini.rs +0 -0
  270. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/litellm.rs +0 -0
  271. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/mod.rs +0 -0
  272. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/ollama.rs +0 -0
  273. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/openai.rs +0 -0
  274. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/openrouter.rs +0 -0
  275. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/vllm.rs +0 -0
  276. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/llm/voyage.rs +0 -0
  277. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/factory_bases.rs +0 -0
  278. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/embed_text.rs +0 -0
  279. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/extract_by_llm.rs +0 -0
  280. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/mod.rs +0 -0
  281. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/parse_json.rs +0 -0
  282. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/split_recursively.rs +0 -0
  283. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/functions/test_utils.rs +0 -0
  284. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/interface.rs +0 -0
  285. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/mod.rs +0 -0
  286. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/py_factory.rs +0 -0
  287. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/registration.rs +0 -0
  288. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/registry.rs +0 -0
  289. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sdk.rs +0 -0
  290. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/amazon_s3.rs +0 -0
  291. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/azure_blob.rs +0 -0
  292. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/google_drive.rs +0 -0
  293. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/local_file.rs +0 -0
  294. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/mod.rs +0 -0
  295. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/shared/mod.rs +0 -0
  296. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/sources/shared/pattern_matcher.rs +0 -0
  297. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/kuzu.rs +0 -0
  298. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/mod.rs +0 -0
  299. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/neo4j.rs +0 -0
  300. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/postgres.rs +0 -0
  301. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/qdrant.rs +0 -0
  302. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/mod.rs +0 -0
  303. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/property_graph.rs +0 -0
  304. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/ops/targets/shared/table_columns.rs +0 -0
  305. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/prelude.rs +0 -0
  306. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/py/convert.rs +0 -0
  307. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/py/mod.rs +0 -0
  308. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/server.rs +0 -0
  309. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/flows.rs +0 -0
  310. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/service/mod.rs +0 -0
  311. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/settings.rs +0 -0
  312. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/auth_registry.rs +0 -0
  313. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/components.rs +0 -0
  314. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/db_metadata.rs +0 -0
  315. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/driver.rs +0 -0
  316. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/mod.rs +0 -0
  317. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/setup/states.rs +0 -0
  318. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/concur_control.rs +0 -0
  319. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/db.rs +0 -0
  320. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/fingerprint.rs +0 -0
  321. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/immutable.rs +0 -0
  322. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/mod.rs +0 -0
  323. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/retryable.rs +0 -0
  324. {cocoindex-0.1.80 → cocoindex-0.1.81}/src/utils/yaml_ser.rs +0 -0
@@ -1283,7 +1283,7 @@ dependencies = [
1283
1283
 
1284
1284
  [[package]]
1285
1285
  name = "cocoindex"
1286
- version = "0.1.80"
1286
+ version = "0.1.81"
1287
1287
  dependencies = [
1288
1288
  "anyhow",
1289
1289
  "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.80"
5
+ version = "0.1.81"
6
6
  edition = "2024"
7
7
  rust-version = "1.88"
8
8
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cocoindex
3
- Version: 0.1.80
3
+ Version: 0.1.81
4
4
  Requires-Dist: click>=8.1.8
5
5
  Requires-Dist: rich>=14.0.0
6
6
  Requires-Dist: python-dotenv>=1.1.0
@@ -20,7 +20,7 @@ We support the following types of LLM APIs:
20
20
  | API Name | `LlmApiType` enum | Text Generation | Text Embedding |
21
21
  |----------|---------------------|--------------------|--------------------|
22
22
  | [OpenAI](#openai) | `LlmApiType.OPENAI` | ✅ | ✅ |
23
- | [Ollama](#ollama) | `LlmApiType.OLLAMA` | ✅ | |
23
+ | [Ollama](#ollama) | `LlmApiType.OLLAMA` | ✅ | |
24
24
  | [Google Gemini](#google-gemini) | `LlmApiType.GEMINI` | ✅ | ✅ |
25
25
  | [Vertex AI](#vertex-ai) | `LlmApiType.VERTEX_AI` | ✅ | ✅ |
26
26
  | [Anthropic](#anthropic) | `LlmApiType.ANTHROPIC` | ✅ | ❌ |
@@ -141,6 +141,29 @@ cocoindex.LlmSpec(
141
141
  </TabItem>
142
142
  </Tabs>
143
143
 
144
+ For text embedding with Ollama, you'll need to pull an embedding model first:
145
+
146
+ ```bash
147
+ ollama pull nomic-embed-text
148
+ ```
149
+
150
+ Then, a spec for Ollama embedding looks like this:
151
+
152
+ <Tabs>
153
+ <TabItem value="python" label="Python" default>
154
+
155
+ ```python
156
+ cocoindex.functions.EmbedText(
157
+ api_type=cocoindex.LlmApiType.OLLAMA,
158
+ model="nomic-embed-text",
159
+ # Optional, use Ollama's default port (11434) on localhost if not specified
160
+ address="http://localhost:11434",
161
+ )
162
+ ```
163
+
164
+ </TabItem>
165
+ </Tabs>
166
+
144
167
  ### Google Gemini
145
168
 
146
169
  Google exposes Gemini through Google AI Studio APIs.
@@ -158,6 +158,95 @@ def prepare(spec: CustomTarget) -> PreparedCustomTarget:
158
158
 
159
159
  If not provided, the original spec will be passed directly to `mutate`.
160
160
 
161
+ ### Complete Example
162
+
163
+ In this example, we define a custom target that accepts data with the following fields:
164
+ - `filename` (key field)
165
+ - `author` (value field)
166
+ - `html` (value field)
167
+
168
+ <Tabs>
169
+ <TabItem value="python" label="Python" default>
170
+
171
+ ```python
172
+ import dataclasses
173
+ import cocoindex
174
+
175
+ # 1. Define the target spec
176
+ class MyCustomTarget(cocoindex.op.TargetSpec):
177
+ """Spec of the custom target, to configure the target location etc."""
178
+ location: str
179
+
180
+ # 2. Define the value dataclass for exported data
181
+ @dataclasses.dataclass
182
+ class LocalFileTargetValues:
183
+ """Represents value fields of exported data."""
184
+ author: str
185
+ html: str
186
+
187
+ # 3. Define the target connector
188
+ @cocoindex.op.target_connector(spec_cls=MyCustomTarget)
189
+ class LocalFileTargetConnector:
190
+ @staticmethod
191
+ def get_persistent_key(spec: MyCustomTarget, target_name: str) -> str:
192
+ return spec.location
193
+
194
+ @staticmethod
195
+ def apply_setup_change(
196
+ key: str, previous: MyCustomTarget | None, current: MyCustomTarget | None
197
+ ) -> None:
198
+ # Setup/teardown logic here
199
+ ...
200
+
201
+ @staticmethod
202
+ def mutate(
203
+ *all_mutations: tuple[MyCustomTarget, dict[str, LocalFileTargetValues | None]],
204
+ ) -> None:
205
+ """Apply data mutations to the target."""
206
+ for spec, mutations in all_mutations:
207
+ for filename, mutation in mutations.items():
208
+ if mutation is None:
209
+ # Delete the file
210
+ ...
211
+ else:
212
+ # Write the file with author and html content
213
+ ...
214
+
215
+ # 4. Usage in a flow
216
+ @cocoindex.flow_def(name="ExampleFlow")
217
+ def example_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope) -> None:
218
+ # Add data source
219
+ data_scope["documents"] = flow_builder.add_source(...)
220
+
221
+ # Create collector
222
+ output_data = data_scope.add_collector()
223
+
224
+ # Collect data
225
+ with data_scope["documents"].row() as doc:
226
+ # Create the "author" and "fieldname" field
227
+ ...
228
+
229
+ # Collect the data
230
+ output_data.collect(filename=doc["filename"], author=doc["author"], html=doc["transformed_html"])
231
+
232
+ # Export to custom target
233
+ output_data.export(
234
+ "OutputData",
235
+ MyCustomTarget(location=...),
236
+ primary_key_fields=["filename"],
237
+ )
238
+ ```
239
+
240
+ In this example, the type for data in `all_mutations` is `dict[str, LocalFileTargetValues | None]`:
241
+ - `str` is the `DataKeyType` (the filename)
242
+ - `LocalFileTargetValues` is the `DataValueType` (containing `html` and `author` fields)
243
+ - The `mutate()` method receives tuples of `(MyCustomTarget, dict[str, LocalFileTargetValues | None])`
244
+
245
+ For simplicity, the type hints can be omitted and a `dict` will be created instead of a dataclass instance, and `author` and `html` will be the keys of the dict.
246
+
247
+ </TabItem>
248
+ </Tabs>
249
+
161
250
  ## Best Practices
162
251
 
163
252
  ### Idempotency of Methods with Side Effects
@@ -9,3 +9,7 @@ AMAZON_S3_BUCKET_NAME=your-bucket-name
9
9
 
10
10
  # Optional
11
11
  # AMAZON_S3_SQS_QUEUE_URL=
12
+
13
+ # Fallback to CPU for operations not supported by MPS on Mac.
14
+ # It's no-op for other platforms.
15
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -5,3 +5,7 @@ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
5
5
  AZURE_STORAGE_ACCOUNT_NAME=testnamecocoindex1
6
6
  AZURE_BLOB_CONTAINER_NAME=testpublic1
7
7
  AZURE_BLOB_PREFIX=
8
+
9
+ # Fallback to CPU for operations not supported by MPS on Mac.
10
+ # It's no-op for other platforms.
11
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -3,3 +3,7 @@ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@coco_db:5436/cocoindex
3
3
 
4
4
  # For local testing
5
5
  # COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
6
+
7
+ # Fallback to CPU for operations not supported by MPS on Mac.
8
+ # It's no-op for other platforms.
9
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -8,3 +8,7 @@ GOOGLE_SERVICE_ACCOUNT_CREDENTIAL=/path/to/service_account_credential.json
8
8
  # Google Drive root folder IDs, comma separated.
9
9
  #! PLEASE FILL IN
10
10
  GOOGLE_DRIVE_ROOT_FOLDER_IDS=id1,id2
11
+
12
+ # Fallback to CPU for operations not supported by MPS on Mac.
13
+ # It's no-op for other platforms.
14
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,5 @@
1
+ export COCOINDEX_DATABASE_URL="postgres://cocoindex:cocoindex@localhost/cocoindex"
2
+
3
+ # Fallback to CPU for operations not supported by MPS on Mac.
4
+ # It's no-op for other platforms.
5
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -37,6 +37,8 @@ Install dependencies:
37
37
  pip install -e .
38
38
  ```
39
39
 
40
+ **NOTE**: The `pdf2image` requires `poppler` to be installed manually. Please refer to [this document](https://pdf2image.readthedocs.io/en/latest/installation.html#installing-poppler) for the specific installation instructions for your platform.
41
+
40
42
  Setup:
41
43
 
42
44
  ```bash
@@ -2,3 +2,7 @@
2
2
  COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
3
 
4
4
  OPENAI_API_KEY=
5
+
6
+ # Fallback to CPU for operations not supported by MPS on Mac.
7
+ # It's no-op for other platforms.
8
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -0,0 +1,6 @@
1
+ # Postgres database address for cocoindex
2
+ COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
3
+
4
+ # Fallback to CPU for operations not supported by MPS on Mac.
5
+ # It's no-op for other platforms.
6
+ PYTORCH_ENABLE_MPS_FALLBACK=1
@@ -354,24 +354,31 @@ async fn evaluate_op_scope(
354
354
  let mut input_values = Vec::with_capacity(op.inputs.len());
355
355
  input_values
356
356
  .extend(assemble_input_values(&op.inputs, scoped_entries).collect::<Vec<_>>());
357
- let output_value_cell = memory.get_cache_entry(
358
- || {
359
- Ok(op
360
- .function_exec_info
361
- .fingerprinter
362
- .clone()
363
- .with(&input_values)?
364
- .into_fingerprint())
365
- },
366
- &op.function_exec_info.output_type,
367
- /*ttl=*/ None,
368
- )?;
369
- let output_value = evaluate_with_cell(output_value_cell.as_ref(), move || {
370
- op.executor.evaluate(input_values)
371
- })
372
- .await
373
- .with_context(|| format!("Evaluating Transform op `{}`", op.name,))?;
374
- head_scope.define_field(&op.output, &output_value)?;
357
+ if op.function_exec_info.enable_cache {
358
+ let output_value_cell = memory.get_cache_entry(
359
+ || {
360
+ Ok(op
361
+ .function_exec_info
362
+ .fingerprinter
363
+ .clone()
364
+ .with(&input_values)?
365
+ .into_fingerprint())
366
+ },
367
+ &op.function_exec_info.output_type,
368
+ /*ttl=*/ None,
369
+ )?;
370
+ evaluate_with_cell(output_value_cell.as_ref(), move || {
371
+ op.executor.evaluate(input_values)
372
+ })
373
+ .await
374
+ .and_then(|v| head_scope.define_field(&op.output, &v))
375
+ } else {
376
+ op.executor
377
+ .evaluate(input_values)
378
+ .await
379
+ .and_then(|v| head_scope.define_field(&op.output, &v))
380
+ }
381
+ .with_context(|| format!("Evaluating Transform op `{}`", op.name,))?
375
382
  }
376
383
 
377
384
  AnalyzedReactiveOp::ForEach(op) => {
@@ -1,4 +1,7 @@
1
- use crate::{execution::stats::UpdateStats, prelude::*};
1
+ use crate::{
2
+ execution::{source_indexer::ProcessSourceKeyOptions, stats::UpdateStats},
3
+ prelude::*,
4
+ };
2
5
 
3
6
  use super::stats;
4
7
  use futures::future::try_join_all;
@@ -191,14 +194,17 @@ impl SourceUpdateTask {
191
194
  .await?;
192
195
  tokio::spawn(source_context.clone().process_source_key(
193
196
  change.key,
194
- Some(change.key_aux_info),
195
- change.data,
196
197
  update_stats.clone(),
197
198
  concur_permit,
198
199
  Some(move || async move {
199
200
  SharedAckFn::ack(&shared_ack_fn).await
200
201
  }),
201
202
  pool.clone(),
203
+ ProcessSourceKeyOptions {
204
+ key_aux_info: Some(change.key_aux_info),
205
+ source_data: change.data,
206
+ ..Default::default()
207
+ },
202
208
  ));
203
209
  }
204
210
  }
@@ -48,6 +48,13 @@ pub struct SourceIndexingContext {
48
48
 
49
49
  pub const NO_ACK: Option<fn() -> Ready<Result<()>>> = None;
50
50
 
51
+ #[derive(Default)]
52
+ pub struct ProcessSourceKeyOptions {
53
+ /// `key_aux_info` is not available for deletions. It must not be provided if `source_data` is `None`.
54
+ pub key_aux_info: Option<serde_json::Value>,
55
+ pub source_data: Option<interface::SourceData>,
56
+ }
57
+
51
58
  impl SourceIndexingContext {
52
59
  pub async fn load(
53
60
  flow: Arc<builder::AnalyzedFlow>,
@@ -100,31 +107,29 @@ impl SourceIndexingContext {
100
107
  })
101
108
  }
102
109
 
103
- /// `key_aux_info` is not available for deletions. It must not be provided if `source_data` is `None`.
104
110
  pub async fn process_source_key<
105
111
  AckFut: Future<Output = Result<()>> + Send + 'static,
106
112
  AckFn: FnOnce() -> AckFut,
107
113
  >(
108
114
  self: Arc<Self>,
109
115
  key: value::KeyValue,
110
- key_aux_info: Option<serde_json::Value>,
111
- source_data: Option<interface::SourceData>,
112
116
  update_stats: Arc<stats::UpdateStats>,
113
117
  _concur_permit: concur_control::CombinedConcurrencyControllerPermit,
114
118
  ack_fn: Option<AckFn>,
115
119
  pool: PgPool,
120
+ options: ProcessSourceKeyOptions,
116
121
  ) {
117
122
  let process = async {
118
123
  let plan = self.flow.get_execution_plan().await?;
119
124
  let import_op = &plan.import_ops[self.source_idx];
120
125
  let schema = &self.flow.data_schema;
121
- let source_data = match source_data {
126
+ let source_data = match options.source_data {
122
127
  Some(source_data) => source_data,
123
128
  None => import_op
124
129
  .executor
125
130
  .get_value(
126
131
  &key,
127
- key_aux_info.as_ref().ok_or_else(|| {
132
+ options.key_aux_info.as_ref().ok_or_else(|| {
128
133
  anyhow::anyhow!(
129
134
  "`key_aux_info` must be provided when there's no `source_data`"
130
135
  )
@@ -337,12 +342,14 @@ impl SourceIndexingContext {
337
342
  .await?;
338
343
  join_set.spawn(self.clone().process_source_key(
339
344
  row.key,
340
- Some(row.key_aux_info),
341
- None,
342
345
  update_stats.clone(),
343
346
  concur_permit,
344
347
  NO_ACK,
345
348
  pool.clone(),
349
+ ProcessSourceKeyOptions {
350
+ key_aux_info: Some(row.key_aux_info),
351
+ ..Default::default()
352
+ },
346
353
  ));
347
354
  }
348
355
  }
@@ -372,12 +379,14 @@ impl SourceIndexingContext {
372
379
  let concur_permit = import_op.concurrency_controller.acquire(Some(|| 0)).await?;
373
380
  join_set.spawn(self.clone().process_source_key(
374
381
  key,
375
- None,
376
- Some(source_data),
377
382
  update_stats.clone(),
378
383
  concur_permit,
379
384
  NO_ACK,
380
385
  pool.clone(),
386
+ ProcessSourceKeyOptions {
387
+ source_data: Some(source_data),
388
+ ..Default::default()
389
+ },
381
390
  ));
382
391
  }
383
392
  while let Some(result) = join_set.join_next().await {
@@ -47,7 +47,7 @@ impl IntoResponse for ApiError {
47
47
  fn into_response(self) -> Response {
48
48
  debug!("Internal server error:\n{:?}", self.err);
49
49
  let error_response = ErrorResponse {
50
- error: self.err.to_string(),
50
+ error: format!("{:?}", self.err),
51
51
  };
52
52
  (self.status_code, Json(error_response)).into_response()
53
53
  }
@@ -3,5 +3,5 @@ use crate::prelude::*;
3
3
  pub const SOURCE_STATE_TABLE: &str = "source_state_table";
4
4
 
5
5
  pub fn default_features() -> BTreeSet<String> {
6
- vec![SOURCE_STATE_TABLE.to_string()].into_iter().collect()
6
+ BTreeSet::new()
7
7
  }
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1 +0,0 @@
1
- export COCOINDEX_DATABASE_URL="postgres://cocoindex:cocoindex@localhost/cocoindex"
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
@@ -1,2 +0,0 @@
1
- # Postgres database address for cocoindex
2
- COCOINDEX_DATABASE_URL=postgres://cocoindex:cocoindex@localhost/cocoindex
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