programasweights 0.2.1__tar.gz → 0.2.2.dev1__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 (499) hide show
  1. programasweights-0.2.2.dev1/.cursor/rules/sdk-publishing.mdc +53 -0
  2. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.cursor/rules/vllm-deployment.mdc +17 -5
  3. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/PKG-INFO +1 -1
  4. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/__init__.py +59 -3
  5. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/client.py +25 -7
  6. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/runtime_llamacpp.py +19 -6
  7. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/pyproject.toml +1 -1
  8. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/programs.py +10 -0
  9. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/compile_provider.py +26 -5
  10. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/tests/test_sdk.py +82 -0
  11. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/tests/test_sdk.sh +1 -1
  12. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/e2e/full.spec.ts +12 -14
  13. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/AuthorPage.tsx +10 -5
  14. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/Footer.tsx +1 -1
  15. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/HubProgramPage.tsx +14 -20
  16. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/LandingPage.tsx +4 -2
  17. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/MainInterface.tsx +52 -36
  18. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/NavigationHelper.tsx +1 -1
  19. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/ProfilePage.tsx +27 -20
  20. programasweights-0.2.1/web-app/frontend/test-results/.last-run.json +0 -4
  21. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.git +0 -0
  22. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.github/workflows/web-sdk.yml +0 -0
  23. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.gitignore +0 -0
  24. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.gitmodules +0 -0
  25. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.hatch_build.toml +0 -0
  26. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/.readthedocs.yaml +0 -0
  27. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/1apple.jpg +0 -0
  28. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/1apple2.jpg +0 -0
  29. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/2apples.jpg +0 -0
  30. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/2apples2.jpg +0 -0
  31. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/3apples.jpg +0 -0
  32. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/3apples2.jpg +0 -0
  33. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/479400.png +0 -0
  34. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/4apples.jpg +0 -0
  35. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/4apples2.jpg +0 -0
  36. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/4apples3.jpg +0 -0
  37. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/4apples4.jpg +0 -0
  38. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/5apples.jpg +0 -0
  39. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/6apples.jpg +0 -0
  40. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/8apples.jpg +0 -0
  41. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/9apples.jpg +0 -0
  42. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/AGENTS.md +0 -0
  43. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/CHANGELOG.md +0 -0
  44. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/FLOW_SUMMARY.md +0 -0
  45. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/LICENSE +0 -0
  46. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/MANIFEST.in +0 -0
  47. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/ONNX_MIGRATION_PLAN.md +0 -0
  48. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/PREFIX_TOKENS_DESIGN.md +0 -0
  49. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/PYPI_README.md +0 -0
  50. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/README.md +0 -0
  51. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/TRUNCATION_CHANGES.md +0 -0
  52. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/USE_CASES_AND_IDEAS.md +0 -0
  53. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/VERIFICATION_USAGE.md +0 -0
  54. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/analyze_dataset.py +0 -0
  55. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/analyze_lengths.py +0 -0
  56. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/code_prompt.md +0 -0
  57. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  58. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/openai_batch_request.py +0 -0
  59. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/prepare_alchemist_data.py +0 -0
  60. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/prepare_var_bench_data.py +0 -0
  61. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/python_code_sandbox.py +0 -0
  62. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/script_evaluation_var_bench.sh +0 -0
  63. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/script_evalution_evaluation.sh +0 -0
  64. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/script_evalution_request.sh +0 -0
  65. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/baselines/script_evalution_statistics.sh +0 -0
  66. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/benchmark_pytorch_vs_onnx.py +0 -0
  67. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/benchmark_user_experience.py +0 -0
  68. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/check_dataset.py +0 -0
  69. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/combine_datasets.py +0 -0
  70. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/compare_datasets.py +0 -0
  71. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/compare_old_vs_regen.py +0 -0
  72. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/convert_paw_to_svg.py +0 -0
  73. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/create_favicon_sizes.py +0 -0
  74. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/create_visualization_from_log.py +0 -0
  75. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/create_vqa_dataset.py +0 -0
  76. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/debug_cache.py +0 -0
  77. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/debug_eos_example.sh +0 -0
  78. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  79. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/002-q4_0-adapter-format.md +0 -0
  80. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/003-single-spec-field.md +0 -0
  81. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/004-compiler-naming.md +0 -0
  82. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/005-vllm-hidden-states.md +0 -0
  83. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/adr/006-email-api-key-auth.md +0 -0
  84. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/advanced/adrs.md +0 -0
  85. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/advanced/architecture.md +0 -0
  86. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/api-reference/cli.md +0 -0
  87. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/api-reference/python-sdk.md +0 -0
  88. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/api-reference/rest-api.md +0 -0
  89. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/architecture.md +0 -0
  90. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/getting-started/first-program.md +0 -0
  91. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/getting-started/installation.md +0 -0
  92. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/getting-started/naming-programs.md +0 -0
  93. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/guide/browser-inference.md +0 -0
  94. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/guide/how-it-works.md +0 -0
  95. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/guide/local-inference.md +0 -0
  96. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/guide/writing-good-specs.md +0 -0
  97. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/hub/browsing-programs.md +0 -0
  98. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/hub/feedback-cases.md +0 -0
  99. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/hub/publishing-programs.md +0 -0
  100. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/index.md +0 -0
  101. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/docs/requirements.txt +0 -0
  102. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/estimate_data_gen_cost.py +0 -0
  103. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/eval.py +0 -0
  104. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/examples/flask_app.py +0 -0
  105. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/examples/jupyter_notebook.py +0 -0
  106. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/examples/langchain_integration.py +0 -0
  107. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/examples/replace_openai.py +0 -0
  108. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/export_to_onnx.py +0 -0
  109. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/extract_models.py +0 -0
  110. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/inspect_data_dirs.py +0 -0
  111. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/latest_export.csv +0 -0
  112. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/log.train.81920.morecategories.extraprefix +0 -0
  113. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  114. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/merge_datasets.py +0 -0
  115. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/mkdocs.yml +0 -0
  116. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/paw.png +0 -0
  117. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/paw.svg +0 -0
  118. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/process_im2latex_dataset.py +0 -0
  119. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/artifacts.py +0 -0
  120. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/cache.py +0 -0
  121. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/cli.py +0 -0
  122. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/compiler/__init__.py +0 -0
  123. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/compiler/dummy.py +0 -0
  124. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/config.py +0 -0
  125. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/convert_peft_to_paw.py +0 -0
  126. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/paw_format.py +0 -0
  127. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/runtime/__init__.py +0 -0
  128. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/runtime/interpreter.py +0 -0
  129. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights/runtime/interpreter_onnx.py +0 -0
  130. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/__init__.py +0 -0
  131. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/compiler/__init__.py +0 -0
  132. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/lora_format.py +0 -0
  133. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/runtime/__init__.py +0 -0
  134. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  135. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  136. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/tests/test_lora_format.py +0 -0
  137. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/tests/test_training.py +0 -0
  138. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/train_lora.py +0 -0
  139. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/training/__init__.py +0 -0
  140. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  141. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/run_eval.sh +0 -0
  142. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/run_training.sh +0 -0
  143. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/scripts/filter_table_by_length.py +0 -0
  144. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/.env.example +0 -0
  145. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/env.py +0 -0
  146. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/script.py.mako +0 -0
  147. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/versions/001_initial_schema.py +0 -0
  148. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
  149. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
  150. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
  151. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/alembic.ini +0 -0
  152. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/__init__.py +0 -0
  153. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/config.py +0 -0
  154. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/dependencies.py +0 -0
  155. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/logging_config.py +0 -0
  156. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/main.py +0 -0
  157. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/middleware/__init__.py +0 -0
  158. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/middleware/rate_limit.py +0 -0
  159. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/models/__init__.py +0 -0
  160. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/models/database.py +0 -0
  161. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/models/orm.py +0 -0
  162. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/models/schemas.py +0 -0
  163. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/__init__.py +0 -0
  164. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/auth.py +0 -0
  165. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/compile.py +0 -0
  166. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/feedback.py +0 -0
  167. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/health.py +0 -0
  168. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/infer.py +0 -0
  169. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/routes/models_info.py +0 -0
  170. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/__init__.py +0 -0
  171. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/auto_tag_service.py +0 -0
  172. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/auto_title_service.py +0 -0
  173. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/compile_service.py +0 -0
  174. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/infer_service.py +0 -0
  175. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/search_service.py +0 -0
  176. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/api/services/storage_service.py +0 -0
  177. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/benchmarks/benchmark_api.py +0 -0
  178. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/benchmarks/handcrafted_specs.json +0 -0
  179. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/benchmarks/last_benchmark_results.json +0 -0
  180. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/benchmarks/last_stress_results.json +0 -0
  181. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/benchmarks/stress_test.py +0 -0
  182. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/compiler_registry.json +0 -0
  183. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/provider_configs/gpt2.json +0 -0
  184. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/provider_configs/qwen3-0.6b.json +0 -0
  185. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/requirements.txt +0 -0
  186. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
  187. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/ablation_search.py +0 -0
  188. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/backfill_hf_browser_assets.py +0 -0
  189. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/backfill_hf_safetensors.py +0 -0
  190. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/backfill_interestingness.py +0 -0
  191. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/backfill_tags.py +0 -0
  192. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/backfill_titles.py +0 -0
  193. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/benchmark_gpt2.py +0 -0
  194. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/cleanup_storage.py +0 -0
  195. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/eval_search.py +0 -0
  196. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/evict_cold_programs.py +0 -0
  197. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/generate_prefix_cache.py +0 -0
  198. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/launch_gpt2_compiler.py +0 -0
  199. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/launch_qwen3_compiler.py +0 -0
  200. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/patch_vllm.sh +0 -0
  201. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/restart.sh +0 -0
  202. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/start_all.sh +0 -0
  203. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/start_gpt2_services.sh +0 -0
  204. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/start_provider.sh +0 -0
  205. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/scripts/start_services.sh +0 -0
  206. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/__init__.py +0 -0
  207. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/conftest.py +0 -0
  208. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_auth.py +0 -0
  209. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_compile.py +0 -0
  210. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_errors.py +0 -0
  211. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_infer.py +0 -0
  212. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_integration_gpu.py +0 -0
  213. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_rate_limit.py +0 -0
  214. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/tests/test_storage.py +0 -0
  215. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/vllm_models/__init__.py +0 -0
  216. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/vllm_models/gpt2_lora_patch.py +0 -0
  217. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/vllm_models/paw_compiler.py +0 -0
  218. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/vllm_models/prepare_checkpoint.py +0 -0
  219. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/server/vllm_models/register.py +0 -0
  220. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  221. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  222. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  223. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  224. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_1spec.py +0 -0
  225. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_all_caching.py +0 -0
  226. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_apple_count.py +0 -0
  227. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_batch_pilot.py +0 -0
  228. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_compile.py +0 -0
  229. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_e2e.py +0 -0
  230. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_execute.py +0 -0
  231. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_nspecs.py +0 -0
  232. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_one_vs_two_step.py +0 -0
  233. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_onnx_correctness.py +0 -0
  234. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_onnx_hf_model.py +0 -0
  235. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_onnx_hf_with_images.py +0 -0
  236. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_paw_format.py +0 -0
  237. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/test_thinking_comparison.py +0 -0
  238. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/tests/test_offline_cache.py +0 -0
  239. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/train.py +0 -0
  240. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  241. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/README.md +0 -0
  242. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/__init__.py +0 -0
  243. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  244. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/README.md +0 -0
  245. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  246. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/build_user_bench.py +0 -0
  247. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/dry_run_batch.py +0 -0
  248. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/filter_test_data.py +0 -0
  249. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/generate_specs.py +0 -0
  250. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/generate_specs_batch.py +0 -0
  251. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/incremental_merge.py +0 -0
  252. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/merge_and_upload.py +0 -0
  253. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/regenerate_outputs_batch.py +0 -0
  254. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/synthesize_data.py +0 -0
  255. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/synthesize_data_batch.py +0 -0
  256. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/filter_system.txt +0 -0
  257. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/filter_user.txt +0 -0
  258. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/pairs_system.txt +0 -0
  259. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/pairs_user.txt +0 -0
  260. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/specs_system.txt +0 -0
  261. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/specs_user.txt +0 -0
  262. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  263. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  264. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  265. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/verify_system.txt +0 -0
  266. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates/verify_user.txt +0 -0
  267. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/filter_system.txt +0 -0
  268. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/filter_user.txt +0 -0
  269. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/pairs_system.txt +0 -0
  270. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/pairs_user.txt +0 -0
  271. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/specs_system.txt +0 -0
  272. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/specs_user.txt +0 -0
  273. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  274. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  275. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  276. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/verify_system.txt +0 -0
  277. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/templates_old/verify_user.txt +0 -0
  278. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/data_generation/verify_test_data.py +0 -0
  279. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/datasets/__init__.py +0 -0
  280. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/datasets/jsonl_text_pairs.py +0 -0
  281. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/loops/__init__.py +0 -0
  282. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/training/loops/prefix_tuning_sft.py +0 -0
  283. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/ttt.py +0 -0
  284. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/upload_model.py +0 -0
  285. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/upload_onnx_to_huggingface.py +0 -0
  286. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/upload_onnx_to_huggingface_with_token.py +0 -0
  287. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/utils.py +0 -0
  288. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/HANDOFF.md +0 -0
  289. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/README.md +0 -0
  290. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/__init__.py +0 -0
  291. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/config.py +0 -0
  292. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/main.py +0 -0
  293. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/middleware/__init__.py +0 -0
  294. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/middleware/rate_limit.py +0 -0
  295. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/models.py +0 -0
  296. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/__init__.py +0 -0
  297. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/auth_service.py +0 -0
  298. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/case_service.py +0 -0
  299. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/compiler_service.py +0 -0
  300. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/gpt_service.py +0 -0
  301. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/hub_service.py +0 -0
  302. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/image_service.py +0 -0
  303. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/interpreter_service.py +0 -0
  304. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/services/sql_manager.py +0 -0
  305. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  306. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/utils/__init__.py +0 -0
  307. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/utils/image_placeholders.py +0 -0
  308. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/app/utils/program_hash.py +0 -0
  309. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/clear_db.sh +0 -0
  310. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/clear_tables.sql +0 -0
  311. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/data/programs.db +0 -0
  312. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/env_example.txt +0 -0
  313. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/example_images/README.md +0 -0
  314. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/get_data_examples.py +0 -0
  315. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/requirements.txt +0 -0
  316. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/run_server.py +0 -0
  317. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_analytics_tables.sql +0 -0
  318. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_auth_tables.sql +0 -0
  319. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_cache_tables.sql +0 -0
  320. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_cases_tables.sql +0 -0
  321. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_database.sql +0 -0
  322. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_database_simple.sql +0 -0
  323. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_db.sh +0 -0
  324. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_example_images.py +0 -0
  325. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/setup_hub_tables.sql +0 -0
  326. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/backend/test_compilation_cache.py +0 -0
  327. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/README.md +0 -0
  328. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/e2e/helpers.ts +0 -0
  329. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/e2e/smoke.spec.ts +0 -0
  330. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/eslint.config.js +0 -0
  331. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/index.html +0 -0
  332. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/package-lock.json +0 -0
  333. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/package.json +0 -0
  334. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/playwright.config.ts +0 -0
  335. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/postcss.config.js +0 -0
  336. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/apple-touch-icon.png +0 -0
  337. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/browser-worker.html +0 -0
  338. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/favicon-16x16.png +0 -0
  339. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/favicon-32x32.png +0 -0
  340. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/paw-192.png +0 -0
  341. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/paw-512.png +0 -0
  342. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/paw.svg +0 -0
  343. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/react-test.html +0 -0
  344. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/test.html +0 -0
  345. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/public/vite.svg +0 -0
  346. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/scripts/deploy.sh +0 -0
  347. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/App.css +0 -0
  348. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/App.tsx +0 -0
  349. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/assets/react.svg +0 -0
  350. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/AboutPage.tsx +0 -0
  351. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/AgentsPage.tsx +0 -0
  352. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/BrowserPage.tsx +0 -0
  353. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/CasesSection.tsx +0 -0
  354. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  355. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  356. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/DocsPage.tsx +0 -0
  357. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  358. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/Header.tsx +0 -0
  359. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/HubPage.tsx +0 -0
  360. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
  361. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  362. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  363. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/SettingsPage.tsx +0 -0
  364. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
  365. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  366. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/components/TestSection.tsx +0 -0
  367. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/index.css +0 -0
  368. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/main.tsx +0 -0
  369. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/types/index.ts +0 -0
  370. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/src/utils/api.ts +0 -0
  371. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/tailwind.config.js +0 -0
  372. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/tsconfig.app.json +0 -0
  373. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/tsconfig.json +0 -0
  374. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/tsconfig.node.json +0 -0
  375. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/frontend/vite.config.ts +0 -0
  376. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/nginx-paw.conf +0 -0
  377. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/nginx.conf +0 -0
  378. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/setup_mysql.sh +0 -0
  379. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/start.sh +0 -0
  380. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/test_setup.py +0 -0
  381. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-app/ttt.py +0 -0
  382. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/.gitignore +0 -0
  383. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/LICENSE +0 -0
  384. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/README.md +0 -0
  385. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
  386. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/e2e/server.ts +0 -0
  387. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/e2e/start-server.ts +0 -0
  388. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/e2e/test-page.html +0 -0
  389. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/loader.test.ts +0 -0
  390. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/__tests__/prompt.test.ts +0 -0
  391. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/examples/basic.html +0 -0
  392. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/package-lock.json +0 -0
  393. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/package.json +0 -0
  394. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/playwright.config.ts +0 -0
  395. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/serve.py +0 -0
  396. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/src/index.ts +0 -0
  397. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/src/loader.ts +0 -0
  398. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/src/runtime.ts +0 -0
  399. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/src/types.ts +0 -0
  400. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/test-standalone.html +0 -0
  401. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/tsconfig.json +0 -0
  402. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/vitest.config.ts +0 -0
  403. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.git +0 -0
  404. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
  405. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
  406. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
  407. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
  408. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.gitignore +0 -0
  409. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.gitmodules +0 -0
  410. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.npmignore +0 -0
  411. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/.prettierignore +0 -0
  412. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/CMakeLists.txt +0 -0
  413. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/LICENCE +0 -0
  414. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/README.md +0 -0
  415. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/README_banner.png +0 -0
  416. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/assets/screenshot_0.png +0 -0
  417. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/actions.hpp +0 -0
  418. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
  419. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/glue.hpp +0 -0
  420. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
  421. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
  422. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
  423. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
  424. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
  425. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
  426. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
  427. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/cpp/wllama.cpp +0 -0
  428. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/basic/index.html +0 -0
  429. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/embeddings/index.html +0 -0
  430. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
  431. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/.gitignore +0 -0
  432. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/README.md +0 -0
  433. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/index.html +0 -0
  434. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/package-lock.json +0 -0
  435. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/package.json +0 -0
  436. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
  437. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
  438. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
  439. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
  440. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
  441. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
  442. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
  443. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
  444. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
  445. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
  446. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
  447. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
  448. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/config.ts +0 -0
  449. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/index.css +0 -0
  450. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
  451. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
  452. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
  453. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
  454. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
  455. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
  456. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
  457. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
  458. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
  459. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
  460. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
  461. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
  462. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
  463. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
  464. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
  465. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
  466. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/guides/intro-v2.md +0 -0
  467. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/index.ts +0 -0
  468. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/package-lock.json +0 -0
  469. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/package.json +0 -0
  470. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
  471. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
  472. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/build_worker.sh +0 -0
  473. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
  474. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
  475. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/http_server.js +0 -0
  476. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/scripts/post_build.sh +0 -0
  477. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/cache-manager.ts +0 -0
  478. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/glue/glue.ts +0 -0
  479. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/glue/messages.ts +0 -0
  480. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/index.ts +0 -0
  481. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/mjs.test.ts +0 -0
  482. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/model-manager.test.ts +0 -0
  483. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/model-manager.ts +0 -0
  484. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
  485. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
  486. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
  487. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
  488. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/utils.test.ts +0 -0
  489. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/utils.ts +0 -0
  490. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
  491. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/wllama.test.ts +0 -0
  492. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/wllama.ts +0 -0
  493. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/worker.ts +0 -0
  494. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
  495. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
  496. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
  497. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/tsconfig.build.json +0 -0
  498. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/tsup.config.ts +0 -0
  499. {programasweights-0.2.1 → programasweights-0.2.2.dev1}/web-sdk/wllama/vitest.config.ts +0 -0
