programasweights 0.1.0.dev1__tar.gz → 0.1.0.dev3__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 (328) hide show
  1. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/PKG-INFO +3 -3
  2. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/__init__.py +1 -1
  3. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/cache.py +3 -5
  4. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/pyproject.toml +3 -3
  5. programasweights-0.1.0.dev3/web-app/frontend/src/components/CasesSection.tsx +180 -0
  6. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/DocsPage.tsx +1 -1
  7. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/Footer.tsx +1 -1
  8. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/Header.tsx +31 -87
  9. programasweights-0.1.0.dev3/web-app/frontend/src/components/HubPage.tsx +180 -0
  10. programasweights-0.1.0.dev3/web-app/frontend/src/components/HubProgramPage.tsx +237 -0
  11. programasweights-0.1.0.dev3/web-app/frontend/src/components/HubUploadPage.tsx +14 -0
  12. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/LandingPage.tsx +19 -39
  13. programasweights-0.1.0.dev3/web-app/frontend/src/components/MainInterface.tsx +381 -0
  14. programasweights-0.1.0.dev3/web-app/frontend/src/components/ProfilePage.tsx +102 -0
  15. programasweights-0.1.0.dev3/web-app/frontend/src/types/index.ts +192 -0
  16. programasweights-0.1.0.dev3/web-app/frontend/src/utils/api.ts +164 -0
  17. programasweights-0.1.0.dev1/web-app/frontend/src/components/CasesSection.tsx +0 -406
  18. programasweights-0.1.0.dev1/web-app/frontend/src/components/HubPage.tsx +0 -293
  19. programasweights-0.1.0.dev1/web-app/frontend/src/components/HubProgramPage.tsx +0 -389
  20. programasweights-0.1.0.dev1/web-app/frontend/src/components/HubUploadPage.tsx +0 -222
  21. programasweights-0.1.0.dev1/web-app/frontend/src/components/MainInterface.tsx +0 -568
  22. programasweights-0.1.0.dev1/web-app/frontend/src/components/ProfilePage.tsx +0 -272
  23. programasweights-0.1.0.dev1/web-app/frontend/src/types/index.ts +0 -182
  24. programasweights-0.1.0.dev1/web-app/frontend/src/utils/api.ts +0 -84
  25. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/.gitignore +0 -0
  26. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/.hatch_build.toml +0 -0
  27. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/.readthedocs.yaml +0 -0
  28. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/1apple.jpg +0 -0
  29. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/1apple2.jpg +0 -0
  30. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/2apples.jpg +0 -0
  31. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/2apples2.jpg +0 -0
  32. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/3apples.jpg +0 -0
  33. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/3apples2.jpg +0 -0
  34. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/479400.png +0 -0
  35. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/4apples.jpg +0 -0
  36. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/4apples2.jpg +0 -0
  37. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/4apples3.jpg +0 -0
  38. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/4apples4.jpg +0 -0
  39. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/5apples.jpg +0 -0
  40. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/6apples.jpg +0 -0
  41. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/8apples.jpg +0 -0
  42. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/9apples.jpg +0 -0
  43. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/FLOW_SUMMARY.md +0 -0
  44. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/MANIFEST.in +0 -0
  45. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/ONNX_MIGRATION_PLAN.md +0 -0
  46. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/PREFIX_TOKENS_DESIGN.md +0 -0
  47. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/PYPI_README.md +0 -0
  48. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/README.md +0 -0
  49. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/TRUNCATION_CHANGES.md +0 -0
  50. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/VERIFICATION_USAGE.md +0 -0
  51. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/analyze_dataset.py +0 -0
  52. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/analyze_lengths.py +0 -0
  53. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/code_prompt.md +0 -0
  54. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/evaluate_openai_python_code_baseline.py +0 -0
  55. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/openai_batch_request.py +0 -0
  56. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/prepare_alchemist_data.py +0 -0
  57. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/prepare_var_bench_data.py +0 -0
  58. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/python_code_sandbox.py +0 -0
  59. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/script_evaluation_var_bench.sh +0 -0
  60. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/script_evalution_evaluation.sh +0 -0
  61. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/script_evalution_request.sh +0 -0
  62. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/baselines/script_evalution_statistics.sh +0 -0
  63. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/benchmark_pytorch_vs_onnx.py +0 -0
  64. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/benchmark_user_experience.py +0 -0
  65. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/check_dataset.py +0 -0
  66. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/combine_datasets.py +0 -0
  67. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/compare_datasets.py +0 -0
  68. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/compare_old_vs_regen.py +0 -0
  69. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/convert_paw_to_svg.py +0 -0
  70. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/create_favicon_sizes.py +0 -0
  71. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/create_visualization_from_log.py +0 -0
  72. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/create_vqa_dataset.py +0 -0
  73. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/debug_cache.py +0 -0
  74. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/debug_eos_example.sh +0 -0
  75. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/Makefile +0 -0
  76. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
  77. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/002-q4_0-adapter-format.md +0 -0
  78. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/003-single-spec-field.md +0 -0
  79. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/004-compiler-naming.md +0 -0
  80. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/005-vllm-hidden-states.md +0 -0
  81. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/adr/006-email-api-key-auth.md +0 -0
  82. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/api-reference.rst +0 -0
  83. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/architecture.md +0 -0
  84. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/conf.py +0 -0
  85. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/examples/evaluation-tasks.rst +0 -0
  86. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/index.rst +0 -0
  87. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/installation.rst +0 -0
  88. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/make.bat +0 -0
  89. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/quickstart.rst +0 -0
  90. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/requirements.txt +0 -0
  91. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/docs/using-pretrained.rst +0 -0
  92. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/estimate_data_gen_cost.py +0 -0
  93. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/eval.py +0 -0
  94. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/examples/flask_app.py +0 -0
  95. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/examples/jupyter_notebook.py +0 -0
  96. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/examples/langchain_integration.py +0 -0
  97. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/examples/replace_openai.py +0 -0
  98. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/export_to_onnx.py +0 -0
  99. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/extract_models.py +0 -0
  100. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/inspect_data_dirs.py +0 -0
  101. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/latest_export.csv +0 -0
  102. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/log.train.81920.morecategories.extraprefix +0 -0
  103. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
  104. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/merge_datasets.py +0 -0
  105. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/paw.png +0 -0
  106. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/paw.svg +0 -0
  107. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/process_im2latex_dataset.py +0 -0
  108. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/artifacts.py +0 -0
  109. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/cli.py +0 -0
  110. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/client.py +0 -0
  111. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/compiler/__init__.py +0 -0
  112. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/compiler/dummy.py +0 -0
  113. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/config.py +0 -0
  114. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/convert_peft_to_paw.py +0 -0
  115. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/paw_format.py +0 -0
  116. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/runtime/__init__.py +0 -0
  117. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/runtime/interpreter.py +0 -0
  118. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/runtime/interpreter_onnx.py +0 -0
  119. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights/runtime_llamacpp.py +0 -0
  120. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/__init__.py +0 -0
  121. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/compiler/__init__.py +0 -0
  122. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/lora_format.py +0 -0
  123. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/runtime/__init__.py +0 -0
  124. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/runtime/interpreter_lora.py +0 -0
  125. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/tests/test_compile_and_run.py +0 -0
  126. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/tests/test_lora_format.py +0 -0
  127. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/tests/test_training.py +0 -0
  128. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/train_lora.py +0 -0
  129. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/training/__init__.py +0 -0
  130. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
  131. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/run_eval.sh +0 -0
  132. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/run_training.sh +0 -0
  133. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/scripts/filter_table_by_length.py +0 -0
  134. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/.env.example +0 -0
  135. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/__init__.py +0 -0
  136. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/config.py +0 -0
  137. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/logging_config.py +0 -0
  138. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/main.py +0 -0
  139. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/models/__init__.py +0 -0
  140. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/models/schemas.py +0 -0
  141. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/__init__.py +0 -0
  142. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/auth.py +0 -0
  143. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/compile.py +0 -0
  144. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/health.py +0 -0
  145. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/infer.py +0 -0
  146. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/models_info.py +0 -0
  147. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/routes/programs.py +0 -0
  148. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/services/__init__.py +0 -0
  149. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/services/compile_service.py +0 -0
  150. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/api/services/infer_service.py +0 -0
  151. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/benchmarks/benchmark_api.py +0 -0
  152. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/benchmarks/handcrafted_specs.json +0 -0
  153. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/benchmarks/last_benchmark_results.json +0 -0
  154. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/benchmarks/last_stress_results.json +0 -0
  155. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/benchmarks/stress_test.py +0 -0
  156. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/requirements.txt +0 -0
  157. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/scripts/start_services.sh +0 -0
  158. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/__init__.py +0 -0
  159. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/conftest.py +0 -0
  160. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_auth.py +0 -0
  161. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_compile.py +0 -0
  162. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_errors.py +0 -0
  163. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_infer.py +0 -0
  164. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_integration_gpu.py +0 -0
  165. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/tests/test_rate_limit.py +0 -0
  166. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/vllm_models/__init__.py +0 -0
  167. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/vllm_models/paw_compiler.py +0 -0
  168. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/vllm_models/prepare_checkpoint.py +0 -0
  169. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/server/vllm_models/register.py +0 -0
  170. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
  171. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
  172. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
  173. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
  174. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_1spec.py +0 -0
  175. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_all_caching.py +0 -0
  176. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_apple_count.py +0 -0
  177. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_batch_pilot.py +0 -0
  178. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_compile.py +0 -0
  179. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_e2e.py +0 -0
  180. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_execute.py +0 -0
  181. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_nspecs.py +0 -0
  182. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_one_vs_two_step.py +0 -0
  183. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_onnx_correctness.py +0 -0
  184. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_onnx_hf_model.py +0 -0
  185. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_onnx_hf_with_images.py +0 -0
  186. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_paw_format.py +0 -0
  187. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/test_thinking_comparison.py +0 -0
  188. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/tests/test_programasweights.py +0 -0
  189. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/train.py +0 -0
  190. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
  191. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/README.md +0 -0
  192. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/__init__.py +0 -0
  193. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/DATASET_CHANGELOG.md +0 -0
  194. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/README.md +0 -0
  195. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
  196. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/dry_run_batch.py +0 -0
  197. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/filter_test_data.py +0 -0
  198. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/generate_specs.py +0 -0
  199. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/generate_specs_batch.py +0 -0
  200. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/incremental_merge.py +0 -0
  201. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/merge_and_upload.py +0 -0
  202. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/regenerate_outputs_batch.py +0 -0
  203. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/synthesize_data.py +0 -0
  204. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/synthesize_data_batch.py +0 -0
  205. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/filter_system.txt +0 -0
  206. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/filter_user.txt +0 -0
  207. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/pairs_system.txt +0 -0
  208. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/pairs_user.txt +0 -0
  209. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/specs_system.txt +0 -0
  210. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/specs_user.txt +0 -0
  211. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/specs_user_freeform.txt +0 -0
  212. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
  213. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
  214. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/verify_system.txt +0 -0
  215. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates/verify_user.txt +0 -0
  216. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/filter_system.txt +0 -0
  217. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/filter_user.txt +0 -0
  218. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/pairs_system.txt +0 -0
  219. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/pairs_user.txt +0 -0
  220. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/specs_system.txt +0 -0
  221. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/specs_user.txt +0 -0
  222. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
  223. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
  224. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
  225. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/verify_system.txt +0 -0
  226. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/templates_old/verify_user.txt +0 -0
  227. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/data_generation/verify_test_data.py +0 -0
  228. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/datasets/__init__.py +0 -0
  229. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/datasets/jsonl_text_pairs.py +0 -0
  230. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/loops/__init__.py +0 -0
  231. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/training/loops/prefix_tuning_sft.py +0 -0
  232. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/ttt.py +0 -0
  233. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/upload_model.py +0 -0
  234. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/upload_onnx_to_huggingface.py +0 -0
  235. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/upload_onnx_to_huggingface_with_token.py +0 -0
  236. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/utils.py +0 -0
  237. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/HANDOFF.md +0 -0
  238. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/README.md +0 -0
  239. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/__init__.py +0 -0
  240. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/config.py +0 -0
  241. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/main.py +0 -0
  242. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/middleware/__init__.py +0 -0
  243. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/middleware/rate_limit.py +0 -0
  244. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/models.py +0 -0
  245. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/__init__.py +0 -0
  246. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/auth_service.py +0 -0
  247. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/case_service.py +0 -0
  248. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/compiler_service.py +0 -0
  249. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/gpt_service.py +0 -0
  250. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/hub_service.py +0 -0
  251. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/image_service.py +0 -0
  252. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/interpreter_service.py +0 -0
  253. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/services/sql_manager.py +0 -0
  254. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
  255. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/utils/__init__.py +0 -0
  256. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/utils/image_placeholders.py +0 -0
  257. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/app/utils/program_hash.py +0 -0
  258. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/clear_db.sh +0 -0
  259. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/clear_tables.sql +0 -0
  260. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/data/programs.db +0 -0
  261. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/env_example.txt +0 -0
  262. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/example_images/README.md +0 -0
  263. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/get_data_examples.py +0 -0
  264. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/requirements.txt +0 -0
  265. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/run_server.py +0 -0
  266. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_analytics_tables.sql +0 -0
  267. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_auth_tables.sql +0 -0
  268. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_cache_tables.sql +0 -0
  269. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_cases_tables.sql +0 -0
  270. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_database.sql +0 -0
  271. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_database_simple.sql +0 -0
  272. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_db.sh +0 -0
  273. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_example_images.py +0 -0
  274. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/setup_hub_tables.sql +0 -0
  275. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/backend/test_compilation_cache.py +0 -0
  276. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/README.md +0 -0
  277. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/eslint.config.js +0 -0
  278. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/index.html +0 -0
  279. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/package-lock.json +0 -0
  280. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/package.json +0 -0
  281. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/postcss.config.js +0 -0
  282. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/apple-touch-icon.png +0 -0
  283. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/favicon-16x16.png +0 -0
  284. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/favicon-32x32.png +0 -0
  285. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/paw-192.png +0 -0
  286. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/paw-512.png +0 -0
  287. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/paw.svg +0 -0
  288. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/react-test.html +0 -0
  289. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/test.html +0 -0
  290. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/public/vite.svg +0 -0
  291. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/App.css +0 -0
  292. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/App.tsx +0 -0
  293. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/assets/react.svg +0 -0
  294. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/AboutPage.tsx +0 -0
  295. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/AutoTestSection.tsx +0 -0
  296. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/CollapsibleExamples.tsx +0 -0
  297. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
  298. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/CompileSection.tsx +0 -0
  299. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/CopyCodeSection.tsx +0 -0
  300. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/ExampleRow/ExampleRowEditor.tsx +0 -0
  301. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
  302. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/ImageUpload.tsx +0 -0
  303. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/InputBlocks/ImageBlock.tsx +0 -0
  304. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/InputBlocks/InputBlockList.tsx +0 -0
  305. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/InputBlocks/TextBlock.tsx +0 -0
  306. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/LeaderboardPage.tsx +0 -0
  307. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
  308. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/MultiImageUpload.tsx +0 -0
  309. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/PricingPage.tsx +0 -0
  310. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
  311. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/ProgramDetailPage.tsx +0 -0
  312. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/PublishProgramPage.tsx +0 -0
  313. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/SpecInput.tsx +0 -0
  314. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/TermsPage.tsx +0 -0
  315. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/components/TestSection.tsx +0 -0
  316. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/index.css +0 -0
  317. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/src/main.tsx +0 -0
  318. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/tailwind.config.js +0 -0
  319. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/tsconfig.app.json +0 -0
  320. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/tsconfig.json +0 -0
  321. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/tsconfig.node.json +0 -0
  322. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/frontend/vite.config.ts +0 -0
  323. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/nginx-paw.conf +0 -0
  324. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/nginx.conf +0 -0
  325. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/setup_mysql.sh +0 -0
  326. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/start.sh +0 -0
  327. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/web-app/test_setup.py +0 -0
  328. {programasweights-0.1.0.dev1 → programasweights-0.1.0.dev3}/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.dev1
