programasweights 0.2.3__tar.gz → 0.2.5__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.3 → programasweights-0.2.5}/AGENTS.md +22 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/CHANGELOG.md +11 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/PKG-INFO +1 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/python-sdk.md +4 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/rest-api.md +10 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/__init__.py +1 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/client.py +17 -4
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime_llamacpp.py +27 -16
- {programasweights-0.2.3 → programasweights-0.2.5}/pyproject.toml +1 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/main.py +7 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/auth.py +13 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/compile.py +21 -8
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/health.py +3 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/infer.py +2 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/programs.py +30 -14
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/compile_provider.py +15 -3
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/App.tsx +15 -1
- programasweights-0.2.5/web-app/frontend/src/components/AgentsPage.tsx +92 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/BrowserPage.tsx +74 -20
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/DocsPage.tsx +1 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/Footer.tsx +21 -3
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/Header.tsx +14 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubProgramPage.tsx +3 -3
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/LandingPage.tsx +1 -1
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/MainInterface.tsx +2 -2
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/SettingsPage.tsx +1 -1
- programasweights-0.2.3/web-app/backend/app/__init__.py +0 -1
- programasweights-0.2.3/web-app/backend/app/config.py +0 -71
- programasweights-0.2.3/web-app/backend/app/main.py +0 -1463
- programasweights-0.2.3/web-app/backend/app/middleware/__init__.py +0 -1
- programasweights-0.2.3/web-app/backend/app/middleware/rate_limit.py +0 -58
- programasweights-0.2.3/web-app/backend/app/models.py +0 -123
- programasweights-0.2.3/web-app/backend/app/services/__init__.py +0 -13
- programasweights-0.2.3/web-app/backend/app/services/auth_service.py +0 -172
- programasweights-0.2.3/web-app/backend/app/services/case_service.py +0 -201
- programasweights-0.2.3/web-app/backend/app/services/compiler_service.py +0 -202
- programasweights-0.2.3/web-app/backend/app/services/gpt_service.py +0 -166
- programasweights-0.2.3/web-app/backend/app/services/hub_service.py +0 -291
- programasweights-0.2.3/web-app/backend/app/services/image_service.py +0 -127
- programasweights-0.2.3/web-app/backend/app/services/interpreter_service.py +0 -179
- programasweights-0.2.3/web-app/backend/app/services/sql_manager.py +0 -1324
- programasweights-0.2.3/web-app/backend/app/templates/gpt_test_generation.txt +0 -42
- programasweights-0.2.3/web-app/backend/app/utils/__init__.py +0 -1
- programasweights-0.2.3/web-app/backend/app/utils/image_placeholders.py +0 -147
- programasweights-0.2.3/web-app/backend/app/utils/program_hash.py +0 -211
- programasweights-0.2.3/web-app/backend/clear_db.sh +0 -62
- programasweights-0.2.3/web-app/backend/clear_tables.sql +0 -29
- programasweights-0.2.3/web-app/backend/data/programs.db +0 -0
- programasweights-0.2.3/web-app/backend/env_example.txt +0 -24
- programasweights-0.2.3/web-app/backend/example_images/README.md +0 -140
- programasweights-0.2.3/web-app/backend/get_data_examples.py +0 -55
- programasweights-0.2.3/web-app/backend/requirements.txt +0 -10
- programasweights-0.2.3/web-app/backend/run_server.py +0 -27
- programasweights-0.2.3/web-app/backend/setup_analytics_tables.sql +0 -16
- programasweights-0.2.3/web-app/backend/setup_auth_tables.sql +0 -30
- programasweights-0.2.3/web-app/backend/setup_cache_tables.sql +0 -73
- programasweights-0.2.3/web-app/backend/setup_cases_tables.sql +0 -36
- programasweights-0.2.3/web-app/backend/setup_database.sql +0 -248
- programasweights-0.2.3/web-app/backend/setup_database_simple.sql +0 -113
- programasweights-0.2.3/web-app/backend/setup_db.sh +0 -52
- programasweights-0.2.3/web-app/backend/setup_example_images.py +0 -166
- programasweights-0.2.3/web-app/backend/setup_hub_tables.sql +0 -74
- programasweights-0.2.3/web-app/backend/test_compilation_cache.py +0 -85
- programasweights-0.2.3/web-app/frontend/src/components/AgentsPage.tsx +0 -268
- programasweights-0.2.3/web-app/frontend/src/components/CompileButtonWithConfig.tsx +0 -115
- programasweights-0.2.3/web-app/frontend/src/components/CompileSection.tsx +0 -74
- programasweights-0.2.3/web-app/frontend/src/components/ExamplesInput.tsx +0 -74
- programasweights-0.2.3/web-app/frontend/src/components/ModelSelector.tsx +0 -55
- programasweights-0.2.3/web-app/frontend/src/components/TestSection.tsx +0 -122
- {programasweights-0.2.3 → programasweights-0.2.5}/.cursor/rules/sdk-publishing.mdc +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.cursor/rules/vllm-deployment.mdc +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.git +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.github/workflows/web-sdk.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.gitignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.gitmodules +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.hatch_build.toml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/.readthedocs.yaml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/1apple.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/1apple2.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/2apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/2apples2.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/3apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/3apples2.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/479400.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/4apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/4apples2.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/4apples3.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/4apples4.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/5apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/6apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/8apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/9apples.jpg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/FLOW_SUMMARY.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/LICENSE +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/MANIFEST.in +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/ONNX_MIGRATION_PLAN.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/PREFIX_TOKENS_DESIGN.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/PYPI_README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/TRUNCATION_CHANGES.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/USE_CASES_AND_IDEAS.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/VERIFICATION_USAGE.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/analyze_dataset.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/analyze_lengths.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/code_prompt.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/evaluate_openai_python_code_baseline.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/openai_batch_request.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/prepare_alchemist_data.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/prepare_var_bench_data.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/python_code_sandbox.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evaluation_var_bench.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_evaluation.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_request.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/baselines/script_evalution_statistics.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/benchmark_pytorch_vs_onnx.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/benchmark_user_experience.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/check_dataset.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/combine_datasets.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/compare_datasets.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/compare_old_vs_regen.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/convert_paw_to_svg.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/create_favicon_sizes.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/create_visualization_from_log.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/create_vqa_dataset.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/debug_cache.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/debug_eos_example.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/001-llama-cpp-over-pytorch.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/002-q4_0-adapter-format.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/003-single-spec-field.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/004-compiler-naming.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/005-vllm-hidden-states.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/adr/006-email-api-key-auth.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/advanced/adrs.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/advanced/architecture.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/api-reference/cli.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/architecture.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/first-program.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/installation.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/getting-started/naming-programs.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/browser-inference.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/how-it-works.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/local-inference.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/guide/writing-good-specs.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/browsing-programs.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/feedback-cases.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/hub/publishing-programs.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/index.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/docs/requirements.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/estimate_data_gen_cost.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/eval.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/examples/flask_app.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/examples/jupyter_notebook.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/examples/langchain_integration.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/examples/replace_openai.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/export_to_onnx.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/extract_models.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/inspect_data_dirs.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/latest_export.csv +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/log.train.81920.morecategories.extraprefix +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/main_no_spec_direct_ans_mix_continuous_sampleref_shorterprompt_vllm.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/merge_datasets.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/mkdocs.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/paw.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/paw.svg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/process_im2latex_dataset.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/artifacts.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/cache.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/cli.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/compiler/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/compiler/dummy.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/config.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/convert_peft_to_paw.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/paw_format.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/interpreter.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights/runtime/interpreter_onnx.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/compiler/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/lora_format.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/runtime/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/runtime/interpreter_lora.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_compile_and_run.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_lora_format.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/tests/test_training.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/train_lora.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/training/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/programasweights_lora/training/loops/lora_tuning_sft.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/run_eval.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/run_training.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/scripts/filter_table_by_length.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/.env.example +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/env.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/script.py.mako +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/001_initial_schema.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/002_namespaced_aliases_hf_url.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/003_fulltext_search_ranking.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic/versions/004_fix_alias_slug_constraint.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/alembic.ini +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/config.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/dependencies.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/logging_config.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/middleware/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/middleware/rate_limit.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/database.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/orm.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/models/schemas.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/feedback.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/routes/models_info.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/auto_tag_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/auto_title_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/compile_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/infer_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/search_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/api/services/storage_service.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/benchmark_api.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/handcrafted_specs.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/last_benchmark_results.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/last_stress_results.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/benchmarks/stress_test.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/compiler_registry.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/provider_configs/gpt2.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/provider_configs/qwen3-0.6b.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/requirements.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/ab_test_hf_vs_vllm.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/ablation_search.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_hf_browser_assets.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_hf_safetensors.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_interestingness.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_tags.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/backfill_titles.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/benchmark_gpt2.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/cleanup_storage.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/eval_search.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/evict_cold_programs.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/generate_prefix_cache.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/launch_gpt2_compiler.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/launch_qwen3_compiler.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/patch_vllm.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/restart.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_all.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_gpt2_services.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_provider.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/scripts/start_services.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/conftest.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_auth.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_compile.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_errors.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_infer.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_integration_gpu.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_rate_limit.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/tests/test_storage.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/gpt2_lora_patch.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/paw_compiler.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/prepare_checkpoint.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/server/vllm_models/register.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.rollout_ppl.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.em_es.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.ppl.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/stage2_firstpromptqwen_512_e1_generate_lora_e2grpo_overfit_one_debug.reward_plot.train_gt_logprob.reward.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_1spec.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_all_caching.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_apple_count.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_batch_pilot.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_compile.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_e2e.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_execute.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_nspecs.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_one_vs_two_step.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_correctness.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_hf_model.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_onnx_hf_with_images.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_paw_format.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/test_thinking_comparison.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_offline_cache.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_sdk.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/tests/test_sdk.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/train.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/train_no_spec_direct_ans_mix_continuous_sampleref_trainonly_shorterprompt_withregularizer_generate_lora.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/DATASET_CHANGELOG.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/VERIFICATION_PIPELINE.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/build_user_bench.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/dry_run_batch.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/filter_test_data.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/generate_specs.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/generate_specs_batch.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/incremental_merge.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/merge_and_upload.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/regenerate_outputs_batch.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/synthesize_data.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/synthesize_data_batch.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/filter_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/filter_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/pairs_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/pairs_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_freeform.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/verify_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates/verify_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/filter_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/filter_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/pairs_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/pairs_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_freeform.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_freeform_with_examples.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/specs_user_with_examples.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/verify_system.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/templates_old/verify_user.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/data_generation/verify_test_data.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/datasets/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/datasets/jsonl_text_pairs.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/loops/__init__.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/training/loops/prefix_tuning_sft.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/ttt.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/upload_model.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/upload_onnx_to_huggingface.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/upload_onnx_to_huggingface_with_token.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/utils.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/HANDOFF.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/full.spec.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/helpers.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/e2e/smoke.spec.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/eslint.config.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/index.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/package-lock.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/package.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/playwright.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/postcss.config.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/apple-touch-icon.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/browser-worker.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/favicon-16x16.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/favicon-32x32.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw-192.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw-512.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/paw.svg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/react-test.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/test.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/public/vite.svg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/scripts/deploy.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/App.css +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/assets/react.svg +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/AboutPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/AuthorPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/CasesSection.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/HubUploadPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/NavigationHelper.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/PrivacyPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/ProfilePage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/SpecSuggestions.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/components/TermsPage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/contexts/AuthContext.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/index.css +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/main.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/types/index.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/src/utils/api.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tailwind.config.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/test-results/.last-run.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.app.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/tsconfig.node.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/frontend/vite.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/nginx-paw.conf +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/nginx.conf +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/setup_mysql.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/start.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/test_setup.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-app/ttt.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/.gitignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/LICENSE +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/browser.spec.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/server.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/start-server.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/e2e/test-page.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/loader.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/__tests__/prompt.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/examples/basic.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/package-lock.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/package.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/playwright.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/serve.py +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/index.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/loader.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/runtime.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/src/types.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/test-standalone.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/tsconfig.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/vitest.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.git +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/build-hf-space.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/ci.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/generate-docs.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.github/workflows/verify-generated-code.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.gitignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.gitmodules +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.npmignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/.prettierignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/CMakeLists.txt +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/LICENCE +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/README_banner.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/assets/screenshot_0.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/actions.hpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/generate_glue_prototype.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/glue.hpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wcommon.cpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wcommon.h +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wlog.cpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wlog.h +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wsampling.cpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/helpers/wsampling.h +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/test_glue.cpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/cpp/wllama.cpp +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/basic/index.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/embeddings/index.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/.eslintrc.cjs +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/.gitignore +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/README.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/index.html +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/package-lock.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/package.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/postcss.config.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/public/favicon.ico +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/public/wllama.png +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/App.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ChatScreen.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/GuideScreen.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/LogScreen.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/MarkdownMessage.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ModelScreen.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/Navbar.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/ScreenWrapper.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/components/Sidebar.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/index.css +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/main.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/benchmark.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/custom-models.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/displayed-model.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/messages.context.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/nl2br.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/types.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/use-interval-when.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/utils.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/utils/wllama.context.tsx +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/src/vite-env.d.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tailwind.config.cjs +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.app.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/tsconfig.node.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/examples/main/vite.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/guides/intro-v2.md +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/index.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/package-lock.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/package.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_hf_space.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_wasm.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/build_worker.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/docker-compose.yml +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/generate_wasm_from_cdn.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/http_server.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/scripts/post_build.sh +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/cache-manager.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/glue/glue.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/glue/messages.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/index.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/mjs.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/model-manager.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/model-manager.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/multi-thread/wllama.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/multi-thread/wllama.wasm +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/single-thread/wllama.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/single-thread/wllama.wasm +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/utils.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/utils.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wasm-from-cdn.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wllama.test.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/wllama.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/worker.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/generated.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/llama-cpp.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/src/workers-code/opfs-utils.js +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/tsconfig.build.json +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/tsup.config.ts +0 -0
- {programasweights-0.2.3 → programasweights-0.2.5}/web-sdk/wllama/vitest.config.ts +0 -0
|
@@ -81,6 +81,21 @@ Output: delete
|
|
|
81
81
|
- Each function is stateless: one input, one output. No conversation history.
|
|
82
82
|
- Write a few test inputs with expected outputs, then try different spec phrasings and pick the one that passes the most.
|
|
83
83
|
|
|
84
|
+
## Chaining Functions
|
|
85
|
+
|
|
86
|
+
Multiple PAW functions can be composed for multi-step tasks:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
classifier = paw.compile_and_load("Classify the bug type. Return ONLY one of: off-by-one, type-error, other")
|
|
90
|
+
fixer = paw.compile_and_load("Fix the bug described in the first line. Return only the corrected code.")
|
|
91
|
+
|
|
92
|
+
label = classifier(code_snippet)
|
|
93
|
+
if label != "other":
|
|
94
|
+
fix = fixer(f"{label}: {code_snippet}")
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Each function is independent -- chain them with regular Python logic.
|
|
98
|
+
|
|
84
99
|
## Browser / JavaScript SDK
|
|
85
100
|
|
|
86
101
|
Programs compiled with `paw-4b-gpt2` run in the browser via WebAssembly.
|
|
@@ -143,7 +158,7 @@ fn = paw.function(program) # accepts Program object, hash ID, or sl
|
|
|
143
158
|
fn = paw.function("a6b454023d41ac9ca845")
|
|
144
159
|
fn = paw.function("da03/my-classifier")
|
|
145
160
|
|
|
146
|
-
result: str = fn(input_text: str, max_tokens=
|
|
161
|
+
result: str = fn(input_text: str, max_tokens=None, temperature=0.0)
|
|
147
162
|
|
|
148
163
|
fn = paw.compile_and_load(spec, compiler="paw-4b-qwen3-0.6b")
|
|
149
164
|
|
|
@@ -156,7 +171,7 @@ paw.login()
|
|
|
156
171
|
|
|
157
172
|
| Error | Cause | Fix |
|
|
158
173
|
|-------|-------|-----|
|
|
159
|
-
| `
|
|
174
|
+
| `RuntimeError: assets not ready` on download | Program still generating after compile | SDK polls automatically for up to 30s. If persistent, recompile. |
|
|
160
175
|
| `httpx.HTTPStatusError: 422` on compile | Spec too short (<10 chars) | Adjust spec length. |
|
|
161
176
|
| `httpx.HTTPStatusError: 429` | Rate limit exceeded | Wait, or sign in for higher limits. |
|
|
162
177
|
|
|
@@ -168,6 +183,11 @@ paw.login()
|
|
|
168
183
|
- **Cache**: `~/.cache/programasweights/`. Override with `PAW_CACHE_DIR`.
|
|
169
184
|
- **Offline** after first download.
|
|
170
185
|
|
|
186
|
+
## Limits
|
|
187
|
+
|
|
188
|
+
- Spec + input + output share a ~2048 token context window, and inputs that exceed the context window will error out (not silently truncated).
|
|
189
|
+
- Setting `max_tokens` high is safe -- generation stops at EOS or when the window is full.
|
|
190
|
+
|
|
171
191
|
## Browse Programs
|
|
172
192
|
|
|
173
193
|
https://programasweights.com/hub
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.4 (2026-04-01)
|
|
4
|
+
|
|
5
|
+
- Download reliability: asset endpoints return 202 Retry-After when program is still generating, eliminating 404 race conditions
|
|
6
|
+
- Guard local cleanup on HF upload success: files persist locally if upload fails
|
|
7
|
+
- Stderr suppression now covers LoRA adapter loading (fixes CPU_REPACK warnings on 0.2.3)
|
|
8
|
+
- Browser: fix LoRA switching bug (free old adapter + clear KV before loading new program)
|
|
9
|
+
|
|
10
|
+
## 0.2.3 (2026-04-01)
|
|
11
|
+
|
|
12
|
+
- Python 3.9 compatibility fix (`from __future__ import annotations`)
|
|
13
|
+
|
|
3
14
|
## 0.2.2 (2026-03-19)
|
|
4
15
|
|
|
5
16
|
- Add `paw.compile_and_load()` convenience method (compile + load in one call)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: programasweights
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
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
|
|
@@ -32,15 +32,17 @@ Loads a compiled program and returns a callable. Downloads the program and base
|
|
|
32
32
|
The returned callable:
|
|
33
33
|
|
|
34
34
|
```python
|
|
35
|
-
output: str = fn(input_text, max_tokens=
|
|
35
|
+
output: str = fn(input_text, max_tokens=None, temperature=0.0)
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
| Parameter | Description |
|
|
39
39
|
|-----------|-------------|
|
|
40
40
|
| `input_text` | Input string for the program. |
|
|
41
|
-
| `max_tokens` | Maximum tokens to generate (default
|
|
41
|
+
| `max_tokens` | Maximum tokens to generate. `None` (default) = use all remaining context window. |
|
|
42
42
|
| `temperature` | Sampling temperature (default `0.0`). |
|
|
43
43
|
|
|
44
|
+
**Context limits:** Spec + input + output share a ~2048 token window. If input + output together exceed the window, generation will error. For short inputs, high `max_tokens` is safe (stops at EOS). For long inputs, set `max_tokens` conservatively.
|
|
45
|
+
|
|
44
46
|
## `paw.compile`
|
|
45
47
|
|
|
46
48
|
```python
|
|
@@ -34,7 +34,11 @@ Compile a specification.
|
|
|
34
34
|
| `name` | string | No | Display title. Auto-generated if omitted. |
|
|
35
35
|
| `tags` | string[] | No | Tags for discovery. |
|
|
36
36
|
|
|
37
|
-
**Response
|
|
37
|
+
**Response:**
|
|
38
|
+
- **202 Accepted** on success — JSON with `job_id`, `status`, `program_id`, `slug` (if created), `pseudo_program`, and `timings`
|
|
39
|
+
- **400** — unknown compiler
|
|
40
|
+
- **422** — spec too short, too long, or token limit exceeded
|
|
41
|
+
- **500** — compilation failed (server error)
|
|
38
42
|
|
|
39
43
|
### `POST /infer`
|
|
40
44
|
|
|
@@ -88,7 +92,11 @@ Owner-only fields: `public`, `name`, `tags`. Any authenticated user can set thei
|
|
|
88
92
|
|
|
89
93
|
### `GET /programs/{id_or_slug}/download`
|
|
90
94
|
|
|
91
|
-
|
|
95
|
+
Downloads the `.paw` artifact. Returns one of:
|
|
96
|
+
- **302** redirect to HuggingFace CDN (program already uploaded)
|
|
97
|
+
- **200** file from server (freshly compiled, not yet on HF)
|
|
98
|
+
- **202 Accepted** with `Retry-After` header (program assets still generating, retry after the indicated seconds)
|
|
99
|
+
- **404** if program not found or private and not owned by the requester
|
|
92
100
|
|
|
93
101
|
### `GET /programs/resolve/{slug}`
|
|
94
102
|
|
|
@@ -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"
|
|
@@ -37,6 +37,7 @@ class PawFunction:
|
|
|
37
37
|
program_dir = Path(program_dir)
|
|
38
38
|
self._program_dir = program_dir
|
|
39
39
|
self._verbose = verbose
|
|
40
|
+
self._n_ctx = n_ctx
|
|
40
41
|
|
|
41
42
|
meta_path = program_dir / "meta.json"
|
|
42
43
|
if meta_path.exists():
|
|
@@ -67,24 +68,24 @@ class PawFunction:
|
|
|
67
68
|
n_gpu_layers=n_gpu_layers,
|
|
68
69
|
verbose=verbose,
|
|
69
70
|
)
|
|
71
|
+
|
|
72
|
+
adapter_path = program_dir / "adapter.gguf"
|
|
73
|
+
if adapter_path.exists():
|
|
74
|
+
self._adapter = llama_cpp.llama_adapter_lora_init(
|
|
75
|
+
self._llm.model, str(adapter_path).encode("utf-8"),
|
|
76
|
+
)
|
|
77
|
+
if self._adapter:
|
|
78
|
+
llama_cpp.llama_set_adapter_lora(self._llm.ctx, self._adapter, 1.0)
|
|
79
|
+
else:
|
|
80
|
+
raise RuntimeError(f"Failed to load LoRA adapter: {adapter_path}")
|
|
81
|
+
else:
|
|
82
|
+
self._adapter = None
|
|
70
83
|
finally:
|
|
71
84
|
if not verbose:
|
|
72
85
|
_os.dup2(_old_stderr, _stderr_fd)
|
|
73
86
|
_os.close(_devnull)
|
|
74
87
|
_os.close(_old_stderr)
|
|
75
88
|
|
|
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
89
|
placeholder = "{INPUT_PLACEHOLDER}"
|
|
89
90
|
self._use_special = interpreter not in ("gpt2",)
|
|
90
91
|
|
|
@@ -151,20 +152,19 @@ class PawFunction:
|
|
|
151
152
|
def __call__(
|
|
152
153
|
self,
|
|
153
154
|
input_text: str,
|
|
154
|
-
max_tokens: int =
|
|
155
|
+
max_tokens: int | None = None,
|
|
155
156
|
temperature: float = 0.0,
|
|
156
157
|
) -> str:
|
|
157
158
|
"""Run the program on an input.
|
|
158
159
|
|
|
159
160
|
Args:
|
|
160
161
|
input_text: The input to process.
|
|
161
|
-
max_tokens: Maximum output tokens.
|
|
162
|
+
max_tokens: Maximum output tokens. None = use all remaining context.
|
|
162
163
|
temperature: Sampling temperature (0 = greedy).
|
|
163
164
|
|
|
164
165
|
Returns:
|
|
165
166
|
The program's output as a string.
|
|
166
167
|
"""
|
|
167
|
-
# Reset to prefix state: clear everything after the prefix
|
|
168
168
|
self._llm.n_tokens = self._n_prefix
|
|
169
169
|
|
|
170
170
|
input_with_suffix = input_text + self._suffix_text
|
|
@@ -174,10 +174,21 @@ class PawFunction:
|
|
|
174
174
|
special=self._use_special,
|
|
175
175
|
)
|
|
176
176
|
|
|
177
|
+
tokens_used = self._n_prefix + len(input_tokens)
|
|
178
|
+
remaining = self._n_ctx - tokens_used
|
|
179
|
+
if remaining <= 0:
|
|
180
|
+
raise ValueError(
|
|
181
|
+
f"Input too long: {tokens_used} tokens used (prefix={self._n_prefix}, "
|
|
182
|
+
f"input={len(input_tokens)}), context window={self._n_ctx}. "
|
|
183
|
+
f"Shorten your input."
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
gen_limit = remaining if max_tokens is None else min(max_tokens, remaining)
|
|
187
|
+
|
|
177
188
|
self._llm.eval(input_tokens)
|
|
178
189
|
|
|
179
190
|
output_tokens = []
|
|
180
|
-
for _ in range(
|
|
191
|
+
for _ in range(gen_limit):
|
|
181
192
|
token = self._llm.sample(
|
|
182
193
|
temp=temperature if temperature > 0 else 0,
|
|
183
194
|
)
|
|
@@ -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.5"
|
|
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"
|
|
@@ -57,6 +57,9 @@ class _FallbackLimiter:
|
|
|
57
57
|
return True
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
_API_VERSION = "0.4.0"
|
|
61
|
+
|
|
62
|
+
|
|
60
63
|
def create_app() -> FastAPI:
|
|
61
64
|
settings = get_settings()
|
|
62
65
|
configure_logging(
|
|
@@ -64,10 +67,13 @@ def create_app() -> FastAPI:
|
|
|
64
67
|
json_format=(settings.LOG_FORMAT == "json"),
|
|
65
68
|
)
|
|
66
69
|
|
|
70
|
+
if settings.JWT_SECRET == "dev-secret-change-in-production":
|
|
71
|
+
raise RuntimeError("JWT_SECRET must be set in .env -- refusing to start with the default value")
|
|
72
|
+
|
|
67
73
|
app = FastAPI(
|
|
68
74
|
title="Programs as Weights API",
|
|
69
75
|
description="Compile natural language specs into neural functions",
|
|
70
|
-
version=
|
|
76
|
+
version=_API_VERSION,
|
|
71
77
|
docs_url="/api/docs",
|
|
72
78
|
openapi_url="/api/openapi.json",
|
|
73
79
|
)
|
|
@@ -21,10 +21,20 @@ from api.models.orm import User
|
|
|
21
21
|
logger = structlog.get_logger()
|
|
22
22
|
router = APIRouter()
|
|
23
23
|
|
|
24
|
-
# In-memory session store (
|
|
24
|
+
# In-memory session store (single-process; cleaned periodically)
|
|
25
25
|
_sessions: dict[str, dict] = {}
|
|
26
26
|
_github_states: dict[str, float] = {}
|
|
27
27
|
|
|
28
|
+
_SESSION_MAX_AGE = 30 * 24 * 3600 # 30 days, matches cookie max_age
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _cleanup_expired_sessions():
|
|
32
|
+
cutoff = time.time() - _SESSION_MAX_AGE
|
|
33
|
+
expired = [k for k, v in _sessions.items() if v.get("created_at", 0) < cutoff]
|
|
34
|
+
for k in expired:
|
|
35
|
+
del _sessions[k]
|
|
36
|
+
|
|
37
|
+
|
|
28
38
|
GITHUB_AUTHORIZE_URL = "https://github.com/login/oauth/authorize"
|
|
29
39
|
GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token"
|
|
30
40
|
GITHUB_USER_URL = "https://api.github.com/user"
|
|
@@ -44,6 +54,8 @@ async def github_login(request: Request):
|
|
|
44
54
|
for k in [k for k, v in _github_states.items() if v < cutoff]:
|
|
45
55
|
del _github_states[k]
|
|
46
56
|
|
|
57
|
+
_cleanup_expired_sessions()
|
|
58
|
+
|
|
47
59
|
params = (
|
|
48
60
|
f"?client_id={settings.GITHUB_CLIENT_ID}"
|
|
49
61
|
f"&redirect_uri=https://programasweights.com/api/v1/auth/github/callback"
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Compile endpoint: submit specs for compilation into neural programs.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import time
|
|
5
6
|
import uuid
|
|
6
7
|
|
|
7
8
|
import httpx
|
|
@@ -19,8 +20,18 @@ logger = structlog.get_logger()
|
|
|
19
20
|
|
|
20
21
|
router = APIRouter()
|
|
21
22
|
|
|
22
|
-
# In-memory job store (
|
|
23
|
+
# In-memory job store (single-process; evicted after 1 hour)
|
|
23
24
|
_jobs: dict[str, dict] = {}
|
|
25
|
+
_JOBS_MAX_AGE = 3600
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _evict_old_jobs():
|
|
29
|
+
import time as _time
|
|
30
|
+
cutoff = _time.time() - _JOBS_MAX_AGE
|
|
31
|
+
expired = [k for k, v in _jobs.items() if v.get("created_at", 0) < cutoff]
|
|
32
|
+
for k in expired:
|
|
33
|
+
del _jobs[k]
|
|
34
|
+
|
|
24
35
|
|
|
25
36
|
# Compiler registry loaded from JSON file
|
|
26
37
|
import json as _json
|
|
@@ -87,6 +98,8 @@ async def submit_compile(
|
|
|
87
98
|
},
|
|
88
99
|
)
|
|
89
100
|
|
|
101
|
+
_evict_old_jobs()
|
|
102
|
+
|
|
90
103
|
job_id = str(uuid.uuid4())[:12]
|
|
91
104
|
_jobs[job_id] = {
|
|
92
105
|
"status": "queued",
|
|
@@ -94,6 +107,7 @@ async def submit_compile(
|
|
|
94
107
|
"compiler_snapshot": snapshot,
|
|
95
108
|
"program_id": None,
|
|
96
109
|
"error": None,
|
|
110
|
+
"created_at": time.time(),
|
|
97
111
|
}
|
|
98
112
|
|
|
99
113
|
import asyncio
|
|
@@ -140,7 +154,7 @@ async def submit_compile(
|
|
|
140
154
|
public=req.public,
|
|
141
155
|
name=req.name,
|
|
142
156
|
tags=req.tags,
|
|
143
|
-
hf_url=
|
|
157
|
+
hf_url=None,
|
|
144
158
|
))
|
|
145
159
|
|
|
146
160
|
db.add(CompileLog(
|
|
@@ -244,12 +258,11 @@ async def submit_compile(
|
|
|
244
258
|
_jobs[job_id]["error"] = str(e)
|
|
245
259
|
logger.exception("compile_failed", spec_len=len(req.spec), error=str(e))
|
|
246
260
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
)
|
|
261
|
+
raise HTTPException(status_code=500, detail={
|
|
262
|
+
"error": "compile_failed",
|
|
263
|
+
"message": "Compilation failed. Please try again.",
|
|
264
|
+
"request_id": getattr(request.state, "request_id", "unknown"),
|
|
265
|
+
})
|
|
253
266
|
|
|
254
267
|
|
|
255
268
|
@router.get("/compile/{job_id}", response_model=CompileStatusResponse)
|
|
@@ -8,6 +8,8 @@ from fastapi import APIRouter, Request
|
|
|
8
8
|
|
|
9
9
|
from api.models.schemas import HealthResponse
|
|
10
10
|
|
|
11
|
+
_API_VERSION = "0.4.0"
|
|
12
|
+
|
|
11
13
|
router = APIRouter()
|
|
12
14
|
|
|
13
15
|
_start_time = time.time()
|
|
@@ -21,7 +23,7 @@ async def health_check(request: Request):
|
|
|
21
23
|
|
|
22
24
|
return HealthResponse(
|
|
23
25
|
status="healthy" if not warnings else "degraded",
|
|
24
|
-
version=
|
|
26
|
+
version=_API_VERSION,
|
|
25
27
|
gpu_services={},
|
|
26
28
|
queue_depth=0,
|
|
27
29
|
uptime_s=time.time() - _start_time,
|
|
@@ -107,9 +107,9 @@ async def run_inference(
|
|
|
107
107
|
except HTTPException:
|
|
108
108
|
raise
|
|
109
109
|
except Exception as e:
|
|
110
|
-
logger.exception("infer_proxy_failed", program_id=canonical_id)
|
|
110
|
+
logger.exception("infer_proxy_failed", program_id=canonical_id, error=str(e))
|
|
111
111
|
raise HTTPException(status_code=502, detail={
|
|
112
112
|
"error": "inference_failed",
|
|
113
|
-
"message":
|
|
113
|
+
"message": "Inference failed. Please try again.",
|
|
114
114
|
"request_id": request_id,
|
|
115
115
|
})
|
|
@@ -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_
|
|
@@ -125,6 +125,8 @@ async def list_programs(
|
|
|
125
125
|
):
|
|
126
126
|
from sqlalchemy import text as sa_text
|
|
127
127
|
|
|
128
|
+
per_page = min(per_page, 100)
|
|
129
|
+
|
|
128
130
|
if mine and user:
|
|
129
131
|
aliased_ids = select(Alias.program_id).where(Alias.owner_id == user.id).scalar_subquery()
|
|
130
132
|
query = select(Program).where(
|
|
@@ -201,7 +203,7 @@ async def list_programs(
|
|
|
201
203
|
use_fts = True
|
|
202
204
|
else:
|
|
203
205
|
alias_match = select(Alias.program_id).where(
|
|
204
|
-
Alias.
|
|
206
|
+
Alias.slug_name.ilike(f"%{search_term}%")
|
|
205
207
|
).scalar_subquery()
|
|
206
208
|
conditions = [
|
|
207
209
|
Program.spec.ilike(f"%{search_term}%"),
|
|
@@ -414,6 +416,10 @@ async def download_program(
|
|
|
414
416
|
program.downloads = (program.downloads or 0) + 1
|
|
415
417
|
await db.commit()
|
|
416
418
|
|
|
419
|
+
if program.hf_url:
|
|
420
|
+
hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}.paw"
|
|
421
|
+
return RedirectResponse(url=hf_url, status_code=302)
|
|
422
|
+
|
|
417
423
|
settings = get_settings()
|
|
418
424
|
local_paw = Path(settings.STORAGE_PATH) / program.id / f"{program.id}.paw"
|
|
419
425
|
if local_paw.exists():
|
|
@@ -423,8 +429,11 @@ async def download_program(
|
|
|
423
429
|
filename=f"{program.id}.paw",
|
|
424
430
|
)
|
|
425
431
|
|
|
426
|
-
|
|
427
|
-
|
|
432
|
+
return JSONResponse(
|
|
433
|
+
status_code=202,
|
|
434
|
+
content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
|
|
435
|
+
headers={"Retry-After": "3"},
|
|
436
|
+
)
|
|
428
437
|
|
|
429
438
|
|
|
430
439
|
ALLOWED_ASSETS = {"adapter.gguf", "prompt_template.txt", "prefix_cache.bin", "prefix_tokens.json"}
|
|
@@ -443,18 +452,25 @@ async def serve_program_asset(
|
|
|
443
452
|
if not program:
|
|
444
453
|
raise HTTPException(status_code=404, detail="Asset not found")
|
|
445
454
|
|
|
455
|
+
if program.hf_url:
|
|
456
|
+
hf_url = f"https://huggingface.co/programasweights/paw-programs/resolve/main/{program.id}/{filename}"
|
|
457
|
+
return RedirectResponse(url=hf_url, status_code=302)
|
|
458
|
+
|
|
446
459
|
settings = get_settings()
|
|
447
460
|
asset_path = Path(settings.STORAGE_PATH) / program.id / filename
|
|
448
|
-
if
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
461
|
+
if asset_path.exists():
|
|
462
|
+
media_type = "application/octet-stream"
|
|
463
|
+
if filename.endswith(".txt"):
|
|
464
|
+
media_type = "text/plain"
|
|
465
|
+
elif filename.endswith(".json"):
|
|
466
|
+
media_type = "application/json"
|
|
467
|
+
return FileResponse(path=str(asset_path), media_type=media_type, filename=filename)
|
|
468
|
+
|
|
469
|
+
return JSONResponse(
|
|
470
|
+
status_code=202,
|
|
471
|
+
content={"status": "generating", "message": "Program assets are being prepared. Retry shortly."},
|
|
472
|
+
headers={"Retry-After": "3"},
|
|
473
|
+
)
|
|
458
474
|
|
|
459
475
|
|
|
460
476
|
# --- Update program ---
|
|
@@ -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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BrowserRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
|
|
1
|
+
import { BrowserRouter as Router, Routes, Route, Navigate, useLocation, Link } from 'react-router-dom';
|
|
2
2
|
import { Component, useEffect } from 'react';
|
|
3
3
|
import type { ReactNode } from 'react';
|
|
4
4
|
import { Toaster } from 'react-hot-toast';
|
|
@@ -55,6 +55,18 @@ class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boole
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
function NotFoundPage() {
|
|
59
|
+
return (
|
|
60
|
+
<div className="min-h-[60vh] flex items-center justify-center">
|
|
61
|
+
<div className="text-center">
|
|
62
|
+
<h1 className="text-6xl font-bold text-gray-300 mb-4">404</h1>
|
|
63
|
+
<p className="text-xl text-gray-600 mb-6">Page not found</p>
|
|
64
|
+
<Link to="/" className="px-5 py-2.5 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors text-sm font-medium">Back to home</Link>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
58
70
|
function App() {
|
|
59
71
|
return (
|
|
60
72
|
<ErrorBoundary>
|
|
@@ -96,6 +108,8 @@ function App() {
|
|
|
96
108
|
<Route path="/leaderboard" element={<Navigate to="/hub?sort=popular" replace />} />
|
|
97
109
|
<Route path="/program/:id" element={<Navigate to="/hub" replace />} />
|
|
98
110
|
<Route path="/publish" element={<Navigate to="/hub/upload" replace />} />
|
|
111
|
+
|
|
112
|
+
<Route path="*" element={<NotFoundPage />} />
|
|
99
113
|
</Routes>
|
|
100
114
|
</main>
|
|
101
115
|
<Footer />
|