programasweights 0.2.2__tar.gz → 0.2.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 (500) hide show
  1. {programasweights-0.2.2 → programasweights-0.2.3}/AGENTS.md +21 -42
  2. {programasweights-0.2.2 → programasweights-0.2.3}/PKG-INFO +1 -1
  3. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/__init__.py +2 -1
  4. {programasweights-0.2.2 → programasweights-0.2.3}/pyproject.toml +1 -1
  5. {programasweights-0.2.2 → programasweights-0.2.3}/server/.env.example +0 -1
  6. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/config.py +1 -2
  7. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/main.py +50 -4
  8. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/models/schemas.py +1 -0
  9. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/auth.py +0 -1
  10. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/health.py +8 -3
  11. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/programs.py +4 -3
  12. {programasweights-0.2.2 → programasweights-0.2.3}/tests/test_sdk.sh +1 -1
  13. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/e2e/full.spec.ts +65 -0
  14. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/index.html +5 -5
  15. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/App.tsx +34 -1
  16. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/AboutPage.tsx +3 -1
  17. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/AgentsPage.tsx +48 -82
  18. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/AuthorPage.tsx +14 -7
  19. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/BrowserPage.tsx +26 -11
  20. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/CasesSection.tsx +8 -5
  21. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/Header.tsx +14 -11
  22. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/HubPage.tsx +5 -5
  23. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/HubProgramPage.tsx +41 -24
  24. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/HubUploadPage.tsx +8 -1
  25. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/MainInterface.tsx +39 -15
  26. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/NavigationHelper.tsx +8 -3
  27. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/ProfilePage.tsx +23 -21
  28. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/SettingsPage.tsx +18 -22
  29. programasweights-0.2.3/web-app/frontend/src/contexts/AuthContext.tsx +45 -0
  30. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/types/index.ts +2 -0
  31. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/utils/api.ts +0 -8
  32. programasweights-0.2.3/web-app/frontend/test-results/.last-run.json +4 -0
  33. {programasweights-0.2.2 → programasweights-0.2.3}/.cursor/rules/sdk-publishing.mdc +0 -0
  34. {programasweights-0.2.2 → programasweights-0.2.3}/.cursor/rules/vllm-deployment.mdc +0 -0
  35. {programasweights-0.2.2 → programasweights-0.2.3}/.git +0 -0
  36. {programasweights-0.2.2 → programasweights-0.2.3}/.github/workflows/web-sdk.yml +0 -0
  37. {programasweights-0.2.2 → programasweights-0.2.3}/.gitignore +0 -0
  38. {programasweights-0.2.2 → programasweights-0.2.3}/.gitmodules +0 -0
  39. {programasweights-0.2.2 → programasweights-0.2.3}/.hatch_build.toml +0 -0
  40. {programasweights-0.2.2 → programasweights-0.2.3}/.readthedocs.yaml +0 -0
  41. {programasweights-0.2.2 → programasweights-0.2.3}/1apple.jpg +0 -0
  42. {programasweights-0.2.2 → programasweights-0.2.3}/1apple2.jpg +0 -0
  43. {programasweights-0.2.2 → programasweights-0.2.3}/2apples.jpg +0 -0
  44. {programasweights-0.2.2 → programasweights-0.2.3}/2apples2.jpg +0 -0
  45. {programasweights-0.2.2 → programasweights-0.2.3}/3apples.jpg +0 -0
  46. {programasweights-0.2.2 → programasweights-0.2.3}/3apples2.jpg +0 -0
  47. {programasweights-0.2.2 → programasweights-0.2.3}/479400.png +0 -0
  48. {programasweights-0.2.2 → programasweights-0.2.3}/4apples.jpg +0 -0
  49. {programasweights-0.2.2 → programasweights-0.2.3}/4apples2.jpg +0 -0
  50. {programasweights-0.2.2 → programasweights-0.2.3}/4apples3.jpg +0 -0
  51. {programasweights-0.2.2 → programasweights-0.2.3}/4apples4.jpg +0 -0
  52. {programasweights-0.2.2 → programasweights-0.2.3}/5apples.jpg +0 -0
  53. {programasweights-0.2.2 → programasweights-0.2.3}/6apples.jpg +0 -0
  54. {programasweights-0.2.2 → programasweights-0.2.3}/8apples.jpg +0 -0
  55. {programasweights-0.2.2 → programasweights-0.2.3}/9apples.jpg +0 -0
  56. {programasweights-0.2.2 → programasweights-0.2.3}/CHANGELOG.md +0 -0
  57. {programasweights-0.2.2 → programasweights-0.2.3}/FLOW_SUMMARY.md +0 -0
  58. {programasweights-0.2.2 → programasweights-0.2.3}/LICENSE +0 -0
  59. {programasweights-0.2.2 → programasweights-0.2.3}/MANIFEST.in +0 -0
  60. {programasweights-0.2.2 → programasweights-0.2.3}/ONNX_MIGRATION_PLAN.md +0 -0
  61. {programasweights-0.2.2 → programasweights-0.2.3}/PREFIX_TOKENS_DESIGN.md +0 -0
  62. {programasweights-0.2.2 → programasweights-0.2.3}/PYPI_README.md +0 -0
  63. {programasweights-0.2.2 → programasweights-0.2.3}/README.md +0 -0
  64. {programasweights-0.2.2 → programasweights-0.2.3}/TRUNCATION_CHANGES.md +0 -0
  65. {programasweights-0.2.2 → programasweights-0.2.3}/USE_CASES_AND_IDEAS.md +0 -0
  66. {programasweights-0.2.2 → programasweights-0.2.3}/VERIFICATION_USAGE.md +0 -0
  67. {programasweights-0.2.2 → programasweights-0.2.3}/analyze_dataset.py +0 -0
  68. {programasweights-0.2.2 → programasweights-0.2.3}/analyze_lengths.py +0 -0
  69. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/code_prompt.md +0 -0
  70. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  71. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/openai_batch_request.py +0 -0
  72. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/prepare_alchemist_data.py +0 -0
  73. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/prepare_var_bench_data.py +0 -0
  74. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/python_code_sandbox.py +0 -0
  75. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/script_evaluation_var_bench.sh +0 -0
  76. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/script_evalution_evaluation.sh +0 -0
  77. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/script_evalution_request.sh +0 -0
  78. {programasweights-0.2.2 → programasweights-0.2.3}/baselines/script_evalution_statistics.sh +0 -0
  79. {programasweights-0.2.2 → programasweights-0.2.3}/benchmark_pytorch_vs_onnx.py +0 -0
  80. {programasweights-0.2.2 → programasweights-0.2.3}/benchmark_user_experience.py +0 -0
  81. {programasweights-0.2.2 → programasweights-0.2.3}/check_dataset.py +0 -0
  82. {programasweights-0.2.2 → programasweights-0.2.3}/combine_datasets.py +0 -0
  83. {programasweights-0.2.2 → programasweights-0.2.3}/compare_datasets.py +0 -0
  84. {programasweights-0.2.2 → programasweights-0.2.3}/compare_old_vs_regen.py +0 -0
  85. {programasweights-0.2.2 → programasweights-0.2.3}/convert_paw_to_svg.py +0 -0
  86. {programasweights-0.2.2 → programasweights-0.2.3}/create_favicon_sizes.py +0 -0
  87. {programasweights-0.2.2 → programasweights-0.2.3}/create_visualization_from_log.py +0 -0
  88. {programasweights-0.2.2 → programasweights-0.2.3}/create_vqa_dataset.py +0 -0
  89. {programasweights-0.2.2 → programasweights-0.2.3}/debug_cache.py +0 -0
  90. {programasweights-0.2.2 → programasweights-0.2.3}/debug_eos_example.sh +0 -0
  91. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  92. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/002-q4_0-adapter-format.md +0 -0
  93. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/003-single-spec-field.md +0 -0
  94. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/004-compiler-naming.md +0 -0
  95. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/005-vllm-hidden-states.md +0 -0
  96. {programasweights-0.2.2 → programasweights-0.2.3}/docs/adr/006-email-api-key-auth.md +0 -0
  97. {programasweights-0.2.2 → programasweights-0.2.3}/docs/advanced/adrs.md +0 -0
  98. {programasweights-0.2.2 → programasweights-0.2.3}/docs/advanced/architecture.md +0 -0
  99. {programasweights-0.2.2 → programasweights-0.2.3}/docs/api-reference/cli.md +0 -0
  100. {programasweights-0.2.2 → programasweights-0.2.3}/docs/api-reference/python-sdk.md +0 -0
  101. {programasweights-0.2.2 → programasweights-0.2.3}/docs/api-reference/rest-api.md +0 -0
  102. {programasweights-0.2.2 → programasweights-0.2.3}/docs/architecture.md +0 -0
  103. {programasweights-0.2.2 → programasweights-0.2.3}/docs/getting-started/first-program.md +0 -0
  104. {programasweights-0.2.2 → programasweights-0.2.3}/docs/getting-started/installation.md +0 -0
  105. {programasweights-0.2.2 → programasweights-0.2.3}/docs/getting-started/naming-programs.md +0 -0
  106. {programasweights-0.2.2 → programasweights-0.2.3}/docs/guide/browser-inference.md +0 -0
  107. {programasweights-0.2.2 → programasweights-0.2.3}/docs/guide/how-it-works.md +0 -0
  108. {programasweights-0.2.2 → programasweights-0.2.3}/docs/guide/local-inference.md +0 -0
  109. {programasweights-0.2.2 → programasweights-0.2.3}/docs/guide/writing-good-specs.md +0 -0
  110. {programasweights-0.2.2 → programasweights-0.2.3}/docs/hub/browsing-programs.md +0 -0
  111. {programasweights-0.2.2 → programasweights-0.2.3}/docs/hub/feedback-cases.md +0 -0
  112. {programasweights-0.2.2 → programasweights-0.2.3}/docs/hub/publishing-programs.md +0 -0
  113. {programasweights-0.2.2 → programasweights-0.2.3}/docs/index.md +0 -0
  114. {programasweights-0.2.2 → programasweights-0.2.3}/docs/requirements.txt +0 -0
  115. {programasweights-0.2.2 → programasweights-0.2.3}/estimate_data_gen_cost.py +0 -0
  116. {programasweights-0.2.2 → programasweights-0.2.3}/eval.py +0 -0
  117. {programasweights-0.2.2 → programasweights-0.2.3}/examples/flask_app.py +0 -0
  118. {programasweights-0.2.2 → programasweights-0.2.3}/examples/jupyter_notebook.py +0 -0
  119. {programasweights-0.2.2 → programasweights-0.2.3}/examples/langchain_integration.py +0 -0
  120. {programasweights-0.2.2 → programasweights-0.2.3}/examples/replace_openai.py +0 -0
  121. {programasweights-0.2.2 → programasweights-0.2.3}/export_to_onnx.py +0 -0
  122. {programasweights-0.2.2 → programasweights-0.2.3}/extract_models.py +0 -0
  123. {programasweights-0.2.2 → programasweights-0.2.3}/inspect_data_dirs.py +0 -0
  124. {programasweights-0.2.2 → programasweights-0.2.3}/latest_export.csv +0 -0
  125. {programasweights-0.2.2 → programasweights-0.2.3}/log.train.81920.morecategories.extraprefix +0 -0
  126. {programasweights-0.2.2 → programasweights-0.2.3}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  127. {programasweights-0.2.2 → programasweights-0.2.3}/merge_datasets.py +0 -0
  128. {programasweights-0.2.2 → programasweights-0.2.3}/mkdocs.yml +0 -0
  129. {programasweights-0.2.2 → programasweights-0.2.3}/paw.png +0 -0
  130. {programasweights-0.2.2 → programasweights-0.2.3}/paw.svg +0 -0
  131. {programasweights-0.2.2 → programasweights-0.2.3}/process_im2latex_dataset.py +0 -0
  132. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/artifacts.py +0 -0
  133. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/cache.py +0 -0
  134. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/cli.py +0 -0
  135. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/client.py +0 -0
  136. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/compiler/__init__.py +0 -0
  137. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/compiler/dummy.py +0 -0
  138. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/config.py +0 -0
  139. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/convert_peft_to_paw.py +0 -0
  140. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/paw_format.py +0 -0
  141. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/runtime/__init__.py +0 -0
  142. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/runtime/interpreter.py +0 -0
  143. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/runtime/interpreter_onnx.py +0 -0
  144. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights/runtime_llamacpp.py +0 -0
  145. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/__init__.py +0 -0
  146. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/compiler/__init__.py +0 -0
  147. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/lora_format.py +0 -0
  148. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/runtime/__init__.py +0 -0
  149. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  150. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  151. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/tests/test_lora_format.py +0 -0
  152. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/tests/test_training.py +0 -0
  153. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/train_lora.py +0 -0
  154. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/training/__init__.py +0 -0
  155. {programasweights-0.2.2 → programasweights-0.2.3}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  156. {programasweights-0.2.2 → programasweights-0.2.3}/run_eval.sh +0 -0
  157. {programasweights-0.2.2 → programasweights-0.2.3}/run_training.sh +0 -0
  158. {programasweights-0.2.2 → programasweights-0.2.3}/scripts/filter_table_by_length.py +0 -0
  159. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/env.py +0 -0
  160. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/script.py.mako +0 -0
  161. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/versions/001_initial_schema.py +0 -0
  162. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
  163. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
  164. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
  165. {programasweights-0.2.2 → programasweights-0.2.3}/server/alembic.ini +0 -0
  166. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/__init__.py +0 -0
  167. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/dependencies.py +0 -0
  168. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/logging_config.py +0 -0
  169. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/middleware/__init__.py +0 -0
  170. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/middleware/rate_limit.py +0 -0
  171. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/models/__init__.py +0 -0
  172. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/models/database.py +0 -0
  173. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/models/orm.py +0 -0
  174. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/__init__.py +0 -0
  175. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/compile.py +0 -0
  176. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/feedback.py +0 -0
  177. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/infer.py +0 -0
  178. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/routes/models_info.py +0 -0
  179. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/__init__.py +0 -0
  180. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/auto_tag_service.py +0 -0
  181. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/auto_title_service.py +0 -0
  182. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/compile_provider.py +0 -0
  183. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/compile_service.py +0 -0
  184. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/infer_service.py +0 -0
  185. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/search_service.py +0 -0
  186. {programasweights-0.2.2 → programasweights-0.2.3}/server/api/services/storage_service.py +0 -0
  187. {programasweights-0.2.2 → programasweights-0.2.3}/server/benchmarks/benchmark_api.py +0 -0
  188. {programasweights-0.2.2 → programasweights-0.2.3}/server/benchmarks/handcrafted_specs.json +0 -0
  189. {programasweights-0.2.2 → programasweights-0.2.3}/server/benchmarks/last_benchmark_results.json +0 -0
  190. {programasweights-0.2.2 → programasweights-0.2.3}/server/benchmarks/last_stress_results.json +0 -0
  191. {programasweights-0.2.2 → programasweights-0.2.3}/server/benchmarks/stress_test.py +0 -0
  192. {programasweights-0.2.2 → programasweights-0.2.3}/server/compiler_registry.json +0 -0
  193. {programasweights-0.2.2 → programasweights-0.2.3}/server/provider_configs/gpt2.json +0 -0
  194. {programasweights-0.2.2 → programasweights-0.2.3}/server/provider_configs/qwen3-0.6b.json +0 -0
  195. {programasweights-0.2.2 → programasweights-0.2.3}/server/requirements.txt +0 -0
  196. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
  197. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/ablation_search.py +0 -0
  198. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/backfill_hf_browser_assets.py +0 -0
  199. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/backfill_hf_safetensors.py +0 -0
  200. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/backfill_interestingness.py +0 -0
  201. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/backfill_tags.py +0 -0
  202. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/backfill_titles.py +0 -0
  203. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/benchmark_gpt2.py +0 -0
  204. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/cleanup_storage.py +0 -0
  205. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/eval_search.py +0 -0
  206. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/evict_cold_programs.py +0 -0
  207. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/generate_prefix_cache.py +0 -0
  208. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/launch_gpt2_compiler.py +0 -0
  209. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/launch_qwen3_compiler.py +0 -0
  210. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/patch_vllm.sh +0 -0
  211. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/restart.sh +0 -0
  212. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/start_all.sh +0 -0
  213. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/start_gpt2_services.sh +0 -0
  214. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/start_provider.sh +0 -0
  215. {programasweights-0.2.2 → programasweights-0.2.3}/server/scripts/start_services.sh +0 -0
  216. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/__init__.py +0 -0
  217. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/conftest.py +0 -0
  218. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_auth.py +0 -0
  219. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_compile.py +0 -0
  220. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_errors.py +0 -0
  221. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_infer.py +0 -0
  222. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_integration_gpu.py +0 -0
  223. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_rate_limit.py +0 -0
  224. {programasweights-0.2.2 → programasweights-0.2.3}/server/tests/test_storage.py +0 -0
  225. {programasweights-0.2.2 → programasweights-0.2.3}/server/vllm_models/__init__.py +0 -0
  226. {programasweights-0.2.2 → programasweights-0.2.3}/server/vllm_models/gpt2_lora_patch.py +0 -0
  227. {programasweights-0.2.2 → programasweights-0.2.3}/server/vllm_models/paw_compiler.py +0 -0
  228. {programasweights-0.2.2 → programasweights-0.2.3}/server/vllm_models/prepare_checkpoint.py +0 -0
  229. {programasweights-0.2.2 → programasweights-0.2.3}/server/vllm_models/register.py +0 -0
  230. {programasweights-0.2.2 → programasweights-0.2.3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  231. {programasweights-0.2.2 → programasweights-0.2.3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  232. {programasweights-0.2.2 → programasweights-0.2.3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  233. {programasweights-0.2.2 → programasweights-0.2.3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  234. {programasweights-0.2.2 → programasweights-0.2.3}/test_1spec.py +0 -0
  235. {programasweights-0.2.2 → programasweights-0.2.3}/test_all_caching.py +0 -0
  236. {programasweights-0.2.2 → programasweights-0.2.3}/test_apple_count.py +0 -0
  237. {programasweights-0.2.2 → programasweights-0.2.3}/test_batch_pilot.py +0 -0
  238. {programasweights-0.2.2 → programasweights-0.2.3}/test_compile.py +0 -0
  239. {programasweights-0.2.2 → programasweights-0.2.3}/test_e2e.py +0 -0
  240. {programasweights-0.2.2 → programasweights-0.2.3}/test_execute.py +0 -0
  241. {programasweights-0.2.2 → programasweights-0.2.3}/test_nspecs.py +0 -0
  242. {programasweights-0.2.2 → programasweights-0.2.3}/test_one_vs_two_step.py +0 -0
  243. {programasweights-0.2.2 → programasweights-0.2.3}/test_onnx_correctness.py +0 -0
  244. {programasweights-0.2.2 → programasweights-0.2.3}/test_onnx_hf_model.py +0 -0
  245. {programasweights-0.2.2 → programasweights-0.2.3}/test_onnx_hf_with_images.py +0 -0
  246. {programasweights-0.2.2 → programasweights-0.2.3}/test_paw_format.py +0 -0
  247. {programasweights-0.2.2 → programasweights-0.2.3}/test_thinking_comparison.py +0 -0
  248. {programasweights-0.2.2 → programasweights-0.2.3}/tests/test_offline_cache.py +0 -0
  249. {programasweights-0.2.2 → programasweights-0.2.3}/tests/test_sdk.py +0 -0
  250. {programasweights-0.2.2 → programasweights-0.2.3}/train.py +0 -0
  251. {programasweights-0.2.2 → programasweights-0.2.3}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  252. {programasweights-0.2.2 → programasweights-0.2.3}/training/README.md +0 -0
  253. {programasweights-0.2.2 → programasweights-0.2.3}/training/__init__.py +0 -0
  254. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  255. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/README.md +0 -0
  256. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  257. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/build_user_bench.py +0 -0
  258. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/dry_run_batch.py +0 -0
  259. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/filter_test_data.py +0 -0
  260. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/generate_specs.py +0 -0
  261. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/generate_specs_batch.py +0 -0
  262. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/incremental_merge.py +0 -0
  263. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/merge_and_upload.py +0 -0
  264. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/regenerate_outputs_batch.py +0 -0
  265. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/synthesize_data.py +0 -0
  266. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/synthesize_data_batch.py +0 -0
  267. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/filter_system.txt +0 -0
  268. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/filter_user.txt +0 -0
  269. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/pairs_system.txt +0 -0
  270. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/pairs_user.txt +0 -0
  271. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/specs_system.txt +0 -0
  272. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/specs_user.txt +0 -0
  273. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  274. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  275. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  276. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/verify_system.txt +0 -0
  277. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates/verify_user.txt +0 -0
  278. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/filter_system.txt +0 -0
  279. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/filter_user.txt +0 -0
  280. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/pairs_system.txt +0 -0
  281. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/pairs_user.txt +0 -0
  282. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/specs_system.txt +0 -0
  283. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/specs_user.txt +0 -0
  284. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  285. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  286. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  287. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/verify_system.txt +0 -0
  288. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/templates_old/verify_user.txt +0 -0
  289. {programasweights-0.2.2 → programasweights-0.2.3}/training/data_generation/verify_test_data.py +0 -0
  290. {programasweights-0.2.2 → programasweights-0.2.3}/training/datasets/__init__.py +0 -0
  291. {programasweights-0.2.2 → programasweights-0.2.3}/training/datasets/jsonl_text_pairs.py +0 -0
  292. {programasweights-0.2.2 → programasweights-0.2.3}/training/loops/__init__.py +0 -0
  293. {programasweights-0.2.2 → programasweights-0.2.3}/training/loops/prefix_tuning_sft.py +0 -0
  294. {programasweights-0.2.2 → programasweights-0.2.3}/ttt.py +0 -0
  295. {programasweights-0.2.2 → programasweights-0.2.3}/upload_model.py +0 -0
  296. {programasweights-0.2.2 → programasweights-0.2.3}/upload_onnx_to_huggingface.py +0 -0
  297. {programasweights-0.2.2 → programasweights-0.2.3}/upload_onnx_to_huggingface_with_token.py +0 -0
  298. {programasweights-0.2.2 → programasweights-0.2.3}/utils.py +0 -0
  299. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/HANDOFF.md +0 -0
  300. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/README.md +0 -0
  301. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/__init__.py +0 -0
  302. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/config.py +0 -0
  303. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/main.py +0 -0
  304. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/middleware/__init__.py +0 -0
  305. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/middleware/rate_limit.py +0 -0
  306. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/models.py +0 -0
  307. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/__init__.py +0 -0
  308. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/auth_service.py +0 -0
  309. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/case_service.py +0 -0
  310. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/compiler_service.py +0 -0
  311. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/gpt_service.py +0 -0
  312. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/hub_service.py +0 -0
  313. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/image_service.py +0 -0
  314. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/interpreter_service.py +0 -0
  315. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/services/sql_manager.py +0 -0
  316. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  317. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/utils/__init__.py +0 -0
  318. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/utils/image_placeholders.py +0 -0
  319. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/app/utils/program_hash.py +0 -0
  320. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/clear_db.sh +0 -0
  321. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/clear_tables.sql +0 -0
  322. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/data/programs.db +0 -0
  323. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/env_example.txt +0 -0
  324. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/example_images/README.md +0 -0
  325. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/get_data_examples.py +0 -0
  326. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/requirements.txt +0 -0
  327. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/run_server.py +0 -0
  328. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_analytics_tables.sql +0 -0
  329. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_auth_tables.sql +0 -0
  330. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_cache_tables.sql +0 -0
  331. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_cases_tables.sql +0 -0
  332. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_database.sql +0 -0
  333. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_database_simple.sql +0 -0
  334. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_db.sh +0 -0
  335. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_example_images.py +0 -0
  336. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/setup_hub_tables.sql +0 -0
  337. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/backend/test_compilation_cache.py +0 -0
  338. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/README.md +0 -0
  339. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/e2e/helpers.ts +0 -0
  340. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/e2e/smoke.spec.ts +0 -0
  341. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/eslint.config.js +0 -0
  342. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/package-lock.json +0 -0
  343. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/package.json +0 -0
  344. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/playwright.config.ts +0 -0
  345. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/postcss.config.js +0 -0
  346. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/apple-touch-icon.png +0 -0
  347. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/browser-worker.html +0 -0
  348. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/favicon-16x16.png +0 -0
  349. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/favicon-32x32.png +0 -0
  350. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/paw-192.png +0 -0
  351. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/paw-512.png +0 -0
  352. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/paw.svg +0 -0
  353. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/react-test.html +0 -0
  354. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/test.html +0 -0
  355. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/public/vite.svg +0 -0
  356. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/scripts/deploy.sh +0 -0
  357. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/App.css +0 -0
  358. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/assets/react.svg +0 -0
  359. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  360. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  361. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/DocsPage.tsx +0 -0
  362. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  363. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/Footer.tsx +0 -0
  364. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/LandingPage.tsx +0 -0
  365. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  366. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  367. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
  368. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  369. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/components/TestSection.tsx +0 -0
  370. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/index.css +0 -0
  371. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/src/main.tsx +0 -0
  372. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/tailwind.config.js +0 -0
  373. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/tsconfig.app.json +0 -0
  374. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/tsconfig.json +0 -0
  375. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/tsconfig.node.json +0 -0
  376. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/frontend/vite.config.ts +0 -0
  377. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/nginx-paw.conf +0 -0
  378. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/nginx.conf +0 -0
  379. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/setup_mysql.sh +0 -0
  380. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/start.sh +0 -0
  381. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/test_setup.py +0 -0
  382. {programasweights-0.2.2 → programasweights-0.2.3}/web-app/ttt.py +0 -0
  383. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/.gitignore +0 -0
  384. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/LICENSE +0 -0
  385. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/README.md +0 -0
  386. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
  387. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/e2e/server.ts +0 -0
  388. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/e2e/start-server.ts +0 -0
  389. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/e2e/test-page.html +0 -0
  390. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/loader.test.ts +0 -0
  391. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/__tests__/prompt.test.ts +0 -0
  392. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/examples/basic.html +0 -0
  393. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/package-lock.json +0 -0
  394. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/package.json +0 -0
  395. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/playwright.config.ts +0 -0
  396. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/serve.py +0 -0
  397. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/src/index.ts +0 -0
  398. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/src/loader.ts +0 -0
  399. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/src/runtime.ts +0 -0
  400. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/src/types.ts +0 -0
  401. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/test-standalone.html +0 -0
  402. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/tsconfig.json +0 -0
  403. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/vitest.config.ts +0 -0
  404. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.git +0 -0
  405. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
  406. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
  407. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
  408. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
  409. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.gitignore +0 -0
  410. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.gitmodules +0 -0
  411. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.npmignore +0 -0
  412. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/.prettierignore +0 -0
  413. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/CMakeLists.txt +0 -0
  414. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/LICENCE +0 -0
  415. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/README.md +0 -0
  416. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/README_banner.png +0 -0
  417. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/assets/screenshot_0.png +0 -0
  418. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/actions.hpp +0 -0
  419. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
  420. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/glue.hpp +0 -0
  421. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
  422. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
  423. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
  424. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
  425. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
  426. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
  427. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
  428. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/cpp/wllama.cpp +0 -0
  429. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/basic/index.html +0 -0
  430. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/embeddings/index.html +0 -0
  431. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
  432. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/.gitignore +0 -0
  433. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/README.md +0 -0
  434. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/index.html +0 -0
  435. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/package-lock.json +0 -0
  436. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/package.json +0 -0
  437. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
  438. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
  439. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
  440. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
  441. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
  442. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
  443. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
  444. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
  445. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
  446. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
  447. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
  448. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
  449. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/config.ts +0 -0
  450. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/index.css +0 -0
  451. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
  452. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
  453. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
  454. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
  455. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
  456. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
  457. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
  458. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
  459. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
  460. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
  461. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
  462. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
  463. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
  464. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
  465. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
  466. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
  467. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/guides/intro-v2.md +0 -0
  468. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/index.ts +0 -0
  469. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/package-lock.json +0 -0
  470. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/package.json +0 -0
  471. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
  472. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
  473. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/build_worker.sh +0 -0
  474. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
  475. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
  476. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/http_server.js +0 -0
  477. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/scripts/post_build.sh +0 -0
  478. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/cache-manager.ts +0 -0
  479. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/glue/glue.ts +0 -0
  480. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/glue/messages.ts +0 -0
  481. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/index.ts +0 -0
  482. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/mjs.test.ts +0 -0
  483. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/model-manager.test.ts +0 -0
  484. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/model-manager.ts +0 -0
  485. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
  486. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
  487. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
  488. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
  489. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/utils.test.ts +0 -0
  490. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/utils.ts +0 -0
  491. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
  492. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/wllama.test.ts +0 -0
  493. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/wllama.ts +0 -0
  494. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/worker.ts +0 -0
  495. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
  496. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
  497. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
  498. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/tsconfig.build.json +0 -0
  499. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/tsup.config.ts +0 -0
  500. {programasweights-0.2.2 → programasweights-0.2.3}/web-sdk/wllama/vitest.config.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  # ProgramAsWeights (PAW)
2
2
 
3
- PAW compiles natural language specifications into tiny neural functions that run locally. Each function takes a single text input and returns a single text output. Use PAW when you need fuzzy text processing — classification, extraction, format repair, search, triage — that regex can't handle but a full LLM is overkill for.
3
+ PAW compiles natural language specifications into tiny neural functions that run locally. Each function takes a single text input and returns a single text output. Use it when you need fuzzy text processing — classification, extraction, format repair, search, triage — that regex can't handle but a full LLM is overkill for.
4
4
 
5
5
  Website: https://programasweights.com
6
6
  Docs: https://programasweights.readthedocs.io
@@ -46,7 +46,7 @@ fn("I love this!") # "positive"
46
46
  | Inference speed | ~90ms (server) | ~50ms (server) |
47
47
  | Runs in browser | No | Yes (must use this compiler) |
48
48
 
49
- Default is Standard. Use Compact when you need smaller files or browser deployment.
49
+ Default is Standard. Use Compact for smaller files or browser deployment.
50
50
 
51
51
  ## When to Use PAW
52
52
 
@@ -60,9 +60,7 @@ Default is Standard. Use Compact when you need smaller files or browser deployme
60
60
 
61
61
  ## Writing Good Specs
62
62
 
63
- The spec is the most important input. It defines what your function does.
64
-
65
- **Structure:** Description + examples. Use `Input: ... Output: ...` format.
63
+ Description + examples. Use `Input: ... Output: ...` format.
66
64
 
67
65
  ```python
68
66
  fn = paw.compile_and_load("""
@@ -76,22 +74,16 @@ Output: create
76
74
 
77
75
  Input: Remove old backups
78
76
  Output: delete
79
-
80
- Input: What time is it
81
- Output: other
82
77
  """)
83
78
  ```
84
79
 
85
- **Tips:**
86
- - **5-10 examples** is the sweet spot. More helps for ambiguous tasks.
87
- - For classifiers, add **negative examples** ("Input: ... Output: NONE") to reduce false positives.
88
- - Explicitly state output constraints: "Return ONLY one of: X, Y, Z"
89
- - Spec + examples must fit in ~2048 tokens total (~1500 words).
80
+ - State output constraints explicitly if any: "Return ONLY one of: X, Y, Z"
90
81
  - Each function is stateless: one input, one output. No conversation history.
82
+ - Write a few test inputs with expected outputs, then try different spec phrasings and pick the one that passes the most.
91
83
 
92
84
  ## Browser / JavaScript SDK
93
85
 
94
- Programs compiled with `paw-4b-gpt2` also run entirely in the browser via WebAssembly.
86
+ Programs compiled with `paw-4b-gpt2` run in the browser via WebAssembly.
95
87
 
96
88
  ```bash
97
89
  npm install @programasweights/web
@@ -107,7 +99,7 @@ const result = await fn('Urgent: server is down!');
107
99
 
108
100
  ## Authentication (optional)
109
101
 
110
- Everything works without authentication. Sign in for higher rate limits and program naming.
102
+ Sign in for higher rate limits and program naming. Everything works without it.
111
103
 
112
104
  ```bash
113
105
  export PAW_API_KEY=paw_sk_...
@@ -133,36 +125,30 @@ paw login # save API key
133
125
  `--json` gives structured output. Example:
134
126
 
135
127
  ```json
136
- {"program_id": "a6b454023d41ac9ca845", "slug": null, "status": "ready", "timings": {"total_ms": 2800}}
128
+ {"program_id": "a6b454023d41ac9ca845", "slug": null, "status": "ready", "error": null, "timings": {"total_ms": 2800}}
137
129
  ```
138
130
 
139
131
  ## Full API Reference
140
132
 
141
133
  ```python
142
- # Compile a spec into a neural program
143
134
  program = paw.compile(
144
135
  spec, # natural language specification (str)
145
- compiler="paw-4b-qwen3-0.6b", # compiler model name
146
- slug=None, # optional: URL-safe handle (requires auth)
136
+ compiler="paw-4b-qwen3-0.6b",
137
+ slug=None, # URL-safe handle (requires auth)
147
138
  public=True, # list on public hub
148
139
  )
149
- # Returns: Program(id: str, slug: str|None, status: str, timings: dict, error: str|None)
140
+ # Returns: Program(id, slug, status, timings, error)
150
141
 
151
- # Load a program for local inference
152
142
  fn = paw.function(program) # accepts Program object, hash ID, or slug
153
- fn = paw.function("a6b454023d41ac9ca845") # by hash
154
- fn = paw.function("da03/my-classifier") # by slug
143
+ fn = paw.function("a6b454023d41ac9ca845")
144
+ fn = paw.function("da03/my-classifier")
155
145
 
156
- # The callable signature:
157
146
  result: str = fn(input_text: str, max_tokens=512, temperature=0.0)
158
147
 
159
- # Compile and load in one step
160
148
  fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
161
149
 
162
- # List your programs (requires auth)
163
- programs = paw.list_programs(sort="recent", per_page=20)
150
+ programs = paw.list_programs(sort="recent", per_page=20) # requires auth
164
151
 
165
- # Save API key
166
152
  paw.login()
167
153
  ```
168
154
 
@@ -171,24 +157,17 @@ paw.login()
171
157
  | Error | Cause | Fix |
172
158
  |-------|-------|-----|
173
159
  | `httpx.HTTPStatusError: 404` on download | Program still uploading to CDN | SDK retries automatically. If persistent, recompile. |
174
- | `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) or too long | Adjust spec length. |
160
+ | `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) | Adjust spec length. |
175
161
  | `httpx.HTTPStatusError: 429` | Rate limit exceeded | Wait, or sign in for higher limits. |
176
- | `FileNotFoundError: No prompt_template.txt` | Program not cached and download failed | Check network; the program may not exist. |
177
162
 
178
- ## Performance Notes
163
+ ## Performance
179
164
 
180
- - **First call**: ~500ms (loads base model into memory). Subsequent calls: ~50-90ms.
181
- - **Base model shared**: Multiple functions share one 594 MB model in memory. Each LoRA adapter adds ~22 MB.
182
- - **Thread-safe**: Same function can be called from multiple threads.
183
- - **Blocking**: Each `fn()` call blocks until inference completes.
184
- - **Cache location**: `~/.cache/programasweights/`. Set `PAW_CACHE_DIR` to override.
185
- - **Offline**: After first download, functions work without internet.
165
+ - **First call** ~500ms (loads base model). Subsequent calls ~50-90ms.
166
+ - **Base model shared** across functions. Each LoRA adapter adds ~22 MB.
167
+ - **Thread-safe** and **blocking**.
168
+ - **Cache**: `~/.cache/programasweights/`. Override with `PAW_CACHE_DIR`.
169
+ - **Offline** after first download.
186
170
 
187
171
  ## Browse Programs
188
172
 
189
173
  https://programasweights.com/hub
190
-
191
- ## Add PAW to Your Project
192
-
193
- Copy this file into your project as AGENTS.md:
194
- https://programasweights.com/agents
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.2.2
3
+ Version: 0.2.3
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
@@ -21,8 +21,9 @@ API reference:
21
21
  paw.api_url Server URL (default: https://programasweights.com)
22
22
  paw.api_key API key (set via login() or PAW_API_KEY env var)
23
23
  """
24
+ from __future__ import annotations
24
25
 
25
- __version__ = "0.2.2"
26
+ __version__ = "0.2.3"
26
27
 
27
28
  from .config import get_api_url, get_api_key, set_api_key
28
29
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.2.2"
7
+ version = "0.2.3"
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"
@@ -44,4 +44,3 @@ LOG_FORMAT=json
44
44
  # Server
45
45
  HOST=0.0.0.0
46
46
  PORT=8000
47
- WORKERS=4
@@ -50,10 +50,9 @@ class Settings(BaseSettings):
50
50
  LOG_LEVEL: str = "INFO"
51
51
  LOG_FORMAT: str = "json"
52
52
 
53
- # Server
53
+ # Server (single process: sessions and compile jobs are in-memory)
54
54
  HOST: str = "0.0.0.0"
55
55
  PORT: int = 8000
56
- WORKERS: int = 4
57
56
 
58
57
  # CORS
59
58
  CORS_ORIGINS: list[str] = [
@@ -16,6 +16,8 @@ from redis.asyncio import Redis
16
16
 
17
17
  from api.config import get_settings
18
18
  from api.logging_config import configure_logging, request_id_ctx
19
+ from collections import deque
20
+
19
21
  from api.middleware.rate_limit import (
20
22
  RateLimiter,
21
23
  identifier_for_request,
@@ -29,6 +31,31 @@ gpu_semaphore = asyncio.Semaphore(1)
29
31
 
30
32
  _RATE_LIMITED_PATHS = {"/api/v1/compile", "/api/v1/infer", "/api/v1/feedback"}
31
33
 
34
+ _FALLBACK_LIMITS = {"compile": 13000, "infer": 5700}
35
+ _FALLBACK_WINDOW = 3600
36
+
37
+
38
+ class _FallbackLimiter:
39
+ """In-memory global rate limiter used when Redis is unavailable."""
40
+
41
+ def __init__(self):
42
+ self._windows: dict[str, deque] = {
43
+ "compile": deque(),
44
+ "infer": deque(),
45
+ }
46
+
47
+ def check(self, endpoint: str) -> bool:
48
+ key = "compile" if "compile" in endpoint else "infer"
49
+ now = time.time()
50
+ window = self._windows[key]
51
+ cutoff = now - _FALLBACK_WINDOW
52
+ while window and window[0] < cutoff:
53
+ window.popleft()
54
+ if len(window) >= _FALLBACK_LIMITS[key]:
55
+ return False
56
+ window.append(now)
57
+ return True
58
+
32
59
 
33
60
  def create_app() -> FastAPI:
34
61
  settings = get_settings()
@@ -45,13 +72,13 @@ def create_app() -> FastAPI:
45
72
  openapi_url="/api/openapi.json",
46
73
  )
47
74
 
48
- # Redis + rate limiter (attached to app state for access in routes)
49
75
  redis_client: Redis | None = None
50
76
  rate_limiter: RateLimiter | None = None
77
+ fallback_limiter: _FallbackLimiter | None = None
51
78
 
52
79
  @app.on_event("startup")
53
80
  async def startup_redis():
54
- nonlocal redis_client, rate_limiter
81
+ nonlocal redis_client, rate_limiter, fallback_limiter
55
82
  try:
56
83
  redis_client = Redis.from_url(
57
84
  settings.REDIS_URL, decode_responses=True, socket_connect_timeout=5,
@@ -60,11 +87,14 @@ def create_app() -> FastAPI:
60
87
  rate_limiter = RateLimiter(redis_client)
61
88
  app.state.redis = redis_client
62
89
  app.state.rate_limiter = rate_limiter
90
+ app.state.redis_available = True
63
91
  logger.info("redis_connected", url=settings.REDIS_URL)
64
92
  except Exception:
65
- logger.warning("redis_unavailable", url=settings.REDIS_URL)
93
+ logger.warning("redis_unavailable, using in-memory global fallback limiter", url=settings.REDIS_URL)
66
94
  app.state.redis = None
67
95
  app.state.rate_limiter = None
96
+ app.state.redis_available = False
97
+ fallback_limiter = _FallbackLimiter()
68
98
 
69
99
  @app.on_event("shutdown")
70
100
  async def shutdown_redis():
@@ -90,7 +120,23 @@ def create_app() -> FastAPI:
90
120
  token = request_id_ctx.set(rid)
91
121
  try:
92
122
  # Rate limiting for /compile and /infer
93
- if request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is not None:
123
+ if request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is None and fallback_limiter is not None:
124
+ endpoint = "compile" if "compile" in request.url.path else "infer"
125
+ if not fallback_limiter.check(endpoint):
126
+ logger.info("fallback_rate_limited", endpoint=endpoint)
127
+ return JSONResponse(
128
+ status_code=429,
129
+ content={
130
+ "error": "rate_limit_exceeded",
131
+ "message": "Server is busy. Please try again shortly.",
132
+ "request_id": rid,
133
+ },
134
+ headers={"Retry-After": "10"},
135
+ )
136
+ request.state.has_concurrent_lock = False
137
+ request.state.rate_limit_result = None
138
+
139
+ elif request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is not None:
94
140
  from api.dependencies import get_current_user
95
141
  from api.models.database import get_db
96
142
 
@@ -213,6 +213,7 @@ class HealthResponse(BaseModel):
213
213
  gpu_services: dict
214
214
  queue_depth: int
215
215
  uptime_s: float
216
+ warnings: list[str] = []
216
217
 
217
218
 
218
219
  # --- Error ---
@@ -132,7 +132,6 @@ async def github_callback(code: str, state: str, request: Request, db: AsyncSess
132
132
  "email": email,
133
133
  "avatar_url": avatar_url,
134
134
  "tier": "github",
135
- "github_access_token": access_token,
136
135
  "created_at": time.time(),
137
136
  }
138
137
  _sessions[session_token] = user_info
@@ -4,7 +4,7 @@ Health check endpoint.
4
4
 
5
5
  import time
6
6
 
7
- from fastapi import APIRouter
7
+ from fastapi import APIRouter, Request
8
8
 
9
9
  from api.models.schemas import HealthResponse
10
10
 
@@ -14,11 +14,16 @@ _start_time = time.time()
14
14
 
15
15
 
16
16
  @router.get("/health", response_model=HealthResponse)
17
- async def health_check():
17
+ async def health_check(request: Request):
18
+ warnings = []
19
+ if not getattr(request.app.state, "redis_available", True):
20
+ warnings.append("redis_unavailable: using in-memory global rate limit fallback")
21
+
18
22
  return HealthResponse(
19
- status="healthy",
23
+ status="healthy" if not warnings else "degraded",
20
24
  version="0.2.0",
21
25
  gpu_services={},
22
26
  queue_depth=0,
23
27
  uptime_s=time.time() - _start_time,
28
+ warnings=warnings,
24
29
  )
@@ -146,9 +146,10 @@ async def list_programs(
146
146
  if search_term:
147
147
  try:
148
148
  from redis.asyncio import Redis as AsyncRedis
149
- redis = AsyncRedis.from_url("redis://localhost:6379/0", decode_responses=True, socket_connect_timeout=1)
150
- queue_depth = int(await redis.get("paw:compile_queue_depth") or 0)
151
- await redis.aclose()
149
+ settings = get_settings()
150
+ _redis = AsyncRedis.from_url(settings.REDIS_URL, decode_responses=True, socket_connect_timeout=1)
151
+ queue_depth = int(await _redis.get("paw:compile_queue_depth") or 0)
152
+ await _redis.aclose()
152
153
  server_idle = queue_depth <= 1
153
154
  except Exception:
154
155
  server_idle = True
@@ -39,7 +39,7 @@ PY="$VENV_DIR/bin/python"
39
39
  # Step 2: Install from PyPI (timed)
40
40
  echo ">>> Installing programasweights from PyPI..."
41
41
  START=$(date +%s)
42
- $PIP install --no-cache-dir --upgrade --pre programasweights --extra-index-url "$EXTRA_INDEX" -q 2>&1
42
+ $PIP install --no-cache-dir --upgrade programasweights --extra-index-url "$EXTRA_INDEX" -q 2>&1
43
43
  END=$(date +%s)
44
44
  INSTALL_TIME=$((END - START))
45
45
  echo " Install time: ${INSTALL_TIME}s"
@@ -794,3 +794,68 @@ test.describe('Slug and naming', () => {
794
794
  expect(count).toBeGreaterThanOrEqual(0);
795
795
  });
796
796
  });
797
+
798
+ // ---------------------------------------------------------------------------
799
+ // Auth and permissions (signed-out)
800
+ // ---------------------------------------------------------------------------
801
+
802
+ test.describe('Auth: signed-out behavior', () => {
803
+ test('profile redirects to home when not signed in', async ({ page }) => {
804
+ await page.goto('/profile');
805
+ await page.waitForURL('/', { timeout: 10_000 });
806
+ expect(page.url()).toMatch(/\/$/);
807
+ });
808
+
809
+ test('settings redirects to home when not signed in', async ({ page }) => {
810
+ await page.goto('/settings');
811
+ await page.waitForURL('/', { timeout: 10_000 });
812
+ expect(page.url()).toMatch(/\/$/);
813
+ });
814
+
815
+ test('hub program page does not show slug edit for anonymous users', async ({ page }) => {
816
+ await page.goto(`/hub/${KNOWN_PROGRAM_ID}`);
817
+ await waitForPageLoad(page);
818
+ const pencil = page.locator('button:has(svg.lucide-pencil)');
819
+ const bookmark = page.locator('button:has(svg.lucide-bookmark)');
820
+ await expect(pencil).toHaveCount(0);
821
+ await expect(bookmark).toHaveCount(0);
822
+ });
823
+
824
+ test('case delete buttons not shown for anonymous users', async ({ page }) => {
825
+ await page.goto(`/hub/${KNOWN_PROGRAM_ID}`);
826
+ await waitForPageLoad(page);
827
+ const trash = page.locator('button:has(svg.lucide-trash-2)');
828
+ await expect(trash).toHaveCount(0);
829
+ });
830
+
831
+ test('header does not flash sign-in button then switch', async ({ page }) => {
832
+ await page.goto('/');
833
+ const signIn = page.locator('a[href*="auth/github"]').first();
834
+ await expect(signIn).toBeVisible({ timeout: 10_000 });
835
+ });
836
+ });
837
+
838
+ // ---------------------------------------------------------------------------
839
+ // Mobile menu route-change close
840
+ // ---------------------------------------------------------------------------
841
+
842
+ test.describe('Mobile menu closes on navigation', () => {
843
+ test.use({ viewport: { width: 375, height: 812 } });
844
+
845
+ test('mobile menu closes when navigating via logo', async ({ page }) => {
846
+ await page.goto('/playground');
847
+ await waitForPageLoad(page);
848
+
849
+ const menuBtn = page.locator('button[aria-label*="menu"]').first();
850
+ if (await menuBtn.isVisible()) {
851
+ await menuBtn.click();
852
+ await page.waitForTimeout(300);
853
+ const menu = page.locator('nav.space-y-1').first();
854
+ await expect(menu).toBeVisible();
855
+
856
+ await page.locator('a[href="/"]').first().click();
857
+ await page.waitForTimeout(500);
858
+ await expect(menu).not.toBeVisible();
859
+ }
860
+ });
861
+ });
@@ -14,20 +14,20 @@
14
14
 
15
15
  <!-- App Info -->
16
16
  <title>PAW — Define functions in English, run them locally</title>
17
- <meta name="description" content="ProgramAsWeights compiles natural language specs into tiny neural programs that run locally. No API calls, no latency, no cost per request." />
17
+ <meta name="description" content="ProgramAsWeights compiles natural language specs into tiny neural programs that run on your machine. Once compiled, they work as regular Python functions." />
18
18
 
19
19
  <!-- Open Graph / Social Media -->
20
20
  <meta property="og:title" content="PAW — Define functions in English, run them locally" />
21
- <meta property="og:description" content="Compile natural language into tiny neural programs. Like spaCy, but you define the function." />
22
- <meta property="og:image" content="/paw-192.png" />
21
+ <meta property="og:description" content="Compile natural language specs into tiny neural programs that run on your machine. Once compiled, they work as regular Python functions." />
22
+ <meta property="og:image" content="https://programasweights.com/paw-192.png" />
23
23
  <meta property="og:type" content="website" />
24
24
  <meta property="og:site_name" content="ProgramAsWeights" />
25
25
 
26
26
  <!-- Twitter Card -->
27
27
  <meta name="twitter:card" content="summary_large_image" />
28
28
  <meta name="twitter:title" content="PAW — Define functions in English, run them locally" />
29
- <meta name="twitter:description" content="Compile natural language into tiny neural programs. Like spaCy, but you define the function." />
30
- <meta name="twitter:image" content="/paw-192.png" />
29
+ <meta name="twitter:description" content="Compile natural language specs into tiny neural programs that run on your machine. Once compiled, they work as regular Python functions." />
30
+ <meta name="twitter:image" content="https://programasweights.com/paw-192.png" />
31
31
 
32
32
  <!-- Theme Color -->
33
33
  <meta name="theme-color" content="#111827" />
@@ -1,6 +1,8 @@
1
1
  import { BrowserRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
2
- import { useEffect } from 'react';
2
+ import { Component, useEffect } from 'react';
3
+ import type { ReactNode } from 'react';
3
4
  import { Toaster } from 'react-hot-toast';
5
+ import { AuthProvider } from './contexts/AuthContext';
4
6
  import MainInterface from './components/MainInterface';
5
7
  import Header from './components/Header';
6
8
  import LandingPage from './components/LandingPage';
@@ -26,9 +28,38 @@ function ScrollToTop() {
26
28
  return null;
27
29
  }
28
30
 
31
+ class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boolean }> {
32
+ state = { hasError: false };
33
+ static getDerivedStateFromError() { return { hasError: true }; }
34
+ componentDidCatch(error: unknown, info: unknown) {
35
+ console.error('Uncaught render error:', error, info);
36
+ }
37
+ render() {
38
+ if (this.state.hasError) {
39
+ return (
40
+ <div className="min-h-screen flex items-center justify-center bg-gray-50">
41
+ <div className="text-center max-w-md px-6">
42
+ <h1 className="text-2xl font-bold text-gray-900 mb-3">Something went wrong</h1>
43
+ <p className="text-gray-600 mb-6">An unexpected error occurred. Please try reloading the page.</p>
44
+ <button
45
+ onClick={() => window.location.reload()}
46
+ className="px-5 py-2.5 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors text-sm font-medium"
47
+ >
48
+ Reload page
49
+ </button>
50
+ </div>
51
+ </div>
52
+ );
53
+ }
54
+ return this.props.children;
55
+ }
56
+ }
57
+
29
58
  function App() {
30
59
  return (
60
+ <ErrorBoundary>
31
61
  <Router>
62
+ <AuthProvider>
32
63
  <ScrollToTop />
33
64
  <div className="min-h-screen bg-gray-50">
34
65
  <Toaster
@@ -70,7 +101,9 @@ function App() {
70
101
  <Footer />
71
102
  <NavigationHelper />
72
103
  </div>
104
+ </AuthProvider>
73
105
  </Router>
106
+ </ErrorBoundary>
74
107
  );
75
108
  }
76
109
 
@@ -1,9 +1,11 @@
1
1
  import { Link } from 'react-router-dom';
2
+ import { Helmet } from 'react-helmet-async';
2
3
  import { Code, Zap, Shield, Users, BookOpen, Github, ExternalLink, Package, Terminal, Globe } from 'lucide-react';
3
4
 
4
5
  const AboutPage: React.FC = () => {
5
6
  return (
6
7
  <div className="max-w-4xl mx-auto space-y-12">
8
+ <Helmet><title>About — PAW</title></Helmet>
7
9
  {/* Hero */}
8
10
  <div className="text-center">
9
11
  <div className="flex items-center justify-center w-16 h-16 bg-gray-900 rounded-2xl mx-auto mb-6">
@@ -81,7 +83,7 @@ const AboutPage: React.FC = () => {
81
83
  </h2>
82
84
  <div className="grid md:grid-cols-2 gap-6">
83
85
  {[
84
- { icon: Shield, title: 'Private by default', desc: 'Everything runs locally. Your data never leaves your machine.' },
86
+ { icon: Shield, title: 'Private by default', desc: 'Programs run locally after download. Your data stays on your machine during local inference.' },
85
87
  { icon: Zap, title: 'Deterministic', desc: 'Greedy decoding means identical input always produces identical output.' },
86
88
  { icon: Package, title: 'Tiny programs', desc: 'Programs are small LoRA adapters (5-22 MB). The interpreter is a lightweight pretrained model (105-594 MB, downloaded once).' },
87
89
  { icon: Code, title: 'Python-native', desc: 'pip install, import, call. No Docker, no servers, no configuration.' },