programasweights 0.2.1__tar.gz → 0.2.2__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/.cursor/rules/sdk-publishing.mdc +53 -0
  2. {programasweights-0.2.1 → programasweights-0.2.2}/.cursor/rules/vllm-deployment.mdc +17 -5
  3. programasweights-0.2.2/AGENTS.md +194 -0
  4. {programasweights-0.2.1 → programasweights-0.2.2}/CHANGELOG.md +8 -0
  5. {programasweights-0.2.1 → programasweights-0.2.2}/PKG-INFO +5 -1
  6. {programasweights-0.2.1 → programasweights-0.2.2}/PYPI_README.md +4 -0
  7. {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/python-sdk.md +31 -1
  8. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/__init__.py +59 -3
  9. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/client.py +25 -7
  10. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime_llamacpp.py +19 -6
  11. {programasweights-0.2.1 → programasweights-0.2.2}/pyproject.toml +1 -1
  12. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/programs.py +10 -0
  13. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/compile_provider.py +26 -5
  14. {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_sdk.py +82 -0
  15. {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_sdk.sh +1 -1
  16. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/full.spec.ts +12 -14
  17. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AgentsPage.tsx +89 -10
  18. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AuthorPage.tsx +10 -5
  19. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/Footer.tsx +1 -1
  20. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubProgramPage.tsx +14 -20
  21. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/LandingPage.tsx +4 -2
  22. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/MainInterface.tsx +52 -36
  23. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/NavigationHelper.tsx +1 -1
  24. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ProfilePage.tsx +27 -20
  25. programasweights-0.2.1/AGENTS.md +0 -129
  26. programasweights-0.2.1/web-app/frontend/test-results/.last-run.json +0 -4
  27. {programasweights-0.2.1 → programasweights-0.2.2}/.git +0 -0
  28. {programasweights-0.2.1 → programasweights-0.2.2}/.github/workflows/web-sdk.yml +0 -0
  29. {programasweights-0.2.1 → programasweights-0.2.2}/.gitignore +0 -0
  30. {programasweights-0.2.1 → programasweights-0.2.2}/.gitmodules +0 -0
  31. {programasweights-0.2.1 → programasweights-0.2.2}/.hatch_build.toml +0 -0
  32. {programasweights-0.2.1 → programasweights-0.2.2}/.readthedocs.yaml +0 -0
  33. {programasweights-0.2.1 → programasweights-0.2.2}/1apple.jpg +0 -0
  34. {programasweights-0.2.1 → programasweights-0.2.2}/1apple2.jpg +0 -0
  35. {programasweights-0.2.1 → programasweights-0.2.2}/2apples.jpg +0 -0
  36. {programasweights-0.2.1 → programasweights-0.2.2}/2apples2.jpg +0 -0
  37. {programasweights-0.2.1 → programasweights-0.2.2}/3apples.jpg +0 -0
  38. {programasweights-0.2.1 → programasweights-0.2.2}/3apples2.jpg +0 -0
  39. {programasweights-0.2.1 → programasweights-0.2.2}/479400.png +0 -0
  40. {programasweights-0.2.1 → programasweights-0.2.2}/4apples.jpg +0 -0
  41. {programasweights-0.2.1 → programasweights-0.2.2}/4apples2.jpg +0 -0
  42. {programasweights-0.2.1 → programasweights-0.2.2}/4apples3.jpg +0 -0
  43. {programasweights-0.2.1 → programasweights-0.2.2}/4apples4.jpg +0 -0
  44. {programasweights-0.2.1 → programasweights-0.2.2}/5apples.jpg +0 -0
  45. {programasweights-0.2.1 → programasweights-0.2.2}/6apples.jpg +0 -0
  46. {programasweights-0.2.1 → programasweights-0.2.2}/8apples.jpg +0 -0
  47. {programasweights-0.2.1 → programasweights-0.2.2}/9apples.jpg +0 -0
  48. {programasweights-0.2.1 → programasweights-0.2.2}/FLOW_SUMMARY.md +0 -0
  49. {programasweights-0.2.1 → programasweights-0.2.2}/LICENSE +0 -0
  50. {programasweights-0.2.1 → programasweights-0.2.2}/MANIFEST.in +0 -0
  51. {programasweights-0.2.1 → programasweights-0.2.2}/ONNX_MIGRATION_PLAN.md +0 -0
  52. {programasweights-0.2.1 → programasweights-0.2.2}/PREFIX_TOKENS_DESIGN.md +0 -0
  53. {programasweights-0.2.1 → programasweights-0.2.2}/README.md +0 -0
  54. {programasweights-0.2.1 → programasweights-0.2.2}/TRUNCATION_CHANGES.md +0 -0
  55. {programasweights-0.2.1 → programasweights-0.2.2}/USE_CASES_AND_IDEAS.md +0 -0
  56. {programasweights-0.2.1 → programasweights-0.2.2}/VERIFICATION_USAGE.md +0 -0
  57. {programasweights-0.2.1 → programasweights-0.2.2}/analyze_dataset.py +0 -0
  58. {programasweights-0.2.1 → programasweights-0.2.2}/analyze_lengths.py +0 -0
  59. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/code_prompt.md +0 -0
  60. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  61. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/openai_batch_request.py +0 -0
  62. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/prepare_alchemist_data.py +0 -0
  63. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/prepare_var_bench_data.py +0 -0
  64. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/python_code_sandbox.py +0 -0
  65. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evaluation_var_bench.sh +0 -0
  66. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_evaluation.sh +0 -0
  67. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_request.sh +0 -0
  68. {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_statistics.sh +0 -0
  69. {programasweights-0.2.1 → programasweights-0.2.2}/benchmark_pytorch_vs_onnx.py +0 -0
  70. {programasweights-0.2.1 → programasweights-0.2.2}/benchmark_user_experience.py +0 -0
  71. {programasweights-0.2.1 → programasweights-0.2.2}/check_dataset.py +0 -0
  72. {programasweights-0.2.1 → programasweights-0.2.2}/combine_datasets.py +0 -0
  73. {programasweights-0.2.1 → programasweights-0.2.2}/compare_datasets.py +0 -0
  74. {programasweights-0.2.1 → programasweights-0.2.2}/compare_old_vs_regen.py +0 -0
  75. {programasweights-0.2.1 → programasweights-0.2.2}/convert_paw_to_svg.py +0 -0
  76. {programasweights-0.2.1 → programasweights-0.2.2}/create_favicon_sizes.py +0 -0
  77. {programasweights-0.2.1 → programasweights-0.2.2}/create_visualization_from_log.py +0 -0
  78. {programasweights-0.2.1 → programasweights-0.2.2}/create_vqa_dataset.py +0 -0
  79. {programasweights-0.2.1 → programasweights-0.2.2}/debug_cache.py +0 -0
  80. {programasweights-0.2.1 → programasweights-0.2.2}/debug_eos_example.sh +0 -0
  81. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  82. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/002-q4_0-adapter-format.md +0 -0
  83. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/003-single-spec-field.md +0 -0
  84. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/004-compiler-naming.md +0 -0
  85. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/005-vllm-hidden-states.md +0 -0
  86. {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/006-email-api-key-auth.md +0 -0
  87. {programasweights-0.2.1 → programasweights-0.2.2}/docs/advanced/adrs.md +0 -0
  88. {programasweights-0.2.1 → programasweights-0.2.2}/docs/advanced/architecture.md +0 -0
  89. {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/cli.md +0 -0
  90. {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/rest-api.md +0 -0
  91. {programasweights-0.2.1 → programasweights-0.2.2}/docs/architecture.md +0 -0
  92. {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/first-program.md +0 -0
  93. {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/installation.md +0 -0
  94. {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/naming-programs.md +0 -0
  95. {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/browser-inference.md +0 -0
  96. {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/how-it-works.md +0 -0
  97. {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/local-inference.md +0 -0
  98. {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/writing-good-specs.md +0 -0
  99. {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/browsing-programs.md +0 -0
  100. {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/feedback-cases.md +0 -0
  101. {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/publishing-programs.md +0 -0
  102. {programasweights-0.2.1 → programasweights-0.2.2}/docs/index.md +0 -0
  103. {programasweights-0.2.1 → programasweights-0.2.2}/docs/requirements.txt +0 -0
  104. {programasweights-0.2.1 → programasweights-0.2.2}/estimate_data_gen_cost.py +0 -0
  105. {programasweights-0.2.1 → programasweights-0.2.2}/eval.py +0 -0
  106. {programasweights-0.2.1 → programasweights-0.2.2}/examples/flask_app.py +0 -0
  107. {programasweights-0.2.1 → programasweights-0.2.2}/examples/jupyter_notebook.py +0 -0
  108. {programasweights-0.2.1 → programasweights-0.2.2}/examples/langchain_integration.py +0 -0
  109. {programasweights-0.2.1 → programasweights-0.2.2}/examples/replace_openai.py +0 -0
  110. {programasweights-0.2.1 → programasweights-0.2.2}/export_to_onnx.py +0 -0
  111. {programasweights-0.2.1 → programasweights-0.2.2}/extract_models.py +0 -0
  112. {programasweights-0.2.1 → programasweights-0.2.2}/inspect_data_dirs.py +0 -0
  113. {programasweights-0.2.1 → programasweights-0.2.2}/latest_export.csv +0 -0
  114. {programasweights-0.2.1 → programasweights-0.2.2}/log.train.81920.morecategories.extraprefix +0 -0
  115. {programasweights-0.2.1 → programasweights-0.2.2}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  116. {programasweights-0.2.1 → programasweights-0.2.2}/merge_datasets.py +0 -0
  117. {programasweights-0.2.1 → programasweights-0.2.2}/mkdocs.yml +0 -0
  118. {programasweights-0.2.1 → programasweights-0.2.2}/paw.png +0 -0
  119. {programasweights-0.2.1 → programasweights-0.2.2}/paw.svg +0 -0
  120. {programasweights-0.2.1 → programasweights-0.2.2}/process_im2latex_dataset.py +0 -0
  121. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/artifacts.py +0 -0
  122. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/cache.py +0 -0
  123. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/cli.py +0 -0
  124. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/compiler/__init__.py +0 -0
  125. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/compiler/dummy.py +0 -0
  126. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/config.py +0 -0
  127. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/convert_peft_to_paw.py +0 -0
  128. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/paw_format.py +0 -0
  129. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/__init__.py +0 -0
  130. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/interpreter.py +0 -0
  131. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/interpreter_onnx.py +0 -0
  132. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/__init__.py +0 -0
  133. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/compiler/__init__.py +0 -0
  134. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/lora_format.py +0 -0
  135. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/runtime/__init__.py +0 -0
  136. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  137. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  138. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_lora_format.py +0 -0
  139. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_training.py +0 -0
  140. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/train_lora.py +0 -0
  141. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/training/__init__.py +0 -0
  142. {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  143. {programasweights-0.2.1 → programasweights-0.2.2}/run_eval.sh +0 -0
  144. {programasweights-0.2.1 → programasweights-0.2.2}/run_training.sh +0 -0
  145. {programasweights-0.2.1 → programasweights-0.2.2}/scripts/filter_table_by_length.py +0 -0
  146. {programasweights-0.2.1 → programasweights-0.2.2}/server/.env.example +0 -0
  147. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/env.py +0 -0
  148. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/script.py.mako +0 -0
  149. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/001_initial_schema.py +0 -0
  150. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
  151. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
  152. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
  153. {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic.ini +0 -0
  154. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/__init__.py +0 -0
  155. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/config.py +0 -0
  156. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/dependencies.py +0 -0
  157. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/logging_config.py +0 -0
  158. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/main.py +0 -0
  159. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/middleware/__init__.py +0 -0
  160. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/middleware/rate_limit.py +0 -0
  161. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/__init__.py +0 -0
  162. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/database.py +0 -0
  163. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/orm.py +0 -0
  164. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/schemas.py +0 -0
  165. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/__init__.py +0 -0
  166. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/auth.py +0 -0
  167. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/compile.py +0 -0
  168. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/feedback.py +0 -0
  169. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/health.py +0 -0
  170. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/infer.py +0 -0
  171. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/models_info.py +0 -0
  172. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/__init__.py +0 -0
  173. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/auto_tag_service.py +0 -0
  174. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/auto_title_service.py +0 -0
  175. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/compile_service.py +0 -0
  176. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/infer_service.py +0 -0
  177. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/search_service.py +0 -0
  178. {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/storage_service.py +0 -0
  179. {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/benchmark_api.py +0 -0
  180. {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/handcrafted_specs.json +0 -0
  181. {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/last_benchmark_results.json +0 -0
  182. {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/last_stress_results.json +0 -0
  183. {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/stress_test.py +0 -0
  184. {programasweights-0.2.1 → programasweights-0.2.2}/server/compiler_registry.json +0 -0
  185. {programasweights-0.2.1 → programasweights-0.2.2}/server/provider_configs/gpt2.json +0 -0
  186. {programasweights-0.2.1 → programasweights-0.2.2}/server/provider_configs/qwen3-0.6b.json +0 -0
  187. {programasweights-0.2.1 → programasweights-0.2.2}/server/requirements.txt +0 -0
  188. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
  189. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/ablation_search.py +0 -0
  190. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_hf_browser_assets.py +0 -0
  191. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_hf_safetensors.py +0 -0
  192. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_interestingness.py +0 -0
  193. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_tags.py +0 -0
  194. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_titles.py +0 -0
  195. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/benchmark_gpt2.py +0 -0
  196. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/cleanup_storage.py +0 -0
  197. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/eval_search.py +0 -0
  198. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/evict_cold_programs.py +0 -0
  199. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/generate_prefix_cache.py +0 -0
  200. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/launch_gpt2_compiler.py +0 -0
  201. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/launch_qwen3_compiler.py +0 -0
  202. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/patch_vllm.sh +0 -0
  203. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/restart.sh +0 -0
  204. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_all.sh +0 -0
  205. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_gpt2_services.sh +0 -0
  206. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_provider.sh +0 -0
  207. {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_services.sh +0 -0
  208. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/__init__.py +0 -0
  209. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/conftest.py +0 -0
  210. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_auth.py +0 -0
  211. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_compile.py +0 -0
  212. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_errors.py +0 -0
  213. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_infer.py +0 -0
  214. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_integration_gpu.py +0 -0
  215. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_rate_limit.py +0 -0
  216. {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_storage.py +0 -0
  217. {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/__init__.py +0 -0
  218. {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/gpt2_lora_patch.py +0 -0
  219. {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/paw_compiler.py +0 -0
  220. {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/prepare_checkpoint.py +0 -0
  221. {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/register.py +0 -0
  222. {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  223. {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  224. {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  225. {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  226. {programasweights-0.2.1 → programasweights-0.2.2}/test_1spec.py +0 -0
  227. {programasweights-0.2.1 → programasweights-0.2.2}/test_all_caching.py +0 -0
  228. {programasweights-0.2.1 → programasweights-0.2.2}/test_apple_count.py +0 -0
  229. {programasweights-0.2.1 → programasweights-0.2.2}/test_batch_pilot.py +0 -0
  230. {programasweights-0.2.1 → programasweights-0.2.2}/test_compile.py +0 -0
  231. {programasweights-0.2.1 → programasweights-0.2.2}/test_e2e.py +0 -0
  232. {programasweights-0.2.1 → programasweights-0.2.2}/test_execute.py +0 -0
  233. {programasweights-0.2.1 → programasweights-0.2.2}/test_nspecs.py +0 -0
  234. {programasweights-0.2.1 → programasweights-0.2.2}/test_one_vs_two_step.py +0 -0
  235. {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_correctness.py +0 -0
  236. {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_hf_model.py +0 -0
  237. {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_hf_with_images.py +0 -0
  238. {programasweights-0.2.1 → programasweights-0.2.2}/test_paw_format.py +0 -0
  239. {programasweights-0.2.1 → programasweights-0.2.2}/test_thinking_comparison.py +0 -0
  240. {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_offline_cache.py +0 -0
  241. {programasweights-0.2.1 → programasweights-0.2.2}/train.py +0 -0
  242. {programasweights-0.2.1 → programasweights-0.2.2}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  243. {programasweights-0.2.1 → programasweights-0.2.2}/training/README.md +0 -0
  244. {programasweights-0.2.1 → programasweights-0.2.2}/training/__init__.py +0 -0
  245. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  246. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/README.md +0 -0
  247. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  248. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/build_user_bench.py +0 -0
  249. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/dry_run_batch.py +0 -0
  250. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/filter_test_data.py +0 -0
  251. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/generate_specs.py +0 -0
  252. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/generate_specs_batch.py +0 -0
  253. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/incremental_merge.py +0 -0
  254. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/merge_and_upload.py +0 -0
  255. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/regenerate_outputs_batch.py +0 -0
  256. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/synthesize_data.py +0 -0
  257. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/synthesize_data_batch.py +0 -0
  258. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/filter_system.txt +0 -0
  259. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/filter_user.txt +0 -0
  260. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/pairs_system.txt +0 -0
  261. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/pairs_user.txt +0 -0
  262. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_system.txt +0 -0
  263. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user.txt +0 -0
  264. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  265. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  266. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  267. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/verify_system.txt +0 -0
  268. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/verify_user.txt +0 -0
  269. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/filter_system.txt +0 -0
  270. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/filter_user.txt +0 -0
  271. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/pairs_system.txt +0 -0
  272. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/pairs_user.txt +0 -0
  273. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_system.txt +0 -0
  274. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user.txt +0 -0
  275. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  276. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  277. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  278. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/verify_system.txt +0 -0
  279. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/verify_user.txt +0 -0
  280. {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/verify_test_data.py +0 -0
  281. {programasweights-0.2.1 → programasweights-0.2.2}/training/datasets/__init__.py +0 -0
  282. {programasweights-0.2.1 → programasweights-0.2.2}/training/datasets/jsonl_text_pairs.py +0 -0
  283. {programasweights-0.2.1 → programasweights-0.2.2}/training/loops/__init__.py +0 -0
  284. {programasweights-0.2.1 → programasweights-0.2.2}/training/loops/prefix_tuning_sft.py +0 -0
  285. {programasweights-0.2.1 → programasweights-0.2.2}/ttt.py +0 -0
  286. {programasweights-0.2.1 → programasweights-0.2.2}/upload_model.py +0 -0
  287. {programasweights-0.2.1 → programasweights-0.2.2}/upload_onnx_to_huggingface.py +0 -0
  288. {programasweights-0.2.1 → programasweights-0.2.2}/upload_onnx_to_huggingface_with_token.py +0 -0
  289. {programasweights-0.2.1 → programasweights-0.2.2}/utils.py +0 -0
  290. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/HANDOFF.md +0 -0
  291. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/README.md +0 -0
  292. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/__init__.py +0 -0
  293. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/config.py +0 -0
  294. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/main.py +0 -0
  295. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/middleware/__init__.py +0 -0
  296. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/middleware/rate_limit.py +0 -0
  297. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/models.py +0 -0
  298. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/__init__.py +0 -0
  299. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/auth_service.py +0 -0
  300. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/case_service.py +0 -0
  301. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/compiler_service.py +0 -0
  302. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/gpt_service.py +0 -0
  303. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/hub_service.py +0 -0
  304. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/image_service.py +0 -0
  305. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/interpreter_service.py +0 -0
  306. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/sql_manager.py +0 -0
  307. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  308. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/__init__.py +0 -0
  309. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/image_placeholders.py +0 -0
  310. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/program_hash.py +0 -0
  311. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/clear_db.sh +0 -0
  312. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/clear_tables.sql +0 -0
  313. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/data/programs.db +0 -0
  314. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/env_example.txt +0 -0
  315. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/example_images/README.md +0 -0
  316. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/get_data_examples.py +0 -0
  317. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/requirements.txt +0 -0
  318. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/run_server.py +0 -0
  319. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_analytics_tables.sql +0 -0
  320. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_auth_tables.sql +0 -0
  321. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_cache_tables.sql +0 -0
  322. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_cases_tables.sql +0 -0
  323. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_database.sql +0 -0
  324. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_database_simple.sql +0 -0
  325. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_db.sh +0 -0
  326. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_example_images.py +0 -0
  327. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_hub_tables.sql +0 -0
  328. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/test_compilation_cache.py +0 -0
  329. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/README.md +0 -0
  330. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/helpers.ts +0 -0
  331. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/smoke.spec.ts +0 -0
  332. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/eslint.config.js +0 -0
  333. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/index.html +0 -0
  334. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/package-lock.json +0 -0
  335. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/package.json +0 -0
  336. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/playwright.config.ts +0 -0
  337. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/postcss.config.js +0 -0
  338. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/apple-touch-icon.png +0 -0
  339. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/browser-worker.html +0 -0
  340. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/favicon-16x16.png +0 -0
  341. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/favicon-32x32.png +0 -0
  342. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw-192.png +0 -0
  343. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw-512.png +0 -0
  344. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw.svg +0 -0
  345. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/react-test.html +0 -0
  346. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/test.html +0 -0
  347. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/vite.svg +0 -0
  348. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/scripts/deploy.sh +0 -0
  349. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/App.css +0 -0
  350. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/App.tsx +0 -0
  351. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/assets/react.svg +0 -0
  352. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AboutPage.tsx +0 -0
  353. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/BrowserPage.tsx +0 -0
  354. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CasesSection.tsx +0 -0
  355. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  356. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  357. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/DocsPage.tsx +0 -0
  358. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  359. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/Header.tsx +0 -0
  360. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubPage.tsx +0 -0
  361. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
  362. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  363. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  364. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/SettingsPage.tsx +0 -0
  365. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
  366. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  367. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/TestSection.tsx +0 -0
  368. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/index.css +0 -0
  369. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/main.tsx +0 -0
  370. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/types/index.ts +0 -0
  371. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/utils/api.ts +0 -0
  372. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tailwind.config.js +0 -0
  373. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.app.json +0 -0
  374. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.json +0 -0
  375. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.node.json +0 -0
  376. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/vite.config.ts +0 -0
  377. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/nginx-paw.conf +0 -0
  378. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/nginx.conf +0 -0
  379. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/setup_mysql.sh +0 -0
  380. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/start.sh +0 -0
  381. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/test_setup.py +0 -0
  382. {programasweights-0.2.1 → programasweights-0.2.2}/web-app/ttt.py +0 -0
  383. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/.gitignore +0 -0
  384. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/LICENSE +0 -0
  385. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/README.md +0 -0
  386. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
  387. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/server.ts +0 -0
  388. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/start-server.ts +0 -0
  389. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/test-page.html +0 -0
  390. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/loader.test.ts +0 -0
  391. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/prompt.test.ts +0 -0
  392. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/examples/basic.html +0 -0
  393. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/package-lock.json +0 -0
  394. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/package.json +0 -0
  395. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/playwright.config.ts +0 -0
  396. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/serve.py +0 -0
  397. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/index.ts +0 -0
  398. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/loader.ts +0 -0
  399. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/runtime.ts +0 -0
  400. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/types.ts +0 -0
  401. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/test-standalone.html +0 -0
  402. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/tsconfig.json +0 -0
  403. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/vitest.config.ts +0 -0
  404. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.git +0 -0
  405. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
  406. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
  407. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
  408. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
  409. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.gitignore +0 -0
  410. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.gitmodules +0 -0
  411. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.npmignore +0 -0
  412. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.prettierignore +0 -0
  413. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/CMakeLists.txt +0 -0
  414. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/LICENCE +0 -0
  415. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/README.md +0 -0
  416. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/README_banner.png +0 -0
  417. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/assets/screenshot_0.png +0 -0
  418. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/actions.hpp +0 -0
  419. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
  420. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/glue.hpp +0 -0
  421. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
  422. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
  423. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
  424. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
  425. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
  426. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
  427. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
  428. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/wllama.cpp +0 -0
  429. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/basic/index.html +0 -0
  430. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/embeddings/index.html +0 -0
  431. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
  432. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/.gitignore +0 -0
  433. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/README.md +0 -0
  434. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/index.html +0 -0
  435. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/package-lock.json +0 -0
  436. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/package.json +0 -0
  437. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
  438. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
  439. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
  440. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
  441. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
  442. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
  443. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
  444. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
  445. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
  446. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
  447. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
  448. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
  449. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/config.ts +0 -0
  450. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/index.css +0 -0
  451. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
  452. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
  453. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
  454. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
  455. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
  456. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
  457. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
  458. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
  459. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
  460. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
  461. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
  462. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
  463. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
  464. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
  465. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
  466. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
  467. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/guides/intro-v2.md +0 -0
  468. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/index.ts +0 -0
  469. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/package-lock.json +0 -0
  470. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/package.json +0 -0
  471. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
  472. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
  473. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_worker.sh +0 -0
  474. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
  475. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
  476. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/http_server.js +0 -0
  477. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/post_build.sh +0 -0
  478. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/cache-manager.ts +0 -0
  479. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/glue/glue.ts +0 -0
  480. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/glue/messages.ts +0 -0
  481. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/index.ts +0 -0
  482. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/mjs.test.ts +0 -0
  483. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/model-manager.test.ts +0 -0
  484. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/model-manager.ts +0 -0
  485. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
  486. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
  487. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
  488. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
  489. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/utils.test.ts +0 -0
  490. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/utils.ts +0 -0
  491. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
  492. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wllama.test.ts +0 -0
  493. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wllama.ts +0 -0
  494. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/worker.ts +0 -0
  495. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
  496. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
  497. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
  498. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/tsconfig.build.json +0 -0
  499. {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/tsup.config.ts +0 -0
  500. {programasweights-0.2.1 → programasweights-0.2.2}/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
@@ -0,0 +1,194 @@
1
+ # ProgramAsWeights (PAW)
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.
4
+
5
+ Website: https://programasweights.com
6
+ Docs: https://programasweights.readthedocs.io
7
+
8
+ ## Install
9
+
10
+ ```bash
11
+ pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ```python
17
+ import programasweights as paw
18
+
19
+ # Use a pre-compiled function (downloads once, runs locally forever)
20
+ # "email-triage" is an official pre-compiled program (slug)
21
+ fn = paw.function("email-triage")
22
+ fn("Urgent: server is down!") # "immediate"
23
+ fn("Newsletter: spring picnic") # "wait"
24
+
25
+ # Compile your own from a description
26
+ program = paw.compile(
27
+ "Fix malformed JSON: repair missing quotes and trailing commas",
28
+ compiler="paw-4b-qwen3-0.6b" # or "paw-4b-gpt2" for smaller/faster
29
+ )
30
+ fn = paw.function(program.id)
31
+ fn("{name: 'Alice',}") # '{"name": "Alice"}'
32
+
33
+ # Or compile and load in one step
34
+ fn = paw.compile_and_load("Classify sentiment as positive or negative")
35
+ fn("I love this!") # "positive"
36
+ ```
37
+
38
+ ## Two Compilers
39
+
40
+ | | Standard (Qwen3 0.6B) | Compact (GPT-2 124M) |
41
+ |---|---|---|
42
+ | Compiler name | `paw-4b-qwen3-0.6b` | `paw-4b-gpt2` |
43
+ | Accuracy | Higher | Lower |
44
+ | Base model size | 594 MB | 105 MB |
45
+ | Program size | ~22 MB | ~5 MB |
46
+ | Inference speed | ~90ms (server) | ~50ms (server) |
47
+ | Runs in browser | No | Yes (must use this compiler) |
48
+
49
+ Default is Standard. Use Compact when you need smaller files or browser deployment.
50
+
51
+ ## When to Use PAW
52
+
53
+ - **Fuzzy search** — typo-tolerant matching, semantic search, near-duplicate detection
54
+ - **Format repair** — fix broken JSON, normalize dates, repair malformed inputs
55
+ - **Classification** — sentiment, urgency, categories defined in your own words
56
+ - **Extraction** — emails, names, dates from messy unstructured text
57
+ - **Log triage** — extract errors from verbose output, filter noise
58
+ - **Intent routing** — map user descriptions to the closest URL, menu item, or setting
59
+ - **Agent preprocessing** — parse tool calls, validate outputs, route tasks
60
+
61
+ ## Writing Good Specs
62
+
63
+ The spec is the most important input. It defines what your function does.
64
+
65
+ **Structure:** Description + examples. Use `Input: ... Output: ...` format.
66
+
67
+ ```python
68
+ fn = paw.compile_and_load("""
69
+ Classify user intent. Return ONLY one of: search, create, delete, other.
70
+
71
+ Input: Find the latest report
72
+ Output: search
73
+
74
+ Input: Make a new folder
75
+ Output: create
76
+
77
+ Input: Remove old backups
78
+ Output: delete
79
+
80
+ Input: What time is it
81
+ Output: other
82
+ """)
83
+ ```
84
+
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).
90
+ - Each function is stateless: one input, one output. No conversation history.
91
+
92
+ ## Browser / JavaScript SDK
93
+
94
+ Programs compiled with `paw-4b-gpt2` also run entirely in the browser via WebAssembly.
95
+
96
+ ```bash
97
+ npm install @programasweights/web
98
+ ```
99
+
100
+ ```javascript
101
+ import paw from '@programasweights/web';
102
+
103
+ const fn = await paw.function('programasweights/email-triage');
104
+ const result = await fn('Urgent: server is down!');
105
+ // result: "immediate"
106
+ ```
107
+
108
+ ## Authentication (optional)
109
+
110
+ Everything works without authentication. Sign in for higher rate limits and program naming.
111
+
112
+ ```bash
113
+ export PAW_API_KEY=paw_sk_...
114
+ ```
115
+
116
+ Generate API keys at https://programasweights.com/settings.
117
+
118
+ | | Anonymous | Authenticated |
119
+ |---|---|---|
120
+ | Compile rate limit | 20/hr | 60/hr |
121
+ | Name programs (slugs) | No | Yes |
122
+
123
+ ## CLI
124
+
125
+ ```bash
126
+ paw compile --spec "Classify sentiment" --json
127
+ paw run --program <program_id> --input "I love this!" --json
128
+ paw info <program_id> # show program metadata
129
+ paw rename <program_id> my-slug # name a program (requires auth)
130
+ paw login # save API key
131
+ ```
132
+
133
+ `--json` gives structured output. Example:
134
+
135
+ ```json
136
+ {"program_id": "a6b454023d41ac9ca845", "slug": null, "status": "ready", "timings": {"total_ms": 2800}}
137
+ ```
138
+
139
+ ## Full API Reference
140
+
141
+ ```python
142
+ # Compile a spec into a neural program
143
+ program = paw.compile(
144
+ spec, # natural language specification (str)
145
+ compiler="paw-4b-qwen3-0.6b", # compiler model name
146
+ slug=None, # optional: URL-safe handle (requires auth)
147
+ public=True, # list on public hub
148
+ )
149
+ # Returns: Program(id: str, slug: str|None, status: str, timings: dict, error: str|None)
150
+
151
+ # Load a program for local inference
152
+ 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
155
+
156
+ # The callable signature:
157
+ result: str = fn(input_text: str, max_tokens=512, temperature=0.0)
158
+
159
+ # Compile and load in one step
160
+ fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
161
+
162
+ # List your programs (requires auth)
163
+ programs = paw.list_programs(sort="recent", per_page=20)
164
+
165
+ # Save API key
166
+ paw.login()
167
+ ```
168
+
169
+ ## Common Errors
170
+
171
+ | Error | Cause | Fix |
172
+ |-------|-------|-----|
173
+ | `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. |
175
+ | `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
+
178
+ ## Performance Notes
179
+
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.
186
+
187
+ ## Browse Programs
188
+
189
+ 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,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.2 (2026-03-19)
4
+
5
+ - Add `paw.compile_and_load()` convenience method (compile + load in one call)
6
+ - `paw.function()` now accepts a `Program` object directly (not just string ID)
7
+ - Add `paw.list_programs()` for authenticated users to list their programs
8
+ - Suppress `llama.cpp` stderr noise by default; use `verbose=True` to enable
9
+ - Rewritten AGENTS.md with spec-writing tips, full API reference, common errors, and performance notes
10
+
3
11
  ## 0.2.0 (2026-04-01)
4
12
 
5
13
  First public release.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.2.1
3
+ Version: 0.2.2
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
@@ -58,6 +58,10 @@ program = paw.compile(
58
58
  )
59
59
  fn = paw.function(program.slug) # or paw.function(program.id)
60
60
  fn("{name: 'Alice',}") # '{"name": "Alice"}'
61
+
62
+ # Or compile and load in one step
63
+ fn = paw.compile_and_load("Classify sentiment as positive or negative")
64
+ fn("I love this!") # "positive"
61
65
  ```
62
66
 
63
67
  ## Two Compilers
@@ -28,6 +28,10 @@ program = paw.compile(
28
28
  )
29
29
  fn = paw.function(program.slug) # or paw.function(program.id)
30
30
  fn("{name: 'Alice',}") # '{"name": "Alice"}'
31
+
32
+ # Or compile and load in one step
33
+ fn = paw.compile_and_load("Classify sentiment as positive or negative")
34
+ fn("I love this!") # "positive"
31
35
  ```
32
36
 
33
37
  ## Two Compilers
@@ -24,7 +24,7 @@ Loads a compiled program and returns a callable. Downloads the program and base
24
24
 
25
25
  | Parameter | Description |
26
26
  |-----------|-------------|
27
- | `name_or_id` | Program hash ID (e.g. `a6b454023d41ac9ca845`), slug (e.g. `da03/my-classifier`), or official shorthand (e.g. `email-triage`). |
27
+ | `name_or_id` | A `Program` object, hash ID (e.g. `a6b454023d41ac9ca845`), slug (e.g. `da03/my-classifier`), or official shorthand (e.g. `email-triage`). |
28
28
  | `n_ctx` | Context length for the local runtime (default `2048`). |
29
29
  | `n_gpu_layers` | GPU layers to offload (`0` = CPU-only, `-1` = all). Set `PAW_GPU_LAYERS` env var as default. |
30
30
  | `verbose` | Enable verbose logging (default `False`). |
@@ -76,6 +76,36 @@ Compiles a natural language spec on the server. Returns a `Program` object.
76
76
  | `timings` | Timing metadata from the server. |
77
77
  | `error` | Error message when compilation fails. |
78
78
 
79
+ ## `paw.compile_and_load`
80
+
81
+ ```python
82
+ fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b", **kwargs)
83
+ ```
84
+
85
+ Convenience method that compiles a spec and immediately loads the result for local inference. Equivalent to `paw.function(paw.compile(spec, ...).id)`. Returns a callable.
86
+
87
+ Accepts all the same parameters as `paw.compile`.
88
+
89
+ ## `paw.list_programs`
90
+
91
+ ```python
92
+ result = paw.list_programs(sort="recent", per_page=20)
93
+ ```
94
+
95
+ Returns a dict with the authenticated user's compiled programs. Requires authentication.
96
+
97
+ | Parameter | Description |
98
+ |-----------|-------------|
99
+ | `sort` | Sort order: `"recent"` (default), `"votes"`, `"recommended"`. |
100
+ | `per_page` | Number of results per page (default `20`). |
101
+
102
+ **Return value** -- dict:
103
+
104
+ | Key | Description |
105
+ |-----|-------------|
106
+ | `programs` | List of program dicts with `id`, `spec`, `name`, `compiler`, etc. |
107
+ | `total` | Total number of programs. |
108
+
79
109
  ## `paw.login`
80
110
 
81
111
  ```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"
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"
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: