programasweights 0.2.2.dev1__tar.gz → 0.2.4__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.2.4/AGENTS.md +173 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/CHANGELOG.md +8 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/PKG-INFO +5 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/PYPI_README.md +4 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/api-reference/python-sdk.md +31 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/__init__.py +2 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/client.py +17 -4
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/runtime_llamacpp.py +12 -12
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/pyproject.toml +1 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/.env.example +0 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/config.py +1 -2
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/main.py +50 -4
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/models/schemas.py +1 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/auth.py +0 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/compile.py +1 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/health.py +8 -3
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/programs.py +31 -16
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/compile_provider.py +15 -3
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/e2e/full.spec.ts +65 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/index.html +5 -5
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/App.tsx +34 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/AboutPage.tsx +3 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/AgentsPage.tsx +92 -47
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/AuthorPage.tsx +14 -7
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/BrowserPage.tsx +53 -17
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/CasesSection.tsx +8 -5
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/Header.tsx +14 -11
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/HubPage.tsx +5 -5
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/HubProgramPage.tsx +41 -24
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/HubUploadPage.tsx +8 -1
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/MainInterface.tsx +39 -15
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/NavigationHelper.tsx +8 -3
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/ProfilePage.tsx +23 -21
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/SettingsPage.tsx +18 -22
- programasweights-0.2.4/web-app/frontend/src/contexts/AuthContext.tsx +45 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/types/index.ts +2 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/utils/api.ts +0 -8
- programasweights-0.2.4/web-app/frontend/test-results/.last-run.json +4 -0
- programasweights-0.2.2.dev1/AGENTS.md +0 -129
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.cursor/rules/sdk-publishing.mdc +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.cursor/rules/vllm-deployment.mdc +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.git +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.github/workflows/web-sdk.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.gitignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.gitmodules +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.hatch_build.toml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/.readthedocs.yaml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/1apple.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/1apple2.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/2apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/2apples2.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/3apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/3apples2.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/479400.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/4apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/4apples2.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/4apples3.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/4apples4.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/5apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/6apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/8apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/9apples.jpg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/FLOW_SUMMARY.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/LICENSE +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/MANIFEST.in +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/ONNX_MIGRATION_PLAN.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/PREFIX_TOKENS_DESIGN.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/TRUNCATION_CHANGES.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/USE_CASES_AND_IDEAS.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/VERIFICATION_USAGE.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/analyze_dataset.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/analyze_lengths.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/code_prompt.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/evaluate_openai_python_code_baseline.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/openai_batch_request.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/prepare_alchemist_data.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/prepare_var_bench_data.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/python_code_sandbox.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/script_evaluation_var_bench.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/script_evalution_evaluation.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/script_evalution_request.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/baselines/script_evalution_statistics.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/benchmark_pytorch_vs_onnx.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/benchmark_user_experience.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/check_dataset.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/combine_datasets.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/compare_datasets.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/compare_old_vs_regen.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/convert_paw_to_svg.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/create_favicon_sizes.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/create_visualization_from_log.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/create_vqa_dataset.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/debug_cache.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/debug_eos_example.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/002-q4_0-adapter-format.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/003-single-spec-field.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/004-compiler-naming.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/005-vllm-hidden-states.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/adr/006-email-api-key-auth.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/advanced/adrs.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/advanced/architecture.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/api-reference/cli.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/api-reference/rest-api.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/architecture.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/getting-started/first-program.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/getting-started/installation.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/getting-started/naming-programs.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/guide/browser-inference.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/guide/how-it-works.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/guide/local-inference.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/guide/writing-good-specs.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/hub/browsing-programs.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/hub/feedback-cases.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/hub/publishing-programs.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/index.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/docs/requirements.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/estimate_data_gen_cost.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/eval.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/examples/flask_app.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/examples/jupyter_notebook.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/examples/langchain_integration.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/examples/replace_openai.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/export_to_onnx.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/extract_models.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/inspect_data_dirs.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/latest_export.csv +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/log.train.81920.morecategories.extraprefix +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/merge_datasets.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/mkdocs.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/paw.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/paw.svg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/process_im2latex_dataset.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/artifacts.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/cache.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/cli.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/compiler/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/compiler/dummy.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/config.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/convert_peft_to_paw.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/paw_format.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/runtime/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/runtime/interpreter.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights/runtime/interpreter_onnx.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/compiler/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/lora_format.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/runtime/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/runtime/interpreter_lora.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/tests/test_compile_and_run.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/tests/test_lora_format.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/tests/test_training.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/train_lora.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/training/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/run_eval.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/run_training.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/scripts/filter_table_by_length.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/env.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/script.py.mako +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/versions/001_initial_schema.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/alembic.ini +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/dependencies.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/logging_config.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/middleware/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/middleware/rate_limit.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/models/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/models/database.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/models/orm.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/feedback.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/infer.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/routes/models_info.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/auto_tag_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/auto_title_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/compile_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/infer_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/search_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/storage_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/benchmarks/benchmark_api.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/benchmarks/handcrafted_specs.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/benchmarks/last_benchmark_results.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/benchmarks/last_stress_results.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/benchmarks/stress_test.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/compiler_registry.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/provider_configs/gpt2.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/provider_configs/qwen3-0.6b.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/requirements.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/ablation_search.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/backfill_hf_browser_assets.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/backfill_hf_safetensors.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/backfill_interestingness.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/backfill_tags.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/backfill_titles.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/benchmark_gpt2.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/cleanup_storage.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/eval_search.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/evict_cold_programs.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/generate_prefix_cache.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/launch_gpt2_compiler.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/launch_qwen3_compiler.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/patch_vllm.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/restart.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/start_all.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/start_gpt2_services.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/start_provider.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/scripts/start_services.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/conftest.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_auth.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_compile.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_errors.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_infer.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_integration_gpu.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_rate_limit.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/tests/test_storage.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/vllm_models/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/vllm_models/gpt2_lora_patch.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/vllm_models/paw_compiler.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/vllm_models/prepare_checkpoint.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/vllm_models/register.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_1spec.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_all_caching.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_apple_count.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_batch_pilot.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_compile.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_e2e.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_execute.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_nspecs.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_one_vs_two_step.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_onnx_correctness.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_onnx_hf_model.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_onnx_hf_with_images.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_paw_format.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/test_thinking_comparison.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/tests/test_offline_cache.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/tests/test_sdk.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/tests/test_sdk.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/train.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/DATASET_CHANGELOG.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/build_user_bench.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/dry_run_batch.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/filter_test_data.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/generate_specs.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/generate_specs_batch.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/incremental_merge.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/merge_and_upload.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/regenerate_outputs_batch.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/synthesize_data.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/synthesize_data_batch.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/filter_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/filter_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/pairs_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/pairs_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/specs_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/specs_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/specs_user_freeform.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/verify_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates/verify_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/filter_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/filter_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/pairs_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/pairs_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/specs_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/specs_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/verify_system.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/templates_old/verify_user.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/data_generation/verify_test_data.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/datasets/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/datasets/jsonl_text_pairs.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/loops/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/training/loops/prefix_tuning_sft.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/ttt.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/upload_model.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/upload_onnx_to_huggingface.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/upload_onnx_to_huggingface_with_token.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/utils.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/HANDOFF.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/config.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/main.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/middleware/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/middleware/rate_limit.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/models.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/auth_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/case_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/compiler_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/gpt_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/hub_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/image_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/interpreter_service.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/services/sql_manager.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/utils/__init__.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/utils/image_placeholders.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/app/utils/program_hash.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/clear_db.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/clear_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/data/programs.db +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/env_example.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/example_images/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/get_data_examples.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/requirements.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/run_server.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_analytics_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_auth_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_cache_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_cases_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_database.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_database_simple.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_db.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_example_images.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/setup_hub_tables.sql +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/backend/test_compilation_cache.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/e2e/helpers.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/e2e/smoke.spec.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/eslint.config.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/package-lock.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/package.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/playwright.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/postcss.config.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/apple-touch-icon.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/browser-worker.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/favicon-16x16.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/favicon-32x32.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/paw-192.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/paw-512.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/paw.svg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/react-test.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/test.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/public/vite.svg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/scripts/deploy.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/App.css +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/assets/react.svg +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/CompileSection.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/DocsPage.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/Footer.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/LandingPage.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/TermsPage.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/components/TestSection.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/index.css +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/src/main.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/tailwind.config.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/tsconfig.app.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/tsconfig.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/tsconfig.node.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/frontend/vite.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/nginx-paw.conf +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/nginx.conf +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/setup_mysql.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/start.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/test_setup.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-app/ttt.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/.gitignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/LICENSE +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/e2e/server.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/e2e/start-server.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/e2e/test-page.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/loader.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/__tests__/prompt.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/examples/basic.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/package-lock.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/package.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/playwright.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/serve.py +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/src/index.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/src/loader.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/src/runtime.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/src/types.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/test-standalone.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/tsconfig.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/vitest.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.git +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.gitignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.gitmodules +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.npmignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/.prettierignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/CMakeLists.txt +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/LICENCE +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/README_banner.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/assets/screenshot_0.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/actions.hpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/glue.hpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/cpp/wllama.cpp +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/basic/index.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/embeddings/index.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/.gitignore +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/README.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/index.html +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/package-lock.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/package.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/index.css +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/guides/intro-v2.md +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/index.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/package-lock.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/package.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/build_worker.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/http_server.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/scripts/post_build.sh +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/cache-manager.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/glue/glue.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/glue/messages.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/index.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/mjs.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/model-manager.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/model-manager.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/utils.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/utils.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/wllama.test.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/wllama.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/worker.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/tsconfig.build.json +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/tsup.config.ts +0 -0
- {programasweights-0.2.2.dev1 → programasweights-0.2.4}/web-sdk/wllama/vitest.config.ts +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# ProgramAsWeights (PAW)
|
|
2
|
+
|
|
3
|
+
PAW compiles natural language specifications into tiny neural functions that run locally. Each function takes a single text input and returns a single text output. Use it when you need fuzzy text processing — classification, extraction, format repair, search, triage — that regex can't handle but a full LLM is overkill for.
|
|
4
|
+
|
|
5
|
+
Website: https://programasweights.com
|
|
6
|
+
Docs: https://programasweights.readthedocs.io
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
import programasweights as paw
|
|
18
|
+
|
|
19
|
+
# Use a pre-compiled function (downloads once, runs locally forever)
|
|
20
|
+
# "email-triage" is an official pre-compiled program (slug)
|
|
21
|
+
fn = paw.function("email-triage")
|
|
22
|
+
fn("Urgent: server is down!") # "immediate"
|
|
23
|
+
fn("Newsletter: spring picnic") # "wait"
|
|
24
|
+
|
|
25
|
+
# Compile your own from a description
|
|
26
|
+
program = paw.compile(
|
|
27
|
+
"Fix malformed JSON: repair missing quotes and trailing commas",
|
|
28
|
+
compiler="paw-4b-qwen3-0.6b" # or "paw-4b-gpt2" for smaller/faster
|
|
29
|
+
)
|
|
30
|
+
fn = paw.function(program.id)
|
|
31
|
+
fn("{name: 'Alice',}") # '{"name": "Alice"}'
|
|
32
|
+
|
|
33
|
+
# Or compile and load in one step
|
|
34
|
+
fn = paw.compile_and_load("Classify sentiment as positive or negative")
|
|
35
|
+
fn("I love this!") # "positive"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Two Compilers
|
|
39
|
+
|
|
40
|
+
| | Standard (Qwen3 0.6B) | Compact (GPT-2 124M) |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| Compiler name | `paw-4b-qwen3-0.6b` | `paw-4b-gpt2` |
|
|
43
|
+
| Accuracy | Higher | Lower |
|
|
44
|
+
| Base model size | 594 MB | 105 MB |
|
|
45
|
+
| Program size | ~22 MB | ~5 MB |
|
|
46
|
+
| Inference speed | ~90ms (server) | ~50ms (server) |
|
|
47
|
+
| Runs in browser | No | Yes (must use this compiler) |
|
|
48
|
+
|
|
49
|
+
Default is Standard. Use Compact for smaller files or browser deployment.
|
|
50
|
+
|
|
51
|
+
## When to Use PAW
|
|
52
|
+
|
|
53
|
+
- **Fuzzy search** — typo-tolerant matching, semantic search, near-duplicate detection
|
|
54
|
+
- **Format repair** — fix broken JSON, normalize dates, repair malformed inputs
|
|
55
|
+
- **Classification** — sentiment, urgency, categories defined in your own words
|
|
56
|
+
- **Extraction** — emails, names, dates from messy unstructured text
|
|
57
|
+
- **Log triage** — extract errors from verbose output, filter noise
|
|
58
|
+
- **Intent routing** — map user descriptions to the closest URL, menu item, or setting
|
|
59
|
+
- **Agent preprocessing** — parse tool calls, validate outputs, route tasks
|
|
60
|
+
|
|
61
|
+
## Writing Good Specs
|
|
62
|
+
|
|
63
|
+
Description + examples. Use `Input: ... Output: ...` format.
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
fn = paw.compile_and_load("""
|
|
67
|
+
Classify user intent. Return ONLY one of: search, create, delete, other.
|
|
68
|
+
|
|
69
|
+
Input: Find the latest report
|
|
70
|
+
Output: search
|
|
71
|
+
|
|
72
|
+
Input: Make a new folder
|
|
73
|
+
Output: create
|
|
74
|
+
|
|
75
|
+
Input: Remove old backups
|
|
76
|
+
Output: delete
|
|
77
|
+
""")
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- State output constraints explicitly if any: "Return ONLY one of: X, Y, Z"
|
|
81
|
+
- Each function is stateless: one input, one output. No conversation history.
|
|
82
|
+
- Write a few test inputs with expected outputs, then try different spec phrasings and pick the one that passes the most.
|
|
83
|
+
|
|
84
|
+
## Browser / JavaScript SDK
|
|
85
|
+
|
|
86
|
+
Programs compiled with `paw-4b-gpt2` run in the browser via WebAssembly.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm install @programasweights/web
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
import paw from '@programasweights/web';
|
|
94
|
+
|
|
95
|
+
const fn = await paw.function('programasweights/email-triage');
|
|
96
|
+
const result = await fn('Urgent: server is down!');
|
|
97
|
+
// result: "immediate"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Authentication (optional)
|
|
101
|
+
|
|
102
|
+
Sign in for higher rate limits and program naming. Everything works without it.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
export PAW_API_KEY=paw_sk_...
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Generate API keys at https://programasweights.com/settings.
|
|
109
|
+
|
|
110
|
+
| | Anonymous | Authenticated |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| Compile rate limit | 20/hr | 60/hr |
|
|
113
|
+
| Name programs (slugs) | No | Yes |
|
|
114
|
+
|
|
115
|
+
## CLI
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
paw compile --spec "Classify sentiment" --json
|
|
119
|
+
paw run --program <program_id> --input "I love this!" --json
|
|
120
|
+
paw info <program_id> # show program metadata
|
|
121
|
+
paw rename <program_id> my-slug # name a program (requires auth)
|
|
122
|
+
paw login # save API key
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`--json` gives structured output. Example:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{"program_id": "a6b454023d41ac9ca845", "slug": null, "status": "ready", "error": null, "timings": {"total_ms": 2800}}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Full API Reference
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
program = paw.compile(
|
|
135
|
+
spec, # natural language specification (str)
|
|
136
|
+
compiler="paw-4b-qwen3-0.6b",
|
|
137
|
+
slug=None, # URL-safe handle (requires auth)
|
|
138
|
+
public=True, # list on public hub
|
|
139
|
+
)
|
|
140
|
+
# Returns: Program(id, slug, status, timings, error)
|
|
141
|
+
|
|
142
|
+
fn = paw.function(program) # accepts Program object, hash ID, or slug
|
|
143
|
+
fn = paw.function("a6b454023d41ac9ca845")
|
|
144
|
+
fn = paw.function("da03/my-classifier")
|
|
145
|
+
|
|
146
|
+
result: str = fn(input_text: str, max_tokens=512, temperature=0.0)
|
|
147
|
+
|
|
148
|
+
fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
|
|
149
|
+
|
|
150
|
+
programs = paw.list_programs(sort="recent", per_page=20) # requires auth
|
|
151
|
+
|
|
152
|
+
paw.login()
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Common Errors
|
|
156
|
+
|
|
157
|
+
| Error | Cause | Fix |
|
|
158
|
+
|-------|-------|-----|
|
|
159
|
+
| `httpx.HTTPStatusError: 404` on download | Program still uploading to CDN | SDK retries automatically. If persistent, recompile. |
|
|
160
|
+
| `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) | Adjust spec length. |
|
|
161
|
+
| `httpx.HTTPStatusError: 429` | Rate limit exceeded | Wait, or sign in for higher limits. |
|
|
162
|
+
|
|
163
|
+
## Performance
|
|
164
|
+
|
|
165
|
+
- **First call** ~500ms (loads base model). Subsequent calls ~50-90ms.
|
|
166
|
+
- **Base model shared** across functions. Each LoRA adapter adds ~22 MB.
|
|
167
|
+
- **Thread-safe** and **blocking**.
|
|
168
|
+
- **Cache**: `~/.cache/programasweights/`. Override with `PAW_CACHE_DIR`.
|
|
169
|
+
- **Offline** after first download.
|
|
170
|
+
|
|
171
|
+
## Browse Programs
|
|
172
|
+
|
|
173
|
+
https://programasweights.com/hub
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.2 (2026-03-19)
|
|
4
|
+
|
|
5
|
+
- Add `paw.compile_and_load()` convenience method (compile + load in one call)
|
|
6
|
+
- `paw.function()` now accepts a `Program` object directly (not just string ID)
|
|
7
|
+
- Add `paw.list_programs()` for authenticated users to list their programs
|
|
8
|
+
- Suppress `llama.cpp` stderr noise by default; use `verbose=True` to enable
|
|
9
|
+
- Rewritten AGENTS.md with spec-writing tips, full API reference, common errors, and performance notes
|
|
10
|
+
|
|
3
11
|
## 0.2.0 (2026-04-01)
|
|
4
12
|
|
|
5
13
|
First public release.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: programasweights
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Compile natural language specifications into neural programs that run locally via llama.cpp.
|
|
5
5
|
Project-URL: Homepage, https://programasweights.com
|
|
6
6
|
Project-URL: Repository, https://github.com/programasweights/programasweights-python
|
|
@@ -58,6 +58,10 @@ program = paw.compile(
|
|
|
58
58
|
)
|
|
59
59
|
fn = paw.function(program.slug) # or paw.function(program.id)
|
|
60
60
|
fn("{name: 'Alice',}") # '{"name": "Alice"}'
|
|
61
|
+
|
|
62
|
+
# Or compile and load in one step
|
|
63
|
+
fn = paw.compile_and_load("Classify sentiment as positive or negative")
|
|
64
|
+
fn("I love this!") # "positive"
|
|
61
65
|
```
|
|
62
66
|
|
|
63
67
|
## Two Compilers
|
|
@@ -28,6 +28,10 @@ program = paw.compile(
|
|
|
28
28
|
)
|
|
29
29
|
fn = paw.function(program.slug) # or paw.function(program.id)
|
|
30
30
|
fn("{name: 'Alice',}") # '{"name": "Alice"}'
|
|
31
|
+
|
|
32
|
+
# Or compile and load in one step
|
|
33
|
+
fn = paw.compile_and_load("Classify sentiment as positive or negative")
|
|
34
|
+
fn("I love this!") # "positive"
|
|
31
35
|
```
|
|
32
36
|
|
|
33
37
|
## Two Compilers
|
|
@@ -24,7 +24,7 @@ Loads a compiled program and returns a callable. Downloads the program and base
|
|
|
24
24
|
|
|
25
25
|
| Parameter | Description |
|
|
26
26
|
|-----------|-------------|
|
|
27
|
-
| `name_or_id` | Program hash ID (e.g. `a6b454023d41ac9ca845`), slug (e.g. `da03/my-classifier`), or official shorthand (e.g. `email-triage`). |
|
|
27
|
+
| `name_or_id` | A `Program` object, hash ID (e.g. `a6b454023d41ac9ca845`), slug (e.g. `da03/my-classifier`), or official shorthand (e.g. `email-triage`). |
|
|
28
28
|
| `n_ctx` | Context length for the local runtime (default `2048`). |
|
|
29
29
|
| `n_gpu_layers` | GPU layers to offload (`0` = CPU-only, `-1` = all). Set `PAW_GPU_LAYERS` env var as default. |
|
|
30
30
|
| `verbose` | Enable verbose logging (default `False`). |
|
|
@@ -76,6 +76,36 @@ Compiles a natural language spec on the server. Returns a `Program` object.
|
|
|
76
76
|
| `timings` | Timing metadata from the server. |
|
|
77
77
|
| `error` | Error message when compilation fails. |
|
|
78
78
|
|
|
79
|
+
## `paw.compile_and_load`
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b", **kwargs)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Convenience method that compiles a spec and immediately loads the result for local inference. Equivalent to `paw.function(paw.compile(spec, ...).id)`. Returns a callable.
|
|
86
|
+
|
|
87
|
+
Accepts all the same parameters as `paw.compile`.
|
|
88
|
+
|
|
89
|
+
## `paw.list_programs`
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
result = paw.list_programs(sort="recent", per_page=20)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Returns a dict with the authenticated user's compiled programs. Requires authentication.
|
|
96
|
+
|
|
97
|
+
| Parameter | Description |
|
|
98
|
+
|-----------|-------------|
|
|
99
|
+
| `sort` | Sort order: `"recent"` (default), `"votes"`, `"recommended"`. |
|
|
100
|
+
| `per_page` | Number of results per page (default `20`). |
|
|
101
|
+
|
|
102
|
+
**Return value** -- dict:
|
|
103
|
+
|
|
104
|
+
| Key | Description |
|
|
105
|
+
|-----|-------------|
|
|
106
|
+
| `programs` | List of program dicts with `id`, `spec`, `name`, `compiler`, etc. |
|
|
107
|
+
| `total` | Total number of programs. |
|
|
108
|
+
|
|
79
109
|
## `paw.login`
|
|
80
110
|
|
|
81
111
|
```python
|
|
@@ -21,8 +21,9 @@ API reference:
|
|
|
21
21
|
paw.api_url Server URL (default: https://programasweights.com)
|
|
22
22
|
paw.api_key API key (set via login() or PAW_API_KEY env var)
|
|
23
23
|
"""
|
|
24
|
+
from __future__ import annotations
|
|
24
25
|
|
|
25
|
-
__version__ = "0.2.
|
|
26
|
+
__version__ = "0.2.4"
|
|
26
27
|
|
|
27
28
|
from .config import get_api_url, get_api_key, set_api_key
|
|
28
29
|
|
|
@@ -108,25 +108,38 @@ class PAWClient:
|
|
|
108
108
|
"""Download a .paw bundle to the local cache.
|
|
109
109
|
|
|
110
110
|
Returns the path to the extracted program directory.
|
|
111
|
-
|
|
111
|
+
Handles 202 Accepted (assets still generating) and 302 redirects (HF CDN).
|
|
112
112
|
"""
|
|
113
113
|
program_dir = config.get_programs_dir() / program_id
|
|
114
114
|
if (program_dir / "prompt_template.txt").exists():
|
|
115
115
|
return program_dir
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
max_wait = 30
|
|
118
|
+
elapsed = 0
|
|
119
|
+
resp = None
|
|
120
|
+
while elapsed < max_wait:
|
|
119
121
|
resp = httpx.get(
|
|
120
122
|
f"{self._api_url}/api/v1/programs/{program_id}/download",
|
|
121
123
|
headers=self._headers(),
|
|
122
124
|
timeout=60.0,
|
|
123
125
|
follow_redirects=True,
|
|
124
126
|
)
|
|
125
|
-
if resp.status_code ==
|
|
127
|
+
if resp.status_code == 202:
|
|
128
|
+
retry_after = int(resp.headers.get("Retry-After", "3"))
|
|
129
|
+
time.sleep(retry_after)
|
|
130
|
+
elapsed += retry_after
|
|
131
|
+
continue
|
|
132
|
+
if resp.status_code == 404 and elapsed < max_wait - 3:
|
|
126
133
|
time.sleep(3)
|
|
134
|
+
elapsed += 3
|
|
127
135
|
continue
|
|
128
136
|
resp.raise_for_status()
|
|
129
137
|
break
|
|
138
|
+
else:
|
|
139
|
+
raise RuntimeError(
|
|
140
|
+
f"Program {program_id} assets not ready after {max_wait}s. "
|
|
141
|
+
"The program may still be generating. Try again shortly."
|
|
142
|
+
)
|
|
130
143
|
|
|
131
144
|
program_dir.mkdir(parents=True, exist_ok=True)
|
|
132
145
|
paw_path = program_dir / f"{program_id}.paw"
|
|
@@ -67,24 +67,24 @@ class PawFunction:
|
|
|
67
67
|
n_gpu_layers=n_gpu_layers,
|
|
68
68
|
verbose=verbose,
|
|
69
69
|
)
|
|
70
|
+
|
|
71
|
+
adapter_path = program_dir / "adapter.gguf"
|
|
72
|
+
if adapter_path.exists():
|
|
73
|
+
self._adapter = llama_cpp.llama_adapter_lora_init(
|
|
74
|
+
self._llm.model, str(adapter_path).encode("utf-8"),
|
|
75
|
+
)
|
|
76
|
+
if self._adapter:
|
|
77
|
+
llama_cpp.llama_set_adapter_lora(self._llm.ctx, self._adapter, 1.0)
|
|
78
|
+
else:
|
|
79
|
+
raise RuntimeError(f"Failed to load LoRA adapter: {adapter_path}")
|
|
80
|
+
else:
|
|
81
|
+
self._adapter = None
|
|
70
82
|
finally:
|
|
71
83
|
if not verbose:
|
|
72
84
|
_os.dup2(_old_stderr, _stderr_fd)
|
|
73
85
|
_os.close(_devnull)
|
|
74
86
|
_os.close(_old_stderr)
|
|
75
87
|
|
|
76
|
-
adapter_path = program_dir / "adapter.gguf"
|
|
77
|
-
if adapter_path.exists():
|
|
78
|
-
self._adapter = llama_cpp.llama_adapter_lora_init(
|
|
79
|
-
self._llm.model, str(adapter_path).encode("utf-8"),
|
|
80
|
-
)
|
|
81
|
-
if self._adapter:
|
|
82
|
-
llama_cpp.llama_set_adapter_lora(self._llm.ctx, self._adapter, 1.0)
|
|
83
|
-
else:
|
|
84
|
-
raise RuntimeError(f"Failed to load LoRA adapter: {adapter_path}")
|
|
85
|
-
else:
|
|
86
|
-
self._adapter = None
|
|
87
|
-
|
|
88
88
|
placeholder = "{INPUT_PLACEHOLDER}"
|
|
89
89
|
self._use_special = interpreter not in ("gpt2",)
|
|
90
90
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "programasweights"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.4"
|
|
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"
|
|
@@ -50,10 +50,9 @@ class Settings(BaseSettings):
|
|
|
50
50
|
LOG_LEVEL: str = "INFO"
|
|
51
51
|
LOG_FORMAT: str = "json"
|
|
52
52
|
|
|
53
|
-
# Server
|
|
53
|
+
# Server (single process: sessions and compile jobs are in-memory)
|
|
54
54
|
HOST: str = "0.0.0.0"
|
|
55
55
|
PORT: int = 8000
|
|
56
|
-
WORKERS: int = 4
|
|
57
56
|
|
|
58
57
|
# CORS
|
|
59
58
|
CORS_ORIGINS: list[str] = [
|
|
@@ -16,6 +16,8 @@ from redis.asyncio import Redis
|
|
|
16
16
|
|
|
17
17
|
from api.config import get_settings
|
|
18
18
|
from api.logging_config import configure_logging, request_id_ctx
|
|
19
|
+
from collections import deque
|
|
20
|
+
|
|
19
21
|
from api.middleware.rate_limit import (
|
|
20
22
|
RateLimiter,
|
|
21
23
|
identifier_for_request,
|
|
@@ -29,6 +31,31 @@ gpu_semaphore = asyncio.Semaphore(1)
|
|
|
29
31
|
|
|
30
32
|
_RATE_LIMITED_PATHS = {"/api/v1/compile", "/api/v1/infer", "/api/v1/feedback"}
|
|
31
33
|
|
|
34
|
+
_FALLBACK_LIMITS = {"compile": 13000, "infer": 5700}
|
|
35
|
+
_FALLBACK_WINDOW = 3600
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class _FallbackLimiter:
|
|
39
|
+
"""In-memory global rate limiter used when Redis is unavailable."""
|
|
40
|
+
|
|
41
|
+
def __init__(self):
|
|
42
|
+
self._windows: dict[str, deque] = {
|
|
43
|
+
"compile": deque(),
|
|
44
|
+
"infer": deque(),
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
def check(self, endpoint: str) -> bool:
|
|
48
|
+
key = "compile" if "compile" in endpoint else "infer"
|
|
49
|
+
now = time.time()
|
|
50
|
+
window = self._windows[key]
|
|
51
|
+
cutoff = now - _FALLBACK_WINDOW
|
|
52
|
+
while window and window[0] < cutoff:
|
|
53
|
+
window.popleft()
|
|
54
|
+
if len(window) >= _FALLBACK_LIMITS[key]:
|
|
55
|
+
return False
|
|
56
|
+
window.append(now)
|
|
57
|
+
return True
|
|
58
|
+
|
|
32
59
|
|
|
33
60
|
def create_app() -> FastAPI:
|
|
34
61
|
settings = get_settings()
|
|
@@ -45,13 +72,13 @@ def create_app() -> FastAPI:
|
|
|
45
72
|
openapi_url="/api/openapi.json",
|
|
46
73
|
)
|
|
47
74
|
|
|
48
|
-
# Redis + rate limiter (attached to app state for access in routes)
|
|
49
75
|
redis_client: Redis | None = None
|
|
50
76
|
rate_limiter: RateLimiter | None = None
|
|
77
|
+
fallback_limiter: _FallbackLimiter | None = None
|
|
51
78
|
|
|
52
79
|
@app.on_event("startup")
|
|
53
80
|
async def startup_redis():
|
|
54
|
-
nonlocal redis_client, rate_limiter
|
|
81
|
+
nonlocal redis_client, rate_limiter, fallback_limiter
|
|
55
82
|
try:
|
|
56
83
|
redis_client = Redis.from_url(
|
|
57
84
|
settings.REDIS_URL, decode_responses=True, socket_connect_timeout=5,
|
|
@@ -60,11 +87,14 @@ def create_app() -> FastAPI:
|
|
|
60
87
|
rate_limiter = RateLimiter(redis_client)
|
|
61
88
|
app.state.redis = redis_client
|
|
62
89
|
app.state.rate_limiter = rate_limiter
|
|
90
|
+
app.state.redis_available = True
|
|
63
91
|
logger.info("redis_connected", url=settings.REDIS_URL)
|
|
64
92
|
except Exception:
|
|
65
|
-
logger.warning("redis_unavailable", url=settings.REDIS_URL)
|
|
93
|
+
logger.warning("redis_unavailable, using in-memory global fallback limiter", url=settings.REDIS_URL)
|
|
66
94
|
app.state.redis = None
|
|
67
95
|
app.state.rate_limiter = None
|
|
96
|
+
app.state.redis_available = False
|
|
97
|
+
fallback_limiter = _FallbackLimiter()
|
|
68
98
|
|
|
69
99
|
@app.on_event("shutdown")
|
|
70
100
|
async def shutdown_redis():
|
|
@@ -90,7 +120,23 @@ def create_app() -> FastAPI:
|
|
|
90
120
|
token = request_id_ctx.set(rid)
|
|
91
121
|
try:
|
|
92
122
|
# Rate limiting for /compile and /infer
|
|
93
|
-
if request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is not None:
|
|
123
|
+
if request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is None and fallback_limiter is not None:
|
|
124
|
+
endpoint = "compile" if "compile" in request.url.path else "infer"
|
|
125
|
+
if not fallback_limiter.check(endpoint):
|
|
126
|
+
logger.info("fallback_rate_limited", endpoint=endpoint)
|
|
127
|
+
return JSONResponse(
|
|
128
|
+
status_code=429,
|
|
129
|
+
content={
|
|
130
|
+
"error": "rate_limit_exceeded",
|
|
131
|
+
"message": "Server is busy. Please try again shortly.",
|
|
132
|
+
"request_id": rid,
|
|
133
|
+
},
|
|
134
|
+
headers={"Retry-After": "10"},
|
|
135
|
+
)
|
|
136
|
+
request.state.has_concurrent_lock = False
|
|
137
|
+
request.state.rate_limit_result = None
|
|
138
|
+
|
|
139
|
+
elif request.method == "POST" and request.url.path in _RATE_LIMITED_PATHS and rate_limiter is not None:
|
|
94
140
|
from api.dependencies import get_current_user
|
|
95
141
|
from api.models.database import get_db
|
|
96
142
|
|
|
@@ -132,7 +132,6 @@ async def github_callback(code: str, state: str, request: Request, db: AsyncSess
|
|
|
132
132
|
"email": email,
|
|
133
133
|
"avatar_url": avatar_url,
|
|
134
134
|
"tier": "github",
|
|
135
|
-
"github_access_token": access_token,
|
|
136
135
|
"created_at": time.time(),
|
|
137
136
|
}
|
|
138
137
|
_sessions[session_token] = user_info
|
|
@@ -4,7 +4,7 @@ Health check endpoint.
|
|
|
4
4
|
|
|
5
5
|
import time
|
|
6
6
|
|
|
7
|
-
from fastapi import APIRouter
|
|
7
|
+
from fastapi import APIRouter, Request
|
|
8
8
|
|
|
9
9
|
from api.models.schemas import HealthResponse
|
|
10
10
|
|
|
@@ -14,11 +14,16 @@ _start_time = time.time()
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@router.get("/health", response_model=HealthResponse)
|
|
17
|
-
async def health_check():
|
|
17
|
+
async def health_check(request: Request):
|
|
18
|
+
warnings = []
|
|
19
|
+
if not getattr(request.app.state, "redis_available", True):
|
|
20
|
+
warnings.append("redis_unavailable: using in-memory global rate limit fallback")
|
|
21
|
+
|
|
18
22
|
return HealthResponse(
|
|
19
|
-
status="healthy",
|
|
23
|
+
status="healthy" if not warnings else "degraded",
|
|
20
24
|
version="0.2.0",
|
|
21
25
|
gpu_services={},
|
|
22
26
|
queue_depth=0,
|
|
23
27
|
uptime_s=time.time() - _start_time,
|
|
28
|
+
warnings=warnings,
|
|
24
29
|
)
|
|
@@ -6,7 +6,7 @@ import re
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
8
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
9
|
-
from fastapi.responses import FileResponse, RedirectResponse
|
|
9
|
+
from fastapi.responses import FileResponse, JSONResponse, RedirectResponse
|
|
10
10
|
|
|
11
11
|
from api.config import get_settings
|
|
12
12
|
from sqlalchemy import func, select, or_
|
|
@@ -146,9 +146,10 @@ async def list_programs(
|
|
|
146
146
|
if search_term:
|
|
147
147
|
try:
|
|
148
148
|
from redis.asyncio import Redis as AsyncRedis
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
await
|
|
149
|
+
settings = get_settings()
|
|
150
|
+
_redis = AsyncRedis.from_url(settings.REDIS_URL, decode_responses=True, socket_connect_timeout=1)
|
|
151
|
+
queue_depth = int(await _redis.get("paw:compile_queue_depth") or 0)
|
|
152
|
+
await _redis.aclose()
|
|
152
153
|
server_idle = queue_depth <= 1
|
|
153
154
|
except Exception:
|
|
154
155
|
server_idle = True
|
|
@@ -413,6 +414,10 @@ async def download_program(
|
|
|
413
414
|
program.downloads = (program.downloads or 0) + 1
|
|
414
415
|
await db.commit()
|
|
415
416
|
|
|
417
|
+
if program.hf_url:
|
|
418
|
+
hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
|
|
419
|
+
return RedirectResponse(url=hf_url, status_code=302)
|
|
420
|
+
|
|
416
421
|
settings = get_settings()
|
|
417
422
|
local_paw = Path(settings.STORAGE_PATH) / program.id / f"{program.id}.paw"
|
|
418
423
|
if local_paw.exists():
|
|
@@ -422,8 +427,11 @@ async def download_program(
|
|
|
422
427
|
filename=f"{program.id}.paw",
|
|
423
428
|
)
|
|
424
429
|
|
|
425
|
-
|
|
426
|
-
|
|
430
|
+
return JSONResponse(
|
|
431
|
+
status_code=202,
|
|
432
|
+
content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
|
|
433
|
+
headers={"Retry-After": "3"},
|
|
434
|
+
)
|
|
427
435
|
|
|
428
436
|
|
|
429
437
|
ALLOWED_ASSETS = {"adapter.gguf", "prompt_template.txt", "prefix_cache.bin", "prefix_tokens.json"}
|
|
@@ -442,18 +450,25 @@ async def serve_program_asset(
|
|
|
442
450
|
if not program:
|
|
443
451
|
raise HTTPException(status_code=404, detail="Asset not found")
|
|
444
452
|
|
|
453
|
+
if program.hf_url:
|
|
454
|
+
hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}/{filename}"
|
|
455
|
+
return RedirectResponse(url=hf_url, status_code=302)
|
|
456
|
+
|
|
445
457
|
settings = get_settings()
|
|
446
458
|
asset_path = Path(settings.STORAGE_PATH) / program.id / filename
|
|
447
|
-
if
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
459
|
+
if asset_path.exists():
|
|
460
|
+
media_type = "application/octet-stream"
|
|
461
|
+
if filename.endswith(".txt"):
|
|
462
|
+
media_type = "text/plain"
|
|
463
|
+
elif filename.endswith(".json"):
|
|
464
|
+
media_type = "application/json"
|
|
465
|
+
return FileResponse(path=str(asset_path), media_type=media_type, filename=filename)
|
|
466
|
+
|
|
467
|
+
return JSONResponse(
|
|
468
|
+
status_code=202,
|
|
469
|
+
content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
|
|
470
|
+
headers={"Retry-After": "3"},
|
|
471
|
+
)
|
|
457
472
|
|
|
458
473
|
|
|
459
474
|
# --- Update program ---
|
{programasweights-0.2.2.dev1 → programasweights-0.2.4}/server/api/services/compile_provider.py
RENAMED
|
@@ -509,10 +509,22 @@ class CompileProvider:
|
|
|
509
509
|
upload_all_to_hf, program_id, adapter_dir,
|
|
510
510
|
self.interpreter, paw_path,
|
|
511
511
|
)
|
|
512
|
-
logger.info("hf_upload_done", program_id=program_id, hf_url=hf_url)
|
|
513
512
|
|
|
514
|
-
|
|
515
|
-
|
|
513
|
+
if hf_url:
|
|
514
|
+
from api.models.database import get_engine
|
|
515
|
+
from sqlalchemy import text as sa_text
|
|
516
|
+
engine = get_engine()
|
|
517
|
+
with engine.connect() as conn:
|
|
518
|
+
conn.execute(
|
|
519
|
+
sa_text("UPDATE programs SET hf_url = :url WHERE id = :pid"),
|
|
520
|
+
{"url": hf_url, "pid": program_id},
|
|
521
|
+
)
|
|
522
|
+
conn.commit()
|
|
523
|
+
logger.info("hf_upload_done", program_id=program_id, hf_url=hf_url)
|
|
524
|
+
await asyncio.sleep(300)
|
|
525
|
+
cleanup_after_upload(adapter_dir, program_id)
|
|
526
|
+
else:
|
|
527
|
+
logger.warning("hf_upload_failed_keeping_local", program_id=program_id)
|
|
516
528
|
except Exception:
|
|
517
529
|
logger.exception("background_failed", program_id=program_id)
|
|
518
530
|
|