tribunal-kit 9.2.3 → 9.2.4
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.
- package/.agent/.tribunal/session.jsonl +15 -0
- package/.agent/ARCHITECTURE.md +4 -4
- package/.agent/agents/agent-shield-auditor.md +18 -0
- package/.agent/agents/harness-manager.md +49 -0
- package/.agent/agents/human-gate-negotiator.md +22 -0
- package/.agent/agents/kernel-scheduler.md +56 -0
- package/.agent/agents/memory-archivist.md +37 -0
- package/.agent/agents/orchestrator.md +5 -0
- package/.agent/agents/project-planner.md +5 -0
- package/.agent/agents/security-auditor.md +5 -0
- package/.agent/rules/GEMINI.md +1 -1
- package/.agent/scripts/_utils.js +1 -1
- package/.agent/scripts/checklist.js +1 -1
- package/.agent/scripts/context_compiler.js +1 -1
- package/.agent/scripts/guardrail_engine.js +1 -1
- package/.agent/scripts/harness_manager.js +60 -0
- package/.agent/scripts/lint_runner.js +1 -1
- package/.agent/scripts/mcp_server.js +181 -0
- package/.agent/scripts/memory_archivist.js +97 -0
- package/.agent/scripts/memory_consolidator.js +37 -0
- package/.agent/scripts/memory_engine.js +61 -21
- package/.agent/scripts/pipeline_engine.js +17 -2
- package/.agent/scripts/session_logger.js +115 -0
- package/.agent/scripts/session_manager.js +10 -0
- package/.agent/scripts/swarm_dispatcher.js +74 -1
- package/.agent/scripts/syscall_registry.js +105 -0
- package/.agent/scripts/test_runner.js +1 -1
- package/.agent/scripts/verify_all.js +2 -2
- package/.agent/skill_topic_map.json +28 -1
- package/.agent/skills/agent-syscall-guidelines/SKILL.md +25 -0
- package/.agent/skills/agentic-workflows-2026/SKILL.md +8 -0
- package/.agent/skills/agentshield-security/SKILL.md +26 -0
- package/.agent/skills/context-engineering-pro/SKILL.md +7 -0
- package/.agent/skills/fabel-protocol/SKILL.md +5 -0
- package/.agent/skills/graph-engineering/SKILL.md +28 -0
- package/.agent/skills/harness-protocol/SKILL.md +8 -0
- package/.agent/skills/hf-cli/SKILL.md +239 -0
- package/.agent/skills/hf-cloud-aws-context-discovery/SKILL.md +74 -0
- package/.agent/skills/hf-cloud-python-env-setup/SKILL.md +90 -0
- package/.agent/skills/hf-cloud-python-env-setup/requirements.txt +17 -0
- package/.agent/skills/hf-cloud-python-env-setup/scripts/check_versions.py +29 -0
- package/.agent/skills/hf-cloud-python-env-setup/scripts/setup_env.py +143 -0
- package/.agent/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +90 -0
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +102 -0
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/references/minimum-permissions.json +47 -0
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/references/trust-policy.json +12 -0
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/scripts/check_role.py +184 -0
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/scripts/create_role.py +118 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +419 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/references/deployment-template.md +59 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/_common.py +148 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy.py +327 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_async.py +434 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_ic.py +506 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/invoke_endpoint.py +180 -0
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/scripts/teardown.py +246 -0
- package/.agent/skills/hf-cloud-serving-image-selection/SKILL.md +220 -0
- package/.agent/skills/hf-cloud-serving-image-selection/references/model-to-image.md +111 -0
- package/.agent/skills/hf-cloud-serving-image-selection/scripts/mirror_image.py +145 -0
- package/.agent/skills/hf-mem/SKILL.md +79 -0
- package/.agent/skills/huggingface-best/SKILL.md +134 -0
- package/.agent/skills/huggingface-community-evals/SKILL.md +207 -0
- package/.agent/skills/huggingface-community-evals/examples/.env.example +3 -0
- package/.agent/skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/.agent/skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/.agent/skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/.agent/skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/.agent/skills/huggingface-datasets/SKILL.md +107 -0
- package/.agent/skills/huggingface-gradio/SKILL.md +298 -0
- package/.agent/skills/huggingface-gradio/examples.md +613 -0
- package/.agent/skills/huggingface-llm-trainer/SKILL.md +738 -0
- package/.agent/skills/huggingface-llm-trainer/references/gguf_conversion.md +296 -0
- package/.agent/skills/huggingface-llm-trainer/references/hardware_guide.md +283 -0
- package/.agent/skills/huggingface-llm-trainer/references/hub_saving.md +364 -0
- package/.agent/skills/huggingface-llm-trainer/references/local_training_macos.md +231 -0
- package/.agent/skills/huggingface-llm-trainer/references/reliability_principles.md +371 -0
- package/.agent/skills/huggingface-llm-trainer/references/trackio_guide.md +191 -0
- package/.agent/skills/huggingface-llm-trainer/references/training_methods.md +150 -0
- package/.agent/skills/huggingface-llm-trainer/references/training_patterns.md +203 -0
- package/.agent/skills/huggingface-llm-trainer/references/troubleshooting.md +282 -0
- package/.agent/skills/huggingface-llm-trainer/references/unsloth.md +313 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/convert_to_gguf.py +424 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/dataset_inspector.py +417 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/estimate_cost.py +150 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/hf_benchmarks.py +659 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/train_dpo_example.py +106 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/train_grpo_example.py +89 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/train_sft_example.py +122 -0
- package/.agent/skills/huggingface-llm-trainer/scripts/unsloth_sft_example.py +512 -0
- package/.agent/skills/huggingface-local-models/SKILL.md +113 -0
- package/.agent/skills/huggingface-local-models/references/hardware.md +38 -0
- package/.agent/skills/huggingface-local-models/references/hub-discovery.md +178 -0
- package/.agent/skills/huggingface-local-models/references/quantization.md +256 -0
- package/.agent/skills/huggingface-lora-space-builder/SKILL.md +394 -0
- package/.agent/skills/huggingface-lora-space-builder/references/adapting-to-the-lora.md +113 -0
- package/.agent/skills/huggingface-lora-space-builder/references/base-models/krea-2.md +63 -0
- package/.agent/skills/huggingface-lora-space-builder/references/base-models/ltx.md +205 -0
- package/.agent/skills/huggingface-lora-space-builder/references/base-models/qwen-image.md +144 -0
- package/.agent/skills/huggingface-lora-space-builder/references/creative-mode.md +262 -0
- package/.agent/skills/huggingface-lora-space-builder/references/tasks.md +124 -0
- package/.agent/skills/huggingface-lora-space-builder/references/zerogpu-and-publishing.md +196 -0
- package/.agent/skills/huggingface-paper-publisher/SKILL.md +624 -0
- package/.agent/skills/huggingface-paper-publisher/examples/example_usage.md +326 -0
- package/.agent/skills/huggingface-paper-publisher/references/quick_reference.md +216 -0
- package/.agent/skills/huggingface-paper-publisher/scripts/paper_manager.py +606 -0
- package/.agent/skills/huggingface-paper-publisher/templates/arxiv.md +299 -0
- package/.agent/skills/huggingface-paper-publisher/templates/ml-report.md +358 -0
- package/.agent/skills/huggingface-paper-publisher/templates/modern.md +319 -0
- package/.agent/skills/huggingface-paper-publisher/templates/standard.md +201 -0
- package/.agent/skills/huggingface-papers/SKILL.md +239 -0
- package/.agent/skills/huggingface-spaces/README.md +9 -0
- package/.agent/skills/huggingface-spaces/SKILL.md +242 -0
- package/.agent/skills/huggingface-spaces/references/3d-cuda-extensions.md +109 -0
- package/.agent/skills/huggingface-spaces/references/3d-generation.md +98 -0
- package/.agent/skills/huggingface-spaces/references/3d-gsplat.md +53 -0
- package/.agent/skills/huggingface-spaces/references/3d-models.md +227 -0
- package/.agent/skills/huggingface-spaces/references/3d-outputs.md +114 -0
- package/.agent/skills/huggingface-spaces/references/buckets.md +89 -0
- package/.agent/skills/huggingface-spaces/references/debugging.md +236 -0
- package/.agent/skills/huggingface-spaces/references/gradio.md +200 -0
- package/.agent/skills/huggingface-spaces/references/grants.md +63 -0
- package/.agent/skills/huggingface-spaces/references/inference-providers.md +97 -0
- package/.agent/skills/huggingface-spaces/references/known-errors.md +232 -0
- package/.agent/skills/huggingface-spaces/references/requirements.md +169 -0
- package/.agent/skills/huggingface-spaces/references/zerogpu.md +349 -0
- package/.agent/skills/huggingface-tool-builder/SKILL.md +120 -0
- package/.agent/skills/huggingface-tool-builder/references/baseline_hf_api.py +57 -0
- package/.agent/skills/huggingface-tool-builder/references/baseline_hf_api.sh +40 -0
- package/.agent/skills/huggingface-tool-builder/references/baseline_hf_api.tsx +57 -0
- package/.agent/skills/huggingface-tool-builder/references/find_models_by_paper.sh +230 -0
- package/.agent/skills/huggingface-tool-builder/references/hf_enrich_models.sh +96 -0
- package/.agent/skills/huggingface-tool-builder/references/hf_model_card_frontmatter.sh +188 -0
- package/.agent/skills/huggingface-tool-builder/references/hf_model_papers_auth.sh +171 -0
- package/.agent/skills/huggingface-trackio/SKILL.md +142 -0
- package/.agent/skills/huggingface-trackio/references/alerts.md +196 -0
- package/.agent/skills/huggingface-trackio/references/logging_metrics.md +212 -0
- package/.agent/skills/huggingface-trackio/references/retrieving_metrics.md +251 -0
- package/.agent/skills/huggingface-vision-trainer/SKILL.md +593 -0
- package/.agent/skills/huggingface-vision-trainer/references/finetune_sam2_trainer.md +254 -0
- package/.agent/skills/huggingface-vision-trainer/references/hub_saving.md +618 -0
- package/.agent/skills/huggingface-vision-trainer/references/image_classification_training_notebook.md +279 -0
- package/.agent/skills/huggingface-vision-trainer/references/object_detection_training_notebook.md +700 -0
- package/.agent/skills/huggingface-vision-trainer/references/reliability_principles.md +310 -0
- package/.agent/skills/huggingface-vision-trainer/references/timm_trainer.md +91 -0
- package/.agent/skills/huggingface-vision-trainer/scripts/dataset_inspector.py +814 -0
- package/.agent/skills/huggingface-vision-trainer/scripts/estimate_cost.py +217 -0
- package/.agent/skills/huggingface-vision-trainer/scripts/image_classification_training.py +383 -0
- package/.agent/skills/huggingface-vision-trainer/scripts/object_detection_training.py +710 -0
- package/.agent/skills/huggingface-vision-trainer/scripts/sam_segmentation_training.py +382 -0
- package/.agent/skills/huggingface-zerogpu/SKILL.md +289 -0
- package/.agent/skills/huggingface-zerogpu/references/concurrency.md +79 -0
- package/.agent/skills/huggingface-zerogpu/references/cuda-and-deps.md +66 -0
- package/.agent/skills/huggingface-zerogpu/references/how-quota-works.md +74 -0
- package/.agent/skills/huggingface-zerogpu/references/how-zerogpu-works.md +50 -0
- package/.agent/skills/human-gate-negotiation/SKILL.md +30 -0
- package/.agent/skills/intelligent-routing/SKILL.md +10 -4
- package/.agent/skills/semantic-filesystem-navigation/SKILL.md +24 -0
- package/.agent/skills/session-log-interrogation/SKILL.md +29 -0
- package/.agent/skills/subagent-driven-development/SKILL.md +32 -0
- package/.agent/skills/systematic-debugging/SKILL.md +5 -0
- package/.agent/skills/train-sentence-transformers/SKILL.md +109 -0
- package/.agent/skills/train-sentence-transformers/references/base_model_selection.md +79 -0
- package/.agent/skills/train-sentence-transformers/references/dataset_formats.md +128 -0
- package/.agent/skills/train-sentence-transformers/references/evaluators_cross_encoder.md +116 -0
- package/.agent/skills/train-sentence-transformers/references/evaluators_multi_vector_encoder.md +101 -0
- package/.agent/skills/train-sentence-transformers/references/evaluators_sentence_transformer.md +151 -0
- package/.agent/skills/train-sentence-transformers/references/evaluators_sparse_encoder.md +121 -0
- package/.agent/skills/train-sentence-transformers/references/hardware_guide.md +105 -0
- package/.agent/skills/train-sentence-transformers/references/hf_jobs_execution.md +173 -0
- package/.agent/skills/train-sentence-transformers/references/losses_cross_encoder.md +137 -0
- package/.agent/skills/train-sentence-transformers/references/losses_multi_vector_encoder.md +100 -0
- package/.agent/skills/train-sentence-transformers/references/losses_sentence_transformer.md +246 -0
- package/.agent/skills/train-sentence-transformers/references/losses_sparse_encoder.md +106 -0
- package/.agent/skills/train-sentence-transformers/references/model_architectures.md +178 -0
- package/.agent/skills/train-sentence-transformers/references/prompts_and_instructions.md +160 -0
- package/.agent/skills/train-sentence-transformers/references/training_args.md +270 -0
- package/.agent/skills/train-sentence-transformers/references/troubleshooting.md +225 -0
- package/.agent/skills/train-sentence-transformers/scripts/mine_hard_negatives.py +199 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_cross_encoder_distillation_example.py +254 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_cross_encoder_example.py +253 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_cross_encoder_listwise_example.py +282 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_multi_vector_encoder_example.py +240 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_distillation_example.py +303 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_example.py +227 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_make_multilingual_example.py +308 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_matryoshka_example.py +212 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_multi_dataset_example.py +258 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_static_embedding_example.py +273 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sentence_transformer_with_lora_example.py +275 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sparse_encoder_distillation_example.py +262 -0
- package/.agent/skills/train-sentence-transformers/scripts/train_sparse_encoder_example.py +237 -0
- package/.agent/skills/transformers-js/SKILL.md +692 -0
- package/.agent/skills/transformers-js/references/CACHE.md +339 -0
- package/.agent/skills/transformers-js/references/CONFIGURATION.md +438 -0
- package/.agent/skills/transformers-js/references/EXAMPLES.md +620 -0
- package/.agent/skills/transformers-js/references/MODEL_ARCHITECTURES.md +167 -0
- package/.agent/skills/transformers-js/references/MODEL_REGISTRY.md +197 -0
- package/.agent/skills/transformers-js/references/PIPELINE_OPTIONS.md +557 -0
- package/.agent/skills/transformers-js/references/TEXT_GENERATION.md +315 -0
- package/.agent/skills/tribunal-instincts-memory/SKILL.md +31 -0
- package/.agent/skills/trl-training/SKILL.md +318 -0
- package/.agent/workflows/assimilate.md +21 -0
- package/.agent/workflows/audit.md +5 -0
- package/.agent/workflows/generate.md +5 -0
- package/.agent/workflows/htop.md +22 -0
- package/.agent/workflows/marathon.md +5 -0
- package/.agent/workflows/resume.md +20 -0
- package/.agent/workflows/team-mode.md +22 -0
- package/.agents/skills/agent-syscall-guidelines/SKILL.md +25 -0
- package/.agents/skills/agentic-workflows-2026/SKILL.md +8 -0
- package/.agents/skills/agentshield-security/SKILL.md +26 -0
- package/.agents/skills/context-engineering-pro/SKILL.md +7 -0
- package/.agents/skills/fabel-protocol/SKILL.md +5 -0
- package/.agents/skills/graph-engineering/SKILL.md +28 -0
- package/.agents/skills/harness-protocol/SKILL.md +8 -0
- package/.agents/skills/hf-cli/SKILL.md +239 -0
- package/.agents/skills/hf-cloud-aws-context-discovery/SKILL.md +74 -0
- package/.agents/skills/hf-cloud-python-env-setup/SKILL.md +90 -0
- package/.agents/skills/hf-cloud-python-env-setup/requirements.txt +17 -0
- package/.agents/skills/hf-cloud-python-env-setup/scripts/check_versions.py +29 -0
- package/.agents/skills/hf-cloud-python-env-setup/scripts/setup_env.py +143 -0
- package/.agents/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +90 -0
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +102 -0
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/references/minimum-permissions.json +47 -0
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/references/trust-policy.json +12 -0
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/scripts/check_role.py +184 -0
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/scripts/create_role.py +118 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +419 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/references/deployment-template.md +59 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/_common.py +148 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy.py +327 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_async.py +434 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_ic.py +506 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/invoke_endpoint.py +180 -0
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/scripts/teardown.py +246 -0
- package/.agents/skills/hf-cloud-serving-image-selection/SKILL.md +220 -0
- package/.agents/skills/hf-cloud-serving-image-selection/references/model-to-image.md +111 -0
- package/.agents/skills/hf-cloud-serving-image-selection/scripts/mirror_image.py +145 -0
- package/.agents/skills/hf-mem/SKILL.md +79 -0
- package/.agents/skills/huggingface-best/SKILL.md +134 -0
- package/.agents/skills/huggingface-community-evals/SKILL.md +207 -0
- package/.agents/skills/huggingface-community-evals/examples/.env.example +3 -0
- package/.agents/skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/.agents/skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/.agents/skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/.agents/skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/.agents/skills/huggingface-datasets/SKILL.md +107 -0
- package/.agents/skills/huggingface-gradio/SKILL.md +298 -0
- package/.agents/skills/huggingface-gradio/examples.md +613 -0
- package/.agents/skills/huggingface-llm-trainer/SKILL.md +738 -0
- package/.agents/skills/huggingface-llm-trainer/references/gguf_conversion.md +296 -0
- package/.agents/skills/huggingface-llm-trainer/references/hardware_guide.md +283 -0
- package/.agents/skills/huggingface-llm-trainer/references/hub_saving.md +364 -0
- package/.agents/skills/huggingface-llm-trainer/references/local_training_macos.md +231 -0
- package/.agents/skills/huggingface-llm-trainer/references/reliability_principles.md +371 -0
- package/.agents/skills/huggingface-llm-trainer/references/trackio_guide.md +191 -0
- package/.agents/skills/huggingface-llm-trainer/references/training_methods.md +150 -0
- package/.agents/skills/huggingface-llm-trainer/references/training_patterns.md +203 -0
- package/.agents/skills/huggingface-llm-trainer/references/troubleshooting.md +282 -0
- package/.agents/skills/huggingface-llm-trainer/references/unsloth.md +313 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/convert_to_gguf.py +424 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/dataset_inspector.py +417 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/estimate_cost.py +150 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/hf_benchmarks.py +659 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/train_dpo_example.py +106 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/train_grpo_example.py +89 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/train_sft_example.py +122 -0
- package/.agents/skills/huggingface-llm-trainer/scripts/unsloth_sft_example.py +512 -0
- package/.agents/skills/huggingface-local-models/SKILL.md +113 -0
- package/.agents/skills/huggingface-local-models/references/hardware.md +38 -0
- package/.agents/skills/huggingface-local-models/references/hub-discovery.md +178 -0
- package/.agents/skills/huggingface-local-models/references/quantization.md +256 -0
- package/.agents/skills/huggingface-lora-space-builder/SKILL.md +394 -0
- package/.agents/skills/huggingface-lora-space-builder/references/adapting-to-the-lora.md +113 -0
- package/.agents/skills/huggingface-lora-space-builder/references/base-models/krea-2.md +63 -0
- package/.agents/skills/huggingface-lora-space-builder/references/base-models/ltx.md +205 -0
- package/.agents/skills/huggingface-lora-space-builder/references/base-models/qwen-image.md +144 -0
- package/.agents/skills/huggingface-lora-space-builder/references/creative-mode.md +262 -0
- package/.agents/skills/huggingface-lora-space-builder/references/tasks.md +124 -0
- package/.agents/skills/huggingface-lora-space-builder/references/zerogpu-and-publishing.md +196 -0
- package/.agents/skills/huggingface-paper-publisher/SKILL.md +624 -0
- package/.agents/skills/huggingface-paper-publisher/examples/example_usage.md +326 -0
- package/.agents/skills/huggingface-paper-publisher/references/quick_reference.md +216 -0
- package/.agents/skills/huggingface-paper-publisher/scripts/paper_manager.py +606 -0
- package/.agents/skills/huggingface-paper-publisher/templates/arxiv.md +299 -0
- package/.agents/skills/huggingface-paper-publisher/templates/ml-report.md +358 -0
- package/.agents/skills/huggingface-paper-publisher/templates/modern.md +319 -0
- package/.agents/skills/huggingface-paper-publisher/templates/standard.md +201 -0
- package/.agents/skills/huggingface-papers/SKILL.md +239 -0
- package/.agents/skills/huggingface-spaces/README.md +9 -0
- package/.agents/skills/huggingface-spaces/SKILL.md +242 -0
- package/.agents/skills/huggingface-spaces/references/3d-cuda-extensions.md +109 -0
- package/.agents/skills/huggingface-spaces/references/3d-generation.md +98 -0
- package/.agents/skills/huggingface-spaces/references/3d-gsplat.md +53 -0
- package/.agents/skills/huggingface-spaces/references/3d-models.md +227 -0
- package/.agents/skills/huggingface-spaces/references/3d-outputs.md +114 -0
- package/.agents/skills/huggingface-spaces/references/buckets.md +89 -0
- package/.agents/skills/huggingface-spaces/references/debugging.md +236 -0
- package/.agents/skills/huggingface-spaces/references/gradio.md +200 -0
- package/.agents/skills/huggingface-spaces/references/grants.md +63 -0
- package/.agents/skills/huggingface-spaces/references/inference-providers.md +97 -0
- package/.agents/skills/huggingface-spaces/references/known-errors.md +232 -0
- package/.agents/skills/huggingface-spaces/references/requirements.md +169 -0
- package/.agents/skills/huggingface-spaces/references/zerogpu.md +349 -0
- package/.agents/skills/huggingface-tool-builder/SKILL.md +120 -0
- package/.agents/skills/huggingface-tool-builder/references/baseline_hf_api.py +57 -0
- package/.agents/skills/huggingface-tool-builder/references/baseline_hf_api.sh +40 -0
- package/.agents/skills/huggingface-tool-builder/references/baseline_hf_api.tsx +57 -0
- package/.agents/skills/huggingface-tool-builder/references/find_models_by_paper.sh +230 -0
- package/.agents/skills/huggingface-tool-builder/references/hf_enrich_models.sh +96 -0
- package/.agents/skills/huggingface-tool-builder/references/hf_model_card_frontmatter.sh +188 -0
- package/.agents/skills/huggingface-tool-builder/references/hf_model_papers_auth.sh +171 -0
- package/.agents/skills/huggingface-trackio/SKILL.md +142 -0
- package/.agents/skills/huggingface-trackio/references/alerts.md +196 -0
- package/.agents/skills/huggingface-trackio/references/logging_metrics.md +212 -0
- package/.agents/skills/huggingface-trackio/references/retrieving_metrics.md +251 -0
- package/.agents/skills/huggingface-vision-trainer/SKILL.md +593 -0
- package/.agents/skills/huggingface-vision-trainer/references/finetune_sam2_trainer.md +254 -0
- package/.agents/skills/huggingface-vision-trainer/references/hub_saving.md +618 -0
- package/.agents/skills/huggingface-vision-trainer/references/image_classification_training_notebook.md +279 -0
- package/.agents/skills/huggingface-vision-trainer/references/object_detection_training_notebook.md +700 -0
- package/.agents/skills/huggingface-vision-trainer/references/reliability_principles.md +310 -0
- package/.agents/skills/huggingface-vision-trainer/references/timm_trainer.md +91 -0
- package/.agents/skills/huggingface-vision-trainer/scripts/dataset_inspector.py +814 -0
- package/.agents/skills/huggingface-vision-trainer/scripts/estimate_cost.py +217 -0
- package/.agents/skills/huggingface-vision-trainer/scripts/image_classification_training.py +383 -0
- package/.agents/skills/huggingface-vision-trainer/scripts/object_detection_training.py +710 -0
- package/.agents/skills/huggingface-vision-trainer/scripts/sam_segmentation_training.py +382 -0
- package/.agents/skills/huggingface-zerogpu/SKILL.md +289 -0
- package/.agents/skills/huggingface-zerogpu/references/concurrency.md +79 -0
- package/.agents/skills/huggingface-zerogpu/references/cuda-and-deps.md +66 -0
- package/.agents/skills/huggingface-zerogpu/references/how-quota-works.md +74 -0
- package/.agents/skills/huggingface-zerogpu/references/how-zerogpu-works.md +50 -0
- package/.agents/skills/human-gate-negotiation/SKILL.md +30 -0
- package/.agents/skills/intelligent-routing/SKILL.md +10 -4
- package/.agents/skills/semantic-filesystem-navigation/SKILL.md +24 -0
- package/.agents/skills/session-log-interrogation/SKILL.md +29 -0
- package/.agents/skills/subagent-driven-development/SKILL.md +32 -0
- package/.agents/skills/systematic-debugging/SKILL.md +5 -0
- package/.agents/skills/train-sentence-transformers/SKILL.md +109 -0
- package/.agents/skills/train-sentence-transformers/references/base_model_selection.md +79 -0
- package/.agents/skills/train-sentence-transformers/references/dataset_formats.md +128 -0
- package/.agents/skills/train-sentence-transformers/references/evaluators_cross_encoder.md +116 -0
- package/.agents/skills/train-sentence-transformers/references/evaluators_multi_vector_encoder.md +101 -0
- package/.agents/skills/train-sentence-transformers/references/evaluators_sentence_transformer.md +151 -0
- package/.agents/skills/train-sentence-transformers/references/evaluators_sparse_encoder.md +121 -0
- package/.agents/skills/train-sentence-transformers/references/hardware_guide.md +105 -0
- package/.agents/skills/train-sentence-transformers/references/hf_jobs_execution.md +173 -0
- package/.agents/skills/train-sentence-transformers/references/losses_cross_encoder.md +137 -0
- package/.agents/skills/train-sentence-transformers/references/losses_multi_vector_encoder.md +100 -0
- package/.agents/skills/train-sentence-transformers/references/losses_sentence_transformer.md +246 -0
- package/.agents/skills/train-sentence-transformers/references/losses_sparse_encoder.md +106 -0
- package/.agents/skills/train-sentence-transformers/references/model_architectures.md +178 -0
- package/.agents/skills/train-sentence-transformers/references/prompts_and_instructions.md +160 -0
- package/.agents/skills/train-sentence-transformers/references/training_args.md +270 -0
- package/.agents/skills/train-sentence-transformers/references/troubleshooting.md +225 -0
- package/.agents/skills/train-sentence-transformers/scripts/mine_hard_negatives.py +199 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_cross_encoder_distillation_example.py +254 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_cross_encoder_example.py +253 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_cross_encoder_listwise_example.py +282 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_multi_vector_encoder_example.py +240 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_distillation_example.py +303 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_example.py +227 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_make_multilingual_example.py +308 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_matryoshka_example.py +212 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_multi_dataset_example.py +258 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_static_embedding_example.py +273 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sentence_transformer_with_lora_example.py +275 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sparse_encoder_distillation_example.py +262 -0
- package/.agents/skills/train-sentence-transformers/scripts/train_sparse_encoder_example.py +237 -0
- package/.agents/skills/transformers-js/SKILL.md +692 -0
- package/.agents/skills/transformers-js/references/CACHE.md +339 -0
- package/.agents/skills/transformers-js/references/CONFIGURATION.md +438 -0
- package/.agents/skills/transformers-js/references/EXAMPLES.md +620 -0
- package/.agents/skills/transformers-js/references/MODEL_ARCHITECTURES.md +167 -0
- package/.agents/skills/transformers-js/references/MODEL_REGISTRY.md +197 -0
- package/.agents/skills/transformers-js/references/PIPELINE_OPTIONS.md +557 -0
- package/.agents/skills/transformers-js/references/TEXT_GENERATION.md +315 -0
- package/.agents/skills/tribunal-instincts-memory/SKILL.md +31 -0
- package/.agents/skills/trl-training/SKILL.md +318 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +135 -435
- package/bin/adapter-install.js +1 -1
- package/bin/mcp-server.js +5 -5
- package/dist/tui/banner.js +1 -1
- package/gemini-extension.json +1 -1
- package/mcp_config.json +1 -1
- package/package.json +7 -7
- package/plugin.json +1 -1
- package/scripts/context_compiler.js +1 -1
- package/scripts/skill_enhancement_engine.js +6 -6
- package/skills/agent-syscall-guidelines/SKILL.md +25 -0
- package/skills/agentic-workflows-2026/SKILL.md +8 -0
- package/skills/agentshield-security/SKILL.md +26 -0
- package/skills/context-engineering-pro/SKILL.md +7 -0
- package/skills/fabel-protocol/SKILL.md +5 -0
- package/skills/graph-engineering/SKILL.md +28 -0
- package/skills/harness-protocol/SKILL.md +8 -0
- package/skills/hf-cli/SKILL.md +239 -0
- package/skills/hf-cloud-aws-context-discovery/SKILL.md +74 -0
- package/skills/hf-cloud-python-env-setup/SKILL.md +90 -0
- package/skills/hf-cloud-python-env-setup/requirements.txt +17 -0
- package/skills/hf-cloud-python-env-setup/scripts/check_versions.py +29 -0
- package/skills/hf-cloud-python-env-setup/scripts/setup_env.py +143 -0
- package/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +90 -0
- package/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +102 -0
- package/skills/hf-cloud-sagemaker-iam-preflight/references/minimum-permissions.json +47 -0
- package/skills/hf-cloud-sagemaker-iam-preflight/references/trust-policy.json +12 -0
- package/skills/hf-cloud-sagemaker-iam-preflight/scripts/check_role.py +184 -0
- package/skills/hf-cloud-sagemaker-iam-preflight/scripts/create_role.py +118 -0
- package/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +419 -0
- package/skills/hf-cloud-sagemaker-production-defaults/references/deployment-template.md +59 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/_common.py +148 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy.py +327 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_async.py +434 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/deploy_ic.py +506 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/invoke_endpoint.py +180 -0
- package/skills/hf-cloud-sagemaker-production-defaults/scripts/teardown.py +246 -0
- package/skills/hf-cloud-serving-image-selection/SKILL.md +220 -0
- package/skills/hf-cloud-serving-image-selection/references/model-to-image.md +111 -0
- package/skills/hf-cloud-serving-image-selection/scripts/mirror_image.py +145 -0
- package/skills/hf-mem/SKILL.md +79 -0
- package/skills/huggingface-best/SKILL.md +134 -0
- package/skills/huggingface-community-evals/SKILL.md +207 -0
- package/skills/huggingface-community-evals/examples/.env.example +3 -0
- package/skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/skills/huggingface-datasets/SKILL.md +107 -0
- package/skills/huggingface-gradio/SKILL.md +298 -0
- package/skills/huggingface-gradio/examples.md +613 -0
- package/skills/huggingface-llm-trainer/SKILL.md +738 -0
- package/skills/huggingface-llm-trainer/references/gguf_conversion.md +296 -0
- package/skills/huggingface-llm-trainer/references/hardware_guide.md +283 -0
- package/skills/huggingface-llm-trainer/references/hub_saving.md +364 -0
- package/skills/huggingface-llm-trainer/references/local_training_macos.md +231 -0
- package/skills/huggingface-llm-trainer/references/reliability_principles.md +371 -0
- package/skills/huggingface-llm-trainer/references/trackio_guide.md +191 -0
- package/skills/huggingface-llm-trainer/references/training_methods.md +150 -0
- package/skills/huggingface-llm-trainer/references/training_patterns.md +203 -0
- package/skills/huggingface-llm-trainer/references/troubleshooting.md +282 -0
- package/skills/huggingface-llm-trainer/references/unsloth.md +313 -0
- package/skills/huggingface-llm-trainer/scripts/convert_to_gguf.py +424 -0
- package/skills/huggingface-llm-trainer/scripts/dataset_inspector.py +417 -0
- package/skills/huggingface-llm-trainer/scripts/estimate_cost.py +150 -0
- package/skills/huggingface-llm-trainer/scripts/hf_benchmarks.py +659 -0
- package/skills/huggingface-llm-trainer/scripts/train_dpo_example.py +106 -0
- package/skills/huggingface-llm-trainer/scripts/train_grpo_example.py +89 -0
- package/skills/huggingface-llm-trainer/scripts/train_sft_example.py +122 -0
- package/skills/huggingface-llm-trainer/scripts/unsloth_sft_example.py +512 -0
- package/skills/huggingface-local-models/SKILL.md +113 -0
- package/skills/huggingface-local-models/references/hardware.md +38 -0
- package/skills/huggingface-local-models/references/hub-discovery.md +178 -0
- package/skills/huggingface-local-models/references/quantization.md +256 -0
- package/skills/huggingface-lora-space-builder/SKILL.md +394 -0
- package/skills/huggingface-lora-space-builder/references/adapting-to-the-lora.md +113 -0
- package/skills/huggingface-lora-space-builder/references/base-models/krea-2.md +63 -0
- package/skills/huggingface-lora-space-builder/references/base-models/ltx.md +205 -0
- package/skills/huggingface-lora-space-builder/references/base-models/qwen-image.md +144 -0
- package/skills/huggingface-lora-space-builder/references/creative-mode.md +262 -0
- package/skills/huggingface-lora-space-builder/references/tasks.md +124 -0
- package/skills/huggingface-lora-space-builder/references/zerogpu-and-publishing.md +196 -0
- package/skills/huggingface-paper-publisher/SKILL.md +624 -0
- package/skills/huggingface-paper-publisher/examples/example_usage.md +326 -0
- package/skills/huggingface-paper-publisher/references/quick_reference.md +216 -0
- package/skills/huggingface-paper-publisher/scripts/paper_manager.py +606 -0
- package/skills/huggingface-paper-publisher/templates/arxiv.md +299 -0
- package/skills/huggingface-paper-publisher/templates/ml-report.md +358 -0
- package/skills/huggingface-paper-publisher/templates/modern.md +319 -0
- package/skills/huggingface-paper-publisher/templates/standard.md +201 -0
- package/skills/huggingface-papers/SKILL.md +239 -0
- package/skills/huggingface-spaces/README.md +9 -0
- package/skills/huggingface-spaces/SKILL.md +242 -0
- package/skills/huggingface-spaces/references/3d-cuda-extensions.md +109 -0
- package/skills/huggingface-spaces/references/3d-generation.md +98 -0
- package/skills/huggingface-spaces/references/3d-gsplat.md +53 -0
- package/skills/huggingface-spaces/references/3d-models.md +227 -0
- package/skills/huggingface-spaces/references/3d-outputs.md +114 -0
- package/skills/huggingface-spaces/references/buckets.md +89 -0
- package/skills/huggingface-spaces/references/debugging.md +236 -0
- package/skills/huggingface-spaces/references/gradio.md +200 -0
- package/skills/huggingface-spaces/references/grants.md +63 -0
- package/skills/huggingface-spaces/references/inference-providers.md +97 -0
- package/skills/huggingface-spaces/references/known-errors.md +232 -0
- package/skills/huggingface-spaces/references/requirements.md +169 -0
- package/skills/huggingface-spaces/references/zerogpu.md +349 -0
- package/skills/huggingface-tool-builder/SKILL.md +120 -0
- package/skills/huggingface-tool-builder/references/baseline_hf_api.py +57 -0
- package/skills/huggingface-tool-builder/references/baseline_hf_api.sh +40 -0
- package/skills/huggingface-tool-builder/references/baseline_hf_api.tsx +57 -0
- package/skills/huggingface-tool-builder/references/find_models_by_paper.sh +230 -0
- package/skills/huggingface-tool-builder/references/hf_enrich_models.sh +96 -0
- package/skills/huggingface-tool-builder/references/hf_model_card_frontmatter.sh +188 -0
- package/skills/huggingface-tool-builder/references/hf_model_papers_auth.sh +171 -0
- package/skills/huggingface-trackio/SKILL.md +142 -0
- package/skills/huggingface-trackio/references/alerts.md +196 -0
- package/skills/huggingface-trackio/references/logging_metrics.md +212 -0
- package/skills/huggingface-trackio/references/retrieving_metrics.md +251 -0
- package/skills/huggingface-vision-trainer/SKILL.md +593 -0
- package/skills/huggingface-vision-trainer/references/finetune_sam2_trainer.md +254 -0
- package/skills/huggingface-vision-trainer/references/hub_saving.md +618 -0
- package/skills/huggingface-vision-trainer/references/image_classification_training_notebook.md +279 -0
- package/skills/huggingface-vision-trainer/references/object_detection_training_notebook.md +700 -0
- package/skills/huggingface-vision-trainer/references/reliability_principles.md +310 -0
- package/skills/huggingface-vision-trainer/references/timm_trainer.md +91 -0
- package/skills/huggingface-vision-trainer/scripts/dataset_inspector.py +814 -0
- package/skills/huggingface-vision-trainer/scripts/estimate_cost.py +217 -0
- package/skills/huggingface-vision-trainer/scripts/image_classification_training.py +383 -0
- package/skills/huggingface-vision-trainer/scripts/object_detection_training.py +710 -0
- package/skills/huggingface-vision-trainer/scripts/sam_segmentation_training.py +382 -0
- package/skills/huggingface-zerogpu/SKILL.md +289 -0
- package/skills/huggingface-zerogpu/references/concurrency.md +79 -0
- package/skills/huggingface-zerogpu/references/cuda-and-deps.md +66 -0
- package/skills/huggingface-zerogpu/references/how-quota-works.md +74 -0
- package/skills/huggingface-zerogpu/references/how-zerogpu-works.md +50 -0
- package/skills/human-gate-negotiation/SKILL.md +30 -0
- package/skills/intelligent-routing/SKILL.md +10 -4
- package/skills/semantic-filesystem-navigation/SKILL.md +24 -0
- package/skills/session-log-interrogation/SKILL.md +29 -0
- package/skills/subagent-driven-development/SKILL.md +32 -0
- package/skills/systematic-debugging/SKILL.md +5 -0
- package/skills/train-sentence-transformers/SKILL.md +109 -0
- package/skills/train-sentence-transformers/references/base_model_selection.md +79 -0
- package/skills/train-sentence-transformers/references/dataset_formats.md +128 -0
- package/skills/train-sentence-transformers/references/evaluators_cross_encoder.md +116 -0
- package/skills/train-sentence-transformers/references/evaluators_multi_vector_encoder.md +101 -0
- package/skills/train-sentence-transformers/references/evaluators_sentence_transformer.md +151 -0
- package/skills/train-sentence-transformers/references/evaluators_sparse_encoder.md +121 -0
- package/skills/train-sentence-transformers/references/hardware_guide.md +105 -0
- package/skills/train-sentence-transformers/references/hf_jobs_execution.md +173 -0
- package/skills/train-sentence-transformers/references/losses_cross_encoder.md +137 -0
- package/skills/train-sentence-transformers/references/losses_multi_vector_encoder.md +100 -0
- package/skills/train-sentence-transformers/references/losses_sentence_transformer.md +246 -0
- package/skills/train-sentence-transformers/references/losses_sparse_encoder.md +106 -0
- package/skills/train-sentence-transformers/references/model_architectures.md +178 -0
- package/skills/train-sentence-transformers/references/prompts_and_instructions.md +160 -0
- package/skills/train-sentence-transformers/references/training_args.md +270 -0
- package/skills/train-sentence-transformers/references/troubleshooting.md +225 -0
- package/skills/train-sentence-transformers/scripts/mine_hard_negatives.py +199 -0
- package/skills/train-sentence-transformers/scripts/train_cross_encoder_distillation_example.py +254 -0
- package/skills/train-sentence-transformers/scripts/train_cross_encoder_example.py +253 -0
- package/skills/train-sentence-transformers/scripts/train_cross_encoder_listwise_example.py +282 -0
- package/skills/train-sentence-transformers/scripts/train_multi_vector_encoder_example.py +240 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_distillation_example.py +303 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_example.py +227 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_make_multilingual_example.py +308 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_matryoshka_example.py +212 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_multi_dataset_example.py +258 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_static_embedding_example.py +273 -0
- package/skills/train-sentence-transformers/scripts/train_sentence_transformer_with_lora_example.py +275 -0
- package/skills/train-sentence-transformers/scripts/train_sparse_encoder_distillation_example.py +262 -0
- package/skills/train-sentence-transformers/scripts/train_sparse_encoder_example.py +237 -0
- package/skills/transformers-js/SKILL.md +692 -0
- package/skills/transformers-js/references/CACHE.md +339 -0
- package/skills/transformers-js/references/CONFIGURATION.md +438 -0
- package/skills/transformers-js/references/EXAMPLES.md +620 -0
- package/skills/transformers-js/references/MODEL_ARCHITECTURES.md +167 -0
- package/skills/transformers-js/references/MODEL_REGISTRY.md +197 -0
- package/skills/transformers-js/references/PIPELINE_OPTIONS.md +557 -0
- package/skills/transformers-js/references/TEXT_GENERATION.md +315 -0
- package/skills/tribunal-instincts-memory/SKILL.md +31 -0
- package/skills/trl-training/SKILL.md +318 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.10"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "sentence-transformers[train]>=5.0",
|
|
6
|
+
# "datasets>=2.19.0",
|
|
7
|
+
# "accelerate>=0.26.0",
|
|
8
|
+
# "trackio",
|
|
9
|
+
# "tokenizers>=0.20",
|
|
10
|
+
# "model2vec", # only needed when WARMSTART=True (StaticEmbedding.from_model2vec)
|
|
11
|
+
# ]
|
|
12
|
+
# ///
|
|
13
|
+
"""Train a StaticEmbedding model on a contrastive dataset.
|
|
14
|
+
|
|
15
|
+
StaticEmbedding is a token-bag model: a per-token embedding table averaged over
|
|
16
|
+
the tokens of an input. No transformer, no attention. Inference is ~20x faster
|
|
17
|
+
on GPU and ~80x faster on CPU than a small encoder, with surprisingly competitive
|
|
18
|
+
quality on retrieval benchmarks when trained on >=1M contrastive pairs.
|
|
19
|
+
|
|
20
|
+
Two init paths via `WARMSTART` constant:
|
|
21
|
+
- `WARMSTART=False` (default): random init. Use with >=1M contrastive pairs.
|
|
22
|
+
Reaches a higher ceiling than warm-start when given enough data. The default
|
|
23
|
+
dataset below (GooAQ, ~3M pairs) is comfortably in this regime.
|
|
24
|
+
- `WARMSTART=True`: `StaticEmbedding.from_model2vec(...)` (distil from a
|
|
25
|
+
model2vec checkpoint). Flip to True if you swap in a smaller dataset (<1M
|
|
26
|
+
pairs). Converges faster and reaches better quality at lower data scales.
|
|
27
|
+
|
|
28
|
+
Demonstrates:
|
|
29
|
+
- MultipleNegativesRankingLoss wrapped in MatryoshkaLoss for nested embedding dims
|
|
30
|
+
- Large batch size (1024+) with a high LR (~2e-1 for random init, ~5e-2 for warm-
|
|
31
|
+
start) since the loss surface for a token-bag is much flatter than for a
|
|
32
|
+
pretrained encoder
|
|
33
|
+
- BatchSamplers.NO_DUPLICATES (load-bearing for in-batch negatives with duplicated
|
|
34
|
+
anchors)
|
|
35
|
+
- NanoBEIREvaluator at full embedding dim
|
|
36
|
+
- Auto model card + optional Hub push
|
|
37
|
+
|
|
38
|
+
Run locally (CPU works for inference, but training needs a GPU for batch=1024+):
|
|
39
|
+
pip install "sentence-transformers[train]>=5.0"
|
|
40
|
+
python train_sentence_transformer_static_embedding_example.py
|
|
41
|
+
|
|
42
|
+
Multi-GPU:
|
|
43
|
+
accelerate launch train_sentence_transformer_static_embedding_example.py
|
|
44
|
+
|
|
45
|
+
Hugging Face Jobs: paste this file's contents as the `script` in hf_jobs(...).
|
|
46
|
+
|
|
47
|
+
References:
|
|
48
|
+
- HF blog post: https://huggingface.co/blog/static-embeddings
|
|
49
|
+
- Module docs: sentence_transformers.sentence_transformer.modules.StaticEmbedding
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
from __future__ import annotations
|
|
53
|
+
|
|
54
|
+
import argparse
|
|
55
|
+
import logging
|
|
56
|
+
import os
|
|
57
|
+
from contextlib import nullcontext
|
|
58
|
+
|
|
59
|
+
import datasets
|
|
60
|
+
import torch
|
|
61
|
+
from datasets import load_dataset
|
|
62
|
+
from tokenizers import Tokenizer
|
|
63
|
+
|
|
64
|
+
from sentence_transformers import (
|
|
65
|
+
SentenceTransformer,
|
|
66
|
+
SentenceTransformerModelCardData,
|
|
67
|
+
SentenceTransformerTrainer,
|
|
68
|
+
SentenceTransformerTrainingArguments,
|
|
69
|
+
)
|
|
70
|
+
from sentence_transformers.base.sampler import BatchSamplers
|
|
71
|
+
from sentence_transformers.sentence_transformer.evaluation import NanoBEIREvaluator
|
|
72
|
+
from sentence_transformers.sentence_transformer.losses import (
|
|
73
|
+
MatryoshkaLoss,
|
|
74
|
+
MultipleNegativesRankingLoss,
|
|
75
|
+
)
|
|
76
|
+
from sentence_transformers.sentence_transformer.modules import StaticEmbedding
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def autocast_ctx():
|
|
80
|
+
"""bf16/fp16 autocast for evaluator calls outside the trainer."""
|
|
81
|
+
if not torch.cuda.is_available():
|
|
82
|
+
return nullcontext()
|
|
83
|
+
dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
|
|
84
|
+
return torch.autocast("cuda", dtype=dtype)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def log_trackio_dashboard():
|
|
88
|
+
"""Surface the Trackio dashboard URL so the user can watch training live."""
|
|
89
|
+
try:
|
|
90
|
+
from huggingface_hub import whoami
|
|
91
|
+
|
|
92
|
+
hf_user = whoami().get("name")
|
|
93
|
+
if hf_user:
|
|
94
|
+
logging.info(
|
|
95
|
+
f"Trackio dashboard (live training progress): https://huggingface.co/spaces/{hf_user}/trackio"
|
|
96
|
+
)
|
|
97
|
+
except Exception:
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
TOKENIZER_NAME = "google-bert/bert-base-uncased"
|
|
102
|
+
EMBEDDING_DIM = 1024
|
|
103
|
+
MATRYOSHKA_DIMS = [1024, 512, 256, 128, 64, 32] # ordered largest-first per MatryoshkaLoss
|
|
104
|
+
|
|
105
|
+
# False: random init (recommended for >=1M pairs, reaches a higher ceiling).
|
|
106
|
+
# True: warm-start from a model2vec checkpoint (recommended for <1M pairs).
|
|
107
|
+
# Default False because the example dataset (GooAQ, ~3M pairs) is well above the threshold.
|
|
108
|
+
WARMSTART = False
|
|
109
|
+
WARMSTART_MODEL2VEC = "minishlab/potion-base-8M"
|
|
110
|
+
|
|
111
|
+
OUTPUT_DIR = "models/static-embedding-bert-uncased"
|
|
112
|
+
RUN_NAME = "static-embedding-bert-uncased"
|
|
113
|
+
SMOKE_TEST = os.environ.get("SMOKE_TEST") == "1"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def setup_logging():
|
|
117
|
+
"""Configure logging + TF32. Tees to logs/{RUN_NAME}.log and silences HTTP spam."""
|
|
118
|
+
os.makedirs("logs", exist_ok=True)
|
|
119
|
+
logging.basicConfig(
|
|
120
|
+
format="%(asctime)s - %(message)s",
|
|
121
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
122
|
+
level=logging.INFO,
|
|
123
|
+
handlers=[logging.StreamHandler(), logging.FileHandler(f"logs/{RUN_NAME}.log")],
|
|
124
|
+
force=True,
|
|
125
|
+
)
|
|
126
|
+
for noisy in ("httpx", "httpcore", "huggingface_hub", "urllib3", "filelock", "fsspec"):
|
|
127
|
+
logging.getLogger(noisy).setLevel(logging.WARNING)
|
|
128
|
+
if torch.cuda.is_available():
|
|
129
|
+
torch.set_float32_matmul_precision("high")
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def load_pair_dataset() -> datasets.Dataset:
|
|
133
|
+
"""Load a contrastive-pair dataset for training.
|
|
134
|
+
|
|
135
|
+
StaticEmbedding starts from random initialization, so it needs *a lot* of
|
|
136
|
+
contrastive signal to converge. GooAQ alone provides ~3M (question, answer)
|
|
137
|
+
pairs, comfortably over the >=1M threshold below which a warm-start would
|
|
138
|
+
beat random init. For stronger production models, concatenate more sources
|
|
139
|
+
(NaturalQuestions, MSMARCO, MIRACL, etc.) and shuffle, in the same family of
|
|
140
|
+
sources used in `sentence-transformers/static-retrieval-mrl-en-v1`.
|
|
141
|
+
"""
|
|
142
|
+
return (
|
|
143
|
+
load_dataset("sentence-transformers/gooaq", split="train")
|
|
144
|
+
.rename_columns({"question": "anchor", "answer": "positive"})
|
|
145
|
+
.select_columns(["anchor", "positive"])
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def main() -> None:
|
|
150
|
+
parser = argparse.ArgumentParser()
|
|
151
|
+
parser.add_argument(
|
|
152
|
+
"--eval-only", type=str, default=None, help="Skip training; load this saved model and run only the evaluator."
|
|
153
|
+
)
|
|
154
|
+
cli, _ = parser.parse_known_args()
|
|
155
|
+
|
|
156
|
+
setup_logging()
|
|
157
|
+
|
|
158
|
+
if cli.eval_only:
|
|
159
|
+
logging.info(f"Eval-only mode: loading model from {cli.eval_only}")
|
|
160
|
+
model = SentenceTransformer(cli.eval_only)
|
|
161
|
+
evaluator = NanoBEIREvaluator(dataset_names=["msmarco", "nfcorpus", "nq"])
|
|
162
|
+
with autocast_ctx():
|
|
163
|
+
evaluator(model)
|
|
164
|
+
return
|
|
165
|
+
|
|
166
|
+
if WARMSTART:
|
|
167
|
+
logging.info(f"Warm-starting StaticEmbedding from model2vec: {WARMSTART_MODEL2VEC}")
|
|
168
|
+
# `StaticEmbedding.from_distillation("<bi-encoder>", vocabulary=...)` is the
|
|
169
|
+
# alternative warm-start path (distil from a stronger teacher's vectors). Pick
|
|
170
|
+
# one. model2vec is faster to load and converges quickly on smaller datasets.
|
|
171
|
+
static_embedding = StaticEmbedding.from_model2vec(WARMSTART_MODEL2VEC)
|
|
172
|
+
else:
|
|
173
|
+
logging.info(f"Random-init StaticEmbedding from {TOKENIZER_NAME} tokenizer (dim={EMBEDDING_DIM})")
|
|
174
|
+
tokenizer = Tokenizer.from_pretrained(TOKENIZER_NAME)
|
|
175
|
+
static_embedding = StaticEmbedding(tokenizer, embedding_dim=EMBEDDING_DIM)
|
|
176
|
+
model = SentenceTransformer(
|
|
177
|
+
modules=[static_embedding],
|
|
178
|
+
model_card_data=SentenceTransformerModelCardData(
|
|
179
|
+
language="en",
|
|
180
|
+
license="apache-2.0",
|
|
181
|
+
model_name=f"Static embedding ({EMBEDDING_DIM}d) trained on contrastive pairs",
|
|
182
|
+
),
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
logging.info("Loading + concatenating training datasets")
|
|
186
|
+
full = load_pair_dataset()
|
|
187
|
+
if SMOKE_TEST:
|
|
188
|
+
logging.info("SMOKE_TEST=1: trimmed dataset; will run max_steps=1 and skip Hub push")
|
|
189
|
+
full = full.select(range(min(200, len(full))))
|
|
190
|
+
eval_size = 20 if SMOKE_TEST else 10_000
|
|
191
|
+
split = full.train_test_split(test_size=eval_size, seed=12)
|
|
192
|
+
train_dataset = split["train"]
|
|
193
|
+
eval_dataset = split["test"]
|
|
194
|
+
logging.info(f" train: {len(train_dataset):,} rows | eval: {len(eval_dataset):,} rows")
|
|
195
|
+
logging.info(f" columns: {train_dataset.column_names}")
|
|
196
|
+
|
|
197
|
+
inner = MultipleNegativesRankingLoss(model)
|
|
198
|
+
loss = MatryoshkaLoss(model, inner, matryoshka_dims=MATRYOSHKA_DIMS)
|
|
199
|
+
|
|
200
|
+
evaluator = NanoBEIREvaluator(dataset_names=["msmarco", "nfcorpus", "nq"])
|
|
201
|
+
logging.info("Baseline evaluation (random init scores near zero; warm-start scores 0.3+):")
|
|
202
|
+
with autocast_ctx():
|
|
203
|
+
# Must run before deriving metric_key: evaluator(model) mutates primary_metric to add the name_ prefix.
|
|
204
|
+
baseline_eval = evaluator(model)[evaluator.primary_metric]
|
|
205
|
+
metric_key = f"eval_{evaluator.primary_metric}"
|
|
206
|
+
|
|
207
|
+
args = SentenceTransformerTrainingArguments(
|
|
208
|
+
output_dir=OUTPUT_DIR,
|
|
209
|
+
num_train_epochs=1,
|
|
210
|
+
max_steps=1 if SMOKE_TEST else -1,
|
|
211
|
+
per_device_train_batch_size=2048,
|
|
212
|
+
per_device_eval_batch_size=2048,
|
|
213
|
+
learning_rate=5e-2
|
|
214
|
+
if WARMSTART
|
|
215
|
+
else 2e-1, # warm-start needs less LR. Both far higher than encoder fine-tuning
|
|
216
|
+
weight_decay=0.0, # weight decay on a token-bag is usually harmful
|
|
217
|
+
warmup_steps=0.1,
|
|
218
|
+
lr_scheduler_type="linear",
|
|
219
|
+
bf16=True,
|
|
220
|
+
batch_sampler=BatchSamplers.NO_DUPLICATES,
|
|
221
|
+
eval_strategy="steps",
|
|
222
|
+
eval_steps=0.1,
|
|
223
|
+
save_strategy="steps",
|
|
224
|
+
save_steps=0.1,
|
|
225
|
+
save_total_limit=2,
|
|
226
|
+
logging_steps=0.01,
|
|
227
|
+
logging_first_step=True,
|
|
228
|
+
load_best_model_at_end=True,
|
|
229
|
+
metric_for_best_model=metric_key,
|
|
230
|
+
greater_is_better=True,
|
|
231
|
+
report_to="none" if SMOKE_TEST else "trackio",
|
|
232
|
+
run_name=RUN_NAME,
|
|
233
|
+
seed=12,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
trainer = SentenceTransformerTrainer(
|
|
237
|
+
model=model,
|
|
238
|
+
args=args,
|
|
239
|
+
train_dataset=train_dataset,
|
|
240
|
+
eval_dataset=eval_dataset,
|
|
241
|
+
loss=loss,
|
|
242
|
+
evaluator=evaluator,
|
|
243
|
+
)
|
|
244
|
+
if not SMOKE_TEST:
|
|
245
|
+
log_trackio_dashboard()
|
|
246
|
+
trainer.train()
|
|
247
|
+
|
|
248
|
+
logging.info("Post-training evaluation:")
|
|
249
|
+
with autocast_ctx():
|
|
250
|
+
score = evaluator(model)[evaluator.primary_metric]
|
|
251
|
+
delta = score - baseline_eval
|
|
252
|
+
verdict = "WIN" if delta >= 0.005 else "MARGINAL" if delta >= 0 else "REGRESSION"
|
|
253
|
+
logging.info(f"VERDICT: {verdict} | score={score:.4f} | baseline={baseline_eval:.4f} | delta={delta:+.4f}")
|
|
254
|
+
|
|
255
|
+
final_dir = f"{OUTPUT_DIR}/final"
|
|
256
|
+
model.save_pretrained(final_dir)
|
|
257
|
+
logging.info(f"Saved final model to {final_dir}")
|
|
258
|
+
|
|
259
|
+
if SMOKE_TEST:
|
|
260
|
+
logging.info("SMOKE_TEST=1: skipping Hub push")
|
|
261
|
+
return
|
|
262
|
+
|
|
263
|
+
try:
|
|
264
|
+
commit_url = model.push_to_hub(RUN_NAME)
|
|
265
|
+
logging.info(f"Pushed model to {commit_url.rsplit('/commit/', 1)[0]}")
|
|
266
|
+
except Exception:
|
|
267
|
+
import traceback
|
|
268
|
+
|
|
269
|
+
logging.error(f"Hub push failed:\n{traceback.format_exc()}")
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
if __name__ == "__main__":
|
|
273
|
+
main()
|
package/skills/train-sentence-transformers/scripts/train_sentence_transformer_with_lora_example.py
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.10"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "sentence-transformers[train]>=5.0",
|
|
6
|
+
# "peft>=0.7.0",
|
|
7
|
+
# "datasets>=2.19.0",
|
|
8
|
+
# "accelerate>=0.26.0",
|
|
9
|
+
# "trackio",
|
|
10
|
+
# ]
|
|
11
|
+
# ///
|
|
12
|
+
"""LoRA / PEFT adapter training: memory-efficient fine-tuning.
|
|
13
|
+
|
|
14
|
+
Instead of training all parameters, LoRA injects small low-rank adapter
|
|
15
|
+
matrices and trains only those (~50-100x fewer trainable params). Works out
|
|
16
|
+
of the box with sentence-transformers via `peft`.
|
|
17
|
+
|
|
18
|
+
Use LoRA when: the base is a large decoder (Qwen3, Llama, Mistral, Gemma) and
|
|
19
|
+
a full fine-tune is VRAM-prohibitive. You want multiple task-specific adapters
|
|
20
|
+
on one base. You're nudging an existing strong retriever (E5-mistral,
|
|
21
|
+
Qwen3-Embedding) on domain data. Skip LoRA for small encoders (BERT-base,
|
|
22
|
+
MiniLM: full fine-tune is tractable and usually better) or tiny datasets
|
|
23
|
+
(<1k pairs: adapter rank becomes the bottleneck).
|
|
24
|
+
|
|
25
|
+
This template defaults to BERT-base for portability. Swap `MODEL_NAME` to a
|
|
26
|
+
decoder backbone for the use case LoRA actually shines on.
|
|
27
|
+
|
|
28
|
+
Architecture variants:
|
|
29
|
+
- Bi-encoder (this script): `TaskType.FEATURE_EXTRACTION`.
|
|
30
|
+
- Sparse-encoder: same pattern. `SparseEncoder` supports `add_adapter`. See
|
|
31
|
+
`examples/sparse_encoder/training/peft/train_splade_gooaq_peft.py`.
|
|
32
|
+
- Cross-encoder: use `TaskType.SEQ_CLS` for `num_labels >= 1`. Community
|
|
33
|
+
examples are sparse. Smoke-test with `max_steps=1` first.
|
|
34
|
+
|
|
35
|
+
Key hyperparameters:
|
|
36
|
+
- `r` (rank): 8-128. Bigger = more capacity + memory. 64 is a strong default.
|
|
37
|
+
- `lora_alpha`: typically 2 x r (some teams use 1 x r for stability).
|
|
38
|
+
- `lora_dropout`: 0.05-0.1. Raise to 0.1 for small datasets.
|
|
39
|
+
- `target_modules=None` auto-picks attention modules. Pass
|
|
40
|
+
`["q_proj", "k_proj", "v_proj", "o_proj"]` (attention) or
|
|
41
|
+
`["gate_proj", "up_proj", "down_proj"]` (MLP) for explicit control.
|
|
42
|
+
- `modules_to_save=["pooler"]` for CLS-pooled bases. The pooler Dense should
|
|
43
|
+
be trained too, not adapted.
|
|
44
|
+
- LR is HIGHER than full fine-tune: 1e-4 to 5e-4 for LoRA vs. 2e-5 full.
|
|
45
|
+
|
|
46
|
+
Rough memory savings on a 0.6B base (bf16, batch 64, seq 128): full fine-tune
|
|
47
|
+
~24 GB, LoRA r=64 ~10 GB (~12M trainable, 2%), LoRA r=16 ~8 GB (~3M, 0.5%).
|
|
48
|
+
Bigger savings on 7B+ models.
|
|
49
|
+
|
|
50
|
+
Saving / sharing: `model.save_pretrained("dir")` writes ONLY the adapter (few
|
|
51
|
+
MB) plus a reference to the base model. Loaders call the same one-liner.
|
|
52
|
+
`peft` is invoked and the base downloaded on demand. For a merged model that
|
|
53
|
+
loads without `peft` (needed for vLLM-style servers), call
|
|
54
|
+
`model.transformers_model.merge_and_unload()` then `save_pretrained` /
|
|
55
|
+
`push_to_hub`.
|
|
56
|
+
|
|
57
|
+
Swapping adapters at inference (the main multi-task deployment win):
|
|
58
|
+
model = SentenceTransformer("base-model")
|
|
59
|
+
model.load_adapter("adapter-a", adapter_name="a")
|
|
60
|
+
model.load_adapter("adapter-b", adapter_name="b")
|
|
61
|
+
model.set_adapter("a"); emb_a = model.encode([...])
|
|
62
|
+
|
|
63
|
+
QLoRA (4-bit base + LoRA) for 7B+ on consumer GPUs:
|
|
64
|
+
from transformers import BitsAndBytesConfig
|
|
65
|
+
bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4",
|
|
66
|
+
bnb_4bit_compute_dtype=torch.bfloat16)
|
|
67
|
+
model = SentenceTransformer("Qwen/Qwen3-Embedding-7B",
|
|
68
|
+
model_kwargs={"quantization_config": bnb})
|
|
69
|
+
model.add_adapter(LoraConfig(r=64, lora_alpha=128, ...))
|
|
70
|
+
`pip install bitsandbytes` first. Linux-only for bitsandbytes (Windows: the
|
|
71
|
+
fork or WSL).
|
|
72
|
+
|
|
73
|
+
Known issues:
|
|
74
|
+
- LoRA PEFT on Qwen2.5-VL / paligemma / gemma3 / internvl / aya_vision under
|
|
75
|
+
transformers v5: `AutoModel.from_pretrained(peft_path)` crashes with
|
|
76
|
+
`KeyError: 'qwen2_vl'`. Pin transformers to 4.x or wait for the upstream fix.
|
|
77
|
+
- `gradient_checkpointing=True` + LoRA: usually works. If you hit "None of
|
|
78
|
+
the inputs have requires_grad=True", call
|
|
79
|
+
`model.transformers_model.enable_input_require_grads()` after `add_adapter`.
|
|
80
|
+
- `add_adapter` before pooling: when building from scratch (not loading a
|
|
81
|
+
pre-assembled checkpoint), call `add_adapter` AFTER
|
|
82
|
+
`SentenceTransformer(modules=[...])` is complete.
|
|
83
|
+
|
|
84
|
+
Common gotchas: LR still at 2e-5 (LoRA needs higher). Forgetting to merge for
|
|
85
|
+
vLLM-style servers (they don't load `peft`). `r=8` too small for retrievers
|
|
86
|
+
trained on millions of pairs (try 32 or 64). `modules_to_save` missing the
|
|
87
|
+
pooler on CLS-pooled bases.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
from __future__ import annotations
|
|
91
|
+
|
|
92
|
+
import argparse
|
|
93
|
+
import logging
|
|
94
|
+
import os
|
|
95
|
+
from contextlib import nullcontext
|
|
96
|
+
|
|
97
|
+
import torch
|
|
98
|
+
from datasets import load_dataset
|
|
99
|
+
from peft import LoraConfig, TaskType
|
|
100
|
+
|
|
101
|
+
from sentence_transformers import (
|
|
102
|
+
SentenceTransformer,
|
|
103
|
+
SentenceTransformerModelCardData,
|
|
104
|
+
SentenceTransformerTrainer,
|
|
105
|
+
SentenceTransformerTrainingArguments,
|
|
106
|
+
)
|
|
107
|
+
from sentence_transformers.base.sampler import BatchSamplers
|
|
108
|
+
from sentence_transformers.sentence_transformer.evaluation import NanoBEIREvaluator
|
|
109
|
+
from sentence_transformers.sentence_transformer.losses import CachedMultipleNegativesRankingLoss
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def autocast_ctx():
|
|
113
|
+
"""bf16/fp16 autocast for evaluator calls outside the trainer (which has its own autocast)."""
|
|
114
|
+
if not torch.cuda.is_available():
|
|
115
|
+
return nullcontext()
|
|
116
|
+
dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
|
|
117
|
+
return torch.autocast("cuda", dtype=dtype)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def log_trackio_dashboard():
|
|
121
|
+
"""Surface the Trackio dashboard URL so the user can watch training live."""
|
|
122
|
+
try:
|
|
123
|
+
from huggingface_hub import whoami
|
|
124
|
+
|
|
125
|
+
hf_user = whoami().get("name")
|
|
126
|
+
if hf_user:
|
|
127
|
+
logging.info(
|
|
128
|
+
f"Trackio dashboard (live training progress): https://huggingface.co/spaces/{hf_user}/trackio"
|
|
129
|
+
)
|
|
130
|
+
except Exception:
|
|
131
|
+
pass
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
MODEL_NAME = "google-bert/bert-base-uncased"
|
|
135
|
+
OUTPUT_DIR = "models/bert-base-gooaq-lora"
|
|
136
|
+
RUN_NAME = "bert-base-gooaq-lora"
|
|
137
|
+
SMOKE_TEST = os.environ.get("SMOKE_TEST") == "1"
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def setup_logging():
|
|
141
|
+
"""Configure logging + TF32. Tees to logs/{RUN_NAME}.log and silences HTTP spam."""
|
|
142
|
+
os.makedirs("logs", exist_ok=True)
|
|
143
|
+
logging.basicConfig(
|
|
144
|
+
format="%(asctime)s - %(message)s",
|
|
145
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
146
|
+
level=logging.INFO,
|
|
147
|
+
handlers=[logging.StreamHandler(), logging.FileHandler(f"logs/{RUN_NAME}.log")],
|
|
148
|
+
force=True,
|
|
149
|
+
)
|
|
150
|
+
for noisy in ("httpx", "httpcore", "huggingface_hub", "urllib3", "filelock", "fsspec"):
|
|
151
|
+
logging.getLogger(noisy).setLevel(logging.WARNING)
|
|
152
|
+
if torch.cuda.is_available():
|
|
153
|
+
torch.set_float32_matmul_precision("high") # TF32 on Ampere+, no quality loss
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def main() -> None:
|
|
157
|
+
parser = argparse.ArgumentParser()
|
|
158
|
+
parser.add_argument(
|
|
159
|
+
"--eval-only", type=str, default=None, help="Skip training; load this saved model and run only the evaluator."
|
|
160
|
+
)
|
|
161
|
+
cli, _ = parser.parse_known_args()
|
|
162
|
+
|
|
163
|
+
setup_logging()
|
|
164
|
+
|
|
165
|
+
if cli.eval_only:
|
|
166
|
+
logging.info(f"Eval-only mode: loading model from {cli.eval_only}")
|
|
167
|
+
model = SentenceTransformer(cli.eval_only)
|
|
168
|
+
evaluator = NanoBEIREvaluator()
|
|
169
|
+
with autocast_ctx():
|
|
170
|
+
evaluator(model)
|
|
171
|
+
return
|
|
172
|
+
|
|
173
|
+
model = SentenceTransformer(
|
|
174
|
+
MODEL_NAME,
|
|
175
|
+
model_card_data=SentenceTransformerModelCardData(
|
|
176
|
+
language="en",
|
|
177
|
+
license="apache-2.0",
|
|
178
|
+
model_name=f"{MODEL_NAME.split('/')[-1]} LoRA adapter on GooAQ",
|
|
179
|
+
),
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
peft_config = LoraConfig(
|
|
183
|
+
task_type=TaskType.FEATURE_EXTRACTION,
|
|
184
|
+
inference_mode=False,
|
|
185
|
+
r=64,
|
|
186
|
+
lora_alpha=128,
|
|
187
|
+
lora_dropout=0.1,
|
|
188
|
+
)
|
|
189
|
+
model.add_adapter(peft_config)
|
|
190
|
+
trainable = sum(p.numel() for p in model.parameters() if p.requires_grad)
|
|
191
|
+
total = sum(p.numel() for p in model.parameters())
|
|
192
|
+
logging.info(f"trainable params: {trainable:,} / {total:,} ({100 * trainable / total:.2f}%)")
|
|
193
|
+
|
|
194
|
+
full = load_dataset("sentence-transformers/gooaq", split="train")
|
|
195
|
+
if SMOKE_TEST:
|
|
196
|
+
logging.info("SMOKE_TEST=1: trimmed dataset; will run max_steps=1 and skip Hub push")
|
|
197
|
+
full = full.select(range(min(200, len(full))))
|
|
198
|
+
eval_size = 20 if SMOKE_TEST else 10_000
|
|
199
|
+
train_cap = 50 if SMOKE_TEST else 500_000
|
|
200
|
+
split = full.train_test_split(test_size=eval_size, seed=12)
|
|
201
|
+
train_dataset = split["train"].select(range(min(train_cap, len(split["train"]))))
|
|
202
|
+
eval_dataset = split["test"]
|
|
203
|
+
logging.info(f"train={len(train_dataset):,} eval={len(eval_dataset):,}")
|
|
204
|
+
|
|
205
|
+
loss = CachedMultipleNegativesRankingLoss(model, mini_batch_size=32)
|
|
206
|
+
|
|
207
|
+
evaluator = NanoBEIREvaluator()
|
|
208
|
+
logging.info("Baseline:")
|
|
209
|
+
with autocast_ctx():
|
|
210
|
+
# Must run before deriving metric_key: evaluator(model) mutates primary_metric to add the name_ prefix.
|
|
211
|
+
baseline_eval = evaluator(model)[evaluator.primary_metric]
|
|
212
|
+
metric_key = f"eval_{evaluator.primary_metric}"
|
|
213
|
+
|
|
214
|
+
args = SentenceTransformerTrainingArguments(
|
|
215
|
+
output_dir=OUTPUT_DIR,
|
|
216
|
+
num_train_epochs=1,
|
|
217
|
+
max_steps=1 if SMOKE_TEST else -1,
|
|
218
|
+
per_device_train_batch_size=512,
|
|
219
|
+
per_device_eval_batch_size=512,
|
|
220
|
+
learning_rate=1e-4,
|
|
221
|
+
weight_decay=0.01,
|
|
222
|
+
warmup_steps=0.1,
|
|
223
|
+
bf16=True,
|
|
224
|
+
batch_sampler=BatchSamplers.NO_DUPLICATES,
|
|
225
|
+
eval_strategy="steps",
|
|
226
|
+
eval_steps=0.1,
|
|
227
|
+
save_strategy="steps",
|
|
228
|
+
save_steps=0.1,
|
|
229
|
+
save_total_limit=2,
|
|
230
|
+
logging_steps=0.01,
|
|
231
|
+
logging_first_step=True,
|
|
232
|
+
load_best_model_at_end=True,
|
|
233
|
+
metric_for_best_model=metric_key,
|
|
234
|
+
greater_is_better=True,
|
|
235
|
+
report_to="none" if SMOKE_TEST else "trackio",
|
|
236
|
+
run_name=RUN_NAME,
|
|
237
|
+
seed=12,
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
trainer = SentenceTransformerTrainer(
|
|
241
|
+
model=model,
|
|
242
|
+
args=args,
|
|
243
|
+
train_dataset=train_dataset,
|
|
244
|
+
eval_dataset=eval_dataset,
|
|
245
|
+
loss=loss,
|
|
246
|
+
evaluator=evaluator,
|
|
247
|
+
)
|
|
248
|
+
if not SMOKE_TEST:
|
|
249
|
+
log_trackio_dashboard()
|
|
250
|
+
trainer.train()
|
|
251
|
+
|
|
252
|
+
logging.info("Post-training evaluation:")
|
|
253
|
+
with autocast_ctx():
|
|
254
|
+
score = evaluator(model)[evaluator.primary_metric]
|
|
255
|
+
delta = score - baseline_eval
|
|
256
|
+
verdict = "WIN" if delta >= 0.005 else "MARGINAL" if delta >= 0 else "REGRESSION"
|
|
257
|
+
logging.info(f"VERDICT: {verdict} | score={score:.4f} | baseline={baseline_eval:.4f} | delta={delta:+.4f}")
|
|
258
|
+
|
|
259
|
+
model.save_pretrained(f"{OUTPUT_DIR}/final")
|
|
260
|
+
|
|
261
|
+
if SMOKE_TEST:
|
|
262
|
+
logging.info("SMOKE_TEST=1: skipping Hub push")
|
|
263
|
+
return
|
|
264
|
+
|
|
265
|
+
try:
|
|
266
|
+
commit_url = model.push_to_hub(RUN_NAME)
|
|
267
|
+
logging.info(f"Pushed model to {commit_url.rsplit('/commit/', 1)[0]}")
|
|
268
|
+
except Exception:
|
|
269
|
+
import traceback
|
|
270
|
+
|
|
271
|
+
logging.error(f"Hub push failed:\n{traceback.format_exc()}")
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
if __name__ == "__main__":
|
|
275
|
+
main()
|