flowapy 0.4.2__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. {flowapy-0.4.2 → flowapy-0.5.0}/PKG-INFO +33 -16
  2. {flowapy-0.4.2 → flowapy-0.5.0}/README.md +32 -15
  3. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/README.md +6 -3
  4. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/package.json +14 -14
  5. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/scripts/chat-service.ts +4 -4
  6. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/README.md +2 -2
  7. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/conftest.py +2 -1
  8. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/uv.lock +42 -41
  9. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/package.json +10 -10
  10. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/chat.ts +34 -6
  11. flowapy-0.5.0/packages/chat-service/src/prompts.ts +0 -0
  12. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/server.ts +1 -1
  13. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/session.ts +17 -22
  14. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/telemetry.ts +2 -1
  15. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/chat.test.ts +42 -22
  16. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/generic-prompt.test.ts +66 -24
  17. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/paper-cache.test.ts +0 -1
  18. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/package.json +5 -5
  19. {flowapy-0.4.2 → flowapy-0.5.0}/pnpm-lock.yaml +519 -488
  20. flowapy-0.5.0/pnpm-workspace.yaml +13 -0
  21. flowapy-0.5.0/prompts/generic/aggregation/authoring.txt +88 -0
  22. flowapy-0.5.0/prompts/generic/aggregation/categories/acmg_classification.txt +131 -0
  23. flowapy-0.5.0/prompts/generic/aggregation/categories.json +6 -0
  24. flowapy-0.5.0/prompts/generic/aggregation/edit_prompt.txt +84 -0
  25. flowapy-0.5.0/prompts/generic/aggregation/prompt.txt +34 -0
  26. flowapy-0.5.0/prompts/generic/aggregation/schema.py +31 -0
  27. {flowapy-0.4.2 → flowapy-0.5.0}/prompts/package.json +3 -2
  28. {flowapy-0.4.2 → flowapy-0.5.0}/pyproject.toml +6 -1
  29. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/aggregate.py +103 -48
  30. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/content_validation.py +55 -5
  31. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/convert.py +1 -1
  32. flowapy-0.5.0/src/flowa/prompts/__init__.py +204 -0
  33. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/run.py +23 -26
  34. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/settings.py +8 -1
  35. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/authoring.txt +2 -0
  36. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/categories/alpha.txt +2 -0
  37. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/categories/beta.txt +2 -0
  38. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/categories.json +4 -0
  39. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/edit_prompt.txt +16 -0
  40. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/prompt.txt +13 -0
  41. flowapy-0.5.0/tests/fixtures/prompt_sets/multi/aggregation/schema.py +17 -0
  42. flowapy-0.5.0/tests/test_aggregate.py +204 -0
  43. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_content_validation.py +51 -0
  44. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_convert.py +15 -16
  45. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_download.py +4 -6
  46. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_normalize.py +4 -6
  47. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_pdfium.py +2 -5
  48. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_prompts.py +41 -14
  49. {flowapy-0.4.2 → flowapy-0.5.0}/uv.lock +45 -31
  50. flowapy-0.4.2/packages/chat-service/src/prompts.ts +0 -21
  51. flowapy-0.4.2/pnpm-workspace.yaml +0 -4
  52. flowapy-0.4.2/prompts/generic/aggregation_edit_prompt.txt +0 -264
  53. flowapy-0.4.2/prompts/generic/aggregation_prompt.txt +0 -279
  54. flowapy-0.4.2/prompts/generic/aggregation_schema.py +0 -36
  55. flowapy-0.4.2/src/flowa/prompts/__init__.py +0 -148
  56. {flowapy-0.4.2 → flowapy-0.5.0}/.github/CODEOWNERS +0 -0
  57. {flowapy-0.4.2 → flowapy-0.5.0}/.github/dependabot.yml +0 -0
  58. {flowapy-0.4.2 → flowapy-0.5.0}/.github/workflows/dependabot-auto-merge.yml +0 -0
  59. {flowapy-0.4.2 → flowapy-0.5.0}/.github/workflows/lint.yaml +0 -0
  60. {flowapy-0.4.2 → flowapy-0.5.0}/.github/workflows/release-chat-service.yaml +0 -0
  61. {flowapy-0.4.2 → flowapy-0.5.0}/.github/workflows/release-flowapy.yaml +0 -0
  62. {flowapy-0.4.2 → flowapy-0.5.0}/.github/workflows/release-react-viewer.yaml +0 -0
  63. {flowapy-0.4.2 → flowapy-0.5.0}/.gitignore +0 -0
  64. {flowapy-0.4.2 → flowapy-0.5.0}/.markdownlint.json +0 -0
  65. {flowapy-0.4.2 → flowapy-0.5.0}/.nvmrc +0 -0
  66. {flowapy-0.4.2 → flowapy-0.5.0}/.pre-commit-config.yaml +0 -0
  67. {flowapy-0.4.2 → flowapy-0.5.0}/.prettierignore +0 -0
  68. {flowapy-0.4.2 → flowapy-0.5.0}/Dockerfile +0 -0
  69. {flowapy-0.4.2 → flowapy-0.5.0}/LICENSE +0 -0
  70. {flowapy-0.4.2 → flowapy-0.5.0}/docs/images/viewer.png +0 -0
  71. {flowapy-0.4.2 → flowapy-0.5.0}/examples/.gitkeep +0 -0
  72. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/.env.example +0 -0
  73. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/.gitignore +0 -0
  74. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/LICENSES.md +0 -0
  75. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/aggregation.json +0 -0
  76. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1002%2Fhumu.23878.json +0 -0
  77. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1016%2Fj.ymgmr.2024.101163.json +0 -0
  78. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1038%2Fs41598-022-25914-8.json +0 -0
  79. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs12881-019-0878-8.json +0 -0
  80. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-021-01817-1.json +0 -0
  81. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-021-02146-z.json +0 -0
  82. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-023-02848-6.json +0 -0
  83. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13052-019-0692-0.json +0 -0
  84. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffcvm.2022.1061384.json +0 -0
  85. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffcvm.2023.1261172.json +0 -0
  86. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffimmu.2024.1336599.json +0 -0
  87. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffped.2021.729824.json +0 -0
  88. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffphar.2022.903488.json +0 -0
  89. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3390%2Fijns11010016.json +0 -0
  90. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3390%2Fijns6020031.json +0 -0
  91. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/query.json +0 -0
  92. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/runs/cfc0186a7b7e46eb802a516b86ec207f/progress.jsonl +0 -0
  93. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/variant_details.json +0 -0
  94. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fajmg.a.61481/metadata.json +0 -0
  95. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/main.md +0 -0
  96. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/main.pdf +0 -0
  97. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/merged.md +0 -0
  98. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/merged.pdf +0 -0
  99. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/metadata.json +0 -0
  100. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/pdf_index.pkl.zst +0 -0
  101. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/supplements/000_HUMU-40-2146-s001.pdf +0 -0
  102. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/supplements/000_HUMU-40-2146-s001.pdf.md +0 -0
  103. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ejmg.2020.103997/metadata.json +0 -0
  104. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.nmd.2022.02.002/metadata.json +0 -0
  105. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.tjog.2022.07.008/metadata.json +0 -0
  106. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/main.md +0 -0
  107. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/main.pdf +0 -0
  108. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/merged.md +0 -0
  109. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/metadata.json +0 -0
  110. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/pdf_index.pkl.zst +0 -0
  111. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/supplements/000_mmc1.docx +0 -0
  112. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/main.md +0 -0
  113. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/main.pdf +0 -0
  114. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/merged.md +0 -0
  115. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/metadata.json +0 -0
  116. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/pdf_index.pkl.zst +0 -0
  117. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/supplements/000_41598_2022_25914_MOESM1_ESM.docx +0 -0
  118. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1093%2Fhmg%2Fddz218/metadata.json +0 -0
  119. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1136%2Fjmg-2022-108675/metadata.json +0 -0
  120. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/main.md +0 -0
  121. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/main.pdf +0 -0
  122. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/metadata.json +0 -0
  123. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/pdf_index.pkl.zst +0 -0
  124. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/main.md +0 -0
  125. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/main.pdf +0 -0
  126. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/metadata.json +0 -0
  127. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/pdf_index.pkl.zst +0 -0
  128. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/main.md +0 -0
  129. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/main.pdf +0 -0
  130. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/metadata.json +0 -0
  131. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/pdf_index.pkl.zst +0 -0
  132. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/main.md +0 -0
  133. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/main.pdf +0 -0
  134. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/metadata.json +0 -0
  135. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/pdf_index.pkl.zst +0 -0
  136. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/main.md +0 -0
  137. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/main.pdf +0 -0
  138. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/metadata.json +0 -0
  139. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/pdf_index.pkl.zst +0 -0
  140. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/main.md +0 -0
  141. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/main.pdf +0 -0
  142. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/metadata.json +0 -0
  143. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/pdf_index.pkl.zst +0 -0
  144. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/main.md +0 -0
  145. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/main.pdf +0 -0
  146. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/merged.md +0 -0
  147. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/metadata.json +0 -0
  148. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/pdf_index.pkl.zst +0 -0
  149. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/supplements/000_Table1.docx +0 -0
  150. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/main.md +0 -0
  151. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/main.pdf +0 -0
  152. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/metadata.json +0 -0
  153. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/pdf_index.pkl.zst +0 -0
  154. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/main.md +0 -0
  155. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/main.pdf +0 -0
  156. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/merged.md +0 -0
  157. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/merged.pdf +0 -0
  158. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/metadata.json +0 -0
  159. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/pdf_index.pkl.zst +0 -0
  160. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/supplements/000_Image_1.PDF +0 -0
  161. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/supplements/000_Image_1.PDF.md +0 -0
  162. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/main.md +0 -0
  163. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/main.pdf +0 -0
  164. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/metadata.json +0 -0
  165. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/pdf_index.pkl.zst +0 -0
  166. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/main.md +0 -0
  167. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/main.pdf +0 -0
  168. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/metadata.json +0 -0
  169. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/pdf_index.pkl.zst +0 -0
  170. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/main.md +0 -0
  171. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/main.pdf +0 -0
  172. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/metadata.json +0 -0
  173. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/pdf_index.pkl.zst +0 -0
  174. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/next-env.d.ts +0 -0
  175. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/next.config.mjs +0 -0
  176. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/postcss.config.cjs +0 -0
  177. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/public/favicon.svg +0 -0
  178. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/scripts/copy-pdfjs-assets.ts +0 -0
  179. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/scripts/exercise-llm.ts +0 -0
  180. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/scripts/start.ts +0 -0
  181. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/components/literature/LiteratureView.tsx +0 -0
  182. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/components/literature/PaperStatusGroup.tsx +0 -0
  183. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/components/literature/ProgressLog.tsx +0 -0
  184. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/db/migrate.ts +0 -0
  185. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/db/schema.sql +0 -0
  186. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/aggregate.ts +0 -0
  187. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/chatSessionClient.ts +0 -0
  188. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/citationResolverClient.ts +0 -0
  189. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/demoConfig.ts +0 -0
  190. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/paperInvalidation.ts +0 -0
  191. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/papers.ts +0 -0
  192. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/progressEvents.ts +0 -0
  193. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/runs.ts +0 -0
  194. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/triageBackendClient.ts +0 -0
  195. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/triageDb.ts +0 -0
  196. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/lib/variantId.ts +0 -0
  197. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/_app.tsx +0 -0
  198. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/aggregate/[variantId]/[category].ts +0 -0
  199. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/edit-drafts/[variantId]/[category]/[version].ts +0 -0
  200. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/edit-drafts/[variantId]/[category]/index.ts +0 -0
  201. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/papers/[doi]/markdown.ts +0 -0
  202. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/papers/[doi]/pdf.ts +0 -0
  203. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/papers/[doi]/supplements.ts +0 -0
  204. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/papers/index.ts +0 -0
  205. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/runs/[variantId]/[runId]/progress.ts +0 -0
  206. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/runs/index.ts +0 -0
  207. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/runs/latest.ts +0 -0
  208. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/triage/claim.ts +0 -0
  209. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/triage/comment.ts +0 -0
  210. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/triage/paper-done.ts +0 -0
  211. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/api/triage/snapshot/[variantId]/[category]/[version].ts +0 -0
  212. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/index.tsx +0 -0
  213. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/variants/[variantId].tsx +0 -0
  214. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/pages/viewer/[variantId]/[category].tsx +0 -0
  215. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/src/styles/globals.css +0 -0
  216. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/tailwind.config.ts +0 -0
  217. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/LiteratureView.test.tsx +0 -0
  218. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/ProgressLog.test.tsx +0 -0
  219. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/aggregate.test.ts +0 -0
  220. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/chat-service.test.ts +0 -0
  221. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/index-page.test.tsx +0 -0
  222. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/paper-invalidation.test.ts +0 -0
  223. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/papers-pdf-upload.test.ts +0 -0
  224. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/papers-route.test.ts +0 -0
  225. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/papers-supplements.test.ts +0 -0
  226. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/papers.test.ts +0 -0
  227. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/progress-route.test.ts +0 -0
  228. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/runs-latest-route.test.ts +0 -0
  229. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/runs-route.test.ts +0 -0
  230. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/runs.test.ts +0 -0
  231. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/setup.ts +0 -0
  232. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/triage.test.ts +0 -0
  233. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/test/variantId.test.ts +0 -0
  234. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/tsconfig.json +0 -0
  235. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo/vitest.config.ts +0 -0
  236. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/pyproject.toml +0 -0
  237. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/src/demo_gateway/__init__.py +0 -0
  238. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/src/demo_gateway/config.py +0 -0
  239. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/src/demo_gateway/main.py +0 -0
  240. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/src/demo_gateway/progress.py +0 -0
  241. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/src/demo_gateway/runs.py +0 -0
  242. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/__init__.py +0 -0
  243. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/test_main.py +0 -0
  244. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/test_progress.py +0 -0
  245. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/test_resolve.py +0 -0
  246. {flowapy-0.4.2 → flowapy-0.5.0}/examples/demo-gateway/tests/test_runs.py +0 -0
  247. {flowapy-0.4.2 → flowapy-0.5.0}/package.json +0 -0
  248. {flowapy-0.4.2 → flowapy-0.5.0}/packages/.gitkeep +0 -0
  249. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/Dockerfile +0 -0
  250. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/LICENSE +0 -0
  251. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/README.md +0 -0
  252. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/artifact.ts +0 -0
  253. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/audit.ts +0 -0
  254. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/auth/jwt.ts +0 -0
  255. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/auth/oidc.ts +0 -0
  256. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/cli.ts +0 -0
  257. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/config.ts +0 -0
  258. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/index.ts +0 -0
  259. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/instrumentation.ts +0 -0
  260. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/anthropic.ts +0 -0
  261. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/bedrock.ts +0 -0
  262. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/factory.ts +0 -0
  263. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/google-gla.ts +0 -0
  264. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/google-vertex.ts +0 -0
  265. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/interface.ts +0 -0
  266. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/llm/openai.ts +0 -0
  267. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage/factory.ts +0 -0
  268. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage/fs.ts +0 -0
  269. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage/gcs.ts +0 -0
  270. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage/interface.ts +0 -0
  271. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage/s3.ts +0 -0
  272. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/storage-keys.ts +0 -0
  273. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/text.ts +0 -0
  274. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/src/yaml.ts +0 -0
  275. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/llm-factory.test.ts +0 -0
  276. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/oidc.test.ts +0 -0
  277. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/storage-fs.test.ts +0 -0
  278. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/storage-gcs.test.ts +0 -0
  279. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/storage-s3.test.ts +0 -0
  280. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/text.test.ts +0 -0
  281. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/test/yaml.test.ts +0 -0
  282. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/tsconfig.build.json +0 -0
  283. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/tsconfig.json +0 -0
  284. {flowapy-0.4.2 → flowapy-0.5.0}/packages/chat-service/vitest.config.ts +0 -0
  285. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/LICENSE +0 -0
  286. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/README.md +0 -0
  287. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/citations/sanitize.test.ts +0 -0
  288. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/citations/sanitize.ts +0 -0
  289. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/citations/types.ts +0 -0
  290. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/index.ts +0 -0
  291. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/llm-content/LlmContent.test.tsx +0 -0
  292. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/llm-content/LlmContent.tsx +0 -0
  293. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/MarkdownHighlightViewer.test.tsx +0 -0
  294. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/MarkdownHighlightViewer.tsx +0 -0
  295. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/offsets.test.ts +0 -0
  296. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/offsets.ts +0 -0
  297. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/plugins.test.tsx +0 -0
  298. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/plugins.ts +0 -0
  299. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/markdown-viewer/types.ts +0 -0
  300. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/paper-matching/matchFilesToPapers.test.ts +0 -0
  301. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/paper-matching/matchFilesToPapers.ts +0 -0
  302. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/pdf-viewer/PdfHighlightViewer.test.tsx +0 -0
  303. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/pdf-viewer/PdfHighlightViewer.tsx +0 -0
  304. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/pdf-viewer/types.ts +0 -0
  305. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/styles.css +0 -0
  306. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ChatDrawer.test.tsx +0 -0
  307. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ChatDrawer.tsx +0 -0
  308. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ChatSection.tsx +0 -0
  309. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ClaimList.tsx +0 -0
  310. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/EvidenceViewerShell.test.tsx +0 -0
  311. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/EvidenceViewerShell.tsx +0 -0
  312. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/FocusCard.tsx +0 -0
  313. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/MessageParts.tsx +0 -0
  314. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/PaperHeader.tsx +0 -0
  315. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/PaperRail.test.tsx +0 -0
  316. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/PaperRail.tsx +0 -0
  317. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ReasoningStep.tsx +0 -0
  318. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/SynthesisPanel.tsx +0 -0
  319. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/ToolStep.tsx +0 -0
  320. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/backend.ts +0 -0
  321. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/citation-resolver.ts +0 -0
  322. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/citation-utils.test.ts +0 -0
  323. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/citation-utils.ts +0 -0
  324. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/claim-refs.test.ts +0 -0
  325. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/claim-refs.ts +0 -0
  326. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/keyboard.test.ts +0 -0
  327. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/keyboard.ts +0 -0
  328. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/store.test.ts +0 -0
  329. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/store.ts +0 -0
  330. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/trace-format.test.ts +0 -0
  331. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/trace-format.ts +0 -0
  332. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/src/triage/types.ts +0 -0
  333. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/tailwind.config.ts +0 -0
  334. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/tsconfig.json +0 -0
  335. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/tsup.config.ts +0 -0
  336. {flowapy-0.4.2 → flowapy-0.5.0}/packages/react-viewer/vitest.config.ts +0 -0
  337. /flowapy-0.4.2/prompts/generic/aggregation_edit_schema.ts → /flowapy-0.5.0/prompts/generic/aggregation/edit_schema.ts +0 -0
  338. /flowapy-0.4.2/prompts/generic/extraction_prompt.txt → /flowapy-0.5.0/prompts/generic/extraction/prompt.txt +0 -0
  339. /flowapy-0.4.2/prompts/generic/extraction_schema.py → /flowapy-0.5.0/prompts/generic/extraction/schema.py +0 -0
  340. {flowapy-0.4.2 → flowapy-0.5.0}/prompts/generic/transcription_prompt.txt +0 -0
  341. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/__init__.py +0 -0
  342. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/artifact.py +0 -0
  343. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/assemble.py +0 -0
  344. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/cli.py +0 -0
  345. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/clinvar.py +0 -0
  346. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/download.py +0 -0
  347. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/extract.py +0 -0
  348. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/http_retry.py +0 -0
  349. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/models.py +0 -0
  350. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/normalize.py +0 -0
  351. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/pdf_index_cache.py +0 -0
  352. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/pdfium.py +0 -0
  353. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/progress.py +0 -0
  354. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/py.typed +0 -0
  355. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/query.py +0 -0
  356. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/resolve.py +0 -0
  357. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/schema.py +0 -0
  358. {flowapy-0.4.2 → flowapy-0.5.0}/src/flowa/storage.py +0 -0
  359. {flowapy-0.4.2 → flowapy-0.5.0}/tests/__init__.py +0 -0
  360. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_assemble.py +0 -0
  361. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_pdf_index_cache.py +0 -0
  362. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_progress.py +0 -0
  363. {flowapy-0.4.2 → flowapy-0.5.0}/tests/test_resolve.py +0 -0
  364. {flowapy-0.4.2 → flowapy-0.5.0}/tsconfig.base.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowapy
3
- Version: 0.4.2
3
+ Version: 0.5.0
4
4
  Summary: Variant literature assessment pipeline with AI extraction
5
5
  Project-URL: Homepage, https://github.com/populationgenomics/flowa
6
6
  Project-URL: Source, https://github.com/populationgenomics/flowa
@@ -115,12 +115,20 @@ The PyPI distribution is named `flowapy` (the `flowa` name was already taken), b
115
115
 
116
116
  ## Usage
117
117
 
118
+ A variant is passed as `--variant-spec`, either inline JSON or `@path/to/spec.json`. The
119
+ envelope is `{"schema_version": 1, "variants": [{ "kind": "hgvs_c", "transcript": ...,
120
+ "hgvs_c": ... }]}` — `hgvs_c` is the bare coding change with no transcript prefix. The gene
121
+ symbol and genomic coordinates are derived downstream, so they aren't part of the spec.
122
+
118
123
  ```bash
124
+ # Example variant spec (GAA / Pompe, NM_000152.5:c.2238G>C)
125
+ SPEC='{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}'
126
+
119
127
  # Full pipeline
120
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
128
+ flowa run --variant-id VAR123 --variant-spec "$SPEC" --source litvar
121
129
 
122
130
  # Individual steps (for debugging)
123
- flowa query --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
131
+ flowa query --variant-id VAR123 --variant-spec "$SPEC" --source litvar
124
132
  flowa download --doi '10.1038/s41586-020-2308-7'
125
133
  flowa convert --doi '10.1038/s41586-020-2308-7'
126
134
  flowa extract --variant-id VAR123 --doi '10.1038/s41586-020-2308-7'
@@ -136,15 +144,17 @@ The model settings are nested config objects: set their sub-fields with the `__`
136
144
  | Variable | Description | Example |
137
145
  | ------------------------------ | ---------------------------------------------------------------------------- | -------------------------------------------- |
138
146
  | `FLOWA_STORAGE_BASE` | Storage path for PDFs, extractions, results | `s3://bucket`, `gs://bucket`, `file:///path` |