3
+ Version: 0.1.0.dev3
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.dev1"
22
+ __version__ = "0.1.0.dev3"
23
23
 
24
24
  from .config import get_api_url, get_api_key, set_api_key
25
25
 
@@ -21,14 +21,12 @@ import httpx
21
21
 
22
22
  from . import config
23
23
 
24
- # Known base model GGUF files (interpreter models)
25
24
  BASE_MODEL_URLS = {
26
- "qwen3-0.6b-q6k": "https://huggingface.co/Qwen/Qwen3-0.6B-GGUF/resolve/main/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",
27
26
  }
28
27
 
29
- # Map interpreter model names to GGUF filenames
30
28
  INTERPRETER_TO_GGUF = {
31
- "Qwen/Qwen3-0.6B": "qwen3-0.6b-q6k",
29
+ "Qwen/Qwen3-0.6B": "qwen3-0.6b-q6_k",
32
30
  }
33
31
 
34
32
 
@@ -47,7 +45,7 @@ def get_base_model_path(interpreter: str = "Qwen/Qwen3-0.6B") -> Path:
47
45
  f"Available: {list(INTERPRETER_TO_GGUF.keys())}"
48
46
  )
49
47
 
50
- print(f"Downloading base model {gguf_name} (~623 MB, one-time download)...")
48
+ print(f"Downloading base model {gguf_name} (one-time download)...")
51
49
  _download_file(url, gguf_path)
