programasweights 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. {programasweights-0.2.0 → programasweights-0.2.1}/AGENTS.md +24 -22
  2. {programasweights-0.2.0 → programasweights-0.2.1}/PKG-INFO +1 -1
  3. programasweights-0.2.1/docs/api-reference/cli.md +90 -0
  4. programasweights-0.2.1/docs/api-reference/python-sdk.md +107 -0
  5. {programasweights-0.2.0 → programasweights-0.2.1}/docs/api-reference/rest-api.md +25 -14
  6. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/__init__.py +1 -1
  7. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/cli.py +3 -1
  8. {programasweights-0.2.0 → programasweights-0.2.1}/pyproject.toml +1 -1
  9. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/compile.py +10 -3
  10. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/programs.py +9 -7
  11. {programasweights-0.2.0 → programasweights-0.2.1}/tests/test_sdk.py +114 -0
  12. {programasweights-0.2.0 → programasweights-0.2.1}/tests/test_sdk.sh +1 -1
  13. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/AboutPage.tsx +1 -1
  14. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/AgentsPage.tsx +66 -13
  15. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/Footer.tsx +1 -1
  16. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/HubProgramPage.tsx +1 -1
  17. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/MainInterface.tsx +1 -1
  18. programasweights-0.2.1/web-sdk/LICENSE +21 -0
  19. programasweights-0.2.1/web-sdk/__tests__/e2e/browser.spec.ts +223 -0
  20. programasweights-0.2.1/web-sdk/__tests__/e2e/server.ts +69 -0
  21. programasweights-0.2.1/web-sdk/__tests__/e2e/start-server.ts +2 -0
  22. programasweights-0.2.1/web-sdk/__tests__/e2e/test-page.html +122 -0
  23. programasweights-0.2.1/web-sdk/__tests__/loader.test.ts +244 -0
  24. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/package-lock.json +61 -2
  25. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/package.json +4 -3
  26. programasweights-0.2.1/web-sdk/playwright.config.ts +19 -0
  27. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/src/runtime.ts +3 -1
  28. programasweights-0.2.0/docs/api-reference/cli.md +0 -76
  29. programasweights-0.2.0/docs/api-reference/python-sdk.md +0 -75
  30. programasweights-0.2.0/web-sdk/__tests__/loader.test.ts +0 -110
  31. {programasweights-0.2.0 → programasweights-0.2.1}/.cursor/rules/vllm-deployment.mdc +0 -0
  32. {programasweights-0.2.0 → programasweights-0.2.1}/.git +0 -0
  33. {programasweights-0.2.0 → programasweights-0.2.1}/.github/workflows/web-sdk.yml +0 -0
  34. {programasweights-0.2.0 → programasweights-0.2.1}/.gitignore +0 -0
  35. {programasweights-0.2.0 → programasweights-0.2.1}/.gitmodules +0 -0
  36. {programasweights-0.2.0 → programasweights-0.2.1}/.hatch_build.toml +0 -0
  37. {programasweights-0.2.0 → programasweights-0.2.1}/.readthedocs.yaml +0 -0
  38. {programasweights-0.2.0 → programasweights-0.2.1}/1apple.jpg +0 -0
  39. {programasweights-0.2.0 → programasweights-0.2.1}/1apple2.jpg +0 -0
  40. {programasweights-0.2.0 → programasweights-0.2.1}/2apples.jpg +0 -0
  41. {programasweights-0.2.0 → programasweights-0.2.1}/2apples2.jpg +0 -0
  42. {programasweights-0.2.0 → programasweights-0.2.1}/3apples.jpg +0 -0
  43. {programasweights-0.2.0 → programasweights-0.2.1}/3apples2.jpg +0 -0
  44. {programasweights-0.2.0 → programasweights-0.2.1}/479400.png +0 -0
  45. {programasweights-0.2.0 → programasweights-0.2.1}/4apples.jpg +0 -0
  46. {programasweights-0.2.0 → programasweights-0.2.1}/4apples2.jpg +0 -0
  47. {programasweights-0.2.0 → programasweights-0.2.1}/4apples3.jpg +0 -0
  48. {programasweights-0.2.0 → programasweights-0.2.1}/4apples4.jpg +0 -0
  49. {programasweights-0.2.0 → programasweights-0.2.1}/5apples.jpg +0 -0
  50. {programasweights-0.2.0 → programasweights-0.2.1}/6apples.jpg +0 -0
  51. {programasweights-0.2.0 → programasweights-0.2.1}/8apples.jpg +0 -0
  52. {programasweights-0.2.0 → programasweights-0.2.1}/9apples.jpg +0 -0
  53. {programasweights-0.2.0 → programasweights-0.2.1}/CHANGELOG.md +0 -0
  54. {programasweights-0.2.0 → programasweights-0.2.1}/FLOW_SUMMARY.md +0 -0
  55. {programasweights-0.2.0 → programasweights-0.2.1}/LICENSE +0 -0
  56. {programasweights-0.2.0 → programasweights-0.2.1}/MANIFEST.in +0 -0
  57. {programasweights-0.2.0 → programasweights-0.2.1}/ONNX_MIGRATION_PLAN.md +0 -0
  58. {programasweights-0.2.0 → programasweights-0.2.1}/PREFIX_TOKENS_DESIGN.md +0 -0
  59. {programasweights-0.2.0 → programasweights-0.2.1}/PYPI_README.md +0 -0
  60. {programasweights-0.2.0 → programasweights-0.2.1}/README.md +0 -0
  61. {programasweights-0.2.0 → programasweights-0.2.1}/TRUNCATION_CHANGES.md +0 -0
  62. {programasweights-0.2.0 → programasweights-0.2.1}/USE_CASES_AND_IDEAS.md +0 -0
  63. {programasweights-0.2.0 → programasweights-0.2.1}/VERIFICATION_USAGE.md +0 -0
  64. {programasweights-0.2.0 → programasweights-0.2.1}/analyze_dataset.py +0 -0
  65. {programasweights-0.2.0 → programasweights-0.2.1}/analyze_lengths.py +0 -0
  66. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/code_prompt.md +0 -0
  67. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  68. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/openai_batch_request.py +0 -0
  69. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/prepare_alchemist_data.py +0 -0
  70. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/prepare_var_bench_data.py +0 -0
  71. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/python_code_sandbox.py +0 -0
  72. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/script_evaluation_var_bench.sh +0 -0
  73. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/script_evalution_evaluation.sh +0 -0
  74. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/script_evalution_request.sh +0 -0
  75. {programasweights-0.2.0 → programasweights-0.2.1}/baselines/script_evalution_statistics.sh +0 -0
  76. {programasweights-0.2.0 → programasweights-0.2.1}/benchmark_pytorch_vs_onnx.py +0 -0
  77. {programasweights-0.2.0 → programasweights-0.2.1}/benchmark_user_experience.py +0 -0
  78. {programasweights-0.2.0 → programasweights-0.2.1}/check_dataset.py +0 -0
  79. {programasweights-0.2.0 → programasweights-0.2.1}/combine_datasets.py +0 -0
  80. {programasweights-0.2.0 → programasweights-0.2.1}/compare_datasets.py +0 -0
  81. {programasweights-0.2.0 → programasweights-0.2.1}/compare_old_vs_regen.py +0 -0
  82. {programasweights-0.2.0 → programasweights-0.2.1}/convert_paw_to_svg.py +0 -0
  83. {programasweights-0.2.0 → programasweights-0.2.1}/create_favicon_sizes.py +0 -0
  84. {programasweights-0.2.0 → programasweights-0.2.1}/create_visualization_from_log.py +0 -0
  85. {programasweights-0.2.0 → programasweights-0.2.1}/create_vqa_dataset.py +0 -0
  86. {programasweights-0.2.0 → programasweights-0.2.1}/debug_cache.py +0 -0
  87. {programasweights-0.2.0 → programasweights-0.2.1}/debug_eos_example.sh +0 -0
  88. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  89. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/002-q4_0-adapter-format.md +0 -0
  90. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/003-single-spec-field.md +0 -0
  91. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/004-compiler-naming.md +0 -0
  92. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/005-vllm-hidden-states.md +0 -0
  93. {programasweights-0.2.0 → programasweights-0.2.1}/docs/adr/006-email-api-key-auth.md +0 -0
  94. {programasweights-0.2.0 → programasweights-0.2.1}/docs/advanced/adrs.md +0 -0
  95. {programasweights-0.2.0 → programasweights-0.2.1}/docs/advanced/architecture.md +0 -0
  96. {programasweights-0.2.0 → programasweights-0.2.1}/docs/architecture.md +0 -0
  97. {programasweights-0.2.0 → programasweights-0.2.1}/docs/getting-started/first-program.md +0 -0
  98. {programasweights-0.2.0 → programasweights-0.2.1}/docs/getting-started/installation.md +0 -0
  99. {programasweights-0.2.0 → programasweights-0.2.1}/docs/getting-started/naming-programs.md +0 -0
  100. {programasweights-0.2.0 → programasweights-0.2.1}/docs/guide/browser-inference.md +0 -0
  101. {programasweights-0.2.0 → programasweights-0.2.1}/docs/guide/how-it-works.md +0 -0
  102. {programasweights-0.2.0 → programasweights-0.2.1}/docs/guide/local-inference.md +0 -0
  103. {programasweights-0.2.0 → programasweights-0.2.1}/docs/guide/writing-good-specs.md +0 -0
  104. {programasweights-0.2.0 → programasweights-0.2.1}/docs/hub/browsing-programs.md +0 -0
  105. {programasweights-0.2.0 → programasweights-0.2.1}/docs/hub/feedback-cases.md +0 -0
  106. {programasweights-0.2.0 → programasweights-0.2.1}/docs/hub/publishing-programs.md +0 -0
  107. {programasweights-0.2.0 → programasweights-0.2.1}/docs/index.md +0 -0
  108. {programasweights-0.2.0 → programasweights-0.2.1}/docs/requirements.txt +0 -0
  109. {programasweights-0.2.0 → programasweights-0.2.1}/estimate_data_gen_cost.py +0 -0
  110. {programasweights-0.2.0 → programasweights-0.2.1}/eval.py +0 -0
  111. {programasweights-0.2.0 → programasweights-0.2.1}/examples/flask_app.py +0 -0
  112. {programasweights-0.2.0 → programasweights-0.2.1}/examples/jupyter_notebook.py +0 -0
  113. {programasweights-0.2.0 → programasweights-0.2.1}/examples/langchain_integration.py +0 -0
  114. {programasweights-0.2.0 → programasweights-0.2.1}/examples/replace_openai.py +0 -0
  115. {programasweights-0.2.0 → programasweights-0.2.1}/export_to_onnx.py +0 -0
  116. {programasweights-0.2.0 → programasweights-0.2.1}/extract_models.py +0 -0
  117. {programasweights-0.2.0 → programasweights-0.2.1}/inspect_data_dirs.py +0 -0
  118. {programasweights-0.2.0 → programasweights-0.2.1}/latest_export.csv +0 -0
  119. {programasweights-0.2.0 → programasweights-0.2.1}/log.train.81920.morecategories.extraprefix +0 -0
  120. {programasweights-0.2.0 → programasweights-0.2.1}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  121. {programasweights-0.2.0 → programasweights-0.2.1}/merge_datasets.py +0 -0
  122. {programasweights-0.2.0 → programasweights-0.2.1}/mkdocs.yml +0 -0
  123. {programasweights-0.2.0 → programasweights-0.2.1}/paw.png +0 -0
  124. {programasweights-0.2.0 → programasweights-0.2.1}/paw.svg +0 -0
  125. {programasweights-0.2.0 → programasweights-0.2.1}/process_im2latex_dataset.py +0 -0
  126. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/artifacts.py +0 -0
  127. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/cache.py +0 -0
  128. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/client.py +0 -0
  129. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/compiler/__init__.py +0 -0
  130. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/compiler/dummy.py +0 -0
  131. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/config.py +0 -0
  132. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/convert_peft_to_paw.py +0 -0
  133. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/paw_format.py +0 -0
  134. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/runtime/__init__.py +0 -0
  135. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/runtime/interpreter.py +0 -0
  136. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/runtime/interpreter_onnx.py +0 -0
  137. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights/runtime_llamacpp.py +0 -0
  138. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/__init__.py +0 -0
  139. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/compiler/__init__.py +0 -0
  140. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/lora_format.py +0 -0
  141. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/runtime/__init__.py +0 -0
  142. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  143. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  144. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/tests/test_lora_format.py +0 -0
  145. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/tests/test_training.py +0 -0
  146. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/train_lora.py +0 -0
  147. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/training/__init__.py +0 -0
  148. {programasweights-0.2.0 → programasweights-0.2.1}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  149. {programasweights-0.2.0 → programasweights-0.2.1}/run_eval.sh +0 -0
  150. {programasweights-0.2.0 → programasweights-0.2.1}/run_training.sh +0 -0
  151. {programasweights-0.2.0 → programasweights-0.2.1}/scripts/filter_table_by_length.py +0 -0
  152. {programasweights-0.2.0 → programasweights-0.2.1}/server/.env.example +0 -0
  153. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/env.py +0 -0
  154. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/script.py.mako +0 -0
  155. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/versions/001_initial_schema.py +0 -0
  156. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
  157. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
  158. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
  159. {programasweights-0.2.0 → programasweights-0.2.1}/server/alembic.ini +0 -0
  160. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/__init__.py +0 -0
  161. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/config.py +0 -0
  162. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/dependencies.py +0 -0
  163. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/logging_config.py +0 -0
  164. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/main.py +0 -0
  165. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/middleware/__init__.py +0 -0
  166. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/middleware/rate_limit.py +0 -0
  167. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/models/__init__.py +0 -0
  168. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/models/database.py +0 -0
  169. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/models/orm.py +0 -0
  170. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/models/schemas.py +0 -0
  171. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/__init__.py +0 -0
  172. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/auth.py +0 -0
  173. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/feedback.py +0 -0
  174. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/health.py +0 -0
  175. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/infer.py +0 -0
  176. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/routes/models_info.py +0 -0
  177. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/__init__.py +0 -0
  178. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/auto_tag_service.py +0 -0
  179. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/auto_title_service.py +0 -0
  180. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/compile_provider.py +0 -0
  181. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/compile_service.py +0 -0
  182. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/infer_service.py +0 -0
  183. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/search_service.py +0 -0
  184. {programasweights-0.2.0 → programasweights-0.2.1}/server/api/services/storage_service.py +0 -0
  185. {programasweights-0.2.0 → programasweights-0.2.1}/server/benchmarks/benchmark_api.py +0 -0
  186. {programasweights-0.2.0 → programasweights-0.2.1}/server/benchmarks/handcrafted_specs.json +0 -0
  187. {programasweights-0.2.0 → programasweights-0.2.1}/server/benchmarks/last_benchmark_results.json +0 -0
  188. {programasweights-0.2.0 → programasweights-0.2.1}/server/benchmarks/last_stress_results.json +0 -0
  189. {programasweights-0.2.0 → programasweights-0.2.1}/server/benchmarks/stress_test.py +0 -0
  190. {programasweights-0.2.0 → programasweights-0.2.1}/server/compiler_registry.json +0 -0
  191. {programasweights-0.2.0 → programasweights-0.2.1}/server/provider_configs/gpt2.json +0 -0
  192. {programasweights-0.2.0 → programasweights-0.2.1}/server/provider_configs/qwen3-0.6b.json +0 -0
  193. {programasweights-0.2.0 → programasweights-0.2.1}/server/requirements.txt +0 -0
  194. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
  195. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/ablation_search.py +0 -0
  196. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/backfill_hf_browser_assets.py +0 -0
  197. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/backfill_hf_safetensors.py +0 -0
  198. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/backfill_interestingness.py +0 -0
  199. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/backfill_tags.py +0 -0
  200. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/backfill_titles.py +0 -0
  201. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/benchmark_gpt2.py +0 -0
  202. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/cleanup_storage.py +0 -0
  203. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/eval_search.py +0 -0
  204. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/evict_cold_programs.py +0 -0
  205. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/generate_prefix_cache.py +0 -0
  206. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/launch_gpt2_compiler.py +0 -0
  207. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/launch_qwen3_compiler.py +0 -0
  208. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/patch_vllm.sh +0 -0
  209. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/restart.sh +0 -0
  210. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/start_all.sh +0 -0
  211. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/start_gpt2_services.sh +0 -0
  212. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/start_provider.sh +0 -0
  213. {programasweights-0.2.0 → programasweights-0.2.1}/server/scripts/start_services.sh +0 -0
  214. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/__init__.py +0 -0
  215. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/conftest.py +0 -0
  216. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_auth.py +0 -0
  217. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_compile.py +0 -0
  218. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_errors.py +0 -0
  219. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_infer.py +0 -0
  220. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_integration_gpu.py +0 -0
  221. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_rate_limit.py +0 -0
  222. {programasweights-0.2.0 → programasweights-0.2.1}/server/tests/test_storage.py +0 -0
  223. {programasweights-0.2.0 → programasweights-0.2.1}/server/vllm_models/__init__.py +0 -0
  224. {programasweights-0.2.0 → programasweights-0.2.1}/server/vllm_models/gpt2_lora_patch.py +0 -0
  225. {programasweights-0.2.0 → programasweights-0.2.1}/server/vllm_models/paw_compiler.py +0 -0
  226. {programasweights-0.2.0 → programasweights-0.2.1}/server/vllm_models/prepare_checkpoint.py +0 -0
  227. {programasweights-0.2.0 → programasweights-0.2.1}/server/vllm_models/register.py +0 -0
  228. {programasweights-0.2.0 → programasweights-0.2.1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  229. {programasweights-0.2.0 → programasweights-0.2.1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  230. {programasweights-0.2.0 → programasweights-0.2.1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  231. {programasweights-0.2.0 → programasweights-0.2.1}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  232. {programasweights-0.2.0 → programasweights-0.2.1}/test_1spec.py +0 -0
  233. {programasweights-0.2.0 → programasweights-0.2.1}/test_all_caching.py +0 -0
  234. {programasweights-0.2.0 → programasweights-0.2.1}/test_apple_count.py +0 -0
  235. {programasweights-0.2.0 → programasweights-0.2.1}/test_batch_pilot.py +0 -0
  236. {programasweights-0.2.0 → programasweights-0.2.1}/test_compile.py +0 -0
  237. {programasweights-0.2.0 → programasweights-0.2.1}/test_e2e.py +0 -0
  238. {programasweights-0.2.0 → programasweights-0.2.1}/test_execute.py +0 -0
  239. {programasweights-0.2.0 → programasweights-0.2.1}/test_nspecs.py +0 -0
  240. {programasweights-0.2.0 → programasweights-0.2.1}/test_one_vs_two_step.py +0 -0
  241. {programasweights-0.2.0 → programasweights-0.2.1}/test_onnx_correctness.py +0 -0
  242. {programasweights-0.2.0 → programasweights-0.2.1}/test_onnx_hf_model.py +0 -0
  243. {programasweights-0.2.0 → programasweights-0.2.1}/test_onnx_hf_with_images.py +0 -0
  244. {programasweights-0.2.0 → programasweights-0.2.1}/test_paw_format.py +0 -0
  245. {programasweights-0.2.0 → programasweights-0.2.1}/test_thinking_comparison.py +0 -0
  246. {programasweights-0.2.0 → programasweights-0.2.1}/tests/test_offline_cache.py +0 -0
  247. {programasweights-0.2.0 → programasweights-0.2.1}/train.py +0 -0
  248. {programasweights-0.2.0 → programasweights-0.2.1}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  249. {programasweights-0.2.0 → programasweights-0.2.1}/training/README.md +0 -0
  250. {programasweights-0.2.0 → programasweights-0.2.1}/training/__init__.py +0 -0
  251. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  252. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/README.md +0 -0
  253. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  254. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/build_user_bench.py +0 -0
  255. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/dry_run_batch.py +0 -0
  256. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/filter_test_data.py +0 -0
  257. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/generate_specs.py +0 -0
  258. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/generate_specs_batch.py +0 -0
  259. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/incremental_merge.py +0 -0
  260. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/merge_and_upload.py +0 -0
  261. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/regenerate_outputs_batch.py +0 -0
  262. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/synthesize_data.py +0 -0
  263. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/synthesize_data_batch.py +0 -0
  264. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/filter_system.txt +0 -0
  265. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/filter_user.txt +0 -0
  266. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/pairs_system.txt +0 -0
  267. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/pairs_user.txt +0 -0
  268. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/specs_system.txt +0 -0
  269. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/specs_user.txt +0 -0
  270. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  271. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  272. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  273. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/verify_system.txt +0 -0
  274. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates/verify_user.txt +0 -0
  275. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/filter_system.txt +0 -0
  276. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/filter_user.txt +0 -0
  277. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/pairs_system.txt +0 -0
  278. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/pairs_user.txt +0 -0
  279. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/specs_system.txt +0 -0
  280. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/specs_user.txt +0 -0
  281. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  282. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  283. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  284. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/verify_system.txt +0 -0
  285. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/templates_old/verify_user.txt +0 -0
  286. {programasweights-0.2.0 → programasweights-0.2.1}/training/data_generation/verify_test_data.py +0 -0
  287. {programasweights-0.2.0 → programasweights-0.2.1}/training/datasets/__init__.py +0 -0
  288. {programasweights-0.2.0 → programasweights-0.2.1}/training/datasets/jsonl_text_pairs.py +0 -0
  289. {programasweights-0.2.0 → programasweights-0.2.1}/training/loops/__init__.py +0 -0
  290. {programasweights-0.2.0 → programasweights-0.2.1}/training/loops/prefix_tuning_sft.py +0 -0
  291. {programasweights-0.2.0 → programasweights-0.2.1}/ttt.py +0 -0
  292. {programasweights-0.2.0 → programasweights-0.2.1}/upload_model.py +0 -0
  293. {programasweights-0.2.0 → programasweights-0.2.1}/upload_onnx_to_huggingface.py +0 -0
  294. {programasweights-0.2.0 → programasweights-0.2.1}/upload_onnx_to_huggingface_with_token.py +0 -0
  295. {programasweights-0.2.0 → programasweights-0.2.1}/utils.py +0 -0
  296. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/HANDOFF.md +0 -0
  297. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/README.md +0 -0
  298. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/__init__.py +0 -0
  299. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/config.py +0 -0
  300. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/main.py +0 -0
  301. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/middleware/__init__.py +0 -0
  302. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/middleware/rate_limit.py +0 -0
  303. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/models.py +0 -0
  304. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/__init__.py +0 -0
  305. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/auth_service.py +0 -0
  306. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/case_service.py +0 -0
  307. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/compiler_service.py +0 -0
  308. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/gpt_service.py +0 -0
  309. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/hub_service.py +0 -0
  310. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/image_service.py +0 -0
  311. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/interpreter_service.py +0 -0
  312. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/services/sql_manager.py +0 -0
  313. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  314. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/utils/__init__.py +0 -0
  315. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/utils/image_placeholders.py +0 -0
  316. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/app/utils/program_hash.py +0 -0
  317. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/clear_db.sh +0 -0
  318. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/clear_tables.sql +0 -0
  319. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/data/programs.db +0 -0
  320. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/env_example.txt +0 -0
  321. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/example_images/README.md +0 -0
  322. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/get_data_examples.py +0 -0
  323. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/requirements.txt +0 -0
  324. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/run_server.py +0 -0
  325. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_analytics_tables.sql +0 -0
  326. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_auth_tables.sql +0 -0
  327. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_cache_tables.sql +0 -0
  328. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_cases_tables.sql +0 -0
  329. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_database.sql +0 -0
  330. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_database_simple.sql +0 -0
  331. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_db.sh +0 -0
  332. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_example_images.py +0 -0
  333. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/setup_hub_tables.sql +0 -0
  334. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/backend/test_compilation_cache.py +0 -0
  335. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/README.md +0 -0
  336. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/e2e/full.spec.ts +0 -0
  337. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/e2e/helpers.ts +0 -0
  338. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/e2e/smoke.spec.ts +0 -0
  339. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/eslint.config.js +0 -0
  340. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/index.html +0 -0
  341. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/package-lock.json +0 -0
  342. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/package.json +0 -0
  343. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/playwright.config.ts +0 -0
  344. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/postcss.config.js +0 -0
  345. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/apple-touch-icon.png +0 -0
  346. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/browser-worker.html +0 -0
  347. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/favicon-16x16.png +0 -0
  348. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/favicon-32x32.png +0 -0
  349. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/paw-192.png +0 -0
  350. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/paw-512.png +0 -0
  351. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/paw.svg +0 -0
  352. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/react-test.html +0 -0
  353. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/test.html +0 -0
  354. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/public/vite.svg +0 -0
  355. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/scripts/deploy.sh +0 -0
  356. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/App.css +0 -0
  357. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/App.tsx +0 -0
  358. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/assets/react.svg +0 -0
  359. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/AuthorPage.tsx +0 -0
  360. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/BrowserPage.tsx +0 -0
  361. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/CasesSection.tsx +0 -0
  362. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  363. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  364. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/DocsPage.tsx +0 -0
  365. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  366. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/Header.tsx +0 -0
  367. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/HubPage.tsx +0 -0
  368. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
  369. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/LandingPage.tsx +0 -0
  370. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  371. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/NavigationHelper.tsx +0 -0
  372. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  373. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/ProfilePage.tsx +0 -0
  374. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/SettingsPage.tsx +0 -0
  375. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
  376. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  377. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/components/TestSection.tsx +0 -0
  378. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/index.css +0 -0
  379. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/main.tsx +0 -0
  380. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/types/index.ts +0 -0
  381. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/src/utils/api.ts +0 -0
  382. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/tailwind.config.js +0 -0
  383. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/test-results/.last-run.json +0 -0
  384. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/tsconfig.app.json +0 -0
  385. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/tsconfig.json +0 -0
  386. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/tsconfig.node.json +0 -0
  387. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/frontend/vite.config.ts +0 -0
  388. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/nginx-paw.conf +0 -0
  389. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/nginx.conf +0 -0
  390. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/setup_mysql.sh +0 -0
  391. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/start.sh +0 -0
  392. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/test_setup.py +0 -0
  393. {programasweights-0.2.0 → programasweights-0.2.1}/web-app/ttt.py +0 -0
  394. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/.gitignore +0 -0
  395. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/README.md +0 -0
  396. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/__tests__/prompt.test.ts +0 -0
  397. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/examples/basic.html +0 -0
  398. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/serve.py +0 -0
  399. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/src/index.ts +0 -0
  400. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/src/loader.ts +0 -0
  401. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/src/types.ts +0 -0
  402. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/test-standalone.html +0 -0
  403. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/tsconfig.json +0 -0
  404. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/vitest.config.ts +0 -0
  405. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.git +0 -0
  406. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
  407. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
  408. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
  409. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
  410. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.gitignore +0 -0
  411. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.gitmodules +0 -0
  412. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.npmignore +0 -0
  413. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/.prettierignore +0 -0
  414. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/CMakeLists.txt +0 -0
  415. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/LICENCE +0 -0
  416. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/README.md +0 -0
  417. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/README_banner.png +0 -0
  418. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/assets/screenshot_0.png +0 -0
  419. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/actions.hpp +0 -0
  420. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
  421. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/glue.hpp +0 -0
  422. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
  423. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
  424. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
  425. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
  426. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
  427. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
  428. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
  429. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/cpp/wllama.cpp +0 -0
  430. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/basic/index.html +0 -0
  431. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/embeddings/index.html +0 -0
  432. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
  433. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/.gitignore +0 -0
  434. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/README.md +0 -0
  435. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/index.html +0 -0
  436. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/package-lock.json +0 -0
  437. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/package.json +0 -0
  438. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
  439. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
  440. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
  441. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
  442. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
  443. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
  444. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
  445. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
  446. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
  447. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
  448. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
  449. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
  450. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/config.ts +0 -0
  451. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/index.css +0 -0
  452. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
  453. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
  454. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
  455. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
  456. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
  457. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
  458. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
  459. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
  460. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
  461. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
  462. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
  463. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
  464. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
  465. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
  466. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
  467. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
  468. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/guides/intro-v2.md +0 -0
  469. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/index.ts +0 -0
  470. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/package-lock.json +0 -0
  471. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/package.json +0 -0
  472. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
  473. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
  474. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/build_worker.sh +0 -0
  475. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
  476. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
  477. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/http_server.js +0 -0
  478. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/scripts/post_build.sh +0 -0
  479. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/cache-manager.ts +0 -0
  480. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/glue/glue.ts +0 -0
  481. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/glue/messages.ts +0 -0
  482. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/index.ts +0 -0
  483. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/mjs.test.ts +0 -0
  484. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/model-manager.test.ts +0 -0
  485. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/model-manager.ts +0 -0
  486. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
  487. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
  488. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
  489. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
  490. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/utils.test.ts +0 -0
  491. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/utils.ts +0 -0
  492. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
  493. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/wllama.test.ts +0 -0
  494. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/wllama.ts +0 -0
  495. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/worker.ts +0 -0
  496. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
  497. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
  498. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
  499. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/tsconfig.build.json +0 -0
  500. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/tsup.config.ts +0 -0
  501. {programasweights-0.2.0 → programasweights-0.2.1}/web-sdk/wllama/vitest.config.ts +0 -0
@@ -24,10 +24,9 @@ fn("Newsletter: spring picnic") # "wait"
24
24
  # Compile your own from a description
25
25
  program = paw.compile(
26
26
  "Fix malformed JSON: repair missing quotes and trailing commas",
27
- compiler="paw-4b-qwen3-0.6b", # or "paw-4b-gpt2" for smaller/faster
28
- slug="json-fixer" # optional: creates da03/json-fixer handle
27
+ compiler="paw-4b-qwen3-0.6b" # or "paw-4b-gpt2" for smaller/faster
29
28
  )
30
- fn = paw.function(program.slug) # or paw.function(program.id)
29
+ fn = paw.function(program.id)
31
30
  fn("{name: 'Alice',}") # '{"name": "Alice"}'
32
31
  ```
33
32
 
@@ -72,38 +71,41 @@ Use this when you want to offload all computation to the user's browser: zero se
72
71
  - **Intent routing** — map user descriptions to the closest URL, menu item, or setting
73
72
  - **Agent preprocessing** — parse tool calls, validate outputs, route tasks
74
73
 
75
- ## Authentication
74
+ ## Authentication (optional)
75
+
76
+ Everything works without authentication. Sign in for higher rate limits and program naming.
76
77
 
77
78
  ```bash
78
- # Option 1: environment variable (recommended)
79
79
  export PAW_API_KEY=paw_sk_...
80
-
81
- # Option 2: CLI login (opens browser to generate key)
82
- paw login
83
80
  ```
84
81
 
85
- Generate API keys at https://programasweights.com/settings
82
+ Generate API keys at https://programasweights.com/settings. The SDK reads `PAW_API_KEY` from the environment automatically.
86
83
 
87
- The SDK automatically reads `PAW_API_KEY` from the environment. Authenticated users get higher rate limits (60 compiles/hr vs 5 for anonymous).
84
+ | | Anonymous | Authenticated |
85
+ |---|---|---|
86
+ | Compile rate limit | 20/hr | 60/hr |
87
+ | Name programs (slugs) | No | Yes |
88
88
 
89
89
  ## Program Naming
90
90
 
91
- Programs have an immutable hash ID (e.g. `a6b454023d41ac9ca845`). Authenticated
92
- users can optionally assign a slug at compile time to create a human-readable
93
- handle like `da03/json-fixer`. Both forms work everywhere:
91
+ Every compiled program gets an immutable hash ID (e.g. `a6b454023d41ac9ca845`). Authenticated users can also assign a human-readable slug:
94
92
 
95
93
  ```python
96
- fn = paw.function("da03/json-fixer") # by slug
97
- fn = paw.function("a6b454023d41ac9ca845") # by hash
94
+ program = paw.compile("Classify sentiment", slug="my-classifier")
95
+ # program.id -> "a6b454023d41ac9ca845"
96
+ # program.slug -> "da03/my-classifier"
97
+
98
+ fn = paw.function("da03/my-classifier") # by slug (requires auth to create)
99
+ fn = paw.function("a6b454023d41ac9ca845") # by hash (always works)
98
100
  ```
99
101
 
100
102
  ## CLI
101
103
 
102
104
  ```bash
103
- paw compile --spec "Classify sentiment" --slug "my-classifier" --json
104
- paw run --program "da03/my-classifier" --input "I love this!" --json
105
- paw rename <program> <new-slug> # rename a program's slug
106
- paw info <program> # show program metadata
105
+ paw compile --spec "Classify sentiment" --json
106
+ paw run --program <program_id> --input "I love this!" --json
107
+ paw info <program_id> # show program metadata
108
+ paw rename <program_id> my-slug # name a program (requires auth)
107
109
  paw login # save API key
108
110
  ```
109
111
 
@@ -112,9 +114,9 @@ paw login # save API key
112
114
  ## API
113
115
 
114
116
  ```python
115
- paw.compile(spec, slug="my-fn") # Compile with optional slug
116
- paw.function(name_or_id) # Load by slug or hash
117
- paw.login() # Save API key
117
+ paw.compile(spec) # compile (returns Program with .id)
118
+ paw.function(program_id_or_slug) # load for local inference
119
+ paw.login() # save API key
118
120
  ```
119
121
 
120
122
  ## Browse Programs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.2.0
3
+ Version: 0.2.1
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
@@ -0,0 +1,90 @@
1
+ # CLI Reference
2
+
3
+ The `paw` command-line interface mirrors the Python SDK. Install from PyPI; the entry point is `paw`.
4
+
5
+ ```bash
6
+ pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
7
+ ```
8
+
9
+ ## Global options
10
+
11
+ | Option | Description |
12
+ |--------|-------------|
13
+ | `--api-url` | Override the API base URL (default: `https://programasweights.com`). |
14
+ | `--api-key` | API key for authenticated requests. Also reads `PAW_API_KEY` env var. |
15
+ | `--json` | Machine-readable JSON output (supported by all subcommands). |
16
+
17
+ ## `paw compile`
18
+
19
+ Compile a natural-language specification on the server.
20
+
21
+ ```bash
22
+ paw compile --spec "Classify message urgency" [--compiler paw-4b-qwen3-0.6b] [--slug my-classifier] [--json]
23
+ ```
24
+
25
+ | Option | Description |
26
+ |--------|-------------|
27
+ | `--spec` | Specification text to compile (required). |
28
+ | `--compiler` | Compiler model (default: `paw-4b-qwen3-0.6b`). |
29
+ | `--slug` | URL-safe handle (e.g. `my-classifier`). Creates a `username/slug` alias. Requires auth. |
30
+ | `--json` | JSON output with `program_id`, `slug`, `status`, `timings`. |
31
+
32
+ ## `paw run`
33
+
34
+ Run inference locally against a compiled program.
35
+
36
+ ```bash
37
+ paw run --program <id_or_slug> --input "your text" [--max-tokens 512] [--temperature 0.0] [--json]
38
+ ```
39
+
40
+ | Option | Description |
41
+ |--------|-------------|
42
+ | `--program` | Program hash ID, slug (e.g. `da03/my-classifier`), or official name (e.g. `email-triage`). |
43
+ | `--input` | Input text for the program. |
44
+ | `--max-tokens` | Maximum tokens to generate (default: 512). |
45
+ | `--temperature` | Sampling temperature (default: 0.0). |
46
+ | `--verbose` | Print llama.cpp debug output. |
47
+ | `--json` | JSON output with `program`, `input`, `output`. |
48
+
49
+ ## `paw rename`
50
+
51
+ Set or change a program's slug handle. Requires authentication.
52
+
53
+ ```bash
54
+ paw rename <program_id> <new-slug> [--json]
55
+ ```
56
+
57
+ | Argument | Description |
58
+ |----------|-------------|
59
+ | `program_id` | Program hash ID or current slug. |
60
+ | `new-slug` | New slug name (2-50 chars, lowercase alphanumeric and hyphens). |
61
+
62
+ ## `paw info`
63
+
64
+ Show metadata for a program.
65
+
66
+ ```bash
67
+ paw info <program_id_or_slug> [--json]
68
+ ```
69
+
70
+ ## `paw login`
71
+
72
+ Save an API key for authenticated requests.
73
+
74
+ ```bash
75
+ paw login [key]
76
+ ```
77
+
78
+ If `key` is provided, saves it directly. If omitted, opens the browser to generate one at `programasweights.com/settings`.
79
+
80
+ ## Agent workflow example
81
+
82
+ ```bash
83
+ PROGRAM_ID=$(paw compile --spec "Classify urgency" --json | jq -r '.program_id')
84
+ paw run --program "$PROGRAM_ID" --input "Please review by EOD" --json
85
+ ```
86
+
87
+ ## Related
88
+
89
+ - [Python SDK Reference](python-sdk.md)
90
+ - [REST API Reference](rest-api.md)
@@ -0,0 +1,107 @@
1
+ # Python SDK Reference
2
+
3
+ The `programasweights` package compiles natural language specs into neural programs that run locally.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
9
+ ```
10
+
11
+ ## Import
12
+
13
+ ```python
14
+ import programasweights as paw
15
+ ```
16
+
17
+ ## `paw.function`
18
+
19
+ ```python
20
+ fn = paw.function(name_or_id, n_ctx=2048, n_gpu_layers=0, verbose=False)
21
+ ```
22
+
23
+ Loads a compiled program and returns a callable. Downloads the program and base model on first use; cached locally after that. Works offline after first download.
24
+
25
+ | Parameter | Description |
26
+ |-----------|-------------|
27
+ | `name_or_id` | Program hash ID (e.g. `a6b454023d41ac9ca845`), slug (e.g. `da03/my-classifier`), or official shorthand (e.g. `email-triage`). |
28
+ | `n_ctx` | Context length for the local runtime (default `2048`). |
29
+ | `n_gpu_layers` | GPU layers to offload (`0` = CPU-only, `-1` = all). Set `PAW_GPU_LAYERS` env var as default. |
30
+ | `verbose` | Enable verbose logging (default `False`). |
31
+
32
+ The returned callable:
33
+
34
+ ```python
35
+ output: str = fn(input_text, max_tokens=512, temperature=0.0)
36
+ ```
37
+
38
+ | Parameter | Description |
39
+ |-----------|-------------|
40
+ | `input_text` | Input string for the program. |
41
+ | `max_tokens` | Maximum tokens to generate (default `512`). |
42
+ | `temperature` | Sampling temperature (default `0.0`). |
43
+
44
+ ## `paw.compile`
45
+
46
+ ```python
47
+ program = paw.compile(
48
+ spec,
49
+ compiler="paw-4b-qwen3-0.6b",
50
+ name=None,
51
+ tags=None,
52
+ public=True,
53
+ slug=None,
54
+ )
55
+ ```
56
+
57
+ Compiles a natural language spec on the server. Returns a `Program` object.
58
+
59
+ | Parameter | Description |
60
+ |-----------|-------------|
61
+ | `spec` | Natural language specification (10-8000 chars). |
62
+ | `compiler` | Compiler name: `paw-4b-qwen3-0.6b` (Standard) or `paw-4b-gpt2` (Compact). |
63
+ | `name` | Display title for the hub (auto-generated if omitted). |
64
+ | `tags` | Tags for discovery (list of strings, max 10). |
65
+ | `public` | Whether to list on the public hub (default `True`). |
66
+ | `slug` | URL-safe handle (e.g. `my-classifier`). Creates a `username/slug` alias. Requires authentication. |
67
+
68
+ **Return value** -- `Program` object:
69
+
70
+ | Attribute | Description |
71
+ |-----------|-------------|
72
+ | `id` | Hash-based program identifier. Use with `paw.function(program.id)`. |
73
+ | `slug` | Full slug handle (e.g. `da03/my-classifier`) if one was created, `None` otherwise. |
74
+ | `status` | `"ready"` on success, `"failed"` on error. |
75
+ | `compiler_snapshot` | Exact compiler version used. |
76
+ | `timings` | Timing metadata from the server. |
77
+ | `error` | Error message when compilation fails. |
78
+
79
+ ## `paw.login`
80
+
81
+ ```python
82
+ paw.login(key=None)
83
+ ```
84
+
85
+ Saves an API key for authenticated requests. If `key` is provided, saves it directly. If omitted, opens the browser to generate a key at `programasweights.com/settings`.
86
+
87
+ Keys are stored in `~/.config/programasweights/config.json` and loaded automatically on subsequent imports.
88
+
89
+ You can also set the `PAW_API_KEY` environment variable instead:
90
+
91
+ ```bash
92
+ export PAW_API_KEY=paw_sk_...
93
+ ```
94
+
95
+ ## Configuration
96
+
97
+ | Name | Description |
98
+ |------|-------------|
99
+ | `paw.api_url` | Base URL for API requests. Default: `https://programasweights.com`. Override with `PAW_API_URL` env var. |
100
+ | `paw.api_key` | API key for authenticated calls. Set via `paw.login()` or `PAW_API_KEY` env var. |
101
+ | `paw.__version__` | Installed package version string. |
102
+
103
+ ## Related
104
+
105
+ - [CLI Reference](cli.md)
106
+ - [REST API Reference](rest-api.md)
107
+ - [Naming Programs](../getting-started/naming-programs.md)
@@ -69,39 +69,50 @@ List or search programs.
69
69
 
70
70
  ### `GET /programs/{id_or_slug}`
71
71
 
72
- Program detail including aliases, specification, and pseudo-program where exposed by policy.
72
+ Program detail. Accepts hash ID or slug. Private programs return 404 to non-owners.
73
73
 
74
- ### `GET /programs/{id}/download`
74
+ **Response** includes: `id`, `name`, `spec`, `interpreter`, `public`, `aliases`, `user_slug`, `author`, `tags`, `upvotes`, `downloads`, `created_at`.
75
75
 
76
- Redirects to the Hugging Face CDN for the `.paw` artifact download.
76
+ ### `PATCH /programs/{id_or_slug}`
77
+
78
+ Update program metadata. **Authentication required.**
79
+
80
+ Owner-only fields: `public`, `name`, `tags`. Any authenticated user can set their own `slug`.
81
+
82
+ | Field | Type | Description |
83
+ |-------|------|-------------|
84
+ | `public` | boolean | Visibility (owner only). |
85
+ | `name` | string | Display title, max 100 chars (owner only). |
86
+ | `tags` | string[] | Tags, max 5 items (owner only). |
87
+ | `slug` | string | URL-safe handle, 2-50 chars, `^[a-z0-9][a-z0-9-]*[a-z0-9]$`. Creates/replaces your alias for this program. |
88
+
89
+ ### `GET /programs/{id_or_slug}/download`
90
+
91
+ Redirects to the Hugging Face CDN for the `.paw` artifact. Private programs return 404 to non-owners.
77
92
 
78
93
  ### `GET /programs/resolve/{slug}`
79
94
 
80
- Resolve a slug or alias to a canonical `program_id`.
95
+ Resolve a slug (e.g. `da03/my-classifier` or bare `email-triage`) to a canonical `program_id`.
81
96
 
82
97
  ### `POST /programs/{id}/alias`
83
98
 
84
- Create an alias for the program. **Authentication required.**
85
-
86
- **Request body (JSON):**
99
+ Create or update your alias for a program. **Authentication required.** If you already have an alias for this program, it is replaced (atomic update).
87
100
 
88
101
  | Field | Type | Description |
89
102
  |-------|------|-------------|
90
- | `slug` | string | Alias slug to register. |
103
+ | `slug` | string | Slug name, 2-50 chars, lowercase alphanumeric and hyphens. |
91
104
 
92
- ### `POST /programs/{id}/vote`
105
+ ### `POST /programs/{id_or_slug}/vote`
93
106
 
94
- Submit a vote for a program. **Authentication required.**
95
-
96
- **Request body (JSON):**
107
+ Submit a vote. **Authentication required.**
97
108
 
98
109
  | Field | Type | Description |
99
110
  |-------|------|-------------|
100
- | `vote` | integer | `1` (up) or `-1` (down). |
111
+ | `vote` | integer | `1` (upvote) or `-1` (downvote). Same value again removes the vote. |
101
112
 
102
113
  ### `GET /programs/{id}/cases` and `POST /programs/{id}/cases`
103
114
 
104
- Community feedback and case submission for a program. Method-specific payloads follow the server schema for each verb.
115
+ Community case submission for a program.
105
116
 
106
117
  ### `GET /auth/github`
107
118
 
@@ -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.0"
25
+ __version__ = "0.2.1"
26
26
 
27
27
  from .config import get_api_url, get_api_key, set_api_key
28
28
 
@@ -27,7 +27,8 @@ def cmd_compile(args):
27
27
  if not args.json:
28
28
  print(f"Compiling: {args.spec[:80]}...")
29
29
 
30
- program = paw.compile(args.spec, compiler=args.compiler, slug=getattr(args, 'slug', None))
30
+ public = not getattr(args, 'private', False)
31
+ program = paw.compile(args.spec, compiler=args.compiler, slug=getattr(args, 'slug', None), public=public)
31
32
 
32
33
  if args.json:
33
34
  print(json.dumps({
@@ -170,6 +171,7 @@ def main():
170
171
  p.add_argument("--spec", required=True, help="Natural language specification")
171
172
  p.add_argument("--compiler", default="paw-4b-qwen3-0.6b", help="Compiler model")
172
173
  p.add_argument("--slug", default=None, help="URL-safe handle (e.g. 'message-classifier')")
174
+ p.add_argument("--private", action="store_true", help="Make program private (not listed on hub)")
173
175
  p.add_argument("--json", action="store_true", help="JSON output")
174
176
 
175
177
  p = sub.add_parser("run", help="Run a program locally via llama.cpp")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.2.0"
7
+ version = "0.2.1"
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"
@@ -162,16 +162,23 @@ async def submit_compile(
162
162
  "message": "Authentication required to set a program slug.",
163
163
  "request_id": request_id,
164
164
  })
165
- existing_alias = await db.execute(
165
+ existing_name = await db.execute(
166
166
  select(Alias).where(Alias.owner_id == user.id, Alias.slug_name == req.slug)
167
167
  )
168
- if existing_alias.scalar_one_or_none():
168
+ if existing_name.scalar_one_or_none():
169
169
  raise HTTPException(status_code=409, detail={
170
170
  "error": "slug_taken",
171
171
  "message": f"You already have a program named '{req.slug}'. Choose a different name.",
172
172
  "request_id": request_id,
173
173
  })
174
- db.add(Alias(slug_name=req.slug, program_id=pid, owner_id=user.id))
174
+ existing_program_alias = await db.execute(
175
+ select(Alias).where(Alias.owner_id == user.id, Alias.program_id == pid)
176
+ )
177
+ old = existing_program_alias.scalar_one_or_none()
178
+ if old:
179
+ old.slug_name = req.slug
180
+ else:
181
+ db.add(Alias(slug_name=req.slug, program_id=pid, owner_id=user.id))
175
182
  await db.commit()
176
183
  username = user.username or f"user-{user.id}"
177
184
  created_slug = f"{username}/{req.slug}"
@@ -490,12 +490,14 @@ async def update_program(
490
490
  "error": "slug_taken",
491
491
  "message": f"You already have a program named '{raw_slug}'.",
492
492
  })
493
- old_aliases = await db.execute(
493
+ old_alias_r = await db.execute(
494
494
  select(Alias).where(Alias.program_id == program.id, Alias.owner_id == user.id)
495
495
  )
496
- for old in old_aliases.scalars().all():
497
- await db.delete(old)
498
- db.add(Alias(slug_name=raw_slug, program_id=program.id, owner_id=user.id))
496
+ old_alias = old_alias_r.scalar_one_or_none()
497
+ if old_alias:
498
+ old_alias.slug_name = raw_slug
499
+ else:
500
+ db.add(Alias(slug_name=raw_slug, program_id=program.id, owner_id=user.id))
499
501
  username = user.username or f"user-{user.id}"
500
502
  created_slug = f"{username}/{raw_slug}"
501
503
  else:
@@ -695,9 +697,9 @@ async def create_alias(
695
697
  )
696
698
  old_alias = existing_program.scalar_one_or_none()
697
699
  if old_alias:
698
- await db.delete(old_alias)
699
-
700
- db.add(Alias(slug_name=raw_slug, program_id=program.id, owner_id=user.id))
700
+ old_alias.slug_name = raw_slug
701
+ else:
702
+ db.add(Alias(slug_name=raw_slug, program_id=program.id, owner_id=user.id))
701
703
  await db.commit()
702
704
  username = user.username or f"user-{user.id}"
703
705
  return {"slug": f"{username}/{raw_slug}", "program_id": program.id}
@@ -328,3 +328,117 @@ class TestAuth:
328
328
  assert result.returncode == 0
329
329
  data = json.loads(result.stdout)
330
330
  assert data.get("program_id")
331
+
332
+
333
+ # ── Phase 9: Slug validation ──
334
+
335
+
336
+ class TestSlugValidation:
337
+ @needs_auth
338
+ def test_slug_too_short(self):
339
+ old_key = paw.api_key
340
+ try:
341
+ paw.api_key = API_KEY
342
+ with pytest.raises(Exception) as exc_info:
343
+ paw.compile("Classify text.", slug="x")
344
+ assert "422" in str(exc_info.value) or "invalid" in str(exc_info.value).lower()
345
+ finally:
346
+ paw.api_key = old_key
347
+
348
+ @needs_auth
349
+ def test_slug_invalid_characters(self):
350
+ old_key = paw.api_key
351
+ try:
352
+ paw.api_key = API_KEY
353
+ with pytest.raises(Exception):
354
+ paw.compile("Classify text.", slug="BAD SLUG!")
355
+ finally:
356
+ paw.api_key = old_key
357
+
358
+ @needs_auth
359
+ def test_slug_with_uppercase_rejected(self):
360
+ old_key = paw.api_key
361
+ try:
362
+ paw.api_key = API_KEY
363
+ with pytest.raises(Exception):
364
+ paw.compile("Classify text.", slug="MyProgram")
365
+ finally:
366
+ paw.api_key = old_key
367
+
368
+
369
+ # ── Phase 10: Privacy ──
370
+
371
+
372
+ class TestPrivacy:
373
+ @needs_auth
374
+ def test_compile_private_program(self):
375
+ import httpx
376
+ old_key = paw.api_key
377
+ try:
378
+ paw.api_key = API_KEY
379
+ program = paw.compile("Private test program for counting vowels.", public=False)
380
+ assert program.id
381
+
382
+ resp = httpx.get(
383
+ f"{paw.api_url}/api/v1/programs/{program.id}",
384
+ timeout=10.0,
385
+ )
386
+ assert resp.status_code == 404, "Private program should return 404 to unauthenticated users"
387
+ finally:
388
+ paw.api_key = old_key
389
+
390
+ @needs_auth
391
+ def test_compile_public_default(self):
392
+ import httpx
393
+ old_key = paw.api_key
394
+ try:
395
+ paw.api_key = API_KEY
396
+ program = paw.compile("Public test program for counting words.")
397
+ assert program.id
398
+
399
+ resp = httpx.get(
400
+ f"{paw.api_url}/api/v1/programs/{program.id}",
401
+ timeout=10.0,
402
+ )
403
+ assert resp.status_code == 200, "Public program should be accessible"
404
+ finally:
405
+ paw.api_key = old_key
406
+
407
+
408
+ # ── Phase 11: CLI rename ──
409
+
410
+
411
+ class TestCLIRename:
412
+ @needs_auth
413
+ def test_cli_rename(self):
414
+ import time
415
+ old_key = paw.api_key
416
+ try:
417
+ paw.api_key = API_KEY
418
+ program = paw.compile("Test rename program for validation.")
419
+ slug = f"rename-test-{int(time.time()) % 100000}"
420
+
421
+ result = subprocess.run(
422
+ [sys.executable, "-m", "programasweights.cli",
423
+ "--api-key", API_KEY,
424
+ "rename", program.id, slug, "--json"],
425
+ capture_output=True, text=True,
426
+ )
427
+ assert result.returncode == 0
428
+ data = json.loads(result.stdout)
429
+ assert data.get("slug")
430
+ assert slug in data["slug"]
431
+ finally:
432
+ paw.api_key = old_key
433
+
434
+ @needs_auth
435
+ def test_cli_compile_private(self):
436
+ result = subprocess.run(
437
+ [sys.executable, "-m", "programasweights.cli",
438
+ "--api-key", API_KEY,
439
+ "compile", "--spec", "Private CLI test.", "--private", "--json"],
440
+ capture_output=True, text=True,
441
+ )
442
+ assert result.returncode == 0
443
+ data = json.loads(result.stdout)
444
+ assert data.get("program_id")
@@ -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 programasweights --extra-index-url "$EXTRA_INDEX" -q 2>&1
42
+ $PIP install --no-cache-dir 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"
@@ -140,7 +140,7 @@ const AboutPage: React.FC = () => {
140
140
  },
141
141
  {
142
142
  q: 'Python or JavaScript?',
143
- a: 'Use the Python SDK (pip install programasweights) for backend servers and scripts. Use the browser SDK (npm install @programasweights/web) for client-side web apps where data stays on the user\'s device.',
143
+ a: 'Use the Python SDK (pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/) for backend servers and scripts. Use the browser SDK (npm install @programasweights/web) for client-side web apps where data stays on the user\'s device.',
144
144
  },
145
145
  ].map((faq) => (
146
146
  <div key={faq.q}>