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.
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PKG-INFO +3 -3
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/__init__.py +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/cache.py +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/pyproject.toml +3 -3
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/models/schemas.py +1 -0
- programasweights-0.1.0.dev4/server/api/routes/auth.py +184 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/compile.py +1 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/compile_service.py +37 -6
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/App.tsx +2 -2
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/DocsPage.tsx +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/Footer.tsx +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/Header.tsx +6 -7
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubProgramPage.tsx +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/LandingPage.tsx +1 -1
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/MainInterface.tsx +103 -77
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/types/index.ts +1 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/utils/api.ts +2 -0
- programasweights-0.1.0.dev2/server/api/routes/auth.py +0 -77
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.gitignore +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.hatch_build.toml +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/.readthedocs.yaml +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/1apple.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/1apple2.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/2apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/2apples2.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/3apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/3apples2.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/479400.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples2.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples3.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/4apples4.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/5apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/6apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/8apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/9apples.jpg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/FLOW_SUMMARY.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/MANIFEST.in +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/ONNX_MIGRATION_PLAN.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PREFIX_TOKENS_DESIGN.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/PYPI_README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/TRUNCATION_CHANGES.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/VERIFICATION_USAGE.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/analyze_dataset.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/analyze_lengths.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/code_prompt.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/evaluate_openai_python_code_baseline.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/openai_batch_request.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/prepare_alchemist_data.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/prepare_var_bench_data.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/python_code_sandbox.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evaluation_var_bench.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_evaluation.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_request.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/baselines/script_evalution_statistics.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/benchmark_pytorch_vs_onnx.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/benchmark_user_experience.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/check_dataset.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/combine_datasets.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/compare_datasets.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/compare_old_vs_regen.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/convert_paw_to_svg.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_favicon_sizes.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_visualization_from_log.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/create_vqa_dataset.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/debug_cache.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/debug_eos_example.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/Makefile +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/002-q4_0-adapter-format.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/003-single-spec-field.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/004-compiler-naming.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/005-vllm-hidden-states.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/adr/006-email-api-key-auth.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/api-reference.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/architecture.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/conf.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/examples/evaluation-tasks.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/index.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/installation.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/make.bat +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/quickstart.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/requirements.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/docs/using-pretrained.rst +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/estimate_data_gen_cost.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/eval.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/flask_app.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/jupyter_notebook.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/langchain_integration.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/examples/replace_openai.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/export_to_onnx.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/extract_models.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/inspect_data_dirs.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/latest_export.csv +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/log.train.81920.morecategories.extraprefix +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/merge_datasets.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/paw.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/paw.svg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/process_im2latex_dataset.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/artifacts.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/cli.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/client.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/compiler/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/compiler/dummy.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/config.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/convert_peft_to_paw.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/paw_format.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/interpreter.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime/interpreter_onnx.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights/runtime_llamacpp.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/compiler/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/lora_format.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/runtime/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/runtime/interpreter_lora.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_compile_and_run.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_lora_format.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/tests/test_training.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/train_lora.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/training/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/run_eval.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/run_training.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/scripts/filter_table_by_length.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/.env.example +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/config.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/logging_config.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/main.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/models/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/health.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/infer.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/models_info.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/routes/programs.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/infer_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/benchmark_api.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/handcrafted_specs.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/last_benchmark_results.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/last_stress_results.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/benchmarks/stress_test.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/requirements.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/scripts/start_services.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/conftest.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_auth.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_compile.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_errors.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_infer.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_integration_gpu.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/tests/test_rate_limit.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/paw_compiler.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/prepare_checkpoint.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/vllm_models/register.py +0 -0
- {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
- {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
- {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
- {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
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_1spec.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_all_caching.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_apple_count.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_batch_pilot.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_compile.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_e2e.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_execute.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_nspecs.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_one_vs_two_step.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_correctness.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_hf_model.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_onnx_hf_with_images.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_paw_format.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/test_thinking_comparison.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/tests/test_programasweights.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/train.py +0 -0
- {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
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/DATASET_CHANGELOG.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/dry_run_batch.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/filter_test_data.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/generate_specs.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/generate_specs_batch.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/incremental_merge.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/merge_and_upload.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/regenerate_outputs_batch.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/synthesize_data.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/synthesize_data_batch.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/filter_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/filter_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/pairs_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/pairs_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_freeform.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/verify_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates/verify_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/filter_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/filter_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/pairs_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/pairs_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/verify_system.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/templates_old/verify_user.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/data_generation/verify_test_data.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/datasets/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/datasets/jsonl_text_pairs.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/loops/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/training/loops/prefix_tuning_sft.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/ttt.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_model.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_onnx_to_huggingface.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/upload_onnx_to_huggingface_with_token.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/utils.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/HANDOFF.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/config.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/main.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/middleware/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/middleware/rate_limit.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/models.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/auth_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/case_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/compiler_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/gpt_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/hub_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/image_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/interpreter_service.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/services/sql_manager.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/__init__.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/image_placeholders.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/app/utils/program_hash.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/clear_db.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/clear_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/data/programs.db +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/env_example.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/example_images/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/get_data_examples.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/requirements.txt +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/run_server.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_analytics_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_auth_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_cache_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_cases_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_database.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_database_simple.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_db.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_example_images.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/setup_hub_tables.sql +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/backend/test_compilation_cache.py +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/README.md +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/eslint.config.js +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/index.html +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/package-lock.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/package.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/postcss.config.js +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/apple-touch-icon.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/favicon-16x16.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/favicon-32x32.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw-192.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw-512.png +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/paw.svg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/react-test.html +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/test.html +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/public/vite.svg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/App.css +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/assets/react.svg +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/AboutPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/AutoTestSection.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CasesSection.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CollapsibleExamples.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CompileSection.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/CopyCodeSection.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ExampleRow/ExampleRowEditor.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ImageUpload.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/ImageBlock.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/InputBlockList.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/InputBlocks/TextBlock.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/LeaderboardPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/MultiImageUpload.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PricingPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ProfilePage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/ProgramDetailPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/PublishProgramPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/SpecInput.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/TermsPage.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/components/TestSection.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/index.css +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/src/main.tsx +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tailwind.config.js +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.app.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/tsconfig.node.json +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/frontend/vite.config.ts +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/nginx-paw.conf +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/nginx.conf +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/setup_mysql.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/start.sh +0 -0
- {programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/web-app/test_setup.py +0 -0
- {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.
|
|
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
|
|
21
|
-
Requires-Dist: llama-cpp-python
|
|
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
|
|
@@ -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://
|
|
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.
|
|
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(
|
{programasweights-0.1.0.dev2 → programasweights-0.1.0.dev4}/server/api/services/compile_service.py
RENAMED
|
@@ -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":
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
<
|
|
114
|
-
|
|
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
|
-
<
|
|
118
|
-
<span>
|
|
119
|
-
</
|
|
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
|