52
50
  print(f"Saved to {gguf_path}")
53
51
  return gguf_path
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "programasweights"
7
- version = "0.1.0.dev1"
7
+ version = "0.1.0.dev3"
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]
@@ -0,0 +1,180 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { ThumbsUp, ThumbsDown, Trash2, Plus, Send } from 'lucide-react';
3
+ import { apiClient } from '../utils/api';
4
+ import toast from 'react-hot-toast';
5
+ import type { ProgramCase, CaseType, CaseCounts } from '../types';
6
+
7
+ interface CasesSectionProps {
8
+ programId: string;
9
+ }
10
+
11
+ const CasesSection: React.FC<CasesSectionProps> = ({ programId }) => {
12
+ const [cases, setCases] = useState<ProgramCase[]>([]);
13
+ const [counts, setCounts] = useState<CaseCounts>({ success: 0, limitation: 0, edge_case: 0 });
14
+ const [selectedType, setSelectedType] = useState<CaseType | undefined>(undefined);
15
+ const [isAuthenticated, setIsAuthenticated] = useState(false);
16
+ const [showForm, setShowForm] = useState(false);
17
+ const [newCase, setNewCase] = useState({ input_text: '', output_text: '', case_type: 'success' as CaseType, description: '' });
18
+
19
+ useEffect(() => {
20
+ apiClient.getAuthUser().then(r => { if (r.authenticated) setIsAuthenticated(true); }).catch(() => {});
21
+ loadCases();
22
+ }, [programId, selectedType]);
23
+
24
+ const loadCases = async () => {
25
+ try {
26
+ const res = await apiClient.getCases(programId, { case_type: selectedType });
27
+ setCases(res.cases);
28
+ setCounts(res.counts);
29
+ } catch {
30
+ setCases([]);
31
+ }
32
+ };
33
+
34
+ const handleVote = async (caseItem: ProgramCase, vote: 1 | -1) => {
35
+ const newVote = caseItem.user_vote === vote ? 0 : vote;
36
+ try {
37
+ await apiClient.voteCase(caseItem.id, newVote as 1 | -1 | 0);
38
+ loadCases();
39
+ } catch {
40
+ toast.error('Vote failed');
41
+ }
42
+ };
43
+
44
+ const handleDelete = async (caseId: number) => {
45
+ try {
46
+ await apiClient.deleteCase(caseId);
47
+ setCases(prev => prev.filter(c => c.id !== caseId));
48
+ toast.success('Case deleted');
49
+ } catch {
50
+ toast.error('Delete failed');
51
+ }
52
+ };
53
+
54
+ const handleSubmit = async () => {
55
+ if (!newCase.input_text.trim() || !newCase.output_text.trim()) {
56
+ toast.error('Please fill in input and output');
57
+ return;
58
+ }
59
+ try {
60
+ await apiClient.createCase(programId, newCase);
61
+ setShowForm(false);
62
+ setNewCase({ input_text: '', output_text: '', case_type: 'success', description: '' });
63
+ loadCases();
64
+ toast.success('Case submitted!');
65
+ } catch {
66
+ toast.error('Failed to submit case');
67
+ }
68
+ };
69
+
70
+ const typeLabels: Record<CaseType, { label: string; color: string }> = {
71
+ success: { label: 'Successes', color: 'bg-green-100 text-green-700' },
72
+ limitation: { label: 'Limitations', color: 'bg-amber-100 text-amber-700' },
73
+ edge_case: { label: 'Edge Cases', color: 'bg-blue-100 text-blue-700' },
74
+ };
75
+
76
+ return (
77
+ <div className="bg-white rounded-xl border border-gray-200 p-6">
78
+ <div className="flex items-center justify-between mb-4">
79
+ <h2 className="font-semibold text-gray-900">Community Cases</h2>
80
+ {isAuthenticated && (
81
+ <button onClick={() => setShowForm(!showForm)} className="flex items-center gap-1 text-sm text-blue-600 hover:text-blue-800 font-medium">
82
+ <Plus className="w-3.5 h-3.5" /> Add Case
83
+ </button>
84
+ )}
85
+ </div>
86
+
87
+ {/* Type filter */}
88
+ <div className="flex gap-2 mb-4">
89
+ <button
90
+ onClick={() => setSelectedType(undefined)}
91
+ className={`px-3 py-1 rounded-full text-xs font-medium ${!selectedType ? 'bg-gray-900 text-white' : 'bg-gray-100 text-gray-600 hover:bg-gray-200'}`}
92
+ >
93
+ All ({counts.success + counts.limitation + counts.edge_case})
94
+ </button>
95
+ {(Object.entries(typeLabels) as [CaseType, { label: string; color: string }][]).map(([type, { label, color }]) => (
96
+ <button
97
+ key={type}
98
+ onClick={() => setSelectedType(selectedType === type ? undefined : type)}
99
+ className={`px-3 py-1 rounded-full text-xs font-medium ${selectedType === type ? color : 'bg-gray-100 text-gray-600 hover:bg-gray-200'}`}
100
+ >
101
+ {label} ({counts[type]})
102
+ </button>
103
+ ))}
104
+ </div>
105
+
106
+ {/* New case form */}
107
+ {showForm && (
108
+ <div className="border border-gray-200 rounded-lg p-4 mb-4 space-y-3">
109
+ <div className="grid grid-cols-2 gap-3">
110
+ <div>
111
+ <label className="text-xs text-gray-500 mb-1 block">Input</label>
112
+ <textarea value={newCase.input_text} onChange={e => setNewCase({ ...newCase, input_text: e.target.value })} rows={2} className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm resize-none" placeholder="Input..." />
113
+ </div>
114
+ <div>
115
+ <label className="text-xs text-gray-500 mb-1 block">Output</label>
116
+ <textarea value={newCase.output_text} onChange={e => setNewCase({ ...newCase, output_text: e.target.value })} rows={2} className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm resize-none" placeholder="Output..." />
117
+ </div>
118
+ </div>
119
+ <div className="flex items-center gap-3">
120
+ <select value={newCase.case_type} onChange={e => setNewCase({ ...newCase, case_type: e.target.value as CaseType })} className="text-sm border border-gray-200 rounded-md px-2 py-1">
121
+ <option value="success">Success</option>
122
+ <option value="limitation">Limitation</option>
123
+ <option value="edge_case">Edge Case</option>
124
+ </select>
125
+ <input value={newCase.description} onChange={e => setNewCase({ ...newCase, description: e.target.value })} className="flex-1 px-3 py-1 border border-gray-200 rounded-lg text-sm" placeholder="Brief description (optional)" />
126
+ <button onClick={handleSubmit} className="flex items-center gap-1 px-4 py-1.5 bg-gray-900 text-white rounded-lg text-sm hover:bg-gray-800">
127
+ <Send className="w-3.5 h-3.5" /> Submit
128
+ </button>
129
+ </div>
130
+ </div>
131
+ )}
132
+
133
+ {/* Cases list */}
134
+ {cases.length === 0 ? (
135
+ <p className="text-sm text-gray-400 text-center py-6">No cases yet. Be the first to contribute!</p>
136
+ ) : (
137
+ <div className="space-y-3">
138
+ {cases.map(c => (
139
+ <div key={c.id} className="border border-gray-100 rounded-lg p-3">
140
+ <div className="flex items-start justify-between gap-2">
141
+ <div className="flex-1 min-w-0">
142
+ <span className={`inline-block px-2 py-0.5 rounded-full text-[10px] font-medium mb-2 ${typeLabels[c.case_type].color}`}>
143
+ {typeLabels[c.case_type].label.slice(0, -1)}
144
+ </span>
145
+ {c.description && <p className="text-sm text-gray-700 mb-2">{c.description}</p>}
146
+ <div className="grid grid-cols-2 gap-2">
147
+ <div className="bg-gray-50 rounded p-2">
148
+ <p className="text-[10px] text-gray-400 mb-1">Input</p>
149
+ <p className="text-xs font-mono text-gray-700 truncate">{c.input_text}</p>
150
+ </div>
151
+ <div className="bg-gray-50 rounded p-2">
152
+ <p className="text-[10px] text-gray-400 mb-1">Output</p>
153
+ <p className="text-xs font-mono text-gray-700 truncate">{c.output_text}</p>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ <div className="flex flex-col items-center gap-1 text-xs text-gray-400">
158
+ <button onClick={() => handleVote(c, 1)} className={`p-1 rounded ${c.user_vote === 1 ? 'text-green-600' : 'hover:text-green-600'}`}>
159
+ <ThumbsUp className="w-3.5 h-3.5" />
160
+ </button>
161
+ <span>{c.upvotes - c.downvotes}</span>
162
+ <button onClick={() => handleVote(c, -1)} className={`p-1 rounded ${c.user_vote === -1 ? 'text-red-600' : 'hover:text-red-600'}`}>
163
+ <ThumbsDown className="w-3.5 h-3.5" />
164
+ </button>
165
+ {isAuthenticated && (
166
+ <button onClick={() => handleDelete(c.id)} className="p-1 text-gray-300 hover:text-red-500 mt-1">
167
+ <Trash2 className="w-3 h-3" />
168
+ </button>
169
+ )}
170
+ </div>
171
+ </div>
172
+ </div>
173
+ ))}
174
+ </div>
175
+ )}
176
+ </div>
177
+ );
178
+ };
179
+
180
+ export default CasesSection;
@@ -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,18 +1,12 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import { Link, useLocation } from 'react-router-dom';
3
- import { Github, BookOpen, Package, LogOut, Play, Menu, X, DollarSign } from 'lucide-react';
3
+ import { BookOpen, Package, LogOut, Play, Menu, X, DollarSign, Github } from 'lucide-react';
4
4
  import { apiClient } from '../utils/api';