139
- | `FLOWA_CONVERT_MODEL__NAME` | LLM for PDF→Markdown conversion (anchorite), in `<provider>:<model>` form | `bedrock:au.anthropic.claude-sonnet-4-6` |
140
- | `FLOWA_EXTRACTION_MODEL__NAME` | LLM for extraction and aggregation | `bedrock:au.anthropic.claude-opus-4-6` |
147
+ | `FLOWA_CONVERSION_MODEL__NAME` | LLM for PDF→Markdown conversion (anchorite), in `<provider>:<model>` form | `bedrock:au.anthropic.claude-sonnet-4-6` |
148
+ | `FLOWA_EXTRACTION_MODEL__NAME` | LLM for extraction | `bedrock:au.anthropic.claude-sonnet-4-6` |
149
+ | `FLOWA_AGGREGATION_MODEL__NAME` | LLM for aggregation | `bedrock:au.anthropic.claude-opus-4-8` |
141
150
 
142
151
  Optional:
143
152
 
144
153
  | Variable | Description |
145
154
  | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
146
- | `FLOWA_CONVERT_MODEL__BEDROCK_INFERENCE_PROFILE` | Bedrock application inference profile ARN for cost attribution. When set, `__NAME` must point at the underlying foundation model. |
147
- | `FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the extraction/aggregation model. |
155
+ | `FLOWA_CONVERSION_MODEL__BEDROCK_INFERENCE_PROFILE` | Bedrock application inference profile ARN for cost attribution. When set, `__NAME` must point at the underlying foundation model. |
156
+ | `FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the extraction model. |
157
+ | `FLOWA_AGGREGATION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the aggregation model. |
148
158
  | `MASTERMIND_API_TOKEN` | Required when querying with `--source mastermind`; use `--source litvar` (free, no token) otherwise. |
149
159
  | `NCBI_API_KEY` | Optional NCBI key for higher PubMed rate limits. |
150
160
 
@@ -292,9 +302,12 @@ Run the pipeline directly from a checkout (the [Quickstart](#quickstart) demo wr
292
302
 
293
303
  ```bash
294
304
  export FLOWA_STORAGE_BASE=file:///tmp/flowa
295
- export FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
296
- export FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6
297
- uv run flowa run --variant-id test --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
305
+ export FLOWA_CONVERSION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
306
+ export FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
307
+ export FLOWA_AGGREGATION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-8
308
+ uv run flowa run --variant-id test \
309
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
310
+ --source litvar
298
311
  ```
299
312
 
300
313
  ### Docker
@@ -303,10 +316,13 @@ uv run flowa run --variant-id test --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" -
303
316
  docker build --build-arg LLM_EXTRA=bedrock -t flowa .
304
317
  docker run \
305
318
  -e FLOWA_STORAGE_BASE=s3://bucket \
306
- -e FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
307
- -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6 \
319
+ -e FLOWA_CONVERSION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
320
+ -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
321
+ -e FLOWA_AGGREGATION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-8 \
308
322
  -e AWS_REGION=ap-southeast-2 \
309
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
323
+ flowa run --variant-id VAR123 \
324
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
325
+ --source litvar
310
326
  ```
311
327
 
312
328
  ### AWS Batch
@@ -325,8 +341,9 @@ aws batch register-job-definition \
325
341
  ],