@@ -0,0 +1,53 @@
1
+ ---
2
+ description: SDK publishing workflow for Python and JavaScript packages
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # SDK Publishing Rules
7
+
8
+ ## Public repos are the source of truth for published packages
9
+
10
+ - **Python SDK**: https://github.com/programasweights/programasweights-python
11
+ - **JS SDK**: https://github.com/programasweights/programasweights-js
12
+
13
+ ## Release workflow
14
+
15
+ 1. Make changes in the public repo (feature branch -> PR -> main)
16
+ 2. Bump version in `pyproject.toml` / `__init__.py` (Python) or `package.json` (JS)
17
+ 3. Run tests: `bash tests/test_sdk.sh` (Python) or `npm test && npx playwright test` (JS)
18
+ 4. Tag: `git tag -a vX.Y.Z -m "Release vX.Y.Z"`
19
+ 5. Build and publish from the tagged commit:
20
+ - Python: `python -m build && twine upload dist/*`
21
+ - JS: `npm publish --access public`
22
+ 6. Push tag: `git push origin vX.Y.Z`
23
+ 7. Verify: compare published package with repo (`pip download` / `npm pack` then diff)
24
+
25
+ ## Never do
26
+
27
+ - Do NOT publish from the monorepo (`paw_discrete/programasweights/`) -- always use the public repos
28
+ - Do NOT publish without tagging first
29
+ - Do NOT forget to sync the monorepo after publishing (if changes originated there)
30
+ - Do NOT use rsync/scp for code deployment -- always git push + git pull
31
+ - Do NOT deploy to server without committing to git first
32
+
33
+ ## All repos are under github.com/programasweights/
34
+
35
+ - `website` -- monorepo deployed to server (git push website main)
36
+ - `programasweights-python` -- Python SDK (published to PyPI)
37
+ - `programasweights-js` -- JS SDK (published to npm)
38
+
39
+ ## Wheel index
40
+
41
+ Pre-built `llama-cpp-python` wheels are hosted at `pypi.programasweights.com`.
42
+ Install command: `pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/`
43
+ If `llama-cpp-python` releases a new version, rebuild wheels on our servers and update the index.
44
+
45
+ ## PyPI credentials
46
+
47
+ - Token in `~/.bashrc` on server 31.22.104.226 as `PYPI_API_TOKEN`
48
+ - Upload via: `twine upload --username __token__ --password $PYPI_API_TOKEN`
49
+
50
+ ## npm credentials
51
+
52
+ - Token in `~/.bashrc` on server 31.22.104.226 as `NPM_TOKEN`
53
+ - Granular access token with publish permissions for `@programasweights` scope
@@ -13,14 +13,26 @@ All server code lives at `/root/paw-website/` (git clone of `programasweights/we
13
13
 
14
14
  **Deployment (the ONLY way to update code):**
15
15
  ```bash
16
- # Local: push changes
17
- git push origin main
16
+ # Local: commit and push to the website repo
17
+ git push website main
18
18
 
19
- # Server: pull and restart
20
- cd /root/paw-website && git pull
21
- cd server && bash scripts/start_all.sh
19
+ # Server: pull, build frontend, restart backend
20
+ cd /root/paw-website && git fetch origin && git reset --hard origin/main
21
+ cd web-app/frontend && npm run build && rsync -a --delete dist/ /data/paw-frontend/
22
+ cd /root/paw-website/server && bash scripts/restart.sh
22
23
  ```
23
24
 
25
+ **IMPORTANT:** `dist/` is in `.gitignore`. Frontend must be built on the server after pull.
26
+
27
+ **Repos (all under github.com/programasweights/):**
28
+ - `website` -- monorepo (server, frontend, web-sdk, docs). Deployed to server.
29
+ - `programasweights-python` -- Python SDK source. Published to PyPI.
30
+ - `programasweights-js` -- JS SDK source. Published to npm.
31
+
32
+ **Local remote setup:**
33
+ - `origin` = `yuntian-group/programasweights` (private monorepo)
34
+ - `website` = `programasweights/website` (public, deployed to server)
35
+
24
36
  **NEVER use rsync or scp for code.** Model weights use scp between servers.
25
37
 
26
38
  ### GPU Layout
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.2.1
3
+ Version: 0.2.2.dev1
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
@@ -22,7 +22,7 @@ API reference:
22
22
  paw.api_key API key (set via login() or PAW_API_KEY env var)
23
23
  """
24
24
 
25
- __version__ = "0.2.1"
25
+ __version__ = "0.2.2.dev1"
26
26
 
27
27
  from .config import get_api_url, get_api_key, set_api_key
28
28
 
@@ -72,7 +72,7 @@ def compile(
72
72
 
73
73
 
74
74
  def function(
75
- program_id: str,
75
+ program_id,
76
76
  n_ctx: int = 2048,
77
77
  n_gpu_layers: int | None = None,
78
78
  verbose: bool = False,
@@ -83,7 +83,7 @@ def function(
83
83
  Subsequent calls use the local cache.
84
84
 
85
85
  Args:
86
- program_id: The program ID from ``paw.compile()``.
86
+ program_id: Program ID (str), slug, or a ``Program`` object from compile().
87
87
  n_ctx: Context window size for llama.cpp.
88
88
  n_gpu_layers: GPU layers (-1 = all, 0 = CPU only). Defaults to CPU.
89
89
  Set ``PAW_GPU_LAYERS`` env var or pass explicitly for GPU acceleration.
@@ -96,7 +96,12 @@ def function(
96
96
  >>> fn = paw.function("email-triage")
97
97
  >>> fn("Urgent: the server is down!")
98
98
  'immediate'
99
+
100
+ >>> program = paw.compile("Classify sentiment")
101
+ >>> fn = paw.function(program) # accepts Program object directly
99
102
  """
103
+ if hasattr(program_id, 'id'):
104
+ program_id = program_id.slug or program_id.id
100
105
  import os
101
106
  import re
102
107
  from .cache import is_program_cached, get_program_dir, get_cached_slug, save_slug_mapping
@@ -175,9 +180,60 @@ def login(key: str | None = None):
175
180
  print("You can also set the PAW_API_KEY environment variable.")
176
181
 
177
182
 
183
+ def compile_and_load(
184
+ spec: str,
185
+ compiler: str = "paw-4b-qwen3-0.6b",
186
+ n_ctx: int = 2048,
187
+ n_gpu_layers: int | None = None,
188
+ verbose: bool = False,
189
+ **compile_kwargs,
190
+ ):
191
+ """Compile a spec and immediately load it for local inference.
192
+
193
+ Convenience wrapper that combines ``paw.compile()`` and ``paw.function()``
194
+ into a single call.
195
+
196
+ Args:
197
+ spec: Natural language specification.
198
+ compiler: Compiler model name.
199
+ n_ctx: Context window size for llama.cpp.
200
+ n_gpu_layers: GPU layers (-1 = all, 0 = CPU only).
201
+ verbose: Print llama.cpp debug output.
202
+ **compile_kwargs: Additional args passed to compile (slug, public, etc.)
203
+
204
+ Returns:
205
+ A callable ``PawFunction``.
206
+
207
+ Example:
208
+ >>> fn = paw.compile_and_load("Classify sentiment as positive or negative")
209
+ >>> fn("I love this!")
210
+ 'positive'
211
+ """
212
+ program = compile(spec, compiler=compiler, **compile_kwargs)
213
+ return function(program, n_ctx=n_ctx, n_gpu_layers=n_gpu_layers, verbose=verbose)
214
+
215
+
216
+ def list_programs(sort: str = "recent", per_page: int = 20, page: int = 1) -> dict:
217
+ """List your compiled programs. Requires authentication (PAW_API_KEY).
218
+
219
+ Returns:
220
+ Dict with ``programs`` (list), ``total``, ``page``, ``per_page``.
221
+
222
+ Example:
223
+ >>> programs = paw.list_programs()
224
+ >>> for p in programs["programs"]:
225
+ ... print(p["id"], p["name"])
226
+ """
227
+ from .client import PAWClient
228
+ client = PAWClient(api_url=api_url, api_key=api_key)
229
+ return client.list_programs(sort=sort, per_page=per_page, page=page)
230
+
231
+
178
232
  __all__ = [
179
233
  "compile",
234
+ "compile_and_load",
180
235
  "function",
236
+ "list_programs",
181
237
  "login",
182
238
  "api_url",
183
239
  "api_key",
@@ -108,18 +108,25 @@ 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
112
  """
112
113
  program_dir = config.get_programs_dir() / program_id
113
114
  if (program_dir / "prompt_template.txt").exists():
114
115
  return program_dir
115
116
 
116
- resp = httpx.get(
117
- f"{self._api_url}/api/v1/programs/{program_id}/download",
118
- headers=self._headers(),
119
- timeout=60.0,
120
- follow_redirects=True,
121
- )
122
- resp.raise_for_status()
117
+ max_retries = 10
118
+ for attempt in range(max_retries):
119
+ resp = httpx.get(
120
+ f"{self._api_url}/api/v1/programs/{program_id}/download",
121
+ headers=self._headers(),
122
+ timeout=60.0,
123
+ follow_redirects=True,
124
+ )
125
+ if resp.status_code == 404 and attempt < max_retries - 1:
126
+ time.sleep(3)
127
+ continue
128
+ resp.raise_for_status()
129
+ break
123
130
 
124
131
  program_dir.mkdir(parents=True, exist_ok=True)
125
132
  paw_path = program_dir / f"{program_id}.paw"
@@ -140,6 +147,17 @@ class PAWClient:
140
147
  resp.raise_for_status()
141
148
  return resp.json()
142
149
 
150
+ def list_programs(self, sort: str = "recent", per_page: int = 20, page: int = 1) -> dict:
151
+ """List programs for the authenticated user."""
152
+ resp = httpx.get(
153
+ f"{self._api_url}/api/v1/programs",
154
+ params={"mine": "true", "sort": sort, "per_page": per_page, "page": page},
155
+ headers=self._headers(),
156
+ timeout=10.0,
157
+ )
158
+ resp.raise_for_status()
159
+ return resp.json()
160
+
143
161
 
144
162
  _default_client: PAWClient | None = None
145
163
 
@@ -53,12 +53,25 @@ class PawFunction:
53
53
  interpreter = self._meta.get("interpreter", "Qwen/Qwen3-0.6B")
54
54
  base_model_path = cache.get_base_model_path(interpreter)
55
55
 
56
- self._llm = Llama(
57
- model_path=str(base_model_path),
58
- n_ctx=n_ctx,
59
- n_gpu_layers=n_gpu_layers,
60
- verbose=verbose,
61
- )
56
+ if not verbose:
57
+ import os as _os, sys as _sys
58
+ _stderr_fd = _sys.stderr.fileno()
59
+ _devnull = _os.open(_os.devnull, _os.O_WRONLY)
60
+ _old_stderr = _os.dup(_stderr_fd)
61
+ _os.dup2(_devnull, _stderr_fd)
62
+
63
+ try:
64
+ self._llm = Llama(
65
+ model_path=str(base_model_path),
66
+ n_ctx=n_ctx,
67
+ n_gpu_layers=n_gpu_layers,
68
+ verbose=verbose,
69
+ )
70
+ finally:
71
+ if not verbose:
72
+ _os.dup2(_old_stderr, _stderr_fd)
73
+ _os.close(_devnull)
74
+ _os.close(_old_stderr)
62
75
 
63
76
  adapter_path = program_dir / "adapter.gguf"
64
77
  if adapter_path.exists():
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.2.1"
7
+ version = "0.2.2.dev1"
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"
@@ -292,6 +292,7 @@ async def list_programs(
292
292
  "compiler_snapshot": p.compiler_snapshot,
293
293
  "interpreter": p.interpreter,
294
294
  "author": author_map[p.author_id].username if p.author_id and p.author_id in author_map else "Anonymous",
295
+ "author_display_name": author_map[p.author_id].display_name if p.author_id and p.author_id in author_map else None,
295
296
  "author_avatar": author_map[p.author_id].avatar_url if p.author_id and p.author_id in author_map else None,
296
297
  "author_id": p.author_id,
297
298
  "tags": p.tags or [],
@@ -412,6 +413,15 @@ async def download_program(
412
413
  program.downloads = (program.downloads or 0) + 1
413
414
  await db.commit()
414
415
 
416
+ settings = get_settings()
417
+ local_paw = Path(settings.STORAGE_PATH) / program.id / f"{program.id}.paw"
418
+ if local_paw.exists():
419
+ return FileResponse(
420
+ path=str(local_paw),
421
+ media_type="application/octet-stream",
422
+ filename=f"{program.id}.paw",
423
+ )
424
+
415
425
  hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
416
426
  return RedirectResponse(url=hf_url, status_code=302)
417
427
 
@@ -145,7 +145,7 @@ class CompileProvider:
145
145
  self.ref_tok = AutoTokenizer.from_pretrained(ref_model, trust_remote_code=True)
146
146
 
147
147
  self.compiler_fingerprint = self._compute_fingerprint()
148
- self.pseudo_cache: dict[str, str] = {}
148
+ self._redis_url = os.environ.get("REDIS_URL", "redis://localhost:6379/0")
149
149
  self._compiler_model_name: str | None = None
150
150
 
151
151
  logger.info("compile_provider_ready",
@@ -216,9 +216,20 @@ class CompileProvider:
216
216
  cache_key = hashlib.sha256(
217
217
  f"{rendered}|max_tokens={max_tokens}|temp=0".encode()
218
218
  ).hexdigest()[:32]
219
- if cache_key in self.pseudo_cache:
220
- logger.info("pseudo_gen_cache_hit", spec_len=len(spec))
221
- return self.pseudo_cache[cache_key], prompt_tokens
219
+
220
+ try:
221
+ import asyncpg
222
+ db_url = os.environ.get("DATABASE_URL", "postgresql://paw:pawdev2026@localhost:5432/paw")
223
+ conn = await asyncpg.connect(db_url)
224
+ row = await conn.fetchrow(
225
+ "SELECT pseudo_program FROM pseudo_cache WHERE cache_key = $1", cache_key
226
+ )
227
+ await conn.close()
228
+ if row:
229
+ logger.info("pseudo_gen_cache_hit", spec_len=len(spec))
230
+ return row["pseudo_program"], prompt_tokens
231
+ except Exception:
232
+ pass
222
233
 
223
234
  async with httpx.AsyncClient(timeout=60.0) as client:
224
235
  resp = await client.post(
@@ -233,7 +244,17 @@ class CompileProvider:
233
244
  resp.raise_for_status()
234
245
  data = resp.json()
235
246
  pseudo = data["choices"][0]["text"].strip()
236
- self.pseudo_cache[cache_key] = pseudo
247
+
248
+ try:
249
+ conn = await asyncpg.connect(db_url)
250
+ await conn.execute(
251
+ "INSERT INTO pseudo_cache (cache_key, pseudo_program) VALUES ($1, $2) ON CONFLICT (cache_key) DO NOTHING",
252
+ cache_key, pseudo
253
+ )
254
+ await conn.close()
255
+ except Exception:
256
+ pass
257
+
237
258
  return pseudo, prompt_tokens
238
259
 
239
260
  def _build_compiler_input(self, spec: str, pseudo_program: str) -> str:
@@ -442,3 +442,85 @@ class TestCLIRename:
442
442
  assert result.returncode == 0
443
443
  data = json.loads(result.stdout)
444
444
  assert data.get("program_id")
445
+
446
+
447
+ # ── Phase 12: New convenience methods ──
448
+
449
+
450
+ class TestCompileAndLoad:
451
+ def test_compile_and_load_returns_callable(self):
452
+ fn = paw.compile_and_load("Classify text as positive or negative sentiment.")
453
+ assert callable(fn)
454
+ result = fn("I love this product!")
455
+ assert isinstance(result, str)
456
+ assert len(result) > 0
457
+
458
+ def test_compile_and_load_with_compiler(self):
459
+ fn = paw.compile_and_load(
460
+ "Count the vowels in the input. Return just the number.",
461
+ compiler="paw-4b-qwen3-0.6b",
462
+ )
463
+ result = fn("hello")
464
+ assert isinstance(result, str)
465
+
466
+
467
+ class TestFunctionAcceptsProgram:
468
+ def test_function_with_program_object(self):
469
+ program = paw.compile("Classify text as positive or negative sentiment.")
470
+ fn = paw.function(program)
471
+ assert callable(fn)
472
+ result = fn("Great product!")
473
+ assert isinstance(result, str)
474
+ assert len(result) > 0
475
+
476
+ def test_function_with_string_still_works(self):
477
+ fn = paw.function("email-triage")
478
+ assert callable(fn)
479
+
480
+
481
+ class TestListPrograms:
482
+ @needs_auth
483
+ def test_list_programs_returns_dict(self):
484
+ old_key = paw.api_key
485
+ try:
486
+ paw.api_key = API_KEY
487
+ result = paw.list_programs()
488
+ assert isinstance(result, dict)
489
+ assert "programs" in result
490
+ assert "total" in result
491
+ assert isinstance(result["programs"], list)
492
+ finally:
493
+ paw.api_key = old_key
494
+
495
+ @needs_auth
496
+ def test_list_programs_has_entries(self):
497
+ old_key = paw.api_key
498
+ try:
499
+ paw.api_key = API_KEY
500
+ result = paw.list_programs(per_page=5)
501
+ assert len(result["programs"]) <= 5
502
+ if result["programs"]:
503
+ p = result["programs"][0]
504
+ assert "id" in p
505
+ assert "spec" in p
506
+ finally:
507
+ paw.api_key = old_key
508
+
509
+
510
+ class TestStderrSuppression:
511
+ def test_no_stderr_by_default(self):
512
+ result = subprocess.run(
513
+ [sys.executable, "-c",
514
+ "import programasweights as paw; fn = paw.function('email-triage'); fn('test')"],
515
+ capture_output=True, text=True, timeout=120,
516
+ )
517
+ assert "n_ctx_seq" not in result.stderr
518
+ assert "llama_context" not in result.stderr
519
+
520
+ def test_stderr_with_verbose(self):
521
+ result = subprocess.run(
522
+ [sys.executable, "-c",
523
+ "import programasweights as paw; fn = paw.function('email-triage', verbose=True); fn('test')"],
524
+ capture_output=True, text=True, timeout=120,
525
+ )
526
+ assert result.returncode == 0
@@ -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 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"
@@ -210,20 +210,18 @@ test.describe('Playground', () => {
210
210
  await expect(page.locator('button', { hasText: /Compile/i }).first()).toBeVisible();
211
211
  });
212
212
 
213
- test('compiler select dropdown exists and has options', async ({ page }) => {
214
- const select = page.locator('select').first();
215
- await expect(select).toBeVisible();
216
- const options = select.locator('option');
217
- expect(await options.count()).toBeGreaterThanOrEqual(1);
218
- });
219
-
220
- test('compiler select can switch', async ({ page }) => {
221
- const select = page.locator('select').first();
222
- const options = select.locator('option');
223
- const count = await options.count();
224
- if (count > 1) {
225
- const val = await options.nth(1).getAttribute('value');
226
- if (val) await select.selectOption(val);
213
+ test('compile button shows interpreter name', async ({ page }) => {
214
+ const compileBtn = page.locator('button', { hasText: /Compile.*Standard|Compile.*Compact/ }).first();
215
+ await expect(compileBtn).toBeVisible();
216
+ });
217
+
218
+ test('compiler dropdown opens and has options', async ({ page }) => {
219
+ const chevron = page.locator('button:has(svg.lucide-chevron-down)').first();
220
+ if (await chevron.isVisible()) {
221
+ await chevron.click();
222
+ await page.waitForTimeout(300);
223
+ const options = page.locator('button', { hasText: /Standard|Compact/ });
224
+ expect(await options.count()).toBeGreaterThanOrEqual(1);
227
225
  }
228
226
  });
229
227
 
@@ -20,7 +20,8 @@ const AuthorPage: React.FC = () => {
20
20
  const { id } = useParams<{ id: string }>();
21
21
  const [programs, setPrograms] = useState<ProgramSummary[]>([]);
22
22
  const [loading, setLoading] = useState(true);
23
- const [authorName, setAuthorName] = useState('');
23
+ const [authorUsername, setAuthorUsername] = useState('');
24
+ const [authorDisplayName, setAuthorDisplayName] = useState('');
24
25
  const [authorAvatar, setAuthorAvatar] = useState('');
25
26
 
26
27
  useEffect(() => {
@@ -29,7 +30,8 @@ const AuthorPage: React.FC = () => {
29
30
  .then(res => {
30
31
  setPrograms(res.programs);
31
32
  if (res.programs.length > 0) {
32
- setAuthorName(res.programs[0].author || 'Anonymous');
33
+ setAuthorUsername(res.programs[0].author || 'Anonymous');
34
+ setAuthorDisplayName((res.programs[0] as any).author_display_name || '');
33
35
  setAuthorAvatar((res.programs[0] as any).author_avatar || '');
34
36
  }
35
37
  })
@@ -51,12 +53,15 @@ const AuthorPage: React.FC = () => {
51
53
  <img src={authorAvatar} alt="" className="w-16 h-16 rounded-full border-2 border-gray-200" />
52
54
  ) : (
53
55
  <div className="w-16 h-16 rounded-full bg-gray-300 flex items-center justify-center text-xl font-medium text-gray-600">
54
- {(authorName || '?')[0].toUpperCase()}
56
+ {(authorUsername || '?')[0].toUpperCase()}
55
57
  </div>
56
58
  )}
57
59
  <div>
58
- <h1 className="text-2xl font-bold text-gray-900">{authorName}</h1>
59
- <p className="text-gray-500">{programs.length} public programs</p>
60
+ <h1 className="text-2xl font-bold text-gray-900">{authorDisplayName || authorUsername}</h1>
61
+ {authorDisplayName && authorUsername !== authorDisplayName && (
62
+ <p className="text-sm text-gray-400">@{authorUsername}</p>
63
+ )}
64
+ <p className="text-gray-500">{programs.length} public program{programs.length !== 1 ? 's' : ''}</p>
60
65
  </div>
61
66
  </div>
62
67
  </div>
@@ -18,7 +18,7 @@ const Footer: React.FC = () => {
18
18
  Define functions in English. Compile them into neural programs. Run them locally.
19
19
  </p>
20
20
  <div className="mt-4 inline-flex items-center gap-2 bg-white/5 rounded px-3 py-1.5 font-mono text-xs text-gray-300 border border-white/10">
21
- pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
21
+ pip install programasweights
22
22
  </div>
23
23
  </div>
24
24
 
@@ -18,7 +18,6 @@ const HubProgramPage: React.FC = () => {
18
18
  const [testOutput, setTestOutput] = useState('');
19
19
  const [testRunning, setTestRunning] = useState(false);
20
20
  const [copied, setCopied] = useState(false);
21
- const [copiedUsage, setCopiedUsage] = useState(false);
22
21
  const [copiedShare, setCopiedShare] = useState(false);
23
22
  const [showPseudo, setShowPseudo] = useState(false);
24
23
  const [userVote, setUserVote] = useState<1 | -1 | null>(null);
@@ -263,16 +262,12 @@ console.log(result);`;
263
262
  <div className="border-t border-gray-100 bg-gray-50 px-6 sm:px-8 py-3 flex flex-wrap gap-2">
264
263
  <button
265
264
  onClick={() => {
266
- const code = `import programasweights as paw\nfn = paw.function("${codeRef}")`;
267
- navigator.clipboard.writeText(code);
268
- setCopiedUsage(true);
265
+ navigator.clipboard.writeText(usageCode);
269
266
  toast.success('Copied!');
270
- setTimeout(() => setCopiedUsage(false), 2000);
271
267
  }}
272
268
  className="inline-flex items-center gap-2 px-4 py-2 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors text-sm font-medium"
273
269
  >
274
- {copiedUsage ? <Check className="w-4 h-4" /> : <Copy className="w-4 h-4" />}
275
- {copiedUsage ? 'Copied!' : 'Copy usage'}
270
+ <Copy className="w-4 h-4" /> Copy usage
276
271
  </button>
277
272
  <button onClick={handleFork} className="inline-flex items-center gap-2 px-4 py-2 bg-white text-gray-700 border border-gray-200 rounded-lg hover:bg-gray-50 transition-colors text-sm font-medium">
278
273
  <GitFork className="w-4 h-4" /> Fork & Edit
@@ -336,18 +331,9 @@ console.log(result);`;
336
331
 
337
332
  {/* Usage Code */}
338
333
  <div className="bg-white rounded-xl border border-gray-200 p-6">
339
- <div className="flex items-center justify-between mb-3">
340
- <div className="flex items-center gap-2">
341
- <Code className="w-4 h-4 text-gray-400" />
342
- <h2 className="font-semibold text-gray-900">Usage</h2>
343
- </div>
344
- <button
345
- onClick={() => { navigator.clipboard.writeText(usageCode); setCopied(true); setTimeout(() => setCopied(false), 2000); }}
346
- className="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs text-gray-500 hover:text-gray-900 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors font-medium"
347
- >
348
- {copied ? <Check className="w-3.5 h-3.5 text-green-600" /> : <Copy className="w-3.5 h-3.5" />}
349
- {copied ? 'Copied!' : 'Copy'}
350
- </button>
334
+ <div className="flex items-center gap-2 mb-3">
335
+ <Code className="w-4 h-4 text-gray-400" />
336
+ <h2 className="font-semibold text-gray-900">Usage</h2>
351
337
  </div>
352
338
  {isBrowserCapable && (
353
339
  <div className="flex gap-1 mb-3">
@@ -359,7 +345,15 @@ console.log(result);`;
359
345
  >JavaScript (browser)</button>
360
346
  </div>
361
347
  )}
