flowapy 0.4.2__tar.gz → 0.4.3__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 (347) hide show
  1. {flowapy-0.4.2 → flowapy-0.4.3}/PKG-INFO +18 -6
  2. {flowapy-0.4.2 → flowapy-0.4.3}/README.md +17 -5
  3. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/README.md +2 -1
  4. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/README.md +1 -1
  5. {flowapy-0.4.2 → flowapy-0.4.3}/pyproject.toml +1 -1
  6. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/content_validation.py +28 -4
  7. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_content_validation.py +21 -0
  8. {flowapy-0.4.2 → flowapy-0.4.3}/uv.lock +1 -1
  9. {flowapy-0.4.2 → flowapy-0.4.3}/.github/CODEOWNERS +0 -0
  10. {flowapy-0.4.2 → flowapy-0.4.3}/.github/dependabot.yml +0 -0
  11. {flowapy-0.4.2 → flowapy-0.4.3}/.github/workflows/dependabot-auto-merge.yml +0 -0
  12. {flowapy-0.4.2 → flowapy-0.4.3}/.github/workflows/lint.yaml +0 -0
  13. {flowapy-0.4.2 → flowapy-0.4.3}/.github/workflows/release-chat-service.yaml +0 -0
  14. {flowapy-0.4.2 → flowapy-0.4.3}/.github/workflows/release-flowapy.yaml +0 -0
  15. {flowapy-0.4.2 → flowapy-0.4.3}/.github/workflows/release-react-viewer.yaml +0 -0
  16. {flowapy-0.4.2 → flowapy-0.4.3}/.gitignore +0 -0
  17. {flowapy-0.4.2 → flowapy-0.4.3}/.markdownlint.json +0 -0
  18. {flowapy-0.4.2 → flowapy-0.4.3}/.nvmrc +0 -0
  19. {flowapy-0.4.2 → flowapy-0.4.3}/.pre-commit-config.yaml +0 -0
  20. {flowapy-0.4.2 → flowapy-0.4.3}/.prettierignore +0 -0
  21. {flowapy-0.4.2 → flowapy-0.4.3}/Dockerfile +0 -0
  22. {flowapy-0.4.2 → flowapy-0.4.3}/LICENSE +0 -0
  23. {flowapy-0.4.2 → flowapy-0.4.3}/docs/images/viewer.png +0 -0
  24. {flowapy-0.4.2 → flowapy-0.4.3}/examples/.gitkeep +0 -0
  25. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/.env.example +0 -0
  26. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/.gitignore +0 -0
  27. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/LICENSES.md +0 -0
  28. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/aggregation.json +0 -0
  29. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1002%2Fhumu.23878.json +0 -0
  30. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1016%2Fj.ymgmr.2024.101163.json +0 -0
  31. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1038%2Fs41598-022-25914-8.json +0 -0
  32. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs12881-019-0878-8.json +0 -0
  33. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-021-01817-1.json +0 -0
  34. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-021-02146-z.json +0 -0
  35. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13023-023-02848-6.json +0 -0
  36. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.1186%2Fs13052-019-0692-0.json +0 -0
  37. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffcvm.2022.1061384.json +0 -0
  38. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffcvm.2023.1261172.json +0 -0
  39. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffimmu.2024.1336599.json +0 -0
  40. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffped.2021.729824.json +0 -0
  41. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3389%2Ffphar.2022.903488.json +0 -0
  42. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3390%2Fijns11010016.json +0 -0
  43. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/extractions/10.3390%2Fijns6020031.json +0 -0
  44. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/query.json +0 -0
  45. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/runs/cfc0186a7b7e46eb802a516b86ec207f/progress.jsonl +0 -0
  46. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/assessments/NM_000152_5-c_1935C_A/variant_details.json +0 -0
  47. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fajmg.a.61481/metadata.json +0 -0
  48. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/main.md +0 -0
  49. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/main.pdf +0 -0
  50. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/merged.md +0 -0
  51. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/merged.pdf +0 -0
  52. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/metadata.json +0 -0
  53. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/pdf_index.pkl.zst +0 -0
  54. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/supplements/000_HUMU-40-2146-s001.pdf +0 -0
  55. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1002%2Fhumu.23878/supplements/000_HUMU-40-2146-s001.pdf.md +0 -0
  56. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ejmg.2020.103997/metadata.json +0 -0
  57. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.nmd.2022.02.002/metadata.json +0 -0
  58. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.tjog.2022.07.008/metadata.json +0 -0
  59. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/main.md +0 -0
  60. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/main.pdf +0 -0
  61. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/merged.md +0 -0
  62. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/metadata.json +0 -0
  63. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/pdf_index.pkl.zst +0 -0
  64. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1016%2Fj.ymgmr.2024.101163/supplements/000_mmc1.docx +0 -0
  65. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/main.md +0 -0
  66. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/main.pdf +0 -0
  67. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/merged.md +0 -0
  68. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/metadata.json +0 -0
  69. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/pdf_index.pkl.zst +0 -0
  70. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1038%2Fs41598-022-25914-8/supplements/000_41598_2022_25914_MOESM1_ESM.docx +0 -0
  71. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1093%2Fhmg%2Fddz218/metadata.json +0 -0
  72. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1136%2Fjmg-2022-108675/metadata.json +0 -0
  73. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/main.md +0 -0
  74. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/main.pdf +0 -0
  75. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/metadata.json +0 -0
  76. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs12881-019-0878-8/pdf_index.pkl.zst +0 -0
  77. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/main.md +0 -0
  78. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/main.pdf +0 -0
  79. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/metadata.json +0 -0
  80. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-01817-1/pdf_index.pkl.zst +0 -0
  81. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/main.md +0 -0
  82. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/main.pdf +0 -0
  83. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/metadata.json +0 -0
  84. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-021-02146-z/pdf_index.pkl.zst +0 -0
  85. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/main.md +0 -0
  86. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/main.pdf +0 -0
  87. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/metadata.json +0 -0
  88. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13023-023-02848-6/pdf_index.pkl.zst +0 -0
  89. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/main.md +0 -0
  90. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/main.pdf +0 -0
  91. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/metadata.json +0 -0
  92. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.1186%2Fs13052-019-0692-0/pdf_index.pkl.zst +0 -0
  93. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/main.md +0 -0
  94. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/main.pdf +0 -0
  95. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/metadata.json +0 -0
  96. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2022.1061384/pdf_index.pkl.zst +0 -0
  97. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/main.md +0 -0
  98. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/main.pdf +0 -0
  99. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/merged.md +0 -0
  100. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/metadata.json +0 -0
  101. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/pdf_index.pkl.zst +0 -0
  102. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffcvm.2023.1261172/supplements/000_Table1.docx +0 -0
  103. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/main.md +0 -0
  104. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/main.pdf +0 -0
  105. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/metadata.json +0 -0
  106. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffimmu.2024.1336599/pdf_index.pkl.zst +0 -0
  107. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/main.md +0 -0
  108. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/main.pdf +0 -0
  109. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/merged.md +0 -0
  110. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/merged.pdf +0 -0
  111. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/metadata.json +0 -0
  112. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/pdf_index.pkl.zst +0 -0
  113. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/supplements/000_Image_1.PDF +0 -0
  114. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffped.2021.729824/supplements/000_Image_1.PDF.md +0 -0
  115. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/main.md +0 -0
  116. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/main.pdf +0 -0
  117. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/metadata.json +0 -0
  118. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3389%2Ffphar.2022.903488/pdf_index.pkl.zst +0 -0
  119. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/main.md +0 -0
  120. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/main.pdf +0 -0
  121. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/metadata.json +0 -0
  122. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns11010016/pdf_index.pkl.zst +0 -0
  123. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/main.md +0 -0
  124. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/main.pdf +0 -0
  125. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/metadata.json +0 -0
  126. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/fixtures/papers/10.3390%2Fijns6020031/pdf_index.pkl.zst +0 -0
  127. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/next-env.d.ts +0 -0
  128. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/next.config.mjs +0 -0
  129. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/package.json +0 -0
  130. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/postcss.config.cjs +0 -0
  131. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/public/favicon.svg +0 -0
  132. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/scripts/chat-service.ts +0 -0
  133. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/scripts/copy-pdfjs-assets.ts +0 -0
  134. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/scripts/exercise-llm.ts +0 -0
  135. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/scripts/start.ts +0 -0
  136. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/components/literature/LiteratureView.tsx +0 -0
  137. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/components/literature/PaperStatusGroup.tsx +0 -0
  138. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/components/literature/ProgressLog.tsx +0 -0
  139. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/db/migrate.ts +0 -0
  140. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/db/schema.sql +0 -0
  141. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/aggregate.ts +0 -0
  142. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/chatSessionClient.ts +0 -0
  143. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/citationResolverClient.ts +0 -0
  144. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/demoConfig.ts +0 -0
  145. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/paperInvalidation.ts +0 -0
  146. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/papers.ts +0 -0
  147. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/progressEvents.ts +0 -0
  148. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/runs.ts +0 -0
  149. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/triageBackendClient.ts +0 -0
  150. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/triageDb.ts +0 -0
  151. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/lib/variantId.ts +0 -0
  152. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/_app.tsx +0 -0
  153. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/aggregate/[variantId]/[category].ts +0 -0
  154. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/edit-drafts/[variantId]/[category]/[version].ts +0 -0
  155. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/edit-drafts/[variantId]/[category]/index.ts +0 -0
  156. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/papers/[doi]/markdown.ts +0 -0
  157. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/papers/[doi]/pdf.ts +0 -0
  158. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/papers/[doi]/supplements.ts +0 -0
  159. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/papers/index.ts +0 -0
  160. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/runs/[variantId]/[runId]/progress.ts +0 -0
  161. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/runs/index.ts +0 -0
  162. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/runs/latest.ts +0 -0
  163. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/triage/claim.ts +0 -0
  164. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/triage/comment.ts +0 -0
  165. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/triage/paper-done.ts +0 -0
  166. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/api/triage/snapshot/[variantId]/[category]/[version].ts +0 -0
  167. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/index.tsx +0 -0
  168. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/variants/[variantId].tsx +0 -0
  169. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/pages/viewer/[variantId]/[category].tsx +0 -0
  170. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/src/styles/globals.css +0 -0
  171. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/tailwind.config.ts +0 -0
  172. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/LiteratureView.test.tsx +0 -0
  173. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/ProgressLog.test.tsx +0 -0
  174. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/aggregate.test.ts +0 -0
  175. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/chat-service.test.ts +0 -0
  176. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/index-page.test.tsx +0 -0
  177. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/paper-invalidation.test.ts +0 -0
  178. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/papers-pdf-upload.test.ts +0 -0
  179. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/papers-route.test.ts +0 -0
  180. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/papers-supplements.test.ts +0 -0
  181. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/papers.test.ts +0 -0
  182. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/progress-route.test.ts +0 -0
  183. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/runs-latest-route.test.ts +0 -0
  184. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/runs-route.test.ts +0 -0
  185. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/runs.test.ts +0 -0
  186. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/setup.ts +0 -0
  187. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/triage.test.ts +0 -0
  188. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/test/variantId.test.ts +0 -0
  189. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/tsconfig.json +0 -0
  190. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo/vitest.config.ts +0 -0
  191. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/pyproject.toml +0 -0
  192. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/src/demo_gateway/__init__.py +0 -0
  193. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/src/demo_gateway/config.py +0 -0
  194. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/src/demo_gateway/main.py +0 -0
  195. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/src/demo_gateway/progress.py +0 -0
  196. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/src/demo_gateway/runs.py +0 -0
  197. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/__init__.py +0 -0
  198. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/conftest.py +0 -0
  199. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/test_main.py +0 -0
  200. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/test_progress.py +0 -0
  201. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/test_resolve.py +0 -0
  202. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/tests/test_runs.py +0 -0
  203. {flowapy-0.4.2 → flowapy-0.4.3}/examples/demo-gateway/uv.lock +0 -0
  204. {flowapy-0.4.2 → flowapy-0.4.3}/package.json +0 -0
  205. {flowapy-0.4.2 → flowapy-0.4.3}/packages/.gitkeep +0 -0
  206. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/Dockerfile +0 -0
  207. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/LICENSE +0 -0
  208. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/README.md +0 -0
  209. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/package.json +0 -0
  210. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/artifact.ts +0 -0
  211. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/audit.ts +0 -0
  212. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/auth/jwt.ts +0 -0
  213. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/auth/oidc.ts +0 -0
  214. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/chat.ts +0 -0
  215. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/cli.ts +0 -0
  216. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/config.ts +0 -0
  217. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/index.ts +0 -0
  218. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/instrumentation.ts +0 -0
  219. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/anthropic.ts +0 -0
  220. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/bedrock.ts +0 -0
  221. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/factory.ts +0 -0
  222. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/google-gla.ts +0 -0
  223. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/google-vertex.ts +0 -0
  224. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/interface.ts +0 -0
  225. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/llm/openai.ts +0 -0
  226. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/prompts.ts +0 -0
  227. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/server.ts +0 -0
  228. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/session.ts +0 -0
  229. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage/factory.ts +0 -0
  230. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage/fs.ts +0 -0
  231. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage/gcs.ts +0 -0
  232. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage/interface.ts +0 -0
  233. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage/s3.ts +0 -0
  234. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/storage-keys.ts +0 -0
  235. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/telemetry.ts +0 -0
  236. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/text.ts +0 -0
  237. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/src/yaml.ts +0 -0
  238. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/chat.test.ts +0 -0
  239. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/generic-prompt.test.ts +0 -0
  240. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/llm-factory.test.ts +0 -0
  241. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/oidc.test.ts +0 -0
  242. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/paper-cache.test.ts +0 -0
  243. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/storage-fs.test.ts +0 -0
  244. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/storage-gcs.test.ts +0 -0
  245. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/storage-s3.test.ts +0 -0
  246. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/text.test.ts +0 -0
  247. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/test/yaml.test.ts +0 -0
  248. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/tsconfig.build.json +0 -0
  249. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/tsconfig.json +0 -0
  250. {flowapy-0.4.2 → flowapy-0.4.3}/packages/chat-service/vitest.config.ts +0 -0
  251. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/LICENSE +0 -0
  252. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/README.md +0 -0
  253. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/package.json +0 -0
  254. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/citations/sanitize.test.ts +0 -0
  255. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/citations/sanitize.ts +0 -0
  256. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/citations/types.ts +0 -0
  257. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/index.ts +0 -0
  258. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/llm-content/LlmContent.test.tsx +0 -0
  259. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/llm-content/LlmContent.tsx +0 -0
  260. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/MarkdownHighlightViewer.test.tsx +0 -0
  261. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/MarkdownHighlightViewer.tsx +0 -0
  262. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/offsets.test.ts +0 -0
  263. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/offsets.ts +0 -0
  264. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/plugins.test.tsx +0 -0
  265. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/plugins.ts +0 -0
  266. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/markdown-viewer/types.ts +0 -0
  267. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/paper-matching/matchFilesToPapers.test.ts +0 -0
  268. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/paper-matching/matchFilesToPapers.ts +0 -0
  269. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/pdf-viewer/PdfHighlightViewer.test.tsx +0 -0
  270. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/pdf-viewer/PdfHighlightViewer.tsx +0 -0
  271. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/pdf-viewer/types.ts +0 -0
  272. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/styles.css +0 -0
  273. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ChatDrawer.test.tsx +0 -0
  274. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ChatDrawer.tsx +0 -0
  275. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ChatSection.tsx +0 -0
  276. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ClaimList.tsx +0 -0
  277. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/EvidenceViewerShell.test.tsx +0 -0
  278. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/EvidenceViewerShell.tsx +0 -0
  279. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/FocusCard.tsx +0 -0
  280. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/MessageParts.tsx +0 -0
  281. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/PaperHeader.tsx +0 -0
  282. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/PaperRail.test.tsx +0 -0
  283. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/PaperRail.tsx +0 -0
  284. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ReasoningStep.tsx +0 -0
  285. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/SynthesisPanel.tsx +0 -0
  286. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/ToolStep.tsx +0 -0
  287. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/backend.ts +0 -0
  288. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/citation-resolver.ts +0 -0
  289. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/citation-utils.test.ts +0 -0
  290. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/citation-utils.ts +0 -0
  291. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/claim-refs.test.ts +0 -0
  292. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/claim-refs.ts +0 -0
  293. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/keyboard.test.ts +0 -0
  294. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/keyboard.ts +0 -0
  295. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/store.test.ts +0 -0
  296. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/store.ts +0 -0
  297. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/trace-format.test.ts +0 -0
  298. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/trace-format.ts +0 -0
  299. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/src/triage/types.ts +0 -0
  300. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/tailwind.config.ts +0 -0
  301. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/tsconfig.json +0 -0
  302. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/tsup.config.ts +0 -0
  303. {flowapy-0.4.2 → flowapy-0.4.3}/packages/react-viewer/vitest.config.ts +0 -0
  304. {flowapy-0.4.2 → flowapy-0.4.3}/pnpm-lock.yaml +0 -0
  305. {flowapy-0.4.2 → flowapy-0.4.3}/pnpm-workspace.yaml +0 -0
  306. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/aggregation_edit_prompt.txt +0 -0
  307. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/aggregation_edit_schema.ts +0 -0
  308. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/aggregation_prompt.txt +0 -0
  309. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/aggregation_schema.py +0 -0
  310. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/extraction_prompt.txt +0 -0
  311. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/extraction_schema.py +0 -0
  312. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/generic/transcription_prompt.txt +0 -0
  313. {flowapy-0.4.2 → flowapy-0.4.3}/prompts/package.json +0 -0
  314. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/__init__.py +0 -0
  315. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/aggregate.py +0 -0
  316. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/artifact.py +0 -0
  317. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/assemble.py +0 -0
  318. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/cli.py +0 -0
  319. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/clinvar.py +0 -0
  320. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/convert.py +0 -0
  321. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/download.py +0 -0
  322. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/extract.py +0 -0
  323. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/http_retry.py +0 -0
  324. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/models.py +0 -0
  325. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/normalize.py +0 -0
  326. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/pdf_index_cache.py +0 -0
  327. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/pdfium.py +0 -0
  328. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/progress.py +0 -0
  329. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/prompts/__init__.py +0 -0
  330. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/py.typed +0 -0
  331. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/query.py +0 -0
  332. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/resolve.py +0 -0
  333. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/run.py +0 -0
  334. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/schema.py +0 -0
  335. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/settings.py +0 -0
  336. {flowapy-0.4.2 → flowapy-0.4.3}/src/flowa/storage.py +0 -0
  337. {flowapy-0.4.2 → flowapy-0.4.3}/tests/__init__.py +0 -0
  338. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_assemble.py +0 -0
  339. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_convert.py +0 -0
  340. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_download.py +0 -0
  341. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_normalize.py +0 -0
  342. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_pdf_index_cache.py +0 -0
  343. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_pdfium.py +0 -0
  344. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_progress.py +0 -0
  345. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_prompts.py +0 -0
  346. {flowapy-0.4.2 → flowapy-0.4.3}/tests/test_resolve.py +0 -0
  347. {flowapy-0.4.2 → flowapy-0.4.3}/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.4.3
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'
@@ -294,7 +302,9 @@ Run the pipeline directly from a checkout (the [Quickstart](#quickstart) demo wr
294
302
  export FLOWA_STORAGE_BASE=file:///tmp/flowa
295
303
  export FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
296
304
  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
+ uv run flowa run --variant-id test \
306
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
307
+ --source litvar
298
308
  ```
299
309
 
300
310
  ### Docker
@@ -306,7 +316,9 @@ docker run \
306
316
  -e FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
307
317
  -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6 \
308
318
  -e AWS_REGION=ap-southeast-2 \
309
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
319
+ flowa run --variant-id VAR123 \
320
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
321
+ --source litvar
310
322
  ```
311
323
 
312
324
  ### AWS Batch
@@ -341,6 +353,6 @@ aws batch submit-job \
341
353
  --job-definition flowa-worker \
342
354
  --job-queue flowa-queue \
343
355
  --container-overrides '{
344
- "command": ["run", "--variant-id", "VAR123", "--gene", "GAA", "--hgvs-c", "NM_000152.5:c.2238G>C", "--source", "litvar"]
356
+ "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
357
  }'
346
358
  ```
@@ -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'
@@ -232,7 +240,9 @@ Run the pipeline directly from a checkout (the [Quickstart](#quickstart) demo wr
232
240
  export FLOWA_STORAGE_BASE=file:///tmp/flowa
233
241
  export FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6
234
242
  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
+ uv run flowa run --variant-id test \
244
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
245
+ --source litvar
236
246
  ```
237
247
 
238
248
  ### Docker
@@ -244,7 +254,9 @@ docker run \
244
254
  -e FLOWA_CONVERT_MODEL__NAME=bedrock:au.anthropic.claude-sonnet-4-6 \
245
255
  -e FLOWA_EXTRACTION_MODEL__NAME=bedrock:au.anthropic.claude-opus-4-6 \
246
256
  -e AWS_REGION=ap-southeast-2 \
247
- flowa run --variant-id VAR123 --gene GAA --hgvs-c "NM_000152.5:c.2238G>C" --source litvar
257
+ flowa run --variant-id VAR123 \
258
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_000152.5","hgvs_c":"c.2238G>C"}]}' \
259
+ --source litvar
248
260
  ```
249
261
 
250
262
  ### AWS Batch
@@ -279,6 +291,6 @@ aws batch submit-job \
279
291
  --job-definition flowa-worker \
280
292
  --job-queue flowa-queue \
281
293
  --container-overrides '{
282
- "command": ["run", "--variant-id", "VAR123", "--gene", "GAA", "--hgvs-c", "NM_000152.5:c.2238G>C", "--source", "litvar"]
294
+ "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
295
  }'
284
296
  ```
@@ -187,7 +187,8 @@ if [ -n "${BEDROCK_INFERENCE_PROFILE:-}" ]; then
187
187
  export FLOWA_EXTRACTION_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
188
188
  export FLOWA_CONVERT_MODEL__BEDROCK_INFERENCE_PROFILE="$BEDROCK_INFERENCE_PROFILE"
189
189
  fi
190
- uv run flowa run --variant-id $VARIANT --gene RYR2 --hgvs-c "NM_001035.3:c.14174A>G"
190
+ uv run flowa run --variant-id $VARIANT \
191
+ --variant-spec '{"schema_version":1,"variants":[{"kind":"hgvs_c","transcript":"NM_001035.3","hgvs_c":"c.14174A>G"}]}'
191
192
  ```
192
193
 
193
194
  Open `http://localhost:7700/viewer/$VARIANT/acmg_classification` (with
@@ -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" }`. |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flowapy"
3
- version = "0.4.2"
3
+ version = "0.4.3"
4
4
  description = "Variant literature assessment pipeline with AI extraction"
5
5
  readme = "README.md"
6
6
  requires-python = "==3.13.*"
@@ -13,8 +13,11 @@ anchorite-backed resolver, not here.
13
13
 
14
14
  Keep in sync with `packages/chat-service/src/chat.ts` (`validateArtifactContent`).
15
15
  One rule here has no edit-time counterpart — `claim_quote_not_in_extraction`:
16
- every claim citation quote must be one the extraction surfaced. It's the same
17
- kind of exact, model-vs-model check; chat-service can't run it because an edit
16
+ every claim citation quote must be byte-present in a quote the extraction
17
+ surfaced exact, or a contiguous substring of one (the aggregator legitimately
18
+ trims a long surfaced passage to its load-bearing clause; that span is still
19
+ verbatim source text and still resolves to a highlight downstream). It is still
20
+ byte-exact, not a fuzzy threshold. chat-service can't run it because an edit
18
21
  session has no extraction input to compare against.
19
22
  """
20
23
 
@@ -28,6 +31,20 @@ from flowa.artifact import CategoryResult
28
31
  _CITE_LINK_RE = re.compile(r'\[[^\]]*\]\(#cite:([^ )"]+)(?:\s+"([^"]*)")?\)')
29
32
 
30
33
 
34
+ def _quote_grounded(quote: str, allowed: set[str]) -> bool:
35
+ """True if `quote` is byte-present in any extraction quote the model was fed.
36
+
37
+ Exact set-membership (fast path), or a contiguous substring of a surfaced
38
+ quote — the aggregator trimming a long extraction passage to its load-bearing
39
+ clause is grounded, not fabricated. An empty quote grounds nothing.
40
+ """
41
+ if not quote:
42
+ return False
43
+ if quote in allowed:
44
+ return True
45
+ return any(quote in surfaced for surfaced in allowed)
46
+
47
+
31
48
  def validate_aggregate_category(
32
49
  cat_result: CategoryResult,
33
50
  valid_paper_ids: set[str],
@@ -90,11 +107,18 @@ def validate_aggregate_category(
90
107
  )
91
108
  break
92
109
 
93
- # Every claim citation quote must be one the extraction surfaced.
110
+ # Every claim citation quote must be grounded in what the extraction surfaced.
111
+ # The aggregate model is fed only the extraction quotes (never the paper
112
+ # Markdown), so a claim quote is grounded iff it is byte-present in a surfaced
113
+ # quote for that paper. A contiguous SUBSTRING of a surfaced quote counts:
114
+ # the extraction deliberately captures long passages (a full sentence / table
115
+ # row) and the aggregator legitimately trims to the load-bearing clause, which
116
+ # is still verbatim source text and still resolves to a highlight downstream.
117
+ # Only a quote contained in NO surfaced quote is a fabrication/alteration.
94
118
  for claim in cat_result.claims:
95
119
  allowed = extraction_quotes_by_paper.get(claim.paper_id, set())
96
120
  for citation in claim.citations:
97
- if citation.quote not in allowed:
121
+ if not _quote_grounded(citation.quote, allowed):
98
122
  errors.append(
99
123
  (
100
124
  'claim_quote_not_in_extraction',
@@ -162,3 +162,24 @@ def test_claim_quote_must_come_from_extraction() -> None:
162
162
  extraction_quotes_by_paper={'Smith2024': {'a quote the extraction actually surfaced'}},
163
163
  )
164
164
  assert 'claim_quote_not_in_extraction' in _rules(errors)
165
+
166
+
167
+ def test_claim_quote_substring_of_extraction_passes() -> None:
168
+ # The extraction surfaces a long passage; the aggregator legitimately trims
169
+ # it to its load-bearing clause. That contiguous substring is still verbatim
170
+ # source text (it resolves to a highlight downstream), so it is grounded.
171
+ surfaced = (
172
+ 'Each parent was heterozygous for one allele, and an unaffected sister did not have a mutation at either site.'
173
+ )
174
+ trimmed = 'an unaffected sister did not have a mutation at either site'
175
+ cat = _cat(
176
+ notes=f'Non-carrier sib ([sib](#cite:Smith2024 "{trimmed}")).',
177
+ papers=('Smith2024',),
178
+ claims=(_claim('Smith2024', trimmed),),
179
+ )
180
+ errors = validate_aggregate_category(
181
+ cat,
182
+ valid_paper_ids={'Smith2024'},
183
+ extraction_quotes_by_paper={'Smith2024': {surfaced}},
184
+ )
185
+ assert errors == []
@@ -492,7 +492,7 @@ wheels = [
492
492
 
493
493
  [[package]]
494
494
  name = "flowapy"
495
- version = "0.4.2"
495
+ version = "0.4.3"
496
496
  source = { editable = "." }
497
497
  dependencies = [
498
498
  { name = "anchorite" },
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