326
342
  "environment": [
327
343
  {"name": "FLOWA_STORAGE_BASE", "value": "s3://flowa-data"},
328
- {"name": "FLOWA_CONVERT_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
329
- {"name": "FLOWA_EXTRACTION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-opus-4-6"}
344
+ {"name": "FLOWA_CONVERSION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
345
+ {"name": "FLOWA_EXTRACTION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
346
+ {"name": "FLOWA_AGGREGATION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-opus-4-8"}
330
347
  ]
331
348
  }' \
332
349
  --retry-strategy '{"attempts": 2}' \
@@ -341,6 +358,6 @@ aws batch submit-job \
341
358
  --job-definition flowa-worker \
342
359
  --job-queue flowa-queue \
343
360
  --container-overrides '{
344
- "command": ["run", "--variant-id", "VAR123", "--gene", "GAA", "--hgvs-c", "NM_000152.5:c.2238G>C", "--source", "litvar"]
361
+ "command": ["run", "--variant-id", "VAR123", "--variant-spec", "{\"schema_version\":1,\"variants\":[{\"kind\":\"hgvs_c\",\"transcript\":\"NM_000152.5\",\"hgvs_c\":\"c.2238G>C\"}]}", "--source", "litvar"]
345
362
  }'
346
363
  ```
@@ -53,12 +53,20 @@ The PyPI distribution is named `flowapy` (the `flowa` name was already taken), b
53
53
 
54
54
  ## Usage
55
55
 
56
+ A variant is passed as `--variant-spec`, either inline JSON or `@path/to/spec.json`. The
57
+ envelope is `{"schema_version": 1, "variants": [{ "kind": "hgvs_c", "transcript": ...,
58
+ "hgvs_c": ... }]}` — `hgvs_c` is the bare coding change with no transcript prefix. The gene
59
+ symbol and genomic coordinates are derived downstream, so they aren't part of the spec.
60
+
56
61
  ```bash
62
+ # Example variant spec (GAA / Pompe, NM_000152.5:c.2238G>C)
63
+ SPEC='{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}'
64
+
57
65
  # Full pipeline
58
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
66
+ flowa run --variant-id VAR123 --variant-spec "$SPEC" --source litvar
59
67
 
60
68
  # Individual steps (for debugging)
61
- flowa query --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
69
+ flowa query --variant-id VAR123 --variant-spec "$SPEC" --source litvar
62
70
  flowa download --doi '10.1038/s41586-020-2308-7'
63
71
  flowa convert --doi '10.1038/s41586-020-2308-7'
64
72
  flowa extract --variant-id VAR123 --doi '10.1038/s41586-020-2308-7'
@@ -74,15 +82,17 @@ The model settings are nested config objects: set their sub-fields with the `__`
74
82
  | Variable | Description | Example |
75
83
  | ------------------------------ | ---------------------------------------------------------------------------- | -------------------------------------------- |
76
84
  | `FLOWA_STORAGE_BASE` | Storage path for PDFs, extractions, results | `s3://bucket`, `gs://bucket`, `file:///path` |
77
- | `FLOWA_CONVERT_MODEL__NAME` | LLM for PDF→Markdown conversion (anchorite), in `<provider>:<model>` form | `bedrock:au.anthropic.claude-sonnet-4-6` |
78
- | `FLOWA_EXTRACTION_MODEL__NAME` | LLM for extraction and aggregation | `bedrock:au.anthropic.claude-opus-4-6` |
85
+ | `FLOWA_CONVERSION_MODEL__NAME` | LLM for PDF→Markdown conversion (anchorite), in `<provider>:<model>` form | `bedrock:au.anthropic.claude-sonnet-4-6` |
86
+ | `FLOWA_EXTRACTION_MODEL__NAME` | LLM for extraction | `bedrock:au.anthropic.claude-sonnet-4-6` |
87
+ | `FLOWA_AGGREGATION_MODEL__NAME` | LLM for aggregation | `bedrock:au.anthropic.claude-opus-4-8` |
79
88
 
80
89
  Optional:
81
90
 
82
91
  | Variable | Description |
83
92
  | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
84
- | `FLOWA_CONVERT_MODEL__BEDROCK_INFERENCE_PROFILE` | Bedrock application inference profile ARN for cost attribution. When set, `__NAME` must point at the underlying foundation model. |
85
- | `FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the extraction/aggregation model. |
93
+ | `FLOWA_CONVERSION_MODEL__BEDROCK_INFERENCE_PROFILE` | Bedrock application inference profile ARN for cost attribution. When set, `__NAME` must point at the underlying foundation model. |
94
+ | `FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the extraction model. |
95
+ | `FLOWA_AGGREGATION_MODEL__BEDROCK_INFERENCE_PROFILE` | Same, for the aggregation model. |
86
96
  | `MASTERMIND_API_TOKEN` | Required when querying with `--source mastermind`; use `--source litvar` (free, no token) otherwise. |
87
97
  | `NCBI_API_KEY` | Optional NCBI key for higher PubMed rate limits. |
88
98
 
@@ -230,9 +240,12 @@ Run the pipeline directly from a checkout (the [Quickstart](#quickstart) demo wr
230
240
 
231
241
  ```bash
232
242
  export FLOWA_STORAGE_BASE=file:///tmp/flowa
233
- export FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
234
- export FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6
235
- uv run flowa run --variant-id test --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
243
+ export FLOWA_CONVERSION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
244
+ export FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
245
+ export FLOWA_AGGREGATION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-8
246
+ uv run flowa run --variant-id test \
247
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
248
+ --source litvar
236
249
  ```
237
250
 
238
251
  ### Docker
@@ -241,10 +254,13 @@ uv run flowa run --variant-id test --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" -
241
254
  docker build --build-arg LLM_EXTRA=bedrock -t flowa .
242
255
  docker run \
243
256
  -e FLOWA_STORAGE_BASE=s3://bucket \
244
- -e FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
245
- -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6 \
257
+ -e FLOWA_CONVERSION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
258
+ -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
259
+ -e FLOWA_AGGREGATION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-8 \
246
260
  -e AWS_REGION=ap-southeast-2 \
247
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
261
+ flowa run --variant-id VAR123 \
262
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
263
+ --source litvar
248
264
  ```
249
265
 
250
266
  ### AWS Batch
@@ -263,8 +279,9 @@ aws batch register-job-definition \
263
279
  ],
264
280
  "environment": [
265
281
  {"name": "FLOWA_STORAGE_BASE", "value": "s3://flowa-data"},
266
- {"name": "FLOWA_CONVERT_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
267
- {"name": "FLOWA_EXTRACTION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-opus-4-6"}
282
+ {"name": "FLOWA_CONVERSION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
283
+ {"name": "FLOWA_EXTRACTION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-sonnet-4-6"},
284
+ {"name": "FLOWA_AGGREGATION_MODEL__NAME", "value": "bedrock:au.anthropic.claude-opus-4-8"}
268
285
  ]
269
286
  }' \
270
287
  --retry-strategy '{"attempts": 2}' \
@@ -279,6 +296,6 @@ aws batch submit-job \
279
296
  --job-definition flowa-worker \
280
297
  --job-queue flowa-queue \
281
298
  --container-overrides '{
282
- "command": ["run", "--variant-id", "VAR123", "--gene", "GAA", "--hgvs-c", "NM_000152.5:c.2238G>C", "--source", "litvar"]
299
+ "command": ["run", "--variant-id", "VAR123", "--variant-spec", "{\"schema_version\":1,\"variants\":[{\"kind\":\"hgvs_c\",\"transcript\":\"NM_000152.5\",\"hgvs_c\":\"c.2238G>C\"}]}", "--source", "litvar"]
283
300
  }'
284
301
  ```
@@ -181,13 +181,16 @@ replicate that translation when invoking the CLI directly:
181
181
  ```bash
182
182
  cd examples/demo && set -a && source .env && set +a && cd ../..
183
183
  export FLOWA_STORAGE_BASE="$PWD/examples/demo/demo-data"
184
+ export FLOWA_CONVERSION_MODEL__NAME="$LLM_MODEL"
184
185
  export FLOWA_EXTRACTION_MODEL__NAME="$LLM_MODEL"
185
- export FLOWA_CONVERT_MODEL__NAME="$LLM_MODEL"
186
+ export FLOWA_AGGREGATION_MODEL__NAME="$LLM_MODEL"
186
187
  if [ -n "${BEDROCK_INFERENCE_PROFILE:-}" ]; then
188
+ export FLOWA_CONVERSION_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
187
189
  export FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
188
- export FLOWA_CONVERT_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
190
+ export FLOWA_AGGREGATION_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
189
191
  fi
190
- uv run flowa run --variant-id $VARIANT --gene RYR2 --hgvs-c "NM_001035.3:c.14174A>G"
192
+ uv run flowa run --variant-id $VARIANT \
193
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_001035.3","hgvs_c":"c.14174A>G"}]}'
191
194
  ```
192
195
 
193
196
  Open `http://localhost:7700/viewer/$VARIANT/acmg_classification` (with
@@ -19,14 +19,14 @@
19
19
  "build": "next build"
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/amazon-bedrock": "4.0.110",
23
- "@ai-sdk/anthropic": "3.0.80",
22
+ "@ai-sdk/amazon-bedrock": "4.0.112",
23
+ "@ai-sdk/anthropic": "3.0.81",
24
24
  "@ai-sdk/google": "3.0.80",
25
- "@ai-sdk/google-vertex": "4.0.139",
26
- "@ai-sdk/openai": "3.0.66",
27
- "@ai-sdk/react": "3.0.193",
28
- "@aws-sdk/client-s3": "3.1055.0",
29
- "@aws-sdk/credential-providers": "3.1055.0",
25
+ "@ai-sdk/google-vertex": "4.0.142",
26
+ "@ai-sdk/openai": "3.0.67",
27
+ "@ai-sdk/react": "3.0.198",
28
+ "@aws-sdk/client-s3": "3.1061.0",
29
+ "@aws-sdk/credential-providers": "3.1061.0",
30
30
  "@flowajs/chat-service": "workspace:*",
31
31
  "@flowajs/prompts": "workspace:*",
32
32
  "@flowajs/react-viewer": "workspace:*",
@@ -34,9 +34,9 @@
34
34
  "@mantine/core": "8.3.18",
35
35
  "@mantine/hooks": "8.3.18",
36
36
  "@tabler/icons-react": "3.44.0",
37
- "ai": "6.0.191",
37
+ "ai": "6.0.196",
38
38
  "formidable": "3.5.4",
39
- "next": "16.2.6",
39
+ "next": "16.2.7",
40
40
  "react": "18.3.1",
41
41
  "react-dom": "18.3.1",
42
42
  "zod": "4.4.3",
@@ -51,14 +51,14 @@
51
51
  "@types/react": "18.3.18",
52
52
  "@types/react-dom": "18.3.5",
53
53
  "autoprefixer": "10.5.0",
54
- "concurrently": "10.0.0",
55
- "happy-dom": "20.9.0",
54
+ "concurrently": "10.0.3",
55
+ "happy-dom": "20.10.1",
56
56
  "pdfjs-dist": "5.7.284",
57
57
  "postcss": "8.5.15",
58
58
  "tailwindcss": "3.4.17",
59
- "tsx": "4.22.3",
59
+ "tsx": "4.22.4",
60
60
  "typescript": "5.7.3",
61
- "vite": "8.0.14",
62
- "vitest": "4.1.7"
61
+ "vite": "8.0.16",
62
+ "vitest": "4.1.8"
63
63
  }
64
64
  }
@@ -50,10 +50,10 @@ const dataRoot = resolve(
50
50
  process.env.DEMO_DATA_DIR ?? "./demo-data",
51
51
  );
52
52
 
53
- // Locate the prompt-template directory by resolving the schema's package
54
- // export `prompts/generic/aggregation_edit_schema.ts` lives in the same
55
- // directory as `aggregation_edit_prompt.txt`, which is what
56
- // `loadEditPromptTemplate` reads.
53
+ // Locate the prompt directory by resolving the schema's package export —
54
+ // `@flowajs/prompts/generic` points at `prompts/generic/aggregation/edit_schema.ts`,
55
+ // so its dirname is `prompts/generic/aggregation/`, where chat-service reads
56
+ // `edit_prompt.txt`, `authoring.txt`, `categories.json`, and `categories/`.
57
57
  const promptDir = dirname(
58
58
  fileURLToPath(import.meta.resolve("@flowajs/prompts/generic")),
59
59
  );
@@ -35,7 +35,7 @@ imports as load-bearing and the rest as something to replace.
35
35
 
36
36
  | Method | Path | Behaviour |
37
37
  |---|---|---|
38
- | `POST` | `/runs` | Body `{ variant_id, gene, hgvs_c }`. Spawns the pipeline as an `asyncio` task and returns `{ run_id, started_at, status }` immediately. 409 if a run is already in flight for the variant; 429 at the concurrency cap. |
38
+ | `POST` | `/runs` | Body `{ variant_id, variant_spec }`, where `variant_spec` is the `flowa.schema.VariantSpec` envelope. Spawns the pipeline as an `asyncio` task and returns `{ run_id, started_at, status }` immediately. 409 if a run is already in flight for the variant; 429 at the concurrency cap. |
39
39
  | `GET` | `/runs/active?variant_id=X` | Most recent run for `variant_id` as `{ run_id, started_at, status }`. 404 if none. `status` is `running` while in flight; `success` / `error` once terminal. |
40
40
  | `POST` | `/resolve-citations` | Body `{ citations: [{ doi, quotes[] }] }`. Builds fsspec-based PDF and Markdown loaders rooted at `DEMO_DATA_DIR/papers/{encoded_doi}/` and calls `flowa.resolve.resolve_citations(...)` synchronously. Returns `{ resolved: { doi: { quote: HighlightBbox[] } }, errors: { doi: string } }`. DOIs whose source PDF or markdown can't be loaded land in `errors`; quotes the aligner searches for but can't locate land as empty arrays in `resolved`. |
41
41
  | `GET` | `/health` | `{ "status": "ok" }`. |
@@ -51,7 +51,7 @@ directly by Next.js — there is no `/runs/{id}/progress` endpoint here.
51
51
  | `DEMO_GATEWAY_PORT` | `7702` | Listening port. |
52
52
  | `DEMO_MAX_CONCURRENT_RUNS` | `3` | Hard cap on concurrent pipeline tasks (429 on overflow). |
53
53
  | `LOG_LEVEL` | `INFO` | Python root logger level. |
54
- | `FLOWA_*` | — | Required: `FLOWA_STORAGE_BASE`, `FLOWA_EXTRACTION_MODEL__NAME`, `FLOWA_CONVERT_MODEL__NAME`, etc. The demo's `start.ts` translates `LLM_MODEL` and `BEDROCK_INFERENCE_PROFILE` from the demo's `.env` into the corresponding `FLOWA_*` keys. |
54
+ | `FLOWA_*` | — | Required: `FLOWA_STORAGE_BASE`, `FLOWA_CONVERSION_MODEL__NAME`, `FLOWA_EXTRACTION_MODEL__NAME`, `FLOWA_AGGREGATION_MODEL__NAME`, etc. The demo's `start.ts` translates `LLM_MODEL` and `BEDROCK_INFERENCE_PROFILE` from the demo's `.env` into the corresponding `FLOWA_*` keys. |
55
55
 
56
56
  ## Standalone
57
57
 
@@ -30,8 +30,9 @@ def make_flowa_settings(storage_base: Path) -> FlowaSettings:
30
30
  the real pipeline in tests, so the model fields are placeholders."""
31
31
  return FlowaSettings.model_construct(
32
32
  flowa_storage_base=str(storage_base),
33
- flowa_convert_model=ModelConfig(name='stub:test'),
33
+ flowa_conversion_model=ModelConfig(name='stub:test'),
34
34
  flowa_extraction_model=ModelConfig(name='stub:test'),
35
+ flowa_aggregation_model=ModelConfig(name='stub:test'),
35
36
  flowa_prompt_set='generic',
36
37
  flowa_log_level='INFO',
37
38
  mastermind_api_token=None,
@@ -130,7 +130,7 @@ wheels = [
130
130
 
131
131
  [[package]]
132
132
  name = "anthropic"
133
- version = "0.100.0"
133
+ version = "0.105.2"
134
134
  source = { registry = "https://pypi.org/simple" }
135
135
  dependencies = [
136
136
  { name = "anyio" },
@@ -142,9 +142,9 @@ dependencies = [
142
142
  { name = "sniffio" },
143
143
  { name = "typing-extensions" },
144
144
  ]
145
- sdist = { url = "https://files.pythonhosted.org/packages/9c/2d/24caf0ff727cba2ed863925017c8f93463a2ea6224a0efe5626e672bc3d2/anthropic-0.100.0.tar.gz", hash = "sha256:650dee9e023afb16395939ee4104bbc21f966b380210119fb91122c12099c79a", size = 758255, upload-time = "2026-05-06T15:07:13.578Z" }
145
+ sdist = { url = "https://files.pythonhosted.org/packages/46/46/47581b8c689c743ceabf6a0f9ff48472160900ce802d26c0fb50423997b3/anthropic-0.105.2.tar.gz", hash = "sha256:0e26b90841c2dced7cc6e98d21d5517d0be33f1876b8e779f478202e28bcaa07", size = 853789, upload-time = "2026-05-29T00:21:14.104Z" }
146
146
  wheels = [
147
- { url = "https://files.pythonhosted.org/packages/5d/a0/c775c59ab9445ecabb57ef3d5c24027de060139189a9e312ef9ef889a665/anthropic-0.100.0-py3-none-any.whl", hash = "sha256:1c15769efa15d8fd5c1ebf900e25c57e3ee540f8554a29aa56e4edefffe2951d", size = 753596, upload-time = "2026-05-06T15:07:12.106Z" },
147
+ { url = "https://files.pythonhosted.org/packages/83/75/be0c357e33a5a56c8f9db5b4212f886138d2bf59c0952d858f6b75d710ef/anthropic-0.105.2-py3-none-any.whl", hash = "sha256:e53ed5f6bf36fb1ecb9b25d8634cfd30e02fab9fb3374a0c2d5c585874757230", size = 837507, upload-time = "2026-05-29T00:21:15.528Z" },
148
148
  ]
149
149
 
150
150
  [[package]]
@@ -495,7 +495,7 @@ wheels = [
495
495
 
496
496
  [[package]]
497
497
  name = "flowapy"
498
- version = "0.4.0"
498
+ version = "0.5.0"
499
499
  source = { editable = "../../" }
500
500
  dependencies = [
501
501
  { name = "anchorite" },
@@ -541,7 +541,7 @@ requires-dist = [
541
541
  { name = "jinja2" },
542
542
  { name = "logfire" },
543
543
  { name = "markitdown", extras = ["docx", "xls", "xlsx"], specifier = ">=0.1.5" },
544
- { name = "pydantic-ai-slim", extras = ["anthropic"], marker = "extra == 'anthropic'", specifier = ">=1.101.0,<2" },
544
+ { name = "pydantic-ai-slim", extras = ["anthropic"], marker = "extra == 'anthropic'", specifier = ">=1.106.0,<2" },
545
545
  { name = "pydantic-ai-slim", extras = ["bedrock"], marker = "extra == 'bedrock'", specifier = ">=1.101.0,<2" },
546
546
  { name = "pydantic-ai-slim", extras = ["google"], marker = "extra == 'google'", specifier = ">=1.101.0,<2" },
547
547
  { name = "pydantic-ai-slim", extras = ["openai"], marker = "extra == 'openai'", specifier = ">=1.101.0,<2" },
@@ -561,6 +561,7 @@ dev = [
561
561
  { name = "mypy" },
562
562
  { name = "pre-commit", specifier = ">=4.5.1" },
563
563
  { name = "pytest" },
564
+ { name = "pytest-asyncio" },
564
565
  { name = "ruff" },
565
566
  { name = "types-defusedxml" },
566
567
  { name = "types-openpyxl", specifier = ">=3.1.5.20260518" },
@@ -1043,7 +1044,7 @@ wheels = [
1043
1044
 
1044
1045
  [[package]]
1045
1046
  name = "logfire"
1046
- version = "4.34.0"
1047
+ version = "4.35.0"
1047
1048
  source = { registry = "https://pypi.org/simple" }
1048
1049
  dependencies = [
1049
1050
  { name = "executing" },
@@ -1054,9 +1055,9 @@ dependencies = [
1054
1055
  { name = "rich" },
1055
1056
  { name = "typing-extensions" },
1056
1057
  ]
1057
- sdist = { url = "https://files.pythonhosted.org/packages/81/a6/6cbd7064d7ab120fbdd72ca1a218b3fa3343a5f1f0733fcfa34d43333aaf/logfire-4.34.0.tar.gz", hash = "sha256:d88bb04f26a5ae0064d36eeb0fca5413599f0e2d068d629bcab25993ff405e25", size = 1144711, upload-time = "2026-05-26T18:09:51.81Z" }
1058
+ sdist = { url = "https://files.pythonhosted.org/packages/7c/20/9508c92ad4ec2ed4ad63a20d72f08427c24117273541ec97c630332855c3/logfire-4.35.0.tar.gz", hash = "sha256:6542aa4ac5e2d2369587deab57a0d1bb9cf6da49634c8cd9c5dbd7c7581f3d51", size = 1148150, upload-time = "2026-06-02T14:55:56.792Z" }
1058
1059
  wheels = [
1059
- { url = "https://files.pythonhosted.org/packages/de/04/a386debccf1e91575dda55fa07b96f8309fc544833d7eec24b69869278f9/logfire-4.34.0-py3-none-any.whl", hash = "sha256:b9d9fc71aec184b28c29a9a9e280c954a3ea52c399f1d7b95ce82bff6b177364", size = 344385, upload-time = "2026-05-26T18:09:48.436Z" },
1060
+ { url = "https://files.pythonhosted.org/packages/77/37/a3631d0b7e4fcb19df4705c7c7e17164c5446e144f034723cf6277749973/logfire-4.35.0-py3-none-any.whl", hash = "sha256:9ae5c3f2dd81144ccf1ec6dba1a5de84aff5b2e2b8dd2190e53e87e47bc63711", size = 347012, upload-time = "2026-06-02T14:55:53.244Z" },
1060
1061
  ]
1061
1062
 
1062
1063
  [[package]]
@@ -1697,7 +1698,7 @@ wheels = [
1697
1698
 
1698
1699
  [[package]]
1699
1700
  name = "pydantic-ai-slim"
1700
- version = "1.101.0"
1701
+ version = "1.106.0"
1701
1702
  source = { registry = "https://pypi.org/simple" }
1702
1703
  dependencies = [
1703
1704
  { name = "genai-prices" },
@@ -1708,9 +1709,9 @@ dependencies = [
1708
1709
  { name = "pydantic-graph" },
1709
1710
  { name = "typing-inspection" },
1710
1711
  ]
1711
- sdist = { url = "https://files.pythonhosted.org/packages/dc/a3/1271c2df8bf5579cff69e2dc0af03a0f3990ce866ae9ff0baff524b77a19/pydantic_ai_slim-1.101.0.tar.gz", hash = "sha256:11b3f61a4748f0b76b00fb91f1acbd9eb0096dca39bf82b93d071dbf7c8a19c2", size = 737068, upload-time = "2026-05-22T05:01:25.902Z" }
1712
+ sdist = { url = "https://files.pythonhosted.org/packages/2b/45/2afc9100a7c370d8ac37bdfccfb54f46fc99da3bdce63f07c32c37807ebc/pydantic_ai_slim-1.106.0.tar.gz", hash = "sha256:e265598c8ee0e903ebb02d0494bb232be4cc8aa463ba1a55aa743cf34135dacf", size = 773504, upload-time = "2026-06-05T01:29:09.129Z" }
1712
1713
  wheels = [
1713
- { url = "https://files.pythonhosted.org/packages/cc/a3/1b3ac32ba0932cc3e2e3045d50044fe3b88bbb77d6a8a48303088217ef39/pydantic_ai_slim-1.101.0-py3-none-any.whl", hash = "sha256:919a39da29f0315ad093446e00ee3252d4c90e42fee360f24e2ac636d5ff089f", size = 916632, upload-time = "2026-05-22T05:01:18.853Z" },
1714
+ { url = "https://files.pythonhosted.org/packages/72/d9/a2785c576e3519a72a5bbc0e12027c542b265ef6eea1aa72b9c440ac2531/pydantic_ai_slim-1.106.0-py3-none-any.whl", hash = "sha256:0dd7a99ea3fa89b490098406c2240ba7d75c327eea094c3fd057dd7aa9f3d163", size = 957617, upload-time = "2026-06-05T01:28:59.979Z" },
1714
1715
  ]
1715
1716
 
1716
1717
  [package.optional-dependencies]
@@ -1756,7 +1757,7 @@ wheels = [
1756
1757
 
1757
1758
  [[package]]
1758
1759
  name = "pydantic-graph"
1759
- version = "1.101.0"
1760
+ version = "1.106.0"
1760
1761
  source = { registry = "https://pypi.org/simple" }
1761
1762
  dependencies = [
1762
1763
  { name = "httpx" },
@@ -1764,9 +1765,9 @@ dependencies = [
1764
1765
  { name = "pydantic" },
1765
1766
  { name = "typing-inspection" },
1766
1767
  ]
1767
- sdist = { url = "https://files.pythonhosted.org/packages/8f/5d/c432cb178ff93a07dca7d60aab271b57c7fbfaf1756a59ad22bc109a62be/pydantic_graph-1.101.0.tar.gz", hash = "sha256:9969047e69828294ec69ffdd3747e5e747198c497df36ef791e0b58ba8f723ca", size = 62559, upload-time = "2026-05-22T05:01:29.128Z" }
1768
+ sdist = { url = "https://files.pythonhosted.org/packages/42/9b/dd6826cf21eedd96a7482302be51ba6087095acbe828362135de2a505092/pydantic_graph-1.106.0.tar.gz", hash = "sha256:55afa33df4f699ed5c1185f81b6a06e2161958f1aa0c20742b2dae5745e84cce", size = 62567, upload-time = "2026-06-05T01:29:11.833Z" }
1768
1769
  wheels = [
1769
- { url = "https://files.pythonhosted.org/packages/3d/56/d1637b48dcb326eaa19d7e7b48d7d585a3691d044635b68078fdc60c561c/pydantic_graph-1.101.0-py3-none-any.whl", hash = "sha256:ad017f75d89d4e3c38383b7ec3532905869980f890a2689cacafa5b8e13b9e8a", size = 80100, upload-time = "2026-05-22T05:01:21.833Z" },
1770
+ { url = "https://files.pythonhosted.org/packages/9b/e9/0058f0b98f5992e715a0a50128f6c3cc7946cc242d471f6e850efdf03f0c/pydantic_graph-1.106.0-py3-none-any.whl", hash = "sha256:e6bb61aef0fdb49185a81142d311f94fc3315329345471d12cab85ab5845221f", size = 80099, upload-time = "2026-06-05T01:29:04.219Z" },
1770
1771
  ]
1771
1772
 
1772
1773
  [[package]]
@@ -1794,11 +1795,11 @@ wheels = [
1794
1795
 
1795
1796
  [[package]]
1796
1797
  name = "pypdf"
1797
- version = "6.12.2"
1798
+ version = "6.13.0"
1798
1799
  source = { registry = "https://pypi.org/simple" }
1799
- sdist = { url = "https://files.pythonhosted.org/packages/0a/6d/20879428577c1e57ecd41b69dc86beabf43db9287ad2e702207f8b48c751/pypdf-6.12.2.tar.gz", hash = "sha256:111669eb6680c04495ae0c113a1476e3bf93a95761d23c7406b591c80a6490b1", size = 6468184, upload-time = "2026-05-26T13:31:26.911Z" }
1800
+ sdist = { url = "https://files.pythonhosted.org/packages/70/79/9fd087fbff8300e5c2a9b2bd0200b75c6ef8c1f9a7a2cfe3df0659aa4025/pypdf-6.13.0.tar.gz", hash = "sha256:558683ec9daf6b91c280c322c84c32f5cc216afd3eaa3a37de5ae88ae0c3b787", size = 6476995, upload-time = "2026-06-05T10:12:05.568Z" }
1800
1801
  wheels = [
1801
- { url = "https://files.pythonhosted.org/packages/9e/44/fee070a16639d9869bb6a7e0f3a1b3946da1d66f32b9260b4d19cb90d7b2/pypdf-6.12.2-py3-none-any.whl", hash = "sha256:67b2699357a1f3f4c945940ea80826349ee507c9e2577724a14b4941982c104d", size = 343865, upload-time = "2026-05-26T13:31:25.068Z" },
1802
+ { url = "https://files.pythonhosted.org/packages/9d/70/16942ec95d32187d8679ce8419cee2d5c0dbe90fa3ac1b307daea4c86da9/pypdf-6.13.0-py3-none-any.whl", hash = "sha256:de1294ae49d6956edb4e5c41527fb9e8716ddd2b120f2185c68aab784d4ffe60", size = 345958, upload-time = "2026-06-05T10:12:03.453Z" },
1802
1803
  ]
1803
1804
 
1804
1805
  [[package]]
@@ -2002,27 +2003,27 @@ wheels = [
2002
2003
 
2003
2004
  [[package]]
2004
2005
  name = "ruff"
2005
- version = "0.15.15"
2006
- source = { registry = "https://pypi.org/simple" }
2007
- sdist = { url = "https://files.pythonhosted.org/packages/84/6f/a76f7d96e5c962f5b69cee865e49c15c1116897c01990faa8a57edb62e7f/ruff-0.15.15.tar.gz", hash = "sha256:b8dff018130b46d8e5bf0f926ef6b60cf871d6d5ae45fc9334e09632daa741d6", size = 4706985, upload-time = "2026-05-28T14:16:57.784Z" }
2008
- wheels = [
2009
- { url = "https://files.pythonhosted.org/packages/fa/9d/3a45c05b8ab04b4705989de70a79008e27c8003296a0feaee9edc18dd7e9/ruff-0.15.15-py3-none-linux_armv6l.whl", hash = "sha256:cf93e5388f412e1b108b1f8b34a6e036b70fe8aff89393befad96fe48670311b", size = 10710652, upload-time = "2026-05-28T14:16:06.701Z" },
2010
- { url = "https://files.pythonhosted.org/packages/05/66/da974431624bf3b49f6ee1f9543c02d929ff1cba78b0d5a79c38cf21f744/ruff-0.15.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac5a646d1f6a7dadd5d50842dae2c1f9862ac887ef5d1b1375e02def791fde6e", size = 11096615, upload-time = "2026-05-28T14:16:23.313Z" },
2011
- { url = "https://files.pythonhosted.org/packages/8c/09/7443452e5d290230a712103f2fdceeef7184f3ec99a2bd01c8be78aaceb5/ruff-0.15.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:77d955a431430c66f72dd94e379ad38a16daea3d25094872ac4edf9e797be530", size = 10436683, upload-time = "2026-05-28T14:16:40.974Z" },
2012
- { url = "https://files.pythonhosted.org/packages/53/01/d330c26a57fa4f3943a14424904027428315b700fe4d14a84bb123a649e5/ruff-0.15.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7614ee79c69788cf6cedd568069ade9cecc22a1ad20494efe8d0c9ebb4b622d4", size = 10769064, upload-time = "2026-05-28T14:16:28.905Z" },
2013
- { url = "https://files.pythonhosted.org/packages/1d/85/cc8770f8bdff541b1da8392d1634141fe4a0e3f4ee596605959b7906c27f/ruff-0.15.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cdb1679e06a1f6b47bc384714ae96f6e2fb65ca441eb78c43d2ca554176ce1f", size = 10511987, upload-time = "2026-05-28T14:16:43.732Z" },
2014
- { url = "https://files.pythonhosted.org/packages/7c/29/8c190c1472b63013583ba391f3342036e02010544c1270455ed8e519bdf3/ruff-0.15.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2728b93d7b23a603ea2c0ac6eb73d760bd38ec9de35f35fb41e18f7a3fee7622", size = 11275100, upload-time = "2026-05-28T14:16:55.244Z" },
2015
- { url = "https://files.pythonhosted.org/packages/9f/6b/7e145ce2cc8e63d6834eca03d83a0e18d121def5c69f91b4cf4011ed4879/ruff-0.15.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be582fcc0db438902c7792b08d6ddf6c9b9e21addaa10092c2c741cfb09e5a45", size = 12176903, upload-time = "2026-05-28T14:16:14.368Z" },
2016
- { url = "https://files.pythonhosted.org/packages/80/a3/d5974637f68e451f7fadf015cf3101d1cd7d8ba5027cffe0b9e3826ebe6b/ruff-0.15.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7aa77465b8ecaf1a27bea098d696f7fed5e1eccbd10b321b682d6de586ae5627", size = 11404550, upload-time = "2026-05-28T14:16:20.138Z" },
2017
- { url = "https://files.pythonhosted.org/packages/fe/1c/e6e5e568f22be4fb05d6244234aba384c06b451252453b821e1a529263cf/ruff-0.15.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48decfa11d740de4889de623be1463308346312f2409a56e24aa280c86162dc4", size = 11382027, upload-time = "2026-05-28T14:16:46.615Z" },
2018
- { url = "https://files.pythonhosted.org/packages/1d/01/170921b49fcd2e8858825593f91cf7146c3e40a5c3e6df763e4bb0484dde/ruff-0.15.15-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a5015088452ca0081387063649ec67f06d3d1d6b8b936a1f836b5e9657ecd48c", size = 11366041, upload-time = "2026-05-28T14:16:26.247Z" },
2019
- { url = "https://files.pythonhosted.org/packages/87/54/a7bad711d7de93254e15e06a4c375b89a03d18de45d3e5dcc86a4472fb1a/ruff-0.15.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5294aab6356c81600fcdea3a62bb1b924dfd5e91767c12318d3f68f86af57cd", size = 10741795, upload-time = "2026-05-28T14:16:17.11Z" },
2020
- { url = "https://files.pythonhosted.org/packages/c9/31/38c075963668f8b41c6914ee0f6f318727fbe30ab9145cb29e6df464c5fa/ruff-0.15.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db5bd4d802415cca656dc1616070b725952d6ae95eb5d4831e49fbd94a38f75f", size = 10511117, upload-time = "2026-05-28T14:16:31.767Z" },
2021
- { url = "https://files.pythonhosted.org/packages/9d/96/6ff689e1f7e375d1d97075eca022f74c2bab59554a432fe4d2e6f091986a/ruff-0.15.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:587a6278ed42059191c1a466e490bd7930fb50bd2e255398bc29616c895a61cb", size = 10994867, upload-time = "2026-05-28T14:16:35.149Z" },
2022
- { url = "https://files.pythonhosted.org/packages/c3/c2/5dce0ab9f92a8d534fa62b9bf9caca3eddb8c1a81b616f5e195ada4f0d6e/ruff-0.15.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:df0c1c084f5f4be9812f61518a45c440d3c30d69ce4bf6c5270e66d38338f02a", size = 11482101, upload-time = "2026-05-28T14:16:49.598Z" },
2023
- { url = "https://files.pythonhosted.org/packages/b1/c0/1003b60edd697c649faf61f1a34094b1abb38fb3d1181e3f895781250a08/ruff-0.15.15-py3-none-win32.whl", hash = "sha256:29428ea79694afbe756d45fd59b36f22b6b020dc0443cf7de0173046236964b9", size = 10716774, upload-time = "2026-05-28T14:16:52.337Z" },
2024
- { url = "https://files.pythonhosted.org/packages/02/a8/1269eddd6945a06c23f055ef7848886e37cf9d6a8bebb386a3115f01470c/ruff-0.15.15-py3-none-win_amd64.whl", hash = "sha256:8df0323902e15e24bc4bf246da830573d3cf3352bd0b9a164eab335d111ff4a4", size = 11868463, upload-time = "2026-05-28T14:16:11.333Z" },
2025
- { url = "https://files.pythonhosted.org/packages/4e/b2/920464c907b191e37469d477a1aa8bc048b8f36c4c1610dfa4ab87b39e18/ruff-0.15.15-py3-none-win_arm64.whl", hash = "sha256:3c8ceca6792f38196b8f589bc92eccd03eef286602da92e5dc05cc42ef6441b7", size = 11138498, upload-time = "2026-05-28T14:16:38.425Z" },
2006
+ version = "0.15.16"
2007
+ source = { registry = "https://pypi.org/simple" }
2008
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/5f7ec371001337d8fa61701c186ff8b613ecac1651848c5950f4c4d5f2e9/ruff-0.15.16.tar.gz", hash = "sha256:d05e78d38c78caf020b03789e25106c93017db5a0cb6e2819885018c61343b78", size = 4714267, upload-time = "2026-06-04T16:33:09.974Z" }
2009
+ wheels = [
2010
+ { url = "https://files.pythonhosted.org/packages/0c/42/53ef1c3953f157956db9bf7861e3bc50b9b887ce93300aa48cdba8336fe6/ruff-0.15.16-py3-none-linux_armv6l.whl", hash = "sha256:6ac3c0b3969cc6cf6b158c4e2f8f682acb58e7d700d8a44b65ecdc72d66ab0b2", size = 10709025, upload-time = "2026-06-04T16:32:51.935Z" },
2011
+ { url = "https://files.pythonhosted.org/packages/93/9a/a79159346f19134a956607754e57d8d128f7a4c00f4ad2f7514d224c172c/ruff-0.15.16-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:197c207ed75ffba54a0dec23db4aa939a27a3053073e085e0042433cbdc58e4a", size = 11063550, upload-time = "2026-06-04T16:32:42.24Z" },
2012
+ { url = "https://files.pythonhosted.org/packages/bc/72/3ce2ac000a5299ec238e01f51397b3b653c93b077d9b1bfe8715bb895f20/ruff-0.15.16-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a39fec45ab316cc23e7558f23fea4a70403ddb5648ea9a4a3854a16973d0071", size = 10421345, upload-time = "2026-06-04T16:32:37.251Z" },
2013
+ { url = "https://files.pythonhosted.org/packages/b0/c2/cc7fad3ec9169373f5b6a18f1917b91080feec40c3f9658334a1d28e2f03/ruff-0.15.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba93191d79003116b95128c9d306e045200fdbd0bccb782b110f3cd1d4abc5cf", size = 10757217, upload-time = "2026-06-04T16:32:54.722Z" },
2014
+ { url = "https://files.pythonhosted.org/packages/69/d2/3474009eaa0a65b31fa7152a2fad5e2f050c640ceb1e6b02ee6922e94c82/ruff-0.15.16-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6ee4b90520630120ef032aa5cc10db483852dff950e78b1d717e2993a61ac8d", size = 10507035, upload-time = "2026-06-04T16:33:05.343Z" },
2015
+ { url = "https://files.pythonhosted.org/packages/ca/81/b7ae6ccbd11f0c8dc3d5d67fc4be9b57ff57ca86ba56152021378e1277f2/ruff-0.15.16-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e4215bc938bc3c8215c1472c1aa437e310fee20cd427335fec9d7e609563628", size = 11255291, upload-time = "2026-06-04T16:32:49.49Z" },
2016
+ { url = "https://files.pythonhosted.org/packages/d9/e1/46e526f1a7cc90857ce6ddf25fbb77eb6568651ac38d71b033af07076dd5/ruff-0.15.16-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c8d26be963b090f10e29abc8b3e74a2a321f6fa34e02424e30b5af89350ecbb", size = 12124922, upload-time = "2026-06-04T16:33:07.821Z" },
2017
+ { url = "https://files.pythonhosted.org/packages/1a/da/5c791b088b596b24d0deb967fa28ae02ad751a140c0b9ea81c5ab915d6c0/ruff-0.15.16-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f198cf4123602a2280ed46c307bcbafe41758d6fee5b456b6b6058ca1514b3b4", size = 11332186, upload-time = "2026-06-04T16:33:02.971Z" },
2018
+ { url = "https://files.pythonhosted.org/packages/72/11/5da87abe20047c8962361473923ebb2f62b595250126aadfad8c20649c1e/ruff-0.15.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb27515fa6240fb586ae82b901a59e67d24acff86f2190b433dc542fe0435aeb", size = 11373541, upload-time = "2026-06-04T16:32:47.007Z" },
2019
+ { url = "https://files.pythonhosted.org/packages/fe/2a/8554754c23a854ae3fd6b507e36ad61ddb121e298c6d5d617dec94ed0f14/ruff-0.15.16-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a267c46ba1593fc26b8eecbea050b39d40c0b6bb7781ee11c90a02cd10032951", size = 11353014, upload-time = "2026-06-04T16:32:34.795Z" },
2020
+ { url = "https://files.pythonhosted.org/packages/62/25/62ea41529ec89f742ea3fed9cb1059c72877ec7cf9b9e99ac9cf3294d1d9/ruff-0.15.16-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:528c68f39a91498a8d50e91ff5985df3d105782bab49cc378e73ac26bff083e8", size = 10737467, upload-time = "2026-06-04T16:32:26.348Z" },
2021
+ { url = "https://files.pythonhosted.org/packages/90/17/334d3ad9de4d40f9dd58fdd09e35ce64553bb501e2f19a839e2fb6be14fc/ruff-0.15.16-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7ed55c58950df60589a9a7a5d2f8fa5f54ebd287163be805adfe6ee95a9de123", size = 10521910, upload-time = "2026-06-04T16:32:32.54Z" },
2022
+ { url = "https://files.pythonhosted.org/packages/4d/bd/3ac7c6ae77a885c1004b3dda2446ea401768d24f851c14b4ad4b24f6639c/ruff-0.15.16-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d482feaf51512b50f9790ceb417a56a61dd1e9d9bf967662b9ed27c01b34f53a", size = 10979190, upload-time = "2026-06-04T16:32:57.492Z" },
2023
+ { url = "https://files.pythonhosted.org/packages/33/d7/609546e6a413c3f216fbf2a50c928f97c80939154f6a0503114094a86191/ruff-0.15.16-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1e15bc8c94513dae2a40cc9ef07c94fdd4ecc9e29dabebeebe170f952322c9e3", size = 11477014, upload-time = "2026-06-04T16:32:44.687Z" },
2024
+ { url = "https://files.pythonhosted.org/packages/74/0d/f2cd247ad32633a5c36e97141a2c21b11c6279f7957bc2ff360b1e08fddd/ruff-0.15.16-py3-none-win32.whl", hash = "sha256:580378f7bd4aa25f72e74aa54948a9622f142b1e509521dd10902e886681cc1e", size = 10735541, upload-time = "2026-06-04T16:32:30.145Z" },
2025
+ { url = "https://files.pythonhosted.org/packages/8b/9e/02e845ef151b1dee585e55c4739f8e1734ae1d9f1221dff65761c162208b/ruff-0.15.16-py3-none-win_amd64.whl", hash = "sha256:408256017284eddf98fff77b29aa4fb30f586042d535b2d9befc6512f400aaec", size = 11843403, upload-time = "2026-06-04T16:32:39.76Z" },
2026
+ { url = "https://files.pythonhosted.org/packages/15/19/016553f86f207450aebebc2b2b5088d086b901cc8186c02ac4284db3bd88/ruff-0.15.16-py3-none-win_arm64.whl", hash = "sha256:8cd61783afb39638a7133ef0d2dfb1e91277593962f81b5a8423eb0b888a6121", size = 11134555, upload-time = "2026-06-04T16:33:00.136Z" },
2026
2027
  ]
2027
2028
 
2028
2029
  [[package]]
@@ -2185,7 +2186,7 @@ wheels = [
2185
2186
 
2186
2187
  [[package]]
2187
2188
  name = "typer"
2188
- version = "0.26.2"
2189
+ version = "0.26.7"
2189
2190
  source = { registry = "https://pypi.org/simple" }
2190
2191
  dependencies = [
2191
2192
  { name = "annotated-doc" },
@@ -2193,9 +2194,9 @@ dependencies = [
2193
2194
  { name = "rich" },
2194
2195
  { name = "shellingham" },
2195
2196
  ]
2196
- sdist = { url = "https://files.pythonhosted.org/packages/67/a5/756f2e6bc81a7dd79aa3c625dd01b74cabc4516628cace2caaec09ca6ff2/typer-0.26.2.tar.gz", hash = "sha256:9b4f19e08fcc9427a822d1ef467b1fe76737a2f65c7926bdeba2337d73569b68", size = 198991, upload-time = "2026-05-27T10:41:39.166Z" }
2197
+ sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" }
2197
2198
  wheels = [
2198
- { url = "https://files.pythonhosted.org/packages/8b/a5/6ffd702beda8798b2b82ff70805ed4a66d963557e43a5d1823ab456251a4/typer-0.26.2-py3-none-any.whl", hash = "sha256:39beff72ffbb31978a5b545f677d57edb97c6f980f433b38556deb0af25f094d", size = 123123, upload-time = "2026-05-27T10:41:40.504Z" },
2199
+ { url = "https://files.pythonhosted.org/packages/24/25/2201973529af2c954de0bb725323c3aaed6d7f0ceee8f550dec9185df013/typer-0.26.7-py3-none-any.whl", hash = "sha256:5c87cfbc5d34491c5346ebf49c23e18d56ccb863268d3a8d592b26087c2f5e58", size = 122456, upload-time = "2026-06-03T07:18:05.732Z" },
2199
2200
  ]
2200
2201
 
2201
2202
  [[package]]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowajs/chat-service",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Stateless service that orchestrates LLM conversations over flowa artifacts.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -62,7 +62,7 @@
62
62
  "@opentelemetry/sdk-metrics": "2.7.1",
63
63
  "@opentelemetry/sdk-node": "0.218.0",
64
64
  "@opentelemetry/sdk-trace-base": "2.7.1",
65
- "ai": "6.0.191",
65
+ "ai": "6.0.196",
66
66
  "aws4fetch": "1.0.20",
67
67
  "hono": "4.12.23",
68
68
  "jose": "6.2.3",
@@ -107,18 +107,18 @@
107
107
  }
108
108
  },
109
109
  "devDependencies": {
110
- "@ai-sdk/amazon-bedrock": "4.0.110",
111
- "@ai-sdk/anthropic": "3.0.80",
110
+ "@ai-sdk/amazon-bedrock": "4.0.112",
111
+ "@ai-sdk/anthropic": "3.0.81",
112
112
  "@ai-sdk/google": "3.0.80",
113
- "@ai-sdk/google-vertex": "4.0.139",
114
- "@ai-sdk/openai": "3.0.66",
115
- "@aws-sdk/client-s3": "3.1055.0",
116
- "@aws-sdk/credential-providers": "3.1055.0",
113
+ "@ai-sdk/google-vertex": "4.0.142",
114
+ "@ai-sdk/openai": "3.0.67",
115
+ "@aws-sdk/client-s3": "3.1061.0",
116
+ "@aws-sdk/credential-providers": "3.1061.0",
117
117
  "@google-cloud/storage": "7.19.0",
118
118
  "@types/node": "25.9.1",
119
119
  "@types/nunjucks": "3.2.6",
120
120
  "typescript": "5.7.3",
121
- "vite": "8.0.14",
122
- "vitest": "4.1.7"
121
+ "vite": "8.0.16",
122
+ "vitest": "4.1.8"
123
123
  }
124
124
  }