362
- <pre className="bg-gray-900 text-gray-100 p-4 rounded-lg text-sm overflow-x-auto leading-relaxed">{usageCode}</pre>
348
+ <div className="relative">
349
+ <pre className="bg-gray-900 text-gray-100 p-4 rounded-lg text-sm overflow-x-auto leading-relaxed">{usageCode}</pre>
350
+ <button
351
+ onClick={() => { navigator.clipboard.writeText(usageCode); setCopied(true); toast.success('Copied!'); setTimeout(() => setCopied(false), 2000); }}
352
+ className="absolute top-2 right-2 p-1.5 bg-gray-700 hover:bg-gray-600 text-gray-300 rounded transition-colors"
353
+ >
354
+ {copied ? <Check className="w-4 h-4 text-green-400" /> : <Copy className="w-4 h-4" />}
355
+ </button>
356
+ </div>
363
357
  <p className="mt-3 text-xs text-gray-400">
364
358
  Install with <code className="bg-gray-100 px-1.5 py-0.5 rounded text-gray-600">{installCmd}</code>
365
359
  </p>
@@ -130,10 +130,11 @@ print(result) # "immediate"`;
130
130
  <div className="mt-8">
131
131
  <div className="inline-flex items-center gap-3 bg-black/30 rounded-lg pl-4 pr-2 py-2 border border-white/10 font-mono text-sm">
