programasweights 0.1.0.dev2__tar.gz → 0.1.0.dev4__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 (321) hide show
  1. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PKG-INFO +3 -3
  2. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/__init__.py +1 -1
  3. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/cache.py +1 -1
  4. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/pyproject.toml +3 -3
  5. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/models/schemas.py +1 -0
  6. programasweights-0.1.0.dev4/server/api/routes/auth.py +184 -0
  7. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/compile.py +1 -0
  8. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/compile_service.py +37 -6
  9. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/App.tsx +2 -2
  10. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/DocsPage.tsx +1 -1
  11. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/Footer.tsx +1 -1
  12. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/Header.tsx +6 -7
  13. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubProgramPage.tsx +1 -1
  14. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/LandingPage.tsx +1 -1
  15. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/MainInterface.tsx +103 -77
  16. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/types/index.ts +1 -0
  17. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/utils/api.ts +2 -0
  18. programasweights-0.1.0.dev2/server/api/routes/auth.py +0 -77
  19. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.gitignore +0 -0
  20. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.hatch_build.toml +0 -0
  21. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.readthedocs.yaml +0 -0
  22. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/1apple.jpg +0 -0
  23. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/1apple2.jpg +0 -0
  24. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/2apples.jpg +0 -0
  25. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/2apples2.jpg +0 -0
  26. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/3apples.jpg +0 -0
  27. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/3apples2.jpg +0 -0
  28. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/479400.png +0 -0
  29. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples.jpg +0 -0
  30. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples2.jpg +0 -0
  31. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples3.jpg +0 -0
  32. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples4.jpg +0 -0
  33. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/5apples.jpg +0 -0
  34. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/6apples.jpg +0 -0
  35. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/8apples.jpg +0 -0
  36. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/9apples.jpg +0 -0
  37. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/FLOW_SUMMARY.md +0 -0
  38. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/MANIFEST.in +0 -0
  39. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/ONNX_MIGRATION_PLAN.md +0 -0
  40. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PREFIX_TOKENS_DESIGN.md +0 -0
  41. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PYPI_README.md +0 -0
  42. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/README.md +0 -0
  43. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/TRUNCATION_CHANGES.md +0 -0
  44. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/VERIFICATION_USAGE.md +0 -0
  45. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/analyze_dataset.py +0 -0
  46. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/analyze_lengths.py +0 -0
  47. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/code_prompt.md +0 -0
  48. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  49. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/openai_batch_request.py +0 -0
  50. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/prepare_alchemist_data.py +0 -0
  51. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/prepare_var_bench_data.py +0 -0
  52. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/python_code_sandbox.py +0 -0
  53. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evaluation_var_bench.sh +0 -0
  54. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_evaluation.sh +0 -0
  55. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_request.sh +0 -0
  56. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_statistics.sh +0 -0
  57. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/benchmark_pytorch_vs_onnx.py +0 -0
  58. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/benchmark_user_experience.py +0 -0
  59. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/check_dataset.py +0 -0
  60. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/combine_datasets.py +0 -0
  61. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/compare_datasets.py +0 -0
  62. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/compare_old_vs_regen.py +0 -0
  63. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/convert_paw_to_svg.py +0 -0
  64. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_favicon_sizes.py +0 -0
  65. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_visualization_from_log.py +0 -0
  66. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_vqa_dataset.py +0 -0
  67. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/debug_cache.py +0 -0
  68. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/debug_eos_example.sh +0 -0
  69. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/Makefile +0 -0
  70. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  71. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/002-q4_0-adapter-format.md +0 -0
  72. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/003-single-spec-field.md +0 -0
  73. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/004-compiler-naming.md +0 -0
  74. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/005-vllm-hidden-states.md +0 -0
  75. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/006-email-api-key-auth.md +0 -0
  76. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/api-reference.rst +0 -0
  77. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/architecture.md +0 -0
  78. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/conf.py +0 -0
  79. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/examples/evaluation-tasks.rst +0 -0
  80. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/index.rst +0 -0
  81. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/installation.rst +0 -0
  82. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/make.bat +0 -0
  83. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/quickstart.rst +0 -0
  84. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/requirements.txt +0 -0
  85. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/using-pretrained.rst +0 -0
  86. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/estimate_data_gen_cost.py +0 -0
  87. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/eval.py +0 -0
  88. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/flask_app.py +0 -0
  89. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/jupyter_notebook.py +0 -0
  90. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/langchain_integration.py +0 -0
  91. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/replace_openai.py +0 -0
  92. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/export_to_onnx.py +0 -0
  93. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/extract_models.py +0 -0
  94. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/inspect_data_dirs.py +0 -0
  95. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/latest_export.csv +0 -0
  96. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/log.train.81920.morecategories.extraprefix +0 -0
  97. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  98. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/merge_datasets.py +0 -0
  99. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/paw.png +0 -0
  100. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/paw.svg +0 -0
  101. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/process_im2latex_dataset.py +0 -0
  102. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/artifacts.py +0 -0
  103. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/cli.py +0 -0
  104. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/client.py +0 -0
  105. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/compiler/__init__.py +0 -0
  106. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/compiler/dummy.py +0 -0
  107. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/config.py +0 -0
  108. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/convert_peft_to_paw.py +0 -0
  109. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/paw_format.py +0 -0
  110. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/__init__.py +0 -0
  111. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/interpreter.py +0 -0
  112. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/interpreter_onnx.py +0 -0
  113. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime_llamacpp.py +0 -0
  114. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/__init__.py +0 -0
  115. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/compiler/__init__.py +0 -0
  116. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/lora_format.py +0 -0
  117. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/runtime/__init__.py +0 -0
  118. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  119. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  120. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_lora_format.py +0 -0
  121. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_training.py +0 -0
  122. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/train_lora.py +0 -0
  123. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/training/__init__.py +0 -0
  124. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  125. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/run_eval.sh +0 -0
  126. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/run_training.sh +0 -0
  127. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/scripts/filter_table_by_length.py +0 -0
  128. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/.env.example +0 -0
  129. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/__init__.py +0 -0
  130. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/config.py +0 -0
  131. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/logging_config.py +0 -0
  132. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/main.py +0 -0
  133. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/models/__init__.py +0 -0
  134. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/__init__.py +0 -0
  135. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/health.py +0 -0
  136. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/infer.py +0 -0
  137. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/models_info.py +0 -0
  138. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/programs.py +0 -0
  139. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/__init__.py +0 -0
  140. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/infer_service.py +0 -0
  141. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/benchmark_api.py +0 -0
  142. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/handcrafted_specs.json +0 -0
  143. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/last_benchmark_results.json +0 -0
  144. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/last_stress_results.json +0 -0
  145. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/stress_test.py +0 -0
  146. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/requirements.txt +0 -0
  147. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/scripts/start_services.sh +0 -0
  148. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/__init__.py +0 -0
  149. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/conftest.py +0 -0
  150. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_auth.py +0 -0
  151. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_compile.py +0 -0
  152. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_errors.py +0 -0
  153. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_infer.py +0 -0
  154. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_integration_gpu.py +0 -0
  155. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_rate_limit.py +0 -0
  156. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/__init__.py +0 -0
  157. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/paw_compiler.py +0 -0
  158. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/prepare_checkpoint.py +0 -0
  159. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/register.py +0 -0
  160. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  161. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  162. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  163. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  164. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_1spec.py +0 -0
  165. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_all_caching.py +0 -0
  166. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_apple_count.py +0 -0
  167. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_batch_pilot.py +0 -0
  168. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_compile.py +0 -0
  169. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_e2e.py +0 -0
  170. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_execute.py +0 -0
  171. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_nspecs.py +0 -0
  172. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_one_vs_two_step.py +0 -0
  173. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_correctness.py +0 -0
  174. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_hf_model.py +0 -0
  175. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_hf_with_images.py +0 -0
  176. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_paw_format.py +0 -0
  177. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_thinking_comparison.py +0 -0
  178. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/tests/test_programasweights.py +0 -0
  179. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/train.py +0 -0
  180. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  181. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/README.md +0 -0
  182. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/__init__.py +0 -0
  183. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  184. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/README.md +0 -0
  185. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  186. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/dry_run_batch.py +0 -0
  187. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/filter_test_data.py +0 -0
  188. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/generate_specs.py +0 -0
  189. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/generate_specs_batch.py +0 -0
  190. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/incremental_merge.py +0 -0
  191. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/merge_and_upload.py +0 -0
  192. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/regenerate_outputs_batch.py +0 -0
  193. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/synthesize_data.py +0 -0
  194. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/synthesize_data_batch.py +0 -0
  195. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/filter_system.txt +0 -0
  196. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/filter_user.txt +0 -0
  197. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/pairs_system.txt +0 -0
  198. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/pairs_user.txt +0 -0
  199. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_system.txt +0 -0
  200. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user.txt +0 -0
  201. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  202. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  203. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  204. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/verify_system.txt +0 -0
  205. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/verify_user.txt +0 -0
  206. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/filter_system.txt +0 -0
  207. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/filter_user.txt +0 -0
  208. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/pairs_system.txt +0 -0
  209. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/pairs_user.txt +0 -0
  210. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_system.txt +0 -0
  211. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user.txt +0 -0
  212. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  213. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  214. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  215. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/verify_system.txt +0 -0
  216. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/verify_user.txt +0 -0
  217. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/verify_test_data.py +0 -0
  218. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/datasets/__init__.py +0 -0
  219. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/datasets/jsonl_text_pairs.py +0 -0
  220. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/loops/__init__.py +0 -0
  221. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/loops/prefix_tuning_sft.py +0 -0
  222. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/ttt.py +0 -0
  223. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_model.py +0 -0
  224. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_onnx_to_huggingface.py +0 -0
  225. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_onnx_to_huggingface_with_token.py +0 -0
  226. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/utils.py +0 -0
  227. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/HANDOFF.md +0 -0
  228. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/README.md +0 -0
  229. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/__init__.py +0 -0
  230. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/config.py +0 -0
  231. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/main.py +0 -0
  232. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/middleware/__init__.py +0 -0
  233. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/middleware/rate_limit.py +0 -0
  234. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/models.py +0 -0
  235. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/__init__.py +0 -0
  236. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/auth_service.py +0 -0
  237. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/case_service.py +0 -0
  238. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/compiler_service.py +0 -0
  239. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/gpt_service.py +0 -0
  240. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/hub_service.py +0 -0
  241. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/image_service.py +0 -0
  242. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/interpreter_service.py +0 -0
  243. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/sql_manager.py +0 -0
  244. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  245. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/__init__.py +0 -0
  246. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/image_placeholders.py +0 -0
  247. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/program_hash.py +0 -0
  248. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/clear_db.sh +0 -0
  249. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/clear_tables.sql +0 -0
  250. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/data/programs.db +0 -0
  251. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/env_example.txt +0 -0
  252. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/example_images/README.md +0 -0
  253. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/get_data_examples.py +0 -0
  254. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/requirements.txt +0 -0
  255. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/run_server.py +0 -0
  256. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_analytics_tables.sql +0 -0
  257. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_auth_tables.sql +0 -0
  258. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_cache_tables.sql +0 -0
  259. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_cases_tables.sql +0 -0
  260. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_database.sql +0 -0
  261. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_database_simple.sql +0 -0
  262. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_db.sh +0 -0
  263. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_example_images.py +0 -0
  264. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_hub_tables.sql +0 -0
  265. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/test_compilation_cache.py +0 -0
  266. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/README.md +0 -0
  267. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/eslint.config.js +0 -0
  268. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/index.html +0 -0
  269. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/package-lock.json +0 -0
  270. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/package.json +0 -0
  271. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/postcss.config.js +0 -0
  272. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/apple-touch-icon.png +0 -0
  273. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/favicon-16x16.png +0 -0
  274. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/favicon-32x32.png +0 -0
  275. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw-192.png +0 -0
  276. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw-512.png +0 -0
  277. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw.svg +0 -0
  278. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/react-test.html +0 -0
  279. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/test.html +0 -0
  280. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/vite.svg +0 -0
  281. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/App.css +0 -0
  282. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/assets/react.svg +0 -0
  283. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/AboutPage.tsx +0 -0
  284. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/AutoTestSection.tsx +0 -0
  285. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CasesSection.tsx +0 -0
  286. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CollapsibleExamples.tsx +0 -0
  287. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  288. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  289. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CopyCodeSection.tsx +0 -0
  290. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ExampleRow/ExampleRowEditor.tsx +0 -0
  291. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  292. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubPage.tsx +0 -0
  293. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
  294. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ImageUpload.tsx +0 -0
  295. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/ImageBlock.tsx +0 -0
  296. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/InputBlockList.tsx +0 -0
  297. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/TextBlock.tsx +0 -0
  298. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/LeaderboardPage.tsx +0 -0
  299. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  300. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/MultiImageUpload.tsx +0 -0
  301. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PricingPage.tsx +0 -0
  302. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  303. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ProfilePage.tsx +0 -0
  304. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ProgramDetailPage.tsx +0 -0
  305. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PublishProgramPage.tsx +0 -0
  306. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/SpecInput.tsx +0 -0
  307. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  308. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/TestSection.tsx +0 -0
  309. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/index.css +0 -0
  310. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/main.tsx +0 -0
  311. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tailwind.config.js +0 -0
  312. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.app.json +0 -0
  313. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.json +0 -0
  314. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.node.json +0 -0
  315. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/vite.config.ts +0 -0
  316. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/nginx-paw.conf +0 -0
  317. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/nginx.conf +0 -0
  318. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/setup_mysql.sh +0 -0
  319. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/start.sh +0 -0
  320. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/test_setup.py +0 -0
  321. {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/ttt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programasweights
3
- Version: 0.1.0.dev2
3
+ Version: 0.1.0.dev4
4
4
  Summary: Compile natural language specifications into neural programs that run locally via llama.cpp.
5
5
  Author-email: ProgramAsWeights <support@programasweights.com>
6
6
  License: MIT
@@ -17,8 +17,8 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Python: >=3.9
20
- Requires-Dist: httpx>=0.27.0
21
- Requires-Dist: llama-cpp-python>=0.3.0
20
+ Requires-Dist: httpx<1.0,>=0.27.0
21
+ Requires-Dist: llama-cpp-python<1.0,>=0.3.0
22
22
  Provides-Extra: test
23
23
  Requires-Dist: pytest; extra == 'test'
24
24
  Description-Content-Type: text/markdown
@@ -19,7 +19,7 @@ API reference:
19
19
  paw.api_key API key (set via login() or PAW_API_KEY env var)
20
20
  """
21
21
 
22
- __version__ = "0.1.0.dev2"
22
+ __version__ = "0.1.0.dev4"
23
23
 
24
24
  from .config import get_api_url, get_api_key, set_api_key
25
25
 
@@ -22,7 +22,7 @@ import httpx
22
22
  from . import config
23
23
 
24
24
  BASE_MODEL_URLS = {
25
- "qwen3-0.6b-q6_k": "https://programasweights.com/models/qwen3-0.6b-q6_k.gguf",
25
+ "qwen3-0.6b-q6_k": "https://huggingface.co/yuntian-deng/Qwen3-0.6B-GGUF-Q6_K/resolve/main/qwen3-0.6b-q6_k.gguf",
26
26
  }
27
27
 
28
28
  INTERPRETER_TO_GGUF = {
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.1.0.dev2"
7
+ version = "0.1.0.dev4"
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"
@@ -27,8 +27,8 @@ classifiers = [
27
27
  "Topic :: Software Development :: Libraries :: Python Modules",
28
28
  ]
29
29
  dependencies = [
30
- "httpx>=0.27.0",
31
- "llama-cpp-python>=0.3.0",
30
+ "httpx>=0.27.0,<1.0",
31
+ "llama-cpp-python>=0.3.0,<1.0",
32
32
  ]
33
33
 
34
34
  [project.optional-dependencies]
@@ -52,6 +52,7 @@ class CompileResponse(BaseModel):
52
52
  status: Literal["queued", "compiling", "ready", "failed"]
53
53
  program_id: Optional[str] = None
54
54
  compiler_snapshot: Optional[str] = None
55
+ pseudo_program: Optional[str] = None
55
56
  queue_position: Optional[int] = None
56
57
  estimated_wait_s: Optional[float] = None
57
58
  timings: Optional[CompileTimings] = None
@@ -0,0 +1,184 @@
1
+ """
2
+ Auth endpoints: GitHub OAuth + session management.
3
+ """
4
+
5
+ import hashlib
6
+ import secrets
7
+ import time
8
+
9
+ import httpx
10
+ import structlog
11
+ from fastapi import APIRouter, HTTPException, Request
12
+ from fastapi.responses import RedirectResponse
13
+
14
+ from api.config import get_settings
15
+
16
+ logger = structlog.get_logger()
17
+ router = APIRouter()
18
+
19
+ # In-memory session store (replace with Redis/DB for production)
20
+ _sessions: dict[str, dict] = {}
21
+ _github_states: dict[str, float] = {}
22
+
23
+ GITHUB_AUTHORIZE_URL = "https://github.com/login/oauth/authorize"
24
+ GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token"
25
+ GITHUB_USER_URL = "https://api.github.com/user"
26
+
27
+
28
+ @router.get("/auth/github")
29
+ async def github_login(request: Request):
30
+ settings = get_settings()
31
+ if not settings.GITHUB_CLIENT_ID:
32
+ raise HTTPException(status_code=501, detail={
33
+ "error": "not_configured",
34
+ "message": "GitHub OAuth is not configured. Set GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET.",
35
+ })
36
+
37
+ state = secrets.token_urlsafe(32)
38
+ _github_states[state] = time.time()
39
+
40
+ # Clean up states older than 10 minutes
41
+ cutoff = time.time() - 600
42
+ for k in [k for k, v in _github_states.items() if v < cutoff]:
43
+ del _github_states[k]
44
+
45
+ params = (
46
+ f"?client_id={settings.GITHUB_CLIENT_ID}"
47
+ f"&redirect_uri=https://programasweights.com/api/v1/auth/github/callback"
48
+ f"&scope=read:user"
49
+ f"&state={state}"
50
+ )
51
+ return RedirectResponse(url=f"{GITHUB_AUTHORIZE_URL}{params}")
52
+
53
+
54
+ @router.get("/auth/github/callback")
55
+ async def github_callback(code: str, state: str, request: Request):
56
+ if state not in _github_states:
57
+ raise HTTPException(status_code=400, detail={
58
+ "error": "invalid_state",
59
+ "message": "Invalid or expired OAuth state. Please try signing in again.",
60
+ })
61
+ del _github_states[state]
62
+
63
+ settings = get_settings()
64
+
65
+ async with httpx.AsyncClient() as client:
66
+ token_resp = await client.post(
67
+ GITHUB_TOKEN_URL,
68
+ data={
69
+ "client_id": settings.GITHUB_CLIENT_ID,
70
+ "client_secret": settings.GITHUB_CLIENT_SECRET,
71
+ "code": code,
72
+ "redirect_uri": "https://programasweights.com/api/v1/auth/github/callback",
73
+ },
74
+ headers={"Accept": "application/json"},
75
+ )
76
+ token_data = token_resp.json()
77
+
78
+ if "access_token" not in token_data:
79
+ logger.warning("github_oauth_failed", error=token_data.get("error"))
80
+ raise HTTPException(status_code=400, detail={
81
+ "error": "oauth_failed",
82
+ "message": token_data.get("error_description", "GitHub OAuth failed"),
83
+ })
84
+
85
+ access_token = token_data["access_token"]
86
+
87
+ user_resp = await client.get(
88
+ GITHUB_USER_URL,
89
+ headers={
90
+ "Authorization": f"Bearer {access_token}",
91
+ "Accept": "application/json",
92
+ },
93
+ )
94
+ user_data = user_resp.json()
95
+
96
+ session_token = secrets.token_urlsafe(48)
97
+ user_info = {
98
+ "authenticated": True,
99
+ "user_id": str(user_data.get("id")),
100
+ "username": user_data.get("login"),
101
+ "display_name": user_data.get("name") or user_data.get("login"),
102
+ "email": user_data.get("email"),
103
+ "avatar_url": user_data.get("avatar_url"),
104
+ "tier": "github",
105
+ "github_access_token": access_token,
106
+ "created_at": time.time(),
107
+ }
108
+ _sessions[session_token] = user_info
109
+
110
+ logger.info("github_login_success",
111
+ username=user_info["username"],
112
+ user_id=user_info["user_id"])
113
+
114
+ response = RedirectResponse(url="/playground")
115
+ response.set_cookie(
116
+ key="paw_session",
117
+ value=session_token,
118
+ httponly=True,
119
+ secure=True,
120
+ samesite="lax",
121
+ max_age=30 * 24 * 3600,
122
+ )
123
+ return response
124
+
125
+
126
+ @router.get("/auth/me")
127
+ async def get_current_user(request: Request):
128
+ session_token = request.cookies.get("paw_session")
129
+ api_key = request.headers.get("X-API-Key")
130
+
131
+ if session_token and session_token in _sessions:
132
+ user = _sessions[session_token]
133
+ return {
134
+ "authenticated": True,
135
+ "user_id": user["user_id"],
136
+ "username": user["username"],
137
+ "display_name": user["display_name"],
138
+ "email": user.get("email"),
139
+ "avatar_url": user.get("avatar_url"),
140
+ "tier": user["tier"],
141
+ }
142
+
143
+ if api_key and api_key == "test_key_for_development":
144
+ return {
145
+ "authenticated": True,
146
+ "user_id": "dev_user",
147
+ "username": "dev",
148
+ "display_name": "Developer",
149
+ "tier": "github",
150
+ }
151
+
152
+ return {"authenticated": False}
153
+
154
+
155
+ @router.post("/auth/logout")
156
+ async def logout(request: Request):
157
+ session_token = request.cookies.get("paw_session")
158
+ if session_token and session_token in _sessions:
159
+ del _sessions[session_token]
160
+
161
+ response = RedirectResponse(url="/", status_code=303)
162
+ response.delete_cookie("paw_session")
163
+ return response
164
+
165
+
166
+ @router.post("/auth/email")
167
+ async def send_email_code(request: Request):
168
+ return {"message": "Email auth coming soon. Please use GitHub sign-in."}
169
+
170
+
171
+ @router.post("/auth/verify")
172
+ async def verify_code(request: Request):
173
+ raise HTTPException(status_code=501, detail={
174
+ "error": "not_implemented",
175
+ "message": "Email auth coming soon. Please use GitHub sign-in.",
176
+ })
177
+
178
+
179
+ @router.post("/auth/rotate-key")
180
+ async def rotate_api_key(request: Request):
181
+ raise HTTPException(status_code=501, detail={
182
+ "error": "not_implemented",
183
+ "message": "API key rotation coming soon.",
184
+ })
@@ -91,6 +91,7 @@ async def submit_compile(req: CompileRequest, request: Request):
91
91
  status="ready",
92
92
  program_id=result["program_id"],
93
93
  compiler_snapshot=snapshot,
94
+ pseudo_program=result.get("pseudo_program"),
94
95
  queue_position=0,
95
96
  estimated_wait_s=0,
96
97
  timings=CompileTimings(
@@ -139,6 +139,8 @@ class CompileService:
139
139
  self._prefix_steps = None
140
140
  self._compiler_fingerprint = None
141
141
 
142
+ self._pseudo_cache: dict[str, str] = {}
143
+
142
144
  def _ensure_tokenizers_loaded(self, checkpoint_dir: str):
143
145
  if self._compiler_tok is not None:
144
146
  return
@@ -212,6 +214,10 @@ class CompileService:
212
214
  content = id_bytes + (self._compiler_fingerprint or "unknown").encode()
213
215
  return hashlib.sha256(content).hexdigest()[:20]
214
216
 
217
+ def _pseudo_cache_key(self, rendered_prompt: str, max_tokens: int) -> str:
218
+ content = f"{rendered_prompt}|max_tokens={max_tokens}|temp=0".encode()
219
+ return hashlib.sha256(content).hexdigest()[:32]
220
+
215
221
  async def step1_generate_pseudo_program(self, spec: str) -> tuple[str, int]:
216
222
  prompt = compiler_prompt_examples(spec)
217
223
  rendered = f"<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n"
@@ -220,6 +226,12 @@ class CompileService:
220
226
  else:
221
227
  prompt_tokens = len(rendered) // 4
222
228
  max_pseudo = min(COMPILER_MAX_PSEUDO_TOKENS, COMPILER_TOKEN_BUDGET - prompt_tokens)
229
+ max_tokens = max(max_pseudo, 64)
230
+
231
+ cache_key = self._pseudo_cache_key(rendered, max_tokens)
232
+ if cache_key in self._pseudo_cache:
233
+ logger.info("pseudo_gen_cache_hit", spec_len=len(spec))
234
+ return self._pseudo_cache[cache_key], prompt_tokens
223
235
 
224
236
  async with httpx.AsyncClient(timeout=60.0) as client:
225
237
  resp = await client.post(
@@ -227,13 +239,15 @@ class CompileService:
227
239
  json={
228
240
  "model": "Qwen/Qwen3-4B-Instruct-2507",
229
241
  "prompt": rendered,
230
- "max_tokens": max(max_pseudo, 64),
242
+ "max_tokens": max_tokens,
231
243
  "temperature": 0,
232
244
  },
233
245
  )
234
246
  resp.raise_for_status()
235
247
  data = resp.json()
236
- return data["choices"][0]["text"].strip(), prompt_tokens
248
+ pseudo_program = data["choices"][0]["text"].strip()
249
+ self._pseudo_cache[cache_key] = pseudo_program
250
+ return pseudo_program, prompt_tokens
237
251
 
238
252
  def _build_compiler_input(self, spec: str, pseudo_program: str) -> str:
239
253
  """Build the full input text for the compiler model."""
@@ -359,6 +373,27 @@ class CompileService:
359
373
  timings["pseudo_gen_s"] = time.time() - t0
360
374
  logger.info("compile_step1_done", elapsed_s=round(timings["pseudo_gen_s"], 3))
361
375
 
376
+ # Generate content-addressable program ID early (needs pseudo_program)
377
+ compiler_input = self._build_compiler_input(spec, pseudo_program)
378
+ program_id = self._generate_program_id(compiler_input)
379
+
380
+ # Cache check: if this exact program already exists, return immediately
381
+ adapter_dir = self._storage_path / program_id
382
+ paw_path = str(adapter_dir / f"{program_id}.paw")
383
+ if (adapter_dir / "adapter.gguf").exists() and (adapter_dir / "prompt_template.txt").exists():
384
+ timings["total_s"] = time.time() - t_start
385
+ logger.info("compile_cache_hit", program_id=program_id,
386
+ total_s=round(timings["total_s"], 3))
387
+ return {
388
+ "program_id": program_id,
389
+ "paw_path": paw_path,
390
+ "pseudo_program": pseudo_program,
391
+ "adapter_path": str(adapter_dir / "adapter.gguf"),
392
+ "peft_adapter_dir": str(adapter_dir),
393
+ "timings": timings,
394
+ "cached": True,
395
+ }
396
+
362
397
  # Step 2: Extract LoRA via vLLM compiler
363
398
  logger.info("compile_step2_start")
364
399
  t0 = time.time()
@@ -371,10 +406,6 @@ class CompileService:
371
406
  torch.load, lora_params_path, map_location="cpu", weights_only=True,
372
407
  )
373
408
 
374
- # Generate content-addressable program ID
375
- compiler_input = self._build_compiler_input(spec, pseudo_program)
376
- program_id = self._generate_program_id(compiler_input)
377
-
378
409
  # Copy PEFT adapter + raw params to program storage
379
410
  adapter_dir = self._storage_path / program_id
380
411
  adapter_dir.mkdir(parents=True, exist_ok=True)
@@ -8,7 +8,7 @@ import HubPage from './components/HubPage';
8
8
  import HubUploadPage from './components/HubUploadPage';
9
9
  import HubProgramPage from './components/HubProgramPage';
10
10
  import ProfilePage from './components/ProfilePage';
11
- import PricingPage from './components/PricingPage';
11
+
12
12
  import DocsPage from './components/DocsPage';
13
13
  import TermsPage from './components/TermsPage';
14
14
  import PrivacyPage from './components/PrivacyPage';
@@ -38,7 +38,7 @@ function App() {
38
38
  <Route path="/hub/:id" element={<HubProgramPage />} />
39
39
  <Route path="/profile" element={<ProfilePage />} />
40
40
  <Route path="/about" element={<AboutPage />} />
41
- <Route path="/pricing" element={<PricingPage />} />
41
+ {/* pricing removed — free during internal testing */}
42
42
  <Route path="/docs" element={<DocsPage />} />
43
43
  <Route path="/terms" element={<TermsPage />} />
44
44
  <Route path="/privacy" element={<PrivacyPage />} />
@@ -85,7 +85,7 @@ const DocsPage: React.FC = () => {
85
85
  <div className="space-y-8">
86
86
  <section>
87
87
  <h2 className="text-xl font-bold text-gray-900 mb-4">1. Install</h2>
88
- <CodeBlock code="pip install programasweights" id="install" lang="bash" />
88
+ <CodeBlock code="pip install --pre programasweights" id="install" lang="bash" />
89
89
  </section>
90
90
 
91
91
  <section>
@@ -18,7 +18,7 @@ const Footer: React.FC = () => {
18
18
  Define functions in English. Compile them into neural programs. Run them locally.
19
19
  </p>
20
20
  <div className="mt-4 inline-flex items-center gap-2 bg-white/5 rounded px-3 py-1.5 font-mono text-xs text-gray-300 border border-white/10">
21
- pip install programasweights
21
+ pip install --pre programasweights
22
22
  </div>
23
23
  </div>
24
24
 
@@ -1,6 +1,6 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import { Link, useLocation } from 'react-router-dom';
3
- import { BookOpen, Package, LogOut, Play, Menu, X, DollarSign, Github } from 'lucide-react';
3
+ import { BookOpen, Package, LogOut, Play, Menu, X, Github } from 'lucide-react';
4
4
  import { apiClient } from '../utils/api';
5
5
  import type { AuthUser } from '../types';
6
6
 
@@ -14,7 +14,6 @@ const Header: React.FC = () => {
14
14
  { path: '/playground', label: 'Playground', icon: Play },
15
15
  { path: '/hub', label: 'Hub', icon: Package },
16
16
  { path: '/docs', label: 'Docs', icon: BookOpen },
17
- { path: '/pricing', label: 'Pricing', icon: DollarSign },
18
17
  ];
19
18
 
20
19
  const isActive = (path: string) => location.pathname === path;
@@ -110,13 +109,13 @@ const Header: React.FC = () => {
110
109
  )}
111
110
  </div>
112
111
  ) : (
113
- <Link
114
- to="/playground"
112
+ <a
113
+ href="/api/v1/auth/github"
115
114
  className="hidden sm:flex items-center space-x-2 px-4 py-2 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors text-sm font-medium"
116
115
  >
117
- <Play className="w-4 h-4" />
118
- <span>Get Started</span>
119
- </Link>
116
+ <Github className="w-4 h-4" />
117
+ <span>Sign in</span>
118
+ </a>
120
119
  )}
121
120
 
122
121
  <button
@@ -214,7 +214,7 @@ print(result)`;
214
214
  </div>
215
215
  <pre className="bg-gray-900 text-gray-100 p-4 rounded-lg text-sm overflow-x-auto leading-relaxed">{usageCode}</pre>
216
216
  <p className="mt-3 text-xs text-gray-400">
217
- Install with <code className="bg-gray-100 px-1.5 py-0.5 rounded text-gray-600">pip install programasweights</code>
217
+ Install with <code className="bg-gray-100 px-1.5 py-0.5 rounded text-gray-600">pip install --pre programasweights</code>
218
218
  </p>
219
219
  </div>
220
220
 
@@ -63,7 +63,7 @@ const LandingPage: React.FC = () => {
63
63
  },
64
64
  ];
65
65
 
66
- const installCmd = 'pip install programasweights';
66
+ const installCmd = 'pip install --pre programasweights';
67
67
  const codeExample = `import programasweights as paw
68
68
 
69
69
  # Define a function in plain English