programasweights 0.2.1__tar.gz → 0.2.2__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.2/.cursor/rules/sdk-publishing.mdc +53 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.cursor/rules/vllm-deployment.mdc +17 -5
- programasweights-0.2.2/AGENTS.md +194 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/CHANGELOG.md +8 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/PKG-INFO +5 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/PYPI_README.md +4 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/python-sdk.md +31 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/__init__.py +59 -3
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/client.py +25 -7
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime_llamacpp.py +19 -6
- {programasweights-0.2.1 → programasweights-0.2.2}/pyproject.toml +1 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/programs.py +10 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/compile_provider.py +26 -5
- {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_sdk.py +82 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_sdk.sh +1 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/full.spec.ts +12 -14
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AgentsPage.tsx +89 -10
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AuthorPage.tsx +10 -5
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/Footer.tsx +1 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubProgramPage.tsx +14 -20
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/LandingPage.tsx +4 -2
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/MainInterface.tsx +52 -36
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/NavigationHelper.tsx +1 -1
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ProfilePage.tsx +27 -20
- programasweights-0.2.1/AGENTS.md +0 -129
- programasweights-0.2.1/web-app/frontend/test-results/.last-run.json +0 -4
- {programasweights-0.2.1 → programasweights-0.2.2}/.git +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.github/workflows/web-sdk.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.gitignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.gitmodules +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.hatch_build.toml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/.readthedocs.yaml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/1apple.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/1apple2.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/2apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/2apples2.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/3apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/3apples2.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/479400.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/4apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/4apples2.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/4apples3.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/4apples4.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/5apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/6apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/8apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/9apples.jpg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/FLOW_SUMMARY.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/LICENSE +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/MANIFEST.in +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/ONNX_MIGRATION_PLAN.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/PREFIX_TOKENS_DESIGN.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/TRUNCATION_CHANGES.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/USE_CASES_AND_IDEAS.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/VERIFICATION_USAGE.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/analyze_dataset.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/analyze_lengths.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/code_prompt.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/evaluate_openai_python_code_baseline.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/openai_batch_request.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/prepare_alchemist_data.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/prepare_var_bench_data.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/python_code_sandbox.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evaluation_var_bench.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_evaluation.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_request.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/baselines/script_evalution_statistics.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/benchmark_pytorch_vs_onnx.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/benchmark_user_experience.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/check_dataset.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/combine_datasets.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/compare_datasets.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/compare_old_vs_regen.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/convert_paw_to_svg.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/create_favicon_sizes.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/create_visualization_from_log.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/create_vqa_dataset.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/debug_cache.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/debug_eos_example.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/002-q4_0-adapter-format.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/003-single-spec-field.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/004-compiler-naming.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/005-vllm-hidden-states.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/adr/006-email-api-key-auth.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/advanced/adrs.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/advanced/architecture.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/cli.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/api-reference/rest-api.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/architecture.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/first-program.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/installation.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/getting-started/naming-programs.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/browser-inference.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/how-it-works.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/local-inference.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/guide/writing-good-specs.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/browsing-programs.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/feedback-cases.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/hub/publishing-programs.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/index.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/docs/requirements.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/estimate_data_gen_cost.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/eval.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/examples/flask_app.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/examples/jupyter_notebook.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/examples/langchain_integration.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/examples/replace_openai.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/export_to_onnx.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/extract_models.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/inspect_data_dirs.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/latest_export.csv +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/log.train.81920.morecategories.extraprefix +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/merge_datasets.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/mkdocs.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/paw.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/paw.svg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/process_im2latex_dataset.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/artifacts.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/cache.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/cli.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/compiler/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/compiler/dummy.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/config.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/convert_peft_to_paw.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/paw_format.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/interpreter.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights/runtime/interpreter_onnx.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/compiler/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/lora_format.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/runtime/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/runtime/interpreter_lora.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_compile_and_run.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_lora_format.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/tests/test_training.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/train_lora.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/training/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/run_eval.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/run_training.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/scripts/filter_table_by_length.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/.env.example +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/env.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/script.py.mako +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/001_initial_schema.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/alembic.ini +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/config.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/dependencies.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/logging_config.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/main.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/middleware/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/middleware/rate_limit.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/database.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/orm.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/models/schemas.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/auth.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/compile.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/feedback.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/health.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/infer.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/routes/models_info.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/auto_tag_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/auto_title_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/compile_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/infer_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/search_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/api/services/storage_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/benchmark_api.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/handcrafted_specs.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/last_benchmark_results.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/last_stress_results.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/benchmarks/stress_test.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/compiler_registry.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/provider_configs/gpt2.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/provider_configs/qwen3-0.6b.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/requirements.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/ablation_search.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_hf_browser_assets.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_hf_safetensors.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_interestingness.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_tags.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/backfill_titles.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/benchmark_gpt2.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/cleanup_storage.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/eval_search.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/evict_cold_programs.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/generate_prefix_cache.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/launch_gpt2_compiler.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/launch_qwen3_compiler.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/patch_vllm.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/restart.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_all.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_gpt2_services.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_provider.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/scripts/start_services.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/conftest.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_auth.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_compile.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_errors.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_infer.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_integration_gpu.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_rate_limit.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/tests/test_storage.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/gpt2_lora_patch.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/paw_compiler.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/prepare_checkpoint.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/server/vllm_models/register.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_1spec.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_all_caching.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_apple_count.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_batch_pilot.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_compile.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_e2e.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_execute.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_nspecs.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_one_vs_two_step.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_correctness.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_hf_model.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_onnx_hf_with_images.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_paw_format.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/test_thinking_comparison.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/tests/test_offline_cache.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/train.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/DATASET_CHANGELOG.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/build_user_bench.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/dry_run_batch.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/filter_test_data.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/generate_specs.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/generate_specs_batch.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/incremental_merge.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/merge_and_upload.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/regenerate_outputs_batch.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/synthesize_data.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/synthesize_data_batch.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/filter_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/filter_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/pairs_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/pairs_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_freeform.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/verify_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates/verify_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/filter_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/filter_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/pairs_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/pairs_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/verify_system.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/templates_old/verify_user.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/data_generation/verify_test_data.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/datasets/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/datasets/jsonl_text_pairs.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/loops/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/training/loops/prefix_tuning_sft.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/ttt.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/upload_model.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/upload_onnx_to_huggingface.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/upload_onnx_to_huggingface_with_token.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/utils.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/HANDOFF.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/config.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/main.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/middleware/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/middleware/rate_limit.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/models.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/auth_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/case_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/compiler_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/gpt_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/hub_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/image_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/interpreter_service.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/services/sql_manager.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/templates/gpt_test_generation.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/__init__.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/image_placeholders.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/app/utils/program_hash.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/clear_db.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/clear_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/data/programs.db +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/env_example.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/example_images/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/get_data_examples.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/requirements.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/run_server.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_analytics_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_auth_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_cache_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_cases_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_database.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_database_simple.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_db.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_example_images.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/setup_hub_tables.sql +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/backend/test_compilation_cache.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/helpers.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/e2e/smoke.spec.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/eslint.config.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/index.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/package-lock.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/package.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/playwright.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/postcss.config.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/apple-touch-icon.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/browser-worker.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/favicon-16x16.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/favicon-32x32.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw-192.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw-512.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/paw.svg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/react-test.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/test.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/public/vite.svg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/scripts/deploy.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/App.css +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/App.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/assets/react.svg +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/AboutPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/BrowserPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CasesSection.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/CompileSection.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/DocsPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ExamplesInput.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/Header.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/ModelSelector.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/SettingsPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/TermsPage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/components/TestSection.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/index.css +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/main.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/types/index.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/src/utils/api.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tailwind.config.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.app.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/tsconfig.node.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/frontend/vite.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/nginx-paw.conf +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/nginx.conf +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/setup_mysql.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/start.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/test_setup.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-app/ttt.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/.gitignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/LICENSE +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/server.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/start-server.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/e2e/test-page.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/loader.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/__tests__/prompt.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/examples/basic.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/package-lock.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/package.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/playwright.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/serve.py +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/index.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/loader.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/runtime.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/src/types.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/test-standalone.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/tsconfig.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/vitest.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.git +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.gitignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.gitmodules +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.npmignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/.prettierignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/CMakeLists.txt +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/LICENCE +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/README_banner.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/assets/screenshot_0.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/actions.hpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/glue.hpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/cpp/wllama.cpp +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/basic/index.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/embeddings/index.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/.gitignore +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/README.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/index.html +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/package-lock.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/package.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/index.css +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/guides/intro-v2.md +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/index.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/package-lock.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/package.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/build_worker.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/http_server.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/scripts/post_build.sh +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/cache-manager.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/glue/glue.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/glue/messages.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/index.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/mjs.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/model-manager.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/model-manager.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/utils.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/utils.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wllama.test.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/wllama.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/worker.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/tsconfig.build.json +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/tsup.config.ts +0 -0
- {programasweights-0.2.1 → programasweights-0.2.2}/web-sdk/wllama/vitest.config.ts +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SDK publishing workflow for Python and JavaScript packages
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDK Publishing Rules
|
|
7
|
+
|
|
8
|
+
## Public repos are the source of truth for published packages
|
|
9
|
+
|
|
10
|
+
- **Python SDK**: https://github.com/programasweights/programasweights-python
|
|
11
|
+
- **JS SDK**: https://github.com/programasweights/programasweights-js
|
|
12
|
+
|
|
13
|
+
## Release workflow
|
|
14
|
+
|
|
15
|
+
1. Make changes in the public repo (feature branch -> PR -> main)
|
|
16
|
+
2. Bump version in `pyproject.toml` / `__init__.py` (Python) or `package.json` (JS)
|
|
17
|
+
3. Run tests: `bash tests/test_sdk.sh` (Python) or `npm test && npx playwright test` (JS)
|
|
18
|
+
4. Tag: `git tag -a vX.Y.Z -m "Release vX.Y.Z"`
|
|
19
|
+
5. Build and publish from the tagged commit:
|
|
20
|
+
- Python: `python -m build && twine upload dist/*`
|
|
21
|
+
- JS: `npm publish --access public`
|
|
22
|
+
6. Push tag: `git push origin vX.Y.Z`
|
|
23
|
+
7. Verify: compare published package with repo (`pip download` / `npm pack` then diff)
|
|
24
|
+
|
|
25
|
+
## Never do
|
|
26
|
+
|
|
27
|
+
- Do NOT publish from the monorepo (`paw_discrete/programasweights/`) -- always use the public repos
|
|
28
|
+
- Do NOT publish without tagging first
|
|
29
|
+
- Do NOT forget to sync the monorepo after publishing (if changes originated there)
|
|
30
|
+
- Do NOT use rsync/scp for code deployment -- always git push + git pull
|
|
31
|
+
- Do NOT deploy to server without committing to git first
|
|
32
|
+
|
|
33
|
+
## All repos are under github.com/programasweights/
|
|
34
|
+
|
|
35
|
+
- `website` -- monorepo deployed to server (git push website main)
|
|
36
|
+
- `programasweights-python` -- Python SDK (published to PyPI)
|
|
37
|
+
- `programasweights-js` -- JS SDK (published to npm)
|
|
38
|
+
|
|
39
|
+
## Wheel index
|
|
40
|
+
|
|
41
|
+
Pre-built `llama-cpp-python` wheels are hosted at `pypi.programasweights.com`.
|
|
42
|
+
Install command: `pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/`
|
|
43
|
+
If `llama-cpp-python` releases a new version, rebuild wheels on our servers and update the index.
|
|
44
|
+
|
|
45
|
+
## PyPI credentials
|
|
46
|
+
|
|
47
|
+
- Token in `~/.bashrc` on server 31.22.104.226 as `PYPI_API_TOKEN`
|
|
48
|
+
- Upload via: `twine upload --username __token__ --password $PYPI_API_TOKEN`
|
|
49
|
+
|
|
50
|
+
## npm credentials
|
|
51
|
+
|
|
52
|
+
- Token in `~/.bashrc` on server 31.22.104.226 as `NPM_TOKEN`
|
|
53
|
+
- Granular access token with publish permissions for `@programasweights` scope
|
|
@@ -13,14 +13,26 @@ All server code lives at `/root/paw-website/` (git clone of `programasweights/we
|
|
|
13
13
|
|
|
14
14
|
**Deployment (the ONLY way to update code):**
|
|
15
15
|
```bash
|
|
16
|
-
# Local: push
|
|
17
|
-
git push
|
|
16
|
+
# Local: commit and push to the website repo
|
|
17
|
+
git push website main
|
|
18
18
|
|
|
19
|
-
# Server: pull
|
|
20
|
-
cd /root/paw-website && git
|
|
21
|
-
cd
|
|
19
|
+
# Server: pull, build frontend, restart backend
|
|
20
|
+
cd /root/paw-website && git fetch origin && git reset --hard origin/main
|
|
21
|
+
cd web-app/frontend && npm run build && rsync -a --delete dist/ /data/paw-frontend/
|
|
22
|
+
cd /root/paw-website/server && bash scripts/restart.sh
|
|
22
23
|
```
|
|
23
24
|
|
|
25
|
+
**IMPORTANT:** `dist/` is in `.gitignore`. Frontend must be built on the server after pull.
|
|
26
|
+
|
|
27
|
+
**Repos (all under github.com/programasweights/):**
|
|
28
|
+
- `website` -- monorepo (server, frontend, web-sdk, docs). Deployed to server.
|
|
29
|
+
- `programasweights-python` -- Python SDK source. Published to PyPI.
|
|
30
|
+
- `programasweights-js` -- JS SDK source. Published to npm.
|
|
31
|
+
|
|
32
|
+
**Local remote setup:**
|
|
33
|
+
- `origin` = `yuntian-group/programasweights` (private monorepo)
|
|
34
|
+
- `website` = `programasweights/website` (public, deployed to server)
|
|
35
|
+
|
|
24
36
|
**NEVER use rsync or scp for code.** Model weights use scp between servers.
|
|
25
37
|
|
|
26
38
|
### GPU Layout
|
|
@@ -0,0 +1,194 @@
|
|
|
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 PAW 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 when you need 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
|
+
The spec is the most important input. It defines what your function does.
|
|
64
|
+
|
|
65
|
+
**Structure:** Description + examples. Use `Input: ... Output: ...` format.
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
fn = paw.compile_and_load("""
|
|
69
|
+
Classify user intent. Return ONLY one of: search, create, delete, other.
|
|
70
|
+
|
|
71
|
+
Input: Find the latest report
|
|
72
|
+
Output: search
|
|
73
|
+
|
|
74
|
+
Input: Make a new folder
|
|
75
|
+
Output: create
|
|
76
|
+
|
|
77
|
+
Input: Remove old backups
|
|
78
|
+
Output: delete
|
|
79
|
+
|
|
80
|
+
Input: What time is it
|
|
81
|
+
Output: other
|
|
82
|
+
""")
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Tips:**
|
|
86
|
+
- **5-10 examples** is the sweet spot. More helps for ambiguous tasks.
|
|
87
|
+
- For classifiers, add **negative examples** ("Input: ... Output: NONE") to reduce false positives.
|
|
88
|
+
- Explicitly state output constraints: "Return ONLY one of: X, Y, Z"
|
|
89
|
+
- Spec + examples must fit in ~2048 tokens total (~1500 words).
|
|
90
|
+
- Each function is stateless: one input, one output. No conversation history.
|
|
91
|
+
|
|
92
|
+
## Browser / JavaScript SDK
|
|
93
|
+
|
|
94
|
+
Programs compiled with `paw-4b-gpt2` also run entirely in the browser via WebAssembly.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm install @programasweights/web
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
import paw from '@programasweights/web';
|
|
102
|
+
|
|
103
|
+
const fn = await paw.function('programasweights/email-triage');
|
|
104
|
+
const result = await fn('Urgent: server is down!');
|
|
105
|
+
// result: "immediate"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Authentication (optional)
|
|
109
|
+
|
|
110
|
+
Everything works without authentication. Sign in for higher rate limits and program naming.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
export PAW_API_KEY=paw_sk_...
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Generate API keys at https://programasweights.com/settings.
|
|
117
|
+
|
|
118
|
+
| | Anonymous | Authenticated |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| Compile rate limit | 20/hr | 60/hr |
|
|
121
|
+
| Name programs (slugs) | No | Yes |
|
|
122
|
+
|
|
123
|
+
## CLI
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
paw compile --spec "Classify sentiment" --json
|
|
127
|
+
paw run --program <program_id> --input "I love this!" --json
|
|
128
|
+
paw info <program_id> # show program metadata
|
|
129
|
+
paw rename <program_id> my-slug # name a program (requires auth)
|
|
130
|
+
paw login # save API key
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`--json` gives structured output. Example:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{"program_id": "a6b454023d41ac9ca845", "slug": null, "status": "ready", "timings": {"total_ms": 2800}}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Full API Reference
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
# Compile a spec into a neural program
|
|
143
|
+
program = paw.compile(
|
|
144
|
+
spec, # natural language specification (str)
|
|
145
|
+
compiler="paw-4b-qwen3-0.6b", # compiler model name
|
|
146
|
+
slug=None, # optional: URL-safe handle (requires auth)
|
|
147
|
+
public=True, # list on public hub
|
|
148
|
+
)
|
|
149
|
+
# Returns: Program(id: str, slug: str|None, status: str, timings: dict, error: str|None)
|
|
150
|
+
|
|
151
|
+
# Load a program for local inference
|
|
152
|
+
fn = paw.function(program) # accepts Program object, hash ID, or slug
|
|
153
|
+
fn = paw.function("a6b454023d41ac9ca845") # by hash
|
|
154
|
+
fn = paw.function("da03/my-classifier") # by slug
|
|
155
|
+
|
|
156
|
+
# The callable signature:
|
|
157
|
+
result: str = fn(input_text: str, max_tokens=512, temperature=0.0)
|
|
158
|
+
|
|
159
|
+
# Compile and load in one step
|
|
160
|
+
fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
|
|
161
|
+
|
|
162
|
+
# List your programs (requires auth)
|
|
163
|
+
programs = paw.list_programs(sort="recent", per_page=20)
|
|
164
|
+
|
|
165
|
+
# Save API key
|
|
166
|
+
paw.login()
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Common Errors
|
|
170
|
+
|
|
171
|
+
| Error | Cause | Fix |
|
|
172
|
+
|-------|-------|-----|
|
|
173
|
+
| `httpx.HTTPStatusError: 404` on download | Program still uploading to CDN | SDK retries automatically. If persistent, recompile. |
|
|
174
|
+
| `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) or too long | Adjust spec length. |
|
|
175
|
+
| `httpx.HTTPStatusError: 429` | Rate limit exceeded | Wait, or sign in for higher limits. |
|
|
176
|
+
| `FileNotFoundError: No prompt_template.txt` | Program not cached and download failed | Check network; the program may not exist. |
|
|
177
|
+
|
|
178
|
+
## Performance Notes
|
|
179
|
+
|
|
180
|
+
- **First call**: ~500ms (loads base model into memory). Subsequent calls: ~50-90ms.
|
|
181
|
+
- **Base model shared**: Multiple functions share one 594 MB model in memory. Each LoRA adapter adds ~22 MB.
|
|
182
|
+
- **Thread-safe**: Same function can be called from multiple threads.
|
|
183
|
+
- **Blocking**: Each `fn()` call blocks until inference completes.
|
|
184
|
+
- **Cache location**: `~/.cache/programasweights/`. Set `PAW_CACHE_DIR` to override.
|
|
185
|
+
- **Offline**: After first download, functions work without internet.
|
|
186
|
+
|
|
187
|
+
## Browse Programs
|
|
188
|
+
|
|
189
|
+
https://programasweights.com/hub
|
|
190
|
+
|
|
191
|
+
## Add PAW to Your Project
|
|
192
|
+
|
|
193
|
+
Copy this file into your project as AGENTS.md:
|
|
194
|
+
https://programasweights.com/agents
|
|
@@ -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.2
|
|
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
|
|
@@ -22,7 +22,7 @@ API reference:
|
|
|
22
22
|
paw.api_key API key (set via login() or PAW_API_KEY env var)
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
|
-
__version__ = "0.2.
|
|
25
|
+
__version__ = "0.2.2"
|
|
26
26
|
|
|
27
27
|
from .config import get_api_url, get_api_key, set_api_key
|
|
28
28
|
|
|
@@ -72,7 +72,7 @@ def compile(
|
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
def function(
|
|
75
|
-
program_id
|
|
75
|
+
program_id,
|
|
76
76
|
n_ctx: int = 2048,
|
|
77
77
|
n_gpu_layers: int | None = None,
|
|
78
78
|
verbose: bool = False,
|
|
@@ -83,7 +83,7 @@ def function(
|
|
|
83
83
|
Subsequent calls use the local cache.
|
|
84
84
|
|
|
85
85
|
Args:
|
|
86
|
-
program_id:
|
|
86
|
+
program_id: Program ID (str), slug, or a ``Program`` object from compile().
|
|
87
87
|
n_ctx: Context window size for llama.cpp.
|
|
88
88
|
n_gpu_layers: GPU layers (-1 = all, 0 = CPU only). Defaults to CPU.
|
|
89
89
|
Set ``PAW_GPU_LAYERS`` env var or pass explicitly for GPU acceleration.
|
|
@@ -96,7 +96,12 @@ def function(
|
|
|
96
96
|
>>> fn = paw.function("email-triage")
|
|
97
97
|
>>> fn("Urgent: the server is down!")
|
|
98
98
|
'immediate'
|
|
99
|
+
|
|
100
|
+
>>> program = paw.compile("Classify sentiment")
|
|
101
|
+
>>> fn = paw.function(program) # accepts Program object directly
|
|
99
102
|
"""
|
|
103
|
+
if hasattr(program_id, 'id'):
|
|
104
|
+
program_id = program_id.slug or program_id.id
|
|
100
105
|
import os
|
|
101
106
|
import re
|
|
102
107
|
from .cache import is_program_cached, get_program_dir, get_cached_slug, save_slug_mapping
|
|
@@ -175,9 +180,60 @@ def login(key: str | None = None):
|
|
|
175
180
|
print("You can also set the PAW_API_KEY environment variable.")
|
|
176
181
|
|
|
177
182
|
|
|
183
|
+
def compile_and_load(
|
|
184
|
+
spec: str,
|
|
185
|
+
compiler: str = "paw-4b-qwen3-0.6b",
|
|
186
|
+
n_ctx: int = 2048,
|
|
187
|
+
n_gpu_layers: int | None = None,
|
|
188
|
+
verbose: bool = False,
|
|
189
|
+
**compile_kwargs,
|
|
190
|
+
):
|
|
191
|
+
"""Compile a spec and immediately load it for local inference.
|
|
192
|
+
|
|
193
|
+
Convenience wrapper that combines ``paw.compile()`` and ``paw.function()``
|
|
194
|
+
into a single call.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
spec: Natural language specification.
|
|
198
|
+
compiler: Compiler model name.
|
|
199
|
+
n_ctx: Context window size for llama.cpp.
|
|
200
|
+
n_gpu_layers: GPU layers (-1 = all, 0 = CPU only).
|
|
201
|
+
verbose: Print llama.cpp debug output.
|
|
202
|
+
**compile_kwargs: Additional args passed to compile (slug, public, etc.)
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
A callable ``PawFunction``.
|
|
206
|
+
|
|
207
|
+
Example:
|
|
208
|
+
>>> fn = paw.compile_and_load("Classify sentiment as positive or negative")
|
|
209
|
+
>>> fn("I love this!")
|
|
210
|
+
'positive'
|
|
211
|
+
"""
|
|
212
|
+
program = compile(spec, compiler=compiler, **compile_kwargs)
|
|
213
|
+
return function(program, n_ctx=n_ctx, n_gpu_layers=n_gpu_layers, verbose=verbose)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def list_programs(sort: str = "recent", per_page: int = 20, page: int = 1) -> dict:
|
|
217
|
+
"""List your compiled programs. Requires authentication (PAW_API_KEY).
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Dict with ``programs`` (list), ``total``, ``page``, ``per_page``.
|
|
221
|
+
|
|
222
|
+
Example:
|
|
223
|
+
>>> programs = paw.list_programs()
|
|
224
|
+
>>> for p in programs["programs"]:
|
|
225
|
+
... print(p["id"], p["name"])
|
|
226
|
+
"""
|
|
227
|
+
from .client import PAWClient
|
|
228
|
+
client = PAWClient(api_url=api_url, api_key=api_key)
|
|
229
|
+
return client.list_programs(sort=sort, per_page=per_page, page=page)
|
|
230
|
+
|
|
231
|
+
|
|
178
232
|
__all__ = [
|
|
179
233
|
"compile",
|
|
234
|
+
"compile_and_load",
|
|
180
235
|
"function",
|
|
236
|
+
"list_programs",
|
|
181
237
|
"login",
|
|
182
238
|
"api_url",
|
|
183
239
|
"api_key",
|
|
@@ -108,18 +108,25 @@ 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
|
+
Retries on 404 since freshly compiled programs may still be uploading.
|
|
111
112
|
"""
|
|
112
113
|
program_dir = config.get_programs_dir() / program_id
|
|
113
114
|
if (program_dir / "prompt_template.txt").exists():
|
|
114
115
|
return program_dir
|
|
115
116
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
max_retries = 10
|
|
118
|
+
for attempt in range(max_retries):
|
|
119
|
+
resp = httpx.get(
|
|
120
|
+
f"{self._api_url}/api/v1/programs/{program_id}/download",
|
|
121
|
+
headers=self._headers(),
|
|
122
|
+
timeout=60.0,
|
|
123
|
+
follow_redirects=True,
|
|
124
|
+
)
|
|
125
|
+
if resp.status_code == 404 and attempt < max_retries - 1:
|
|
126
|
+
time.sleep(3)
|
|
127
|
+
continue
|
|
128
|
+
resp.raise_for_status()
|
|
129
|
+
break
|
|
123
130
|
|
|
124
131
|
program_dir.mkdir(parents=True, exist_ok=True)
|
|
125
132
|
paw_path = program_dir / f"{program_id}.paw"
|
|
@@ -140,6 +147,17 @@ class PAWClient:
|
|
|
140
147
|
resp.raise_for_status()
|
|
141
148
|
return resp.json()
|
|
142
149
|
|
|
150
|
+
def list_programs(self, sort: str = "recent", per_page: int = 20, page: int = 1) -> dict:
|
|
151
|
+
"""List programs for the authenticated user."""
|
|
152
|
+
resp = httpx.get(
|
|
153
|
+
f"{self._api_url}/api/v1/programs",
|
|
154
|
+
params={"mine": "true", "sort": sort, "per_page": per_page, "page": page},
|
|
155
|
+
headers=self._headers(),
|
|
156
|
+
timeout=10.0,
|
|
157
|
+
)
|
|
158
|
+
resp.raise_for_status()
|
|
159
|
+
return resp.json()
|
|
160
|
+
|
|
143
161
|
|
|
144
162
|
_default_client: PAWClient | None = None
|
|
145
163
|
|
|
@@ -53,12 +53,25 @@ class PawFunction:
|
|
|
53
53
|
interpreter = self._meta.get("interpreter", "Qwen/Qwen3-0.6B")
|
|
54
54
|
base_model_path = cache.get_base_model_path(interpreter)
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
if not verbose:
|
|
57
|
+
import os as _os, sys as _sys
|
|
58
|
+
_stderr_fd = _sys.stderr.fileno()
|
|
59
|
+
_devnull = _os.open(_os.devnull, _os.O_WRONLY)
|
|
60
|
+
_old_stderr = _os.dup(_stderr_fd)
|
|
61
|
+
_os.dup2(_devnull, _stderr_fd)
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
self._llm = Llama(
|
|
65
|
+
model_path=str(base_model_path),
|
|
66
|
+
n_ctx=n_ctx,
|
|
67
|
+
n_gpu_layers=n_gpu_layers,
|
|
68
|
+
verbose=verbose,
|
|
69
|
+
)
|
|
70
|
+
finally:
|
|
71
|
+
if not verbose:
|
|
72
|
+
_os.dup2(_old_stderr, _stderr_fd)
|
|
73
|
+
_os.close(_devnull)
|
|
74
|
+
_os.close(_old_stderr)
|
|
62
75
|
|
|
63
76
|
adapter_path = program_dir / "adapter.gguf"
|
|
64
77
|
if adapter_path.exists():
|
|
@@ -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.2"
|
|
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"
|
|
@@ -292,6 +292,7 @@ async def list_programs(
|
|
|
292
292
|
"compiler_snapshot": p.compiler_snapshot,
|
|
293
293
|
"interpreter": p.interpreter,
|
|
294
294
|
"author": author_map[p.author_id].username if p.author_id and p.author_id in author_map else "Anonymous",
|
|
295
|
+
"author_display_name": author_map[p.author_id].display_name if p.author_id and p.author_id in author_map else None,
|
|
295
296
|
"author_avatar": author_map[p.author_id].avatar_url if p.author_id and p.author_id in author_map else None,
|
|
296
297
|
"author_id": p.author_id,
|
|
297
298
|
"tags": p.tags or [],
|
|
@@ -412,6 +413,15 @@ async def download_program(
|
|
|
412
413
|
program.downloads = (program.downloads or 0) + 1
|
|
413
414
|
await db.commit()
|
|
414
415
|
|
|
416
|
+
settings = get_settings()
|
|
417
|
+
local_paw = Path(settings.STORAGE_PATH) / program.id / f"{program.id}.paw"
|
|
418
|
+
if local_paw.exists():
|
|
419
|
+
return FileResponse(
|
|
420
|
+
path=str(local_paw),
|
|
421
|
+
media_type="application/octet-stream",
|
|
422
|
+
filename=f"{program.id}.paw",
|
|
423
|
+
)
|
|
424
|
+
|
|
415
425
|
hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
|
|
416
426
|
return RedirectResponse(url=hf_url, status_code=302)
|
|
417
427
|
|
|
@@ -145,7 +145,7 @@ class CompileProvider:
|
|
|
145
145
|
self.ref_tok = AutoTokenizer.from_pretrained(ref_model, trust_remote_code=True)
|
|
146
146
|
|
|
147
147
|
self.compiler_fingerprint = self._compute_fingerprint()
|
|
148
|
-
self.
|
|
148
|
+
self._redis_url = os.environ.get("REDIS_URL", "redis://localhost:6379/0")
|
|
149
149
|
self._compiler_model_name: str | None = None
|
|
150
150
|
|
|
151
151
|
logger.info("compile_provider_ready",
|
|
@@ -216,9 +216,20 @@ class CompileProvider:
|
|
|
216
216
|
cache_key = hashlib.sha256(
|
|
217
217
|
f"{rendered}|max_tokens={max_tokens}|temp=0".encode()
|
|
218
218
|
).hexdigest()[:32]
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
219
|
+
|
|
220
|
+
try:
|
|
221
|
+
import asyncpg
|
|
222
|
+
db_url = os.environ.get("DATABASE_URL", "postgresql://paw:pawdev2026@localhost:5432/paw")
|
|
223
|
+
conn = await asyncpg.connect(db_url)
|
|
224
|
+
row = await conn.fetchrow(
|
|
225
|
+
"SELECT pseudo_program FROM pseudo_cache WHERE cache_key = $1", cache_key
|
|
226
|
+
)
|
|
227
|
+
await conn.close()
|
|
228
|
+
if row:
|
|
229
|
+
logger.info("pseudo_gen_cache_hit", spec_len=len(spec))
|
|
230
|
+
return row["pseudo_program"], prompt_tokens
|
|
231
|
+
except Exception:
|
|
232
|
+
pass
|
|
222
233
|
|
|
223
234
|
async with httpx.AsyncClient(timeout=60.0) as client:
|
|
224
235
|
resp = await client.post(
|
|
@@ -233,7 +244,17 @@ class CompileProvider:
|
|
|
233
244
|
resp.raise_for_status()
|
|
234
245
|
data = resp.json()
|
|
235
246
|
pseudo = data["choices"][0]["text"].strip()
|
|
236
|
-
|
|
247
|
+
|
|
248
|
+
try:
|
|
249
|
+
conn = await asyncpg.connect(db_url)
|
|
250
|
+
await conn.execute(
|
|
251
|
+
"INSERT INTO pseudo_cache (cache_key, pseudo_program) VALUES ($1, $2) ON CONFLICT (cache_key) DO NOTHING",
|
|
252
|
+
cache_key, pseudo
|
|
253
|
+
)
|
|
254
|
+
await conn.close()
|
|
255
|
+
except Exception:
|
|
256
|
+
pass
|
|
257
|
+
|
|
237
258
|
return pseudo, prompt_tokens
|
|
238
259
|
|
|
239
260
|
def _build_compiler_input(self, spec: str, pseudo_program: str) -> str:
|