132
132
  <span className="text-gray-400">$</span>
133
- <span className="text-green-300">{installCmd}</span>
133
+ <span className="text-green-300">pip install programasweights</span>
134
134
  <button
135
135
  onClick={() => copyToClipboard(installCmd, 'install')}
136
136
  className="p-1.5 rounded hover:bg-white/10 transition-colors text-gray-400 hover:text-white"
137
+ title="Copy full install command"
137
138
  >
138
139
  {copiedInstall ? <Check className="w-4 h-4 text-green-400" /> : <Copy className="w-4 h-4" />}
139
140
  </button>
@@ -527,10 +528,11 @@ print(result) # "immediate"`;
527
528
  {/* Install snippet */}
528
529
  <div className="mt-10 inline-flex items-center gap-3 bg-black/30 rounded-lg pl-5 pr-3 py-3 border border-white/10 font-mono text-sm">
529
530
  <span className="text-gray-400">$</span>
530
- <span className="text-green-300">{installCmd}</span>
531
+ <span className="text-green-300">pip install programasweights</span>
531
532
  <button
532
533
  onClick={() => copyToClipboard(installCmd, 'install')}
533
534
  className="p-1.5 rounded hover:bg-white/10 transition-colors text-gray-400 hover:text-white"
535
+ title="Copy full install command"
534
536
  >
535
537
  {copiedInstall ? <Check className="w-4 h-4 text-green-400" /> : <Copy className="w-4 h-4" />}
536
538
  </button>