5
-
6
- interface User {
7
- id: number;
8
- username: string;
9
- displayName: string;
10
- avatarUrl: string;
11
- }
5
+ import type { AuthUser } from '../types';
12
6
 
13
7
  const Header: React.FC = () => {
14
8
  const location = useLocation();
15
- const [user, setUser] = useState<User | null>(null);
9
+ const [user, setUser] = useState<AuthUser | null>(null);
16
10
  const [showUserMenu, setShowUserMenu] = useState(false);
17
11
  const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
18
12
 
@@ -25,39 +19,16 @@ const Header: React.FC = () => {
25
19
 
26
20
  const isActive = (path: string) => location.pathname === path;
27
21
 
28
- // Check auth status on mount
29
22
  useEffect(() => {
30
- const checkAuth = async () => {
31
- try {
32
- const response = await apiClient.getAuthUser();
33
- if (response.authenticated && response.user) {
34
- setUser(response.user);
35
- }
36
- } catch {
37
- // Not logged in - that's fine
38
- }
39
- };
40
- checkAuth();
23
+ apiClient.getAuthUser()
24
+ .then(res => { if (res.authenticated) setUser(res); })
25
+ .catch(() => {});
41
26
  }, []);
42
27
 
43
- const handleLogin = async () => {
44
- try {
45
- const response = await apiClient.getGithubLoginUrl();
46
- window.location.href = response.url;
47
- } catch {
48
- // Fallback
49
- window.location.href = '/api/auth/github';
50
- }
51
- };
52
-
53
28
  const handleLogout = async () => {
54
- try {
55
- await apiClient.logout();
56
- setUser(null);
57
- setShowUserMenu(false);
58
- } catch {
59
- setUser(null);
60
- }
29
+ await apiClient.logout();
30
+ setUser(null);
31
+ setShowUserMenu(false);
61
32
  };
62
33
 
63
34
  return (
@@ -73,17 +44,14 @@ const Header: React.FC = () => {
73
44
  <p className="text-xs text-gray-500 hidden sm:block">ProgramAsWeights</p>
74
45
  </div>
75
46
  </Link>
76
-
77
- {/* Desktop nav */}
47
+
78
48
  <nav className="hidden md:flex items-center space-x-1">
79
49
  {navItems.map(({ path, label, icon: Icon }) => (
80
50
  <Link
81
51
  key={path}
82
52
  to={path}
83
53
  className={`flex items-center space-x-2 px-3 py-2 rounded-md text-sm font-medium transition-colors ${
84
- isActive(path)
85
- ? 'bg-gray-100 text-gray-900'
86
- : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50'
54
+ isActive(path) ? 'bg-gray-100 text-gray-900' : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50'
87
55
  }`}
88
56
  >
89
57
  <Icon className="w-4 h-4" />
@@ -94,7 +62,7 @@ const Header: React.FC = () => {
94
62
 
95
63
  <div className="flex items-center space-x-3">
96
64
  <a
97
- href="https://github.com/programasweights/programasweights"
65
+ href="https://github.com/yuntian-group/programasweights"
98
66
  target="_blank"
99
67
  rel="noopener noreferrer"
100
68
  className="hidden md:flex items-center space-x-1.5 text-gray-500 hover:text-gray-900 transition-colors text-sm"
@@ -103,39 +71,37 @@ const Header: React.FC = () => {
103
71
  <span className="hidden lg:inline">GitHub</span>
104
72
  </a>
105
73
 
106
- {user ? (
74
+ {user?.authenticated ? (
107
75
  <div className="relative">
108
76
  <button
109
77
  onClick={() => setShowUserMenu(!showUserMenu)}
110
78
  className="flex items-center space-x-2 hover:opacity-80 transition-opacity"
111
79
  >
112
- <img
113
- src={user.avatarUrl}
114
- alt={user.username}
115
- className="w-8 h-8 rounded-full border-2 border-gray-200"
116
- />
80
+ {user.avatar_url ? (
81
+ <img src={user.avatar_url} alt="" className="w-8 h-8 rounded-full border-2 border-gray-200" />
82
+ ) : (
83
+ <div className="w-8 h-8 rounded-full bg-gray-300 flex items-center justify-center text-sm font-medium text-gray-600">
84
+ {(user.email || '?')[0].toUpperCase()}
85
+ </div>
86
+ )}
117
87
  <span className="text-sm font-medium text-gray-700 hidden lg:inline">
118
- {user.displayName || user.username}
88
+ {user.display_name || user.username || user.email}
119
89
  </span>
120
90
  </button>
121
-
91
+
122
92
  {showUserMenu && (
123
93
  <div className="absolute right-0 mt-2 w-48 bg-white rounded-lg shadow-lg border border-gray-200 py-1 z-50">
124
- <div className="px-4 py-2 border-b border-gray-100">
125
- <p className="text-sm font-medium text-gray-900">{user.displayName}</p>
126
- <p className="text-xs text-gray-500">@{user.username}</p>
127
- </div>
128
94
  <Link
129
95
  to="/profile"
130
96
  onClick={() => setShowUserMenu(false)}
131
- className="w-full flex items-center space-x-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors"
97
+ className="w-full flex items-center space-x-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
132
98
  >
133
99
  <Package className="w-4 h-4" />
134
100
  <span>My Programs</span>
135
101
  </Link>
136
102
  <button
137
103
  onClick={handleLogout}
138
- className="w-full flex items-center space-x-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors"
104
+ className="w-full flex items-center space-x-2 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
139
105
  >
140
106
  <LogOut className="w-4 h-4" />
141
107
  <span>Sign out</span>
@@ -144,16 +110,15 @@ const Header: React.FC = () => {
144
110
  )}
145
111
  </div>
146
112
  ) : (
147
- <button
148
- onClick={handleLogin}
113
+ <Link
114
+ to="/playground"
149
115
  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"
150
116
  >
151
- <Github className="w-4 h-4" />
152
- <span>Sign in</span>
153
- </button>
117
+ <Play className="w-4 h-4" />
118
+ <span>Get Started</span>
119
+ </Link>
154
120
  )}
155
121
 
156
- {/* Mobile menu button */}
157
122
  <button
158
123
  onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
159
124
  className="md:hidden p-2 text-gray-600 hover:text-gray-900 hover:bg-gray-100 rounded-lg transition-colors"
@@ -163,9 +128,8 @@ const Header: React.FC = () => {
163
128
  </div>
164
129
  </div>
165
130
 
166
- {/* Mobile menu */}
167
131
  {mobileMenuOpen && (
168
- <div className="md:hidden mt-3 pt-3 border-t border-gray-100 pb-2 animate-fade-in">
132
+ <div className="md:hidden mt-3 pt-3 border-t border-gray-100 pb-2">
169
133
  <nav className="space-y-1">
170
134
  {navItems.map(({ path, label, icon: Icon }) => (
171
135
  <Link
@@ -173,33 +137,13 @@ const Header: React.FC = () => {
173
137
  to={path}
174
138
  onClick={() => setMobileMenuOpen(false)}
175
139
  className={`flex items-center space-x-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors ${
176
- isActive(path)
177
- ? 'bg-gray-100 text-gray-900'
178
- : 'text-gray-600 hover:bg-gray-50'
140
+ isActive(path) ? 'bg-gray-100 text-gray-900' : 'text-gray-600 hover:bg-gray-50'
179
141
  }`}
180
142
  >
181
143
  <Icon className="w-4 h-4" />
182
144
  <span>{label}</span>
183
145
  </Link>
184
146
  ))}
185
- <a
186
- href="https://github.com/programasweights/programasweights"
187
- target="_blank"
188
- rel="noopener noreferrer"
189
- className="flex items-center space-x-3 px-3 py-2.5 rounded-lg text-sm font-medium text-gray-600 hover:bg-gray-50 transition-colors"
190
- >
191
- <Github className="w-4 h-4" />
192
- <span>GitHub</span>
193
- </a>
194
- {!user && (
195
- <button
196
- onClick={() => { handleLogin(); setMobileMenuOpen(false); }}
197
- className="w-full flex items-center space-x-3 px-3 py-2.5 rounded-lg text-sm font-medium text-gray-600 hover:bg-gray-50 transition-colors"
198
- >
199
- <Github className="w-4 h-4" />
200
- <span>Sign in with GitHub</span>
201
- </button>
202
- )}
203
147
  </nav>
204
148
  </div>
205
149
  )}