programasweights 0.2.3__tar.gz → 0.2.5__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 (501) hide show
  1. {programasweights-0.2.3 → programasweights-0.2.5}/AGENTS.md +22 -2
  2. {programasweights-0.2.3 → programasweights-0.2.5}/CHANGELOG.md +11 -0
  3. {programasweights-0.2.3 → programasweights-0.2.5}/PKG-INFO +1 -1
  4. {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/python-sdk.md +4 -2
  5. {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/rest-api.md +10 -2
  6. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/__init__.py +1 -1
  7. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/client.py +17 -4
  8. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime_llamacpp.py +27 -16
  9. {programasweights-0.2.3 → programasweights-0.2.5}/pyproject.toml +1 -1
  10. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/main.py +7 -1
  11. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/auth.py +13 -1
  12. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/compile.py +21 -8
  13. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/health.py +3 -1
  14. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/infer.py +2 -2
  15. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/programs.py +30 -14
  16. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/compile_provider.py +15 -3
  17. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/App.tsx +15 -1
  18. programasweights-0.2.5/web-app/frontend/src/components/AgentsPage.tsx +92 -0
  19. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/BrowserPage.tsx +74 -20
  20. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/DocsPage.tsx +1 -1
  21. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/Footer.tsx +21 -3
  22. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/Header.tsx +14 -2
  23. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubProgramPage.tsx +3 -3
  24. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/LandingPage.tsx +1 -1
  25. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/MainInterface.tsx +2 -2
  26. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/SettingsPage.tsx +1 -1
  27. programasweights-0.2.3/web-app/backend/app/__init__.py +0 -1
  28. programasweights-0.2.3/web-app/backend/app/config.py +0 -71
  29. programasweights-0.2.3/web-app/backend/app/main.py +0 -1463
  30. programasweights-0.2.3/web-app/backend/app/middleware/__init__.py +0 -1
  31. programasweights-0.2.3/web-app/backend/app/middleware/rate_limit.py +0 -58
  32. programasweights-0.2.3/web-app/backend/app/models.py +0 -123
  33. programasweights-0.2.3/web-app/backend/app/services/__init__.py +0 -13
  34. programasweights-0.2.3/web-app/backend/app/services/auth_service.py +0 -172
  35. programasweights-0.2.3/web-app/backend/app/services/case_service.py +0 -201
  36. programasweights-0.2.3/web-app/backend/app/services/compiler_service.py +0 -202
  37. programasweights-0.2.3/web-app/backend/app/services/gpt_service.py +0 -166
  38. programasweights-0.2.3/web-app/backend/app/services/hub_service.py +0 -291
  39. programasweights-0.2.3/web-app/backend/app/services/image_service.py +0 -127
  40. programasweights-0.2.3/web-app/backend/app/services/interpreter_service.py +0 -179
  41. programasweights-0.2.3/web-app/backend/app/services/sql_manager.py +0 -1324
  42. programasweights-0.2.3/web-app/backend/app/templates/gpt_test_generation.txt +0 -42
  43. programasweights-0.2.3/web-app/backend/app/utils/__init__.py +0 -1
  44. programasweights-0.2.3/web-app/backend/app/utils/image_placeholders.py +0 -147
  45. programasweights-0.2.3/web-app/backend/app/utils/program_hash.py +0 -211
  46. programasweights-0.2.3/web-app/backend/clear_db.sh +0 -62
  47. programasweights-0.2.3/web-app/backend/clear_tables.sql +0 -29
  48. programasweights-0.2.3/web-app/backend/data/programs.db +0 -0
  49. programasweights-0.2.3/web-app/backend/env_example.txt +0 -24
  50. programasweights-0.2.3/web-app/backend/example_images/README.md +0 -140
  51. programasweights-0.2.3/web-app/backend/get_data_examples.py +0 -55
  52. programasweights-0.2.3/web-app/backend/requirements.txt +0 -10
  53. programasweights-0.2.3/web-app/backend/run_server.py +0 -27
  54. programasweights-0.2.3/web-app/backend/setup_analytics_tables.sql +0 -16
  55. programasweights-0.2.3/web-app/backend/setup_auth_tables.sql +0 -30
  56. programasweights-0.2.3/web-app/backend/setup_cache_tables.sql +0 -73
  57. programasweights-0.2.3/web-app/backend/setup_cases_tables.sql +0 -36
  58. programasweights-0.2.3/web-app/backend/setup_database.sql +0 -248
  59. programasweights-0.2.3/web-app/backend/setup_database_simple.sql +0 -113
  60. programasweights-0.2.3/web-app/backend/setup_db.sh +0 -52
  61. programasweights-0.2.3/web-app/backend/setup_example_images.py +0 -166
  62. programasweights-0.2.3/web-app/backend/setup_hub_tables.sql +0 -74
  63. programasweights-0.2.3/web-app/backend/test_compilation_cache.py +0 -85
  64. programasweights-0.2.3/web-app/frontend/src/components/AgentsPage.tsx +0 -268
  65. programasweights-0.2.3/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -115
  66. programasweights-0.2.3/web-app/frontend/src/components/CompileSection.tsx +0 -74
  67. programasweights-0.2.3/web-app/frontend/src/components/ExamplesInput.tsx +0 -74
  68. programasweights-0.2.3/web-app/frontend/src/components/ModelSelector.tsx +0 -55
  69. programasweights-0.2.3/web-app/frontend/src/components/TestSection.tsx +0 -122
  70. {programasweights-0.2.3 → programasweights-0.2.5}/.cursor/rules/sdk-publishing.mdc +0 -0
  71. {programasweights-0.2.3 → programasweights-0.2.5}/.cursor/rules/vllm-deployment.mdc +0 -0
  72. {programasweights-0.2.3 → programasweights-0.2.5}/.git +0 -0
  73. {programasweights-0.2.3 → programasweights-0.2.5}/.github/workflows/web-sdk.yml +0 -0
  74. {programasweights-0.2.3 → programasweights-0.2.5}/.gitignore +0 -0
  75. {programasweights-0.2.3 → programasweights-0.2.5}/.gitmodules +0 -0
  76. {programasweights-0.2.3 → programasweights-0.2.5}/.hatch_build.toml +0 -0
  77. {programasweights-0.2.3 → programasweights-0.2.5}/.readthedocs.yaml +0 -0
  78. {programasweights-0.2.3 → programasweights-0.2.5}/1apple.jpg +0 -0
  79. {programasweights-0.2.3 → programasweights-0.2.5}/1apple2.jpg +0 -0
  80. {programasweights-0.2.3 → programasweights-0.2.5}/2apples.jpg +0 -0
  81. {programasweights-0.2.3 → programasweights-0.2.5}/2apples2.jpg +0 -0
  82. {programasweights-0.2.3 → programasweights-0.2.5}/3apples.jpg +0 -0
  83. {programasweights-0.2.3 → programasweights-0.2.5}/3apples2.jpg +0 -0
  84. {programasweights-0.2.3 → programasweights-0.2.5}/479400.png +0 -0
  85. {programasweights-0.2.3 → programasweights-0.2.5}/4apples.jpg +0 -0
  86. {programasweights-0.2.3 → programasweights-0.2.5}/4apples2.jpg +0 -0
  87. {programasweights-0.2.3 → programasweights-0.2.5}/4apples3.jpg +0 -0
  88. {programasweights-0.2.3 → programasweights-0.2.5}/4apples4.jpg +0 -0
  89. {programasweights-0.2.3 → programasweights-0.2.5}/5apples.jpg +0 -0
  90. {programasweights-0.2.3 → programasweights-0.2.5}/6apples.jpg +0 -0
  91. {programasweights-0.2.3 → programasweights-0.2.5}/8apples.jpg +0 -0
  92. {programasweights-0.2.3 → programasweights-0.2.5}/9apples.jpg +0 -0
  93. {programasweights-0.2.3 → programasweights-0.2.5}/FLOW_SUMMARY.md +0 -0
  94. {programasweights-0.2.3 → programasweights-0.2.5}/LICENSE +0 -0
  95. {programasweights-0.2.3 → programasweights-0.2.5}/MANIFEST.in +0 -0
  96. {programasweights-0.2.3 → programasweights-0.2.5}/ONNX_MIGRATION_PLAN.md +0 -0
  97. {programasweights-0.2.3 → programasweights-0.2.5}/PREFIX_TOKENS_DESIGN.md +0 -0
  98. {programasweights-0.2.3 → programasweights-0.2.5}/PYPI_README.md +0 -0
  99. {programasweights-0.2.3 → programasweights-0.2.5}/README.md +0 -0
  100. {programasweights-0.2.3 → programasweights-0.2.5}/TRUNCATION_CHANGES.md +0 -0
  101. {programasweights-0.2.3 → programasweights-0.2.5}/USE_CASES_AND_IDEAS.md +0 -0
  102. {programasweights-0.2.3 → programasweights-0.2.5}/VERIFICATION_USAGE.md +0 -0
  103. {programasweights-0.2.3 → programasweights-0.2.5}/analyze_dataset.py +0 -0
  104. {programasweights-0.2.3 → programasweights-0.2.5}/analyze_lengths.py +0 -0
  105. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/code_prompt.md +0 -0
  106. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  107. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/openai_batch_request.py +0 -0
  108. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/prepare_alchemist_data.py +0 -0
  109. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/prepare_var_bench_data.py +0 -0
  110. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/python_code_sandbox.py +0 -0
  111. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evaluation_var_bench.sh +0 -0
  112. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_evaluation.sh +0 -0
  113. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_request.sh +0 -0
  114. {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_statistics.sh +0 -0
  115. {programasweights-0.2.3 → programasweights-0.2.5}/benchmark_pytorch_vs_onnx.py +0 -0
  116. {programasweights-0.2.3 → programasweights-0.2.5}/benchmark_user_experience.py +0 -0
  117. {programasweights-0.2.3 → programasweights-0.2.5}/check_dataset.py +0 -0
  118. {programasweights-0.2.3 → programasweights-0.2.5}/combine_datasets.py +0 -0
  119. {programasweights-0.2.3 → programasweights-0.2.5}/compare_datasets.py +0 -0
  120. {programasweights-0.2.3 → programasweights-0.2.5}/compare_old_vs_regen.py +0 -0
  121. {programasweights-0.2.3 → programasweights-0.2.5}/convert_paw_to_svg.py +0 -0
  122. {programasweights-0.2.3 → programasweights-0.2.5}/create_favicon_sizes.py +0 -0
  123. {programasweights-0.2.3 → programasweights-0.2.5}/create_visualization_from_log.py +0 -0
  124. {programasweights-0.2.3 → programasweights-0.2.5}/create_vqa_dataset.py +0 -0
  125. {programasweights-0.2.3 → programasweights-0.2.5}/debug_cache.py +0 -0
  126. {programasweights-0.2.3 → programasweights-0.2.5}/debug_eos_example.sh +0 -0
  127. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  128. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/002-q4_0-adapter-format.md +0 -0
  129. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/003-single-spec-field.md +0 -0
  130. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/004-compiler-naming.md +0 -0
  131. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/005-vllm-hidden-states.md +0 -0
  132. {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/006-email-api-key-auth.md +0 -0
  133. {programasweights-0.2.3 → programasweights-0.2.5}/docs/advanced/adrs.md +0 -0
  134. {programasweights-0.2.3 → programasweights-0.2.5}/docs/advanced/architecture.md +0 -0
  135. {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/cli.md +0 -0
  136. {programasweights-0.2.3 → programasweights-0.2.5}/docs/architecture.md +0 -0
  137. {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/first-program.md +0 -0
  138. {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/installation.md +0 -0
  139. {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/naming-programs.md +0 -0
  140. {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/browser-inference.md +0 -0
  141. {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/how-it-works.md +0 -0
  142. {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/local-inference.md +0 -0
  143. {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/writing-good-specs.md +0 -0
  144. {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/browsing-programs.md +0 -0
  145. {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/feedback-cases.md +0 -0
  146. {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/publishing-programs.md +0 -0
  147. {programasweights-0.2.3 → programasweights-0.2.5}/docs/index.md +0 -0
  148. {programasweights-0.2.3 → programasweights-0.2.5}/docs/requirements.txt +0 -0
  149. {programasweights-0.2.3 → programasweights-0.2.5}/estimate_data_gen_cost.py +0 -0
  150. {programasweights-0.2.3 → programasweights-0.2.5}/eval.py +0 -0
  151. {programasweights-0.2.3 → programasweights-0.2.5}/examples/flask_app.py +0 -0
  152. {programasweights-0.2.3 → programasweights-0.2.5}/examples/jupyter_notebook.py +0 -0
  153. {programasweights-0.2.3 → programasweights-0.2.5}/examples/langchain_integration.py +0 -0
  154. {programasweights-0.2.3 → programasweights-0.2.5}/examples/replace_openai.py +0 -0
  155. {programasweights-0.2.3 → programasweights-0.2.5}/export_to_onnx.py +0 -0
  156. {programasweights-0.2.3 → programasweights-0.2.5}/extract_models.py +0 -0
  157. {programasweights-0.2.3 → programasweights-0.2.5}/inspect_data_dirs.py +0 -0
  158. {programasweights-0.2.3 → programasweights-0.2.5}/latest_export.csv +0 -0
  159. {programasweights-0.2.3 → programasweights-0.2.5}/log.train.81920.morecategories.extraprefix +0 -0
  160. {programasweights-0.2.3 → programasweights-0.2.5}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  161. {programasweights-0.2.3 → programasweights-0.2.5}/merge_datasets.py +0 -0
  162. {programasweights-0.2.3 → programasweights-0.2.5}/mkdocs.yml +0 -0
  163. {programasweights-0.2.3 → programasweights-0.2.5}/paw.png +0 -0
  164. {programasweights-0.2.3 → programasweights-0.2.5}/paw.svg +0 -0
  165. {programasweights-0.2.3 → programasweights-0.2.5}/process_im2latex_dataset.py +0 -0
  166. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/artifacts.py +0 -0
  167. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/cache.py +0 -0
  168. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/cli.py +0 -0
  169. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/compiler/__init__.py +0 -0
  170. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/compiler/dummy.py +0 -0
  171. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/config.py +0 -0
  172. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/convert_peft_to_paw.py +0 -0
  173. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/paw_format.py +0 -0
  174. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/__init__.py +0 -0
  175. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/interpreter.py +0 -0
  176. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/interpreter_onnx.py +0 -0
  177. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/__init__.py +0 -0
  178. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/compiler/__init__.py +0 -0
  179. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/lora_format.py +0 -0
  180. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/runtime/__init__.py +0 -0
  181. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  182. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  183. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_lora_format.py +0 -0
  184. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_training.py +0 -0
  185. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/train_lora.py +0 -0
  186. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/training/__init__.py +0 -0
  187. {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  188. {programasweights-0.2.3 → programasweights-0.2.5}/run_eval.sh +0 -0
  189. {programasweights-0.2.3 → programasweights-0.2.5}/run_training.sh +0 -0
  190. {programasweights-0.2.3 → programasweights-0.2.5}/scripts/filter_table_by_length.py +0 -0
  191. {programasweights-0.2.3 → programasweights-0.2.5}/server/.env.example +0 -0
  192. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/env.py +0 -0
  193. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/script.py.mako +0 -0
  194. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/001_initial_schema.py +0 -0
  195. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
  196. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
  197. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
  198. {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic.ini +0 -0
  199. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/__init__.py +0 -0
  200. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/config.py +0 -0
  201. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/dependencies.py +0 -0
  202. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/logging_config.py +0 -0
  203. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/middleware/__init__.py +0 -0
  204. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/middleware/rate_limit.py +0 -0
  205. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/__init__.py +0 -0
  206. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/database.py +0 -0
  207. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/orm.py +0 -0
  208. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/schemas.py +0 -0
  209. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/__init__.py +0 -0
  210. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/feedback.py +0 -0
  211. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/models_info.py +0 -0
  212. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/__init__.py +0 -0
  213. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/auto_tag_service.py +0 -0
  214. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/auto_title_service.py +0 -0
  215. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/compile_service.py +0 -0
  216. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/infer_service.py +0 -0
  217. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/search_service.py +0 -0
  218. {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/storage_service.py +0 -0
  219. {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/benchmark_api.py +0 -0
  220. {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/handcrafted_specs.json +0 -0
  221. {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/last_benchmark_results.json +0 -0
  222. {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/last_stress_results.json +0 -0
  223. {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/stress_test.py +0 -0
  224. {programasweights-0.2.3 → programasweights-0.2.5}/server/compiler_registry.json +0 -0
  225. {programasweights-0.2.3 → programasweights-0.2.5}/server/provider_configs/gpt2.json +0 -0
  226. {programasweights-0.2.3 → programasweights-0.2.5}/server/provider_configs/qwen3-0.6b.json +0 -0
  227. {programasweights-0.2.3 → programasweights-0.2.5}/server/requirements.txt +0 -0
  228. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
  229. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/ablation_search.py +0 -0
  230. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_hf_browser_assets.py +0 -0
  231. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_hf_safetensors.py +0 -0
  232. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_interestingness.py +0 -0
  233. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_tags.py +0 -0
  234. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_titles.py +0 -0
  235. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/benchmark_gpt2.py +0 -0
  236. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/cleanup_storage.py +0 -0
  237. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/eval_search.py +0 -0
  238. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/evict_cold_programs.py +0 -0
  239. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/generate_prefix_cache.py +0 -0
  240. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/launch_gpt2_compiler.py +0 -0
  241. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/launch_qwen3_compiler.py +0 -0
  242. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/patch_vllm.sh +0 -0
  243. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/restart.sh +0 -0
  244. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_all.sh +0 -0
  245. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_gpt2_services.sh +0 -0
  246. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_provider.sh +0 -0
  247. {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_services.sh +0 -0
  248. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/__init__.py +0 -0
  249. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/conftest.py +0 -0
  250. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_auth.py +0 -0
  251. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_compile.py +0 -0
  252. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_errors.py +0 -0
  253. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_infer.py +0 -0
  254. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_integration_gpu.py +0 -0
  255. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_rate_limit.py +0 -0
  256. {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_storage.py +0 -0
  257. {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/__init__.py +0 -0
  258. {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/gpt2_lora_patch.py +0 -0
  259. {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/paw_compiler.py +0 -0
  260. {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/prepare_checkpoint.py +0 -0
  261. {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/register.py +0 -0
  262. {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  263. {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  264. {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  265. {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  266. {programasweights-0.2.3 → programasweights-0.2.5}/test_1spec.py +0 -0
  267. {programasweights-0.2.3 → programasweights-0.2.5}/test_all_caching.py +0 -0
  268. {programasweights-0.2.3 → programasweights-0.2.5}/test_apple_count.py +0 -0
  269. {programasweights-0.2.3 → programasweights-0.2.5}/test_batch_pilot.py +0 -0
  270. {programasweights-0.2.3 → programasweights-0.2.5}/test_compile.py +0 -0
  271. {programasweights-0.2.3 → programasweights-0.2.5}/test_e2e.py +0 -0
  272. {programasweights-0.2.3 → programasweights-0.2.5}/test_execute.py +0 -0
  273. {programasweights-0.2.3 → programasweights-0.2.5}/test_nspecs.py +0 -0
  274. {programasweights-0.2.3 → programasweights-0.2.5}/test_one_vs_two_step.py +0 -0
  275. {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_correctness.py +0 -0
  276. {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_hf_model.py +0 -0
  277. {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_hf_with_images.py +0 -0
  278. {programasweights-0.2.3 → programasweights-0.2.5}/test_paw_format.py +0 -0
  279. {programasweights-0.2.3 → programasweights-0.2.5}/test_thinking_comparison.py +0 -0
  280. {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_offline_cache.py +0 -0
  281. {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_sdk.py +0 -0
  282. {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_sdk.sh +0 -0
  283. {programasweights-0.2.3 → programasweights-0.2.5}/train.py +0 -0
  284. {programasweights-0.2.3 → programasweights-0.2.5}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  285. {programasweights-0.2.3 → programasweights-0.2.5}/training/README.md +0 -0
  286. {programasweights-0.2.3 → programasweights-0.2.5}/training/__init__.py +0 -0
  287. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  288. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/README.md +0 -0
  289. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  290. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/build_user_bench.py +0 -0
  291. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/dry_run_batch.py +0 -0
  292. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/filter_test_data.py +0 -0
  293. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/generate_specs.py +0 -0
  294. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/generate_specs_batch.py +0 -0
  295. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/incremental_merge.py +0 -0
  296. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/merge_and_upload.py +0 -0
  297. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/regenerate_outputs_batch.py +0 -0
  298. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/synthesize_data.py +0 -0
  299. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/synthesize_data_batch.py +0 -0
  300. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/filter_system.txt +0 -0
  301. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/filter_user.txt +0 -0
  302. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/pairs_system.txt +0 -0
  303. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/pairs_user.txt +0 -0
  304. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_system.txt +0 -0
  305. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user.txt +0 -0
  306. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  307. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  308. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  309. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/verify_system.txt +0 -0
  310. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/verify_user.txt +0 -0
  311. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/filter_system.txt +0 -0
  312. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/filter_user.txt +0 -0
  313. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/pairs_system.txt +0 -0
  314. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/pairs_user.txt +0 -0
  315. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_system.txt +0 -0
  316. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user.txt +0 -0
  317. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  318. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  319. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  320. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/verify_system.txt +0 -0
  321. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/verify_user.txt +0 -0
  322. {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/verify_test_data.py +0 -0
  323. {programasweights-0.2.3 → programasweights-0.2.5}/training/datasets/__init__.py +0 -0
  324. {programasweights-0.2.3 → programasweights-0.2.5}/training/datasets/jsonl_text_pairs.py +0 -0
  325. {programasweights-0.2.3 → programasweights-0.2.5}/training/loops/__init__.py +0 -0
  326. {programasweights-0.2.3 → programasweights-0.2.5}/training/loops/prefix_tuning_sft.py +0 -0
  327. {programasweights-0.2.3 → programasweights-0.2.5}/ttt.py +0 -0
  328. {programasweights-0.2.3 → programasweights-0.2.5}/upload_model.py +0 -0
  329. {programasweights-0.2.3 → programasweights-0.2.5}/upload_onnx_to_huggingface.py +0 -0
  330. {programasweights-0.2.3 → programasweights-0.2.5}/upload_onnx_to_huggingface_with_token.py +0 -0
  331. {programasweights-0.2.3 → programasweights-0.2.5}/utils.py +0 -0
  332. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/HANDOFF.md +0 -0
  333. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/README.md +0 -0
  334. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/README.md +0 -0
  335. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/full.spec.ts +0 -0
  336. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/helpers.ts +0 -0
  337. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/smoke.spec.ts +0 -0
  338. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/eslint.config.js +0 -0
  339. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/index.html +0 -0
  340. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/package-lock.json +0 -0
  341. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/package.json +0 -0
  342. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/playwright.config.ts +0 -0
  343. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/postcss.config.js +0 -0
  344. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/apple-touch-icon.png +0 -0
  345. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/browser-worker.html +0 -0
  346. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/favicon-16x16.png +0 -0
  347. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/favicon-32x32.png +0 -0
  348. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw-192.png +0 -0
  349. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw-512.png +0 -0
  350. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw.svg +0 -0
  351. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/react-test.html +0 -0
  352. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/test.html +0 -0
  353. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/vite.svg +0 -0
  354. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/scripts/deploy.sh +0 -0
  355. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/App.css +0 -0
  356. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/assets/react.svg +0 -0
  357. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/AboutPage.tsx +0 -0
  358. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/AuthorPage.tsx +0 -0
  359. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/CasesSection.tsx +0 -0
  360. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubPage.tsx +0 -0
  361. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
  362. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/NavigationHelper.tsx +0 -0
  363. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  364. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/ProfilePage.tsx +0 -0
  365. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
  366. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  367. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/contexts/AuthContext.tsx +0 -0
  368. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/index.css +0 -0
  369. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/main.tsx +0 -0
  370. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/types/index.ts +0 -0
  371. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/utils/api.ts +0 -0
  372. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tailwind.config.js +0 -0
  373. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/test-results/.last-run.json +0 -0
  374. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.app.json +0 -0
  375. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.json +0 -0
  376. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.node.json +0 -0
  377. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/vite.config.ts +0 -0
  378. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/nginx-paw.conf +0 -0
  379. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/nginx.conf +0 -0
  380. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/setup_mysql.sh +0 -0
  381. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/start.sh +0 -0
  382. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/test_setup.py +0 -0
  383. {programasweights-0.2.3 → programasweights-0.2.5}/web-app/ttt.py +0 -0
  384. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/.gitignore +0 -0
  385. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/LICENSE +0 -0
  386. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/README.md +0 -0
  387. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
  388. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/server.ts +0 -0
  389. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/start-server.ts +0 -0
  390. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/test-page.html +0 -0
  391. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/loader.test.ts +0 -0
  392. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/prompt.test.ts +0 -0
  393. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/examples/basic.html +0 -0
  394. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/package-lock.json +0 -0
  395. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/package.json +0 -0
  396. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/playwright.config.ts +0 -0
  397. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/serve.py +0 -0
  398. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/index.ts +0 -0
  399. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/loader.ts +0 -0
  400. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/runtime.ts +0 -0
  401. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/types.ts +0 -0
  402. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/test-standalone.html +0 -0
  403. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/tsconfig.json +0 -0
  404. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/vitest.config.ts +0 -0
  405. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.git +0 -0
  406. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
  407. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
  408. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
  409. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
  410. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.gitignore +0 -0
  411. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.gitmodules +0 -0
  412. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.npmignore +0 -0
  413. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.prettierignore +0 -0
  414. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/CMakeLists.txt +0 -0
  415. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/LICENCE +0 -0
  416. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/README.md +0 -0
  417. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/README_banner.png +0 -0
  418. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/assets/screenshot_0.png +0 -0
  419. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/actions.hpp +0 -0
  420. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
  421. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/glue.hpp +0 -0
  422. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
  423. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
  424. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
  425. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
  426. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
  427. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
  428. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
  429. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/wllama.cpp +0 -0
  430. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/basic/index.html +0 -0
  431. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/embeddings/index.html +0 -0
  432. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
  433. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/.gitignore +0 -0
  434. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/README.md +0 -0
  435. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/index.html +0 -0
  436. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/package-lock.json +0 -0
  437. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/package.json +0 -0
  438. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
  439. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
  440. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
  441. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
  442. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
  443. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
  444. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
  445. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
  446. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
  447. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
  448. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
  449. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
  450. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/config.ts +0 -0
  451. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/index.css +0 -0
  452. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
  453. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
  454. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
  455. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
  456. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
  457. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
  458. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
  459. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
  460. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
  461. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
  462. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
  463. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
  464. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
  465. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
  466. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
  467. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
  468. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/guides/intro-v2.md +0 -0
  469. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/index.ts +0 -0
  470. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/package-lock.json +0 -0
  471. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/package.json +0 -0
  472. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
  473. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
  474. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_worker.sh +0 -0
  475. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
  476. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
  477. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/http_server.js +0 -0
  478. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/post_build.sh +0 -0
  479. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/cache-manager.ts +0 -0
  480. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/glue/glue.ts +0 -0
  481. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/glue/messages.ts +0 -0
  482. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/index.ts +0 -0
  483. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/mjs.test.ts +0 -0
  484. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/model-manager.test.ts +0 -0
  485. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/model-manager.ts +0 -0
  486. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
  487. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
  488. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
  489. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
  490. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/utils.test.ts +0 -0
  491. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/utils.ts +0 -0
  492. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
  493. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wllama.test.ts +0 -0
  494. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wllama.ts +0 -0
  495. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/worker.ts +0 -0
  496. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
  497. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
  498. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
  499. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/tsconfig.build.json +0 -0
  500. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/tsup.config.ts +0 -0
  501. {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/vitest.config.ts +0 -0
@@ -81,6 +81,21 @@ Output: delete
81
81
  - Each function is stateless: one input, one output. No conversation history.
82
82
  - Write a few test inputs with expected outputs, then try different spec phrasings and pick the one that passes the most.
83
83
 
84
+ ## Chaining Functions
85
+
86
+ Multiple PAW functions can be composed for multi-step tasks:
87
+
88
+ ```python
89
+ classifier = paw.compile_and_load("Classify the bug type. Return ONLY one of: off-by-one, type-error, other")
90
+ fixer = paw.compile_and_load("Fix the bug described in the first line. Return only the corrected code.")
91
+
92
+ label = classifier(code_snippet)
93
+ if label != "other":
94
+ fix = fixer(f"{label}: {code_snippet}")
95
+ ```
96
+
97
+ Each function is independent -- chain them with regular Python logic.
98
+
84
99
  ## Browser / JavaScript SDK
85
100
 
86
101
  Programs compiled with `paw-4b-gpt2` run in the browser via WebAssembly.
@@ -143,7 +158,7 @@ fn = paw.function(program) # accepts Program object, hash ID, or sl
143
158
  fn = paw.function("a6b454023d41ac9ca845")
144
159
  fn = paw.function("da03/my-classifier")
145
160
 
146
- result: str = fn(input_text: str, max_tokens=512, temperature=0.0)
161
+ result: str = fn(input_text: str, max_tokens=None, temperature=0.0)
147
162
 
148
163
  fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
149
164
 
@@ -156,7 +171,7 @@ paw.login()
156
171
 
157
172
  | Error | Cause | Fix |
158
173
  |-------|-------|-----|
159
- | `httpx.HTTPStatusError: 404` on download | Program still uploading to CDN | SDK retries automatically. If persistent, recompile. |
174
+ | `RuntimeError: assets not ready` on download | Program still generating after compile | SDK polls automatically for up to 30s. If persistent, recompile. |
160
175
  | `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) | Adjust spec length. |
161
176
  | `httpx.HTTPStatusError: 429` | Rate limit exceeded | Wait, or sign in for higher limits. |
162
177
 
@@ -168,6 +183,11 @@ paw.login()
168
183
  - **Cache**: `~/.cache/programasweights/`. Override with `PAW_CACHE_DIR`.
169
184
  - **Offline** after first download.
170
185
 
186
+ ## Limits
187
+
188
+ - Spec + input + output share a ~2048 token context window, and inputs that exceed the context window will error out (not silently truncated).
189
+ - Setting `max_tokens` high is safe -- generation stops at EOS or when the window is full.
190
+
171
191
  ## Browse Programs
172
192
 
173
193
  https://programasweights.com/hub
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.4 (2026-04-01)
4
+
5
+ - Download reliability: asset endpoints return 202 Retry-After when program is still generating, eliminating 404 race conditions
6
+ - Guard local cleanup on HF upload success: files persist locally if upload fails
7
+ - Stderr suppression now covers LoRA adapter loading (fixes CPU_REPACK warnings on 0.2.3)
8
+ - Browser: fix LoRA switching bug (free old adapter + clear KV before loading new program)
9
+
10
+ ## 0.2.3 (2026-04-01)
11
+
12
+ - Python 3.9 compatibility fix (`from __future__ import annotations`)
13
+
3
14
  ## 0.2.2 (2026-03-19)
4
15
 
5
16
  - Add `paw.compile_and_load()` convenience method (compile + load in one call)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: Compile natural language specifications into neural programs that run locally via llama.cpp.
5
5
  Project-URL: Homepage, https://programasweights.com
6
6
  Project-URL: Repository, https://github.com/programasweights/programasweights-python
@@ -32,15 +32,17 @@ Loads a compiled program and returns a callable. Downloads the program and base
32
32
  The returned callable:
33
33
 
34
34
  ```python
35
- output: str = fn(input_text, max_tokens=512, temperature=0.0)
35
+ output: str = fn(input_text, max_tokens=None, temperature=0.0)
36
36
  ```
37
37
 
38
38
  | Parameter | Description |
39
39
  |-----------|-------------|
40
40
  | `input_text` | Input string for the program. |
41
- | `max_tokens` | Maximum tokens to generate (default `512`). |
41
+ | `max_tokens` | Maximum tokens to generate. `None` (default) = use all remaining context window. |
42
42
  | `temperature` | Sampling temperature (default `0.0`). |
43
43
 
44
+ **Context limits:** Spec + input + output share a ~2048 token window. If input + output together exceed the window, generation will error. For short inputs, high `max_tokens` is safe (stops at EOS). For long inputs, set `max_tokens` conservatively.
45
+
44
46
  ## `paw.compile`
45
47
 
46
48
  ```python
@@ -34,7 +34,11 @@ Compile a specification.
34
34
  | `name` | string | No | Display title. Auto-generated if omitted. |
35
35
  | `tags` | string[] | No | Tags for discovery. |
36
36
 
37
- **Response (JSON):** includes `job_id`, `status`, `program_id`, `slug` (if created), `pseudo_program`, and `timings`.
37
+ **Response:**
38
+ - **202 Accepted** on success — JSON with `job_id`, `status`, `program_id`, `slug` (if created), `pseudo_program`, and `timings`
39
+ - **400** — unknown compiler
40
+ - **422** — spec too short, too long, or token limit exceeded
41
+ - **500** — compilation failed (server error)
38
42
 
39
43
  ### `POST /infer`
40
44
 
@@ -88,7 +92,11 @@ Owner-only fields: `public`, `name`, `tags`. Any authenticated user can set thei
88
92
 
89
93
  ### `GET /programs/{id_or_slug}/download`
90
94
 
91
- Redirects to the Hugging Face CDN for the `.paw` artifact. Private programs return 404 to non-owners.
95
+ Downloads the `.paw` artifact. Returns one of:
96
+ - **302** redirect to HuggingFace CDN (program already uploaded)
97
+ - **200** file from server (freshly compiled, not yet on HF)
98
+ - **202 Accepted** with `Retry-After` header (program assets still generating, retry after the indicated seconds)
99
+ - **404** if program not found or private and not owned by the requester
92
100
 
93
101
  ### `GET /programs/resolve/{slug}`
94
102
 
@@ -23,7 +23,7 @@ API reference:
23
23
  """
24
24
  from __future__ import annotations
25
25
 
26
- __version__ = "0.2.3"
26
+ __version__ = "0.2.5"
27
27
 
28
28
  from .config import get_api_url, get_api_key, set_api_key
29
29
 
@@ -108,25 +108,38 @@ class PAWClient:
108
108
  """Download a .paw bundle to the local cache.
109
109
 
110
110
  Returns the path to the extracted program directory.
111
- Retries on 404 since freshly compiled programs may still be uploading.
111
+ Handles 202 Accepted (assets still generating) and 302 redirects (HF CDN).
112
112
  """
113
113
  program_dir = config.get_programs_dir() / program_id
114
114
  if (program_dir / "prompt_template.txt").exists():
115
115
  return program_dir
116
116
 
117
- max_retries = 10
118
- for attempt in range(max_retries):
117
+ max_wait = 30
118
+ elapsed = 0
119
+ resp = None
120
+ while elapsed < max_wait:
119
121
  resp = httpx.get(
120
122
  f"{self._api_url}/api/v1/programs/{program_id}/download",
121
123
  headers=self._headers(),
122
124
  timeout=60.0,
123
125
  follow_redirects=True,
124
126
  )
125
- if resp.status_code == 404 and attempt < max_retries - 1:
127
+ if resp.status_code == 202:
128
+ retry_after = int(resp.headers.get("Retry-After", "3"))
129
+ time.sleep(retry_after)
130
+ elapsed += retry_after
131
+ continue
132
+ if resp.status_code == 404 and elapsed < max_wait - 3:
126
133
  time.sleep(3)
134
+ elapsed += 3
127
135
  continue
128
136
  resp.raise_for_status()
129
137
  break
138
+ else:
139
+ raise RuntimeError(
140
+ f"Program {program_id} assets not ready after {max_wait}s. "
141
+ "The program may still be generating. Try again shortly."
142
+ )
130
143
 
131
144
  program_dir.mkdir(parents=True, exist_ok=True)
132
145
  paw_path = program_dir / f"{program_id}.paw"
@@ -37,6 +37,7 @@ class PawFunction:
37
37
  program_dir = Path(program_dir)
38
38
  self._program_dir = program_dir
39
39
  self._verbose = verbose
40
+ self._n_ctx = n_ctx
40
41
 
41
42
  meta_path = program_dir / "meta.json"
42
43
  if meta_path.exists():
@@ -67,24 +68,24 @@ class PawFunction:
67
68
  n_gpu_layers=n_gpu_layers,
68
69
  verbose=verbose,
69
70
  )
71
+
72
+ adapter_path = program_dir / "adapter.gguf"
73
+ if adapter_path.exists():
74
+ self._adapter = llama_cpp.llama_adapter_lora_init(
75
+ self._llm.model, str(adapter_path).encode("utf-8"),
76
+ )
77
+ if self._adapter:
78
+ llama_cpp.llama_set_adapter_lora(self._llm.ctx, self._adapter, 1.0)
79
+ else:
80
+ raise RuntimeError(f"Failed to load LoRA adapter: {adapter_path}")
81
+ else:
82
+ self._adapter = None
70
83
  finally:
71
84
  if not verbose:
72
85
  _os.dup2(_old_stderr, _stderr_fd)
73
86
  _os.close(_devnull)
74
87
  _os.close(_old_stderr)
75
88
 
76
- adapter_path = program_dir / "adapter.gguf"
77
- if adapter_path.exists():
78
- self._adapter = llama_cpp.llama_adapter_lora_init(
79
- self._llm.model, str(adapter_path).encode("utf-8"),
80
- )
81
- if self._adapter:
82
- llama_cpp.llama_set_adapter_lora(self._llm.ctx, self._adapter, 1.0)
83
- else:
84
- raise RuntimeError(f"Failed to load LoRA adapter: {adapter_path}")
85
- else:
86
- self._adapter = None
87
-
88
89
  placeholder = "{INPUT_PLACEHOLDER}"
89
90
  self._use_special = interpreter not in ("gpt2",)
90
91
 
@@ -151,20 +152,19 @@ class PawFunction:
151
152
  def __call__(
152
153
  self,
153
154
  input_text: str,
154
- max_tokens: int = 512,
155
+ max_tokens: int | None = None,
155
156
  temperature: float = 0.0,
156
157
  ) -> str:
157
158
  """Run the program on an input.
158
159
 
159
160
  Args:
160
161
  input_text: The input to process.
161
- max_tokens: Maximum output tokens.
162
+ max_tokens: Maximum output tokens. None = use all remaining context.
162
163
  temperature: Sampling temperature (0 = greedy).
163
164
 
164
165
  Returns:
165
166
  The program's output as a string.
166
167
  """
167
- # Reset to prefix state: clear everything after the prefix
168
168
  self._llm.n_tokens = self._n_prefix
169
169
 
170
170
  input_with_suffix = input_text + self._suffix_text
@@ -174,10 +174,21 @@ class PawFunction:
174
174
  special=self._use_special,
175
175
  )
176
176
 
177
+ tokens_used = self._n_prefix + len(input_tokens)
178
+ remaining = self._n_ctx - tokens_used
179
+ if remaining <= 0:
180
+ raise ValueError(
181
+ f"Input too long: {tokens_used} tokens used (prefix={self._n_prefix}, "
182
+ f"input={len(input_tokens)}), context window={self._n_ctx}. "
183
+ f"Shorten your input."
184
+ )
185
+
186
+ gen_limit = remaining if max_tokens is None else min(max_tokens, remaining)
187
+
177
188
  self._llm.eval(input_tokens)
178
189
 
179
190
  output_tokens = []
180
- for _ in range(max_tokens):
191
+ for _ in range(gen_limit):
181
192
  token = self._llm.sample(
182
193
  temp=temperature if temperature > 0 else 0,
183
194
  )
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.2.3"
7
+ version = "0.2.5"
8
8
  description = "Compile natural language specifications into neural programs that run locally via llama.cpp."
9
9
  readme = "PYPI_README.md"
10
10
  requires-python = ">=3.9"
@@ -57,6 +57,9 @@ class _FallbackLimiter:
57
57
  return True
58
58
 
59
59
 
60
+ _API_VERSION = "0.4.0"
61
+
62
+
60
63
  def create_app() -> FastAPI:
61
64
  settings = get_settings()
62
65
  configure_logging(
@@ -64,10 +67,13 @@ def create_app() -> FastAPI:
64
67
  json_format=(settings.LOG_FORMAT == "json"),
65
68
  )
66
69
 
70
+ if settings.JWT_SECRET == "dev-secret-change-in-production":
71
+ raise RuntimeError("JWT_SECRET must be set in .env -- refusing to start with the default value")
72
+
67
73
  app = FastAPI(
68
74
  title="Programs as Weights API",
69
75
  description="Compile natural language specs into neural functions",
70
- version="0.4.0",
76
+ version=_API_VERSION,
71
77
  docs_url="/api/docs",
72
78
  openapi_url="/api/openapi.json",
73
79
  )
@@ -21,10 +21,20 @@ from api.models.orm import User
21
21
  logger = structlog.get_logger()
22
22
  router = APIRouter()
23
23
 
24
- # In-memory session store (replace with Redis/DB for production)
24
+ # In-memory session store (single-process; cleaned periodically)
25
25
  _sessions: dict[str, dict] = {}
26
26
  _github_states: dict[str, float] = {}
27
27
 
28
+ _SESSION_MAX_AGE = 30 * 24 * 3600 # 30 days, matches cookie max_age
29
+
30
+
31
+ def _cleanup_expired_sessions():
32
+ cutoff = time.time() - _SESSION_MAX_AGE
33
+ expired = [k for k, v in _sessions.items() if v.get("created_at", 0) < cutoff]
34
+ for k in expired:
35
+ del _sessions[k]
36
+
37
+
28
38
  GITHUB_AUTHORIZE_URL = "https://github.com/login/oauth/authorize"
29
39
  GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token"
30
40
  GITHUB_USER_URL = "https://api.github.com/user"
@@ -44,6 +54,8 @@ async def github_login(request: Request):
44
54
  for k in [k for k, v in _github_states.items() if v < cutoff]:
45
55
  del _github_states[k]
46
56
 
57
+ _cleanup_expired_sessions()
58
+
47
59
  params = (
48
60
  f"?client_id={settings.GITHUB_CLIENT_ID}"
49
61
  f"&redirect_uri=https://programasweights.com/api/v1/auth/github/callback"
@@ -2,6 +2,7 @@
2
2
  Compile endpoint: submit specs for compilation into neural programs.
3
3
  """
4
4
 
5
+ import time
5
6
  import uuid
6
7
 
7
8
  import httpx
@@ -19,8 +20,18 @@ logger = structlog.get_logger()
19
20
 
20
21
  router = APIRouter()
21
22
 
22
- # In-memory job store (will be replaced with PostgreSQL + Celery)
23
+ # In-memory job store (single-process; evicted after 1 hour)
23
24
  _jobs: dict[str, dict] = {}
25
+ _JOBS_MAX_AGE = 3600
26
+
27
+
28
+ def _evict_old_jobs():
29
+ import time as _time
30
+ cutoff = _time.time() - _JOBS_MAX_AGE
31
+ expired = [k for k, v in _jobs.items() if v.get("created_at", 0) < cutoff]
32
+ for k in expired:
33
+ del _jobs[k]
34
+
24
35
 
25
36
  # Compiler registry loaded from JSON file
26
37
  import json as _json
@@ -87,6 +98,8 @@ async def submit_compile(
87
98
  },
88
99
  )
89
100
 
101
+ _evict_old_jobs()
102
+
90
103
  job_id = str(uuid.uuid4())[:12]
91
104
  _jobs[job_id] = {
92
105
  "status": "queued",
@@ -94,6 +107,7 @@ async def submit_compile(
94
107
  "compiler_snapshot": snapshot,
95
108
  "program_id": None,
96
109
  "error": None,
110
+ "created_at": time.time(),
97
111
  }
98
112
 
99
113
  import asyncio
@@ -140,7 +154,7 @@ async def submit_compile(
140
154
  public=req.public,
141
155
  name=req.name,
142
156
  tags=req.tags,
143
- hf_url=f"https://huggingface.co/programasweights/paw-programs/resolve/main/{pid}.paw",
157
+ hf_url=None,
144
158
  ))
145
159
 
146
160
  db.add(CompileLog(
@@ -244,12 +258,11 @@ async def submit_compile(
244
258
  _jobs[job_id]["error"] = str(e)
245
259
  logger.exception("compile_failed", spec_len=len(req.spec), error=str(e))
246
260
 
247
- return CompileResponse(
248
- job_id=job_id,
249
- status="failed",
250
- compiler_snapshot=snapshot,
251
- error=str(e),
252
- )
261
+ raise HTTPException(status_code=500, detail={
262
+ "error": "compile_failed",
263
+ "message": "Compilation failed. Please try again.",
264
+ "request_id": getattr(request.state, "request_id", "unknown"),
265
+ })
253
266
 
254
267
 
255
268
  @router.get("/compile/{job_id}", response_model=CompileStatusResponse)
@@ -8,6 +8,8 @@ from fastapi import APIRouter, Request
8
8
 
9
9
  from api.models.schemas import HealthResponse
10
10
 
11
+ _API_VERSION = "0.4.0"
12
+
11
13
  router = APIRouter()
12
14
 
13
15
  _start_time = time.time()
@@ -21,7 +23,7 @@ async def health_check(request: Request):
21
23
 
22
24
  return HealthResponse(
23
25
  status="healthy" if not warnings else "degraded",
24
- version="0.2.0",
26
+ version=_API_VERSION,
25
27
  gpu_services={},
26
28
  queue_depth=0,
27
29
  uptime_s=time.time() - _start_time,
@@ -107,9 +107,9 @@ async def run_inference(
107
107
  except HTTPException:
108
108
  raise
109
109
  except Exception as e:
110
- logger.exception("infer_proxy_failed", program_id=canonical_id)
110
+ logger.exception("infer_proxy_failed", program_id=canonical_id, error=str(e))
111
111
  raise HTTPException(status_code=502, detail={
112
112
  "error": "inference_failed",
113
- "message": str(e)[:200],
113
+ "message": "Inference failed. Please try again.",
114
114
  "request_id": request_id,
115
115
  })
@@ -6,7 +6,7 @@ import re
6
6
  from pathlib import Path
7
7
 
8
8
  from fastapi import APIRouter, Depends, HTTPException, Request
9
- from fastapi.responses import FileResponse, RedirectResponse
9
+ from fastapi.responses import FileResponse, JSONResponse, RedirectResponse
10
10
 
11
11
  from api.config import get_settings
12
12
  from sqlalchemy import func, select, or_
@@ -125,6 +125,8 @@ async def list_programs(
125
125
  ):
126
126
  from sqlalchemy import text as sa_text
127
127
 
128
+ per_page = min(per_page, 100)
129
+
128
130
  if mine and user:
129
131
  aliased_ids = select(Alias.program_id).where(Alias.owner_id == user.id).scalar_subquery()
130
132
  query = select(Program).where(
@@ -201,7 +203,7 @@ async def list_programs(
201
203
  use_fts = True
202
204
  else:
203
205
  alias_match = select(Alias.program_id).where(
204
- Alias.slug.ilike(f"%{search_term}%")
206
+ Alias.slug_name.ilike(f"%{search_term}%")
205
207
  ).scalar_subquery()
206
208
  conditions = [
207
209
  Program.spec.ilike(f"%{search_term}%"),
@@ -414,6 +416,10 @@ async def download_program(
414
416
  program.downloads = (program.downloads or 0) + 1
415
417
  await db.commit()
416
418
 
419
+ if program.hf_url:
420
+ hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
421
+ return RedirectResponse(url=hf_url, status_code=302)
422
+
417
423
  settings = get_settings()
418
424
  local_paw = Path(settings.STORAGE_PATH) / program.id / f"{program.id}.paw"
419
425
  if local_paw.exists():
@@ -423,8 +429,11 @@ async def download_program(
423
429
  filename=f"{program.id}.paw",
424
430
  )
425
431
 
426
- hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
427
- return RedirectResponse(url=hf_url, status_code=302)
432
+ return JSONResponse(
433
+ status_code=202,
434
+ content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
435
+ headers={"Retry-After": "3"},
436
+ )
428
437
 
429
438
 
430
439
  ALLOWED_ASSETS = {"adapter.gguf", "prompt_template.txt", "prefix_cache.bin", "prefix_tokens.json"}
@@ -443,18 +452,25 @@ async def serve_program_asset(
443
452
  if not program:
444
453
  raise HTTPException(status_code=404, detail="Asset not found")
445
454
 
455
+ if program.hf_url:
456
+ hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}/{filename}"
457
+ return RedirectResponse(url=hf_url, status_code=302)
458
+
446
459
  settings = get_settings()
447
460
  asset_path = Path(settings.STORAGE_PATH) / program.id / filename
448
- if not asset_path.exists():
449
- raise HTTPException(status_code=404, detail="Asset not found on this server")
450
-
451
- media_type = "application/octet-stream"
452
- if filename.endswith(".txt"):
453
- media_type = "text/plain"
454
- elif filename.endswith(".json"):
455
- media_type = "application/json"
456
-
457
- return FileResponse(path=str(asset_path), media_type=media_type, filename=filename)
461
+ if asset_path.exists():
462
+ media_type = "application/octet-stream"
463
+ if filename.endswith(".txt"):
464
+ media_type = "text/plain"
465
+ elif filename.endswith(".json"):
466
+ media_type = "application/json"
467
+ return FileResponse(path=str(asset_path), media_type=media_type, filename=filename)
468
+
469
+ return JSONResponse(
470
+ status_code=202,
471
+ content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
472
+ headers={"Retry-After": "3"},
473
+ )
458
474
 
459
475
 
460
476
  # --- Update program ---
@@ -509,10 +509,22 @@ class CompileProvider:
509
509
  upload_all_to_hf, program_id, adapter_dir,
510
510
  self.interpreter, paw_path,
511
511
  )
512
- logger.info("hf_upload_done", program_id=program_id, hf_url=hf_url)
513
512
 
514
- await asyncio.sleep(300)
515
- cleanup_after_upload(adapter_dir, program_id)
513
+ if hf_url:
514
+ from api.models.database import get_engine
515
+ from sqlalchemy import text as sa_text
516
+ engine = get_engine()
517
+ with engine.connect() as conn:
518
+ conn.execute(
519
+ sa_text("UPDATE programs SET hf_url = :url WHERE id = :pid"),
520
+ {"url": hf_url, "pid": program_id},
521
+ )
522
+ conn.commit()
523
+ logger.info("hf_upload_done", program_id=program_id, hf_url=hf_url)
524
+ await asyncio.sleep(300)
525
+ cleanup_after_upload(adapter_dir, program_id)
526
+ else:
527
+ logger.warning("hf_upload_failed_keeping_local", program_id=program_id)
516
528
  except Exception:
517
529
  logger.exception("background_failed", program_id=program_id)
518
530
 
@@ -1,4 +1,4 @@
1
- import { BrowserRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
1
+ import { BrowserRouter as Router, Routes, Route, Navigate, useLocation, Link } from 'react-router-dom';
2
2
  import { Component, useEffect } from 'react';
3
3
  import type { ReactNode } from 'react';
4
4
  import { Toaster } from 'react-hot-toast';
@@ -55,6 +55,18 @@ class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boole
55
55
  }
56
56
  }
57
57
 
58
+ function NotFoundPage() {
59
+ return (
60
+ <div className="min-h-[60vh] flex items-center justify-center">
61
+ <div className="text-center">
62
+ <h1 className="text-6xl font-bold text-gray-300 mb-4">404</h1>
63
+ <p className="text-xl text-gray-600 mb-6">Page not found</p>
64
+ <Link to="/" className="px-5 py-2.5 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors text-sm font-medium">Back to home</Link>
65
+ </div>
66
+ </div>
67
+ );
68
+ }
69
+
58
70
  function App() {
59
71
  return (
60
72
  <ErrorBoundary>
@@ -96,6 +108,8 @@ function App() {
96
108
  <Route path="/leaderboard" element={<Navigate to="/hub?sort=popular" replace />} />
97
109
  <Route path="/program/:id" element={<Navigate to="/hub" replace />} />
98
110
  <Route path="/publish" element={<Navigate to="/hub/upload" replace />} />
111
+
112
+ <Route path="*" element={<NotFoundPage />} />
99
113
  </Routes>
100
114
  </main>
101
115
  <Footer />