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,240 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.10"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "sentence-transformers[train]>=6.0",
|
|
6
|
+
# "datasets>=2.19.0",
|
|
7
|
+
# "accelerate>=0.26.0",
|
|
8
|
+
# "trackio",
|
|
9
|
+
# ]
|
|
10
|
+
# ///
|
|
11
|
+
"""Production-ready multi-vector (ColBERT / late-interaction) training template.
|
|
12
|
+
|
|
13
|
+
This script demonstrates a recommended setup:
|
|
14
|
+
- MultiVectorMultipleNegativesRankingLoss on (anchor, positive, negative) triplets, scored with MaxSim
|
|
15
|
+
- MultiVectorNanoBEIREvaluator for retrieval metrics during training
|
|
16
|
+
- BatchSamplers.NO_DUPLICATES (critical for MNRL-family)
|
|
17
|
+
- load_best_model_at_end with a retrieval metric
|
|
18
|
+
- Auto model card + optional Hub push
|
|
19
|
+
|
|
20
|
+
Runs identically in two modes:
|
|
21
|
+
|
|
22
|
+
# Local
|
|
23
|
+
pip install "sentence-transformers[train]>=6.0"
|
|
24
|
+
python train_multi_vector_encoder_example.py
|
|
25
|
+
|
|
26
|
+
# Or with uv (no explicit install needed)
|
|
27
|
+
uv run train_multi_vector_encoder_example.py
|
|
28
|
+
|
|
29
|
+
# Multi-GPU
|
|
30
|
+
accelerate launch train_multi_vector_encoder_example.py
|
|
31
|
+
|
|
32
|
+
# Hugging Face Jobs (paste the entire file contents as `script`)
|
|
33
|
+
hf_jobs("uv", {
|
|
34
|
+
"script": "<contents of this file>",
|
|
35
|
+
"flavor": "a10g-large",
|
|
36
|
+
"timeout": "3h",
|
|
37
|
+
"secrets": {"HF_TOKEN": "$HF_TOKEN"},
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
Adjust MODEL_NAME, DATASET_NAME, OUTPUT_DIR, RUN_NAME at the top of the script.
|
|
41
|
+
Default Hub push: at end of run, public, under your authenticated user as
|
|
42
|
+
`{user}/{RUN_NAME}`, wrapped in try/except. To skip the push, comment out the
|
|
43
|
+
push_to_hub call. For HF Jobs (ephemeral env), also enable in-trainer push:
|
|
44
|
+
add `push_to_hub=True`, `hub_model_id=RUN_NAME`, `hub_strategy="every_save"`
|
|
45
|
+
to TrainingArguments.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
from __future__ import annotations
|
|
49
|
+
|
|
50
|
+
import argparse
|
|
51
|
+
import logging
|
|
52
|
+
import os
|
|
53
|
+
from contextlib import nullcontext
|
|
54
|
+
|
|
55
|
+
import torch
|
|
56
|
+
from datasets import load_dataset
|
|
57
|
+
|
|
58
|
+
from sentence_transformers import (
|
|
59
|
+
MultiVectorEncoder,
|
|
60
|
+
MultiVectorEncoderModelCardData,
|
|
61
|
+
MultiVectorEncoderTrainer,
|
|
62
|
+
MultiVectorEncoderTrainingArguments,
|
|
63
|
+
)
|
|
64
|
+
from sentence_transformers.base.sampler import BatchSamplers
|
|
65
|
+
from sentence_transformers.multi_vector_encoder.evaluation import MultiVectorNanoBEIREvaluator
|
|
66
|
+
from sentence_transformers.multi_vector_encoder.losses import MultiVectorMultipleNegativesRankingLoss
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def autocast_ctx():
|
|
70
|
+
"""bf16/fp16 autocast for evaluator calls outside the trainer (which has its own autocast)."""
|
|
71
|
+
if not torch.cuda.is_available():
|
|
72
|
+
return nullcontext()
|
|
73
|
+
dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
|
|
74
|
+
return torch.autocast("cuda", dtype=dtype)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def log_trackio_dashboard():
|
|
78
|
+
"""Surface the Trackio dashboard URL so the user can watch training live."""
|
|
79
|
+
try:
|
|
80
|
+
from huggingface_hub import whoami
|
|
81
|
+
|
|
82
|
+
hf_user = whoami().get("name")
|
|
83
|
+
if hf_user:
|
|
84
|
+
logging.info(
|
|
85
|
+
f"Trackio dashboard (live training progress): https://huggingface.co/spaces/{hf_user}/trackio"
|
|
86
|
+
)
|
|
87
|
+
except Exception:
|
|
88
|
+
pass
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# Bare HF encoder. MVE grafts a fresh 128-dim token projection on top.
|
|
92
|
+
MODEL_NAME = "answerdotai/ModernBERT-base"
|
|
93
|
+
DATASET_NAME = "sentence-transformers/msmarco-bm25"
|
|
94
|
+
DATASET_SUBSET = "triplet"
|
|
95
|
+
TRAIN_SIZE = 50_000
|
|
96
|
+
EVAL_SIZE = 1_000
|
|
97
|
+
OUTPUT_DIR = "models/modernbert-base-msmarco-colbert"
|
|
98
|
+
RUN_NAME = "modernbert-base-msmarco-colbert"
|
|
99
|
+
SMOKE_TEST = os.environ.get("SMOKE_TEST") == "1"
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def setup_logging():
|
|
103
|
+
"""Configure logging + TF32. Tees to logs/{RUN_NAME}.log and silences HTTP spam."""
|
|
104
|
+
os.makedirs("logs", exist_ok=True)
|
|
105
|
+
logging.basicConfig(
|
|
106
|
+
format="%(asctime)s - %(message)s",
|
|
107
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
108
|
+
level=logging.INFO,
|
|
109
|
+
handlers=[logging.StreamHandler(), logging.FileHandler(f"logs/{RUN_NAME}.log")],
|
|
110
|
+
force=True,
|
|
111
|
+
)
|
|
112
|
+
for noisy in ("httpx", "httpcore", "huggingface_hub", "urllib3", "filelock", "fsspec"):
|
|
113
|
+
logging.getLogger(noisy).setLevel(logging.WARNING)
|
|
114
|
+
if torch.cuda.is_available():
|
|
115
|
+
torch.set_float32_matmul_precision("high") # TF32 on Ampere+, no quality loss
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def main() -> None:
|
|
119
|
+
parser = argparse.ArgumentParser()
|
|
120
|
+
parser.add_argument(
|
|
121
|
+
"--eval-only", type=str, default=None, help="Skip training, load this saved model and run only the evaluator."
|
|
122
|
+
)
|
|
123
|
+
cli, _ = parser.parse_known_args()
|
|
124
|
+
|
|
125
|
+
setup_logging()
|
|
126
|
+
|
|
127
|
+
if cli.eval_only:
|
|
128
|
+
logging.info(f"Eval-only mode: loading model from {cli.eval_only}")
|
|
129
|
+
model = MultiVectorEncoder(cli.eval_only)
|
|
130
|
+
evaluator = MultiVectorNanoBEIREvaluator(batch_size=16)
|
|
131
|
+
with autocast_ctx():
|
|
132
|
+
evaluator(model)
|
|
133
|
+
return
|
|
134
|
+
|
|
135
|
+
logging.info(f"Loading base model: {MODEL_NAME}")
|
|
136
|
+
# Load in fp32, autocast bf16 during forward. torch_dtype=bfloat16 breaks the optimizer's precision.
|
|
137
|
+
model = MultiVectorEncoder(
|
|
138
|
+
MODEL_NAME,
|
|
139
|
+
model_card_data=MultiVectorEncoderModelCardData(
|
|
140
|
+
language="en",
|
|
141
|
+
license="apache-2.0",
|
|
142
|
+
model_name=f"ColBERT {MODEL_NAME.split('/')[-1]} trained on MS MARCO",
|
|
143
|
+
),
|
|
144
|
+
model_kwargs={"torch_dtype": "float32"},
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
logging.info(f"Loading dataset: {DATASET_NAME} ({DATASET_SUBSET})")
|
|
148
|
+
train_size = 50 if SMOKE_TEST else TRAIN_SIZE
|
|
149
|
+
eval_size = 20 if SMOKE_TEST else EVAL_SIZE
|
|
150
|
+
full_dataset = load_dataset(DATASET_NAME, DATASET_SUBSET, split="train").select(range(train_size + eval_size))
|
|
151
|
+
dataset_dict = full_dataset.train_test_split(test_size=eval_size, seed=12)
|
|
152
|
+
train_dataset = dataset_dict["train"]
|
|
153
|
+
eval_dataset = dataset_dict["test"]
|
|
154
|
+
if SMOKE_TEST:
|
|
155
|
+
logging.info("SMOKE_TEST=1: trimmed dataset, will run max_steps=1 and skip Hub push")
|
|
156
|
+
logging.info(f" train: {len(train_dataset):,} examples")
|
|
157
|
+
logging.info(f" eval: {len(eval_dataset):,} examples")
|
|
158
|
+
|
|
159
|
+
# MNRL with in-batch negatives + explicit hard negatives. scale=1.0 (default) is correct for
|
|
160
|
+
# unnormalized MaxSim: do not copy scale=20.0 from bi-encoder MNRL. Length-normalized MeanMaxSim
|
|
161
|
+
# scoring instead wants a scale of roughly the average query length.
|
|
162
|
+
loss = MultiVectorMultipleNegativesRankingLoss(model=model)
|
|
163
|
+
|
|
164
|
+
# Cheap in-training evaluator on 3 datasets (drives `load_best_model_at_end`).
|
|
165
|
+
# The end-of-run evaluator below covers the full 13-dataset suite for the VERDICT delta.
|
|
166
|
+
evaluator = MultiVectorNanoBEIREvaluator(dataset_names=["msmarco", "nq", "fiqa2018"], batch_size=16)
|
|
167
|
+
test_evaluator = MultiVectorNanoBEIREvaluator(show_progress_bar=True, batch_size=16)
|
|
168
|
+
logging.info("Baseline evaluation (before training):")
|
|
169
|
+
with autocast_ctx():
|
|
170
|
+
# Must run before deriving metric_key: evaluator(model) mutates primary_metric to add the name_ prefix.
|
|
171
|
+
evaluator(model) # populates primary_metric on the training-time evaluator
|
|
172
|
+
# Baseline on the full suite so the VERDICT delta is apples-to-apples with the post-training score.
|
|
173
|
+
baseline_eval = test_evaluator(model)[test_evaluator.primary_metric]
|
|
174
|
+
metric_key = f"eval_{evaluator.primary_metric}"
|
|
175
|
+
|
|
176
|
+
args = MultiVectorEncoderTrainingArguments(
|
|
177
|
+
output_dir=OUTPUT_DIR,
|
|
178
|
+
num_train_epochs=1,
|
|
179
|
+
max_steps=1 if SMOKE_TEST else -1,
|
|
180
|
+
per_device_train_batch_size=32,
|
|
181
|
+
per_device_eval_batch_size=32,
|
|
182
|
+
learning_rate=3e-5,
|
|
183
|
+
weight_decay=0.01,
|
|
184
|
+
warmup_steps=0.05,
|
|
185
|
+
lr_scheduler_type="linear",
|
|
186
|
+
bf16=True,
|
|
187
|
+
batch_sampler=BatchSamplers.NO_DUPLICATES,
|
|
188
|
+
eval_strategy="steps",
|
|
189
|
+
eval_steps=0.1,
|
|
190
|
+
save_strategy="steps",
|
|
191
|
+
save_steps=0.1,
|
|
192
|
+
save_total_limit=2,
|
|
193
|
+
logging_steps=0.01,
|
|
194
|
+
logging_first_step=True,
|
|
195
|
+
load_best_model_at_end=True,
|
|
196
|
+
metric_for_best_model=metric_key,
|
|
197
|
+
greater_is_better=True,
|
|
198
|
+
report_to="none" if SMOKE_TEST else "trackio",
|
|
199
|
+
run_name=RUN_NAME,
|
|
200
|
+
seed=12,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
trainer = MultiVectorEncoderTrainer(
|
|
204
|
+
model=model,
|
|
205
|
+
args=args,
|
|
206
|
+
train_dataset=train_dataset,
|
|
207
|
+
eval_dataset=eval_dataset,
|
|
208
|
+
loss=loss,
|
|
209
|
+
evaluator=evaluator,
|
|
210
|
+
)
|
|
211
|
+
if not SMOKE_TEST:
|
|
212
|
+
log_trackio_dashboard()
|
|
213
|
+
trainer.train()
|
|
214
|
+
|
|
215
|
+
logging.info("Post-training evaluation (full NanoBEIR suite):")
|
|
216
|
+
with autocast_ctx():
|
|
217
|
+
score = test_evaluator(model)[test_evaluator.primary_metric]
|
|
218
|
+
delta = score - baseline_eval
|
|
219
|
+
verdict = "WIN" if delta >= 0.005 else "MARGINAL" if delta >= 0 else "REGRESSION"
|
|
220
|
+
logging.info(f"VERDICT: {verdict} | score={score:.4f} | baseline={baseline_eval:.4f} | delta={delta:+.4f}")
|
|
221
|
+
|
|
222
|
+
final_dir = f"{OUTPUT_DIR}/final"
|
|
223
|
+
model.save_pretrained(final_dir)
|
|
224
|
+
logging.info(f"Saved final model to {final_dir}")
|
|
225
|
+
|
|
226
|
+
if SMOKE_TEST:
|
|
227
|
+
logging.info("SMOKE_TEST=1: skipping Hub push")
|
|
228
|
+
return
|
|
229
|
+
|
|
230
|
+
try:
|
|
231
|
+
commit_url = model.push_to_hub(RUN_NAME) # public by default, uses your authenticated user
|
|
232
|
+
logging.info(f"Pushed model to {commit_url.rsplit('/commit/', 1)[0]}")
|
|
233
|
+
except Exception:
|
|
234
|
+
import traceback
|
|
235
|
+
|
|
236
|
+
logging.error(f"Hub push failed:\n{traceback.format_exc()}")
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
if __name__ == "__main__":
|
|
240
|
+
main()
|
|
@@ -0,0 +1,303 @@
|
|
|
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
|
+
# ]
|
|
10
|
+
# ///
|
|
11
|
+
"""Distillation template: train a small student to match a stronger teacher's embeddings.
|
|
12
|
+
|
|
13
|
+
This script implements **embedding MSE** (Pattern 1 below): pre-compute teacher
|
|
14
|
+
embeddings, train the student to minimize MSE against them. Yields a smaller /
|
|
15
|
+
faster student typically reaching 95-99% of teacher quality.
|
|
16
|
+
|
|
17
|
+
Three distillation patterns:
|
|
18
|
+
- Pattern 1 (this script): `(text, teacher_embedding)` + `MSELoss`. Cheapest,
|
|
19
|
+
most data-efficient. Use when student + teacher are both bi-encoders with the
|
|
20
|
+
same output dim and you have a pile of unlabeled text.
|
|
21
|
+
- Pattern 2: `(query, positive, negative, score_diff)` + `MarginMSELoss` from a
|
|
22
|
+
CrossEncoder teacher's score differences. Workhorse of ms-marco distillation.
|
|
23
|
+
See `../references/losses_sentence_transformer.md` (MarginMSELoss section).
|
|
24
|
+
- Pattern 3: `(query, positive, neg_1, ..., neg_n, labels)` + `DistillKLDivLoss`
|
|
25
|
+
to preserve the full teacher distribution. More data-hungry. Natural fit when
|
|
26
|
+
distilling from an ensemble of rerankers.
|
|
27
|
+
|
|
28
|
+
Mismatched dims: if the student's dim is smaller than the teacher's, MSELoss
|
|
29
|
+
fails. Add a PCA-init `Dense` projection so the teacher matches the student:
|
|
30
|
+
|
|
31
|
+
from sklearn.decomposition import PCA
|
|
32
|
+
from sentence_transformers.sentence_transformer.modules import Dense
|
|
33
|
+
pca = PCA(n_components=student.get_embedding_dimension())
|
|
34
|
+
pca.fit(teacher.encode(sentences[:20_000], convert_to_numpy=True))
|
|
35
|
+
dense = Dense(
|
|
36
|
+
in_features=teacher.get_embedding_dimension(),
|
|
37
|
+
out_features=student.get_embedding_dimension(),
|
|
38
|
+
bias=False, activation_function=torch.nn.Identity(),
|
|
39
|
+
)
|
|
40
|
+
dense.linear.weight = torch.nn.Parameter(torch.from_numpy(pca.components_).float())
|
|
41
|
+
teacher.add_module("dense", dense)
|
|
42
|
+
|
|
43
|
+
Distilling to a CrossEncoder student: construct with `activation_fn=nn.Identity()`
|
|
44
|
+
or eval ranking collapses silently. Every non-BCE CE loss expects raw logits
|
|
45
|
+
during training, but the model's `activation_fn` runs at eval time inside
|
|
46
|
+
`predict()`. Default `Sigmoid` (when `num_labels=1`) saturates raw logits >5 to
|
|
47
|
+
~1.0, dropping nDCG from e.g. ~0.59 to ~0.14 with healthy-looking training loss.
|
|
48
|
+
Applies to all CE distillation / listwise / pairwise losses. See SKILL.md
|
|
49
|
+
Directive 7 ([CE]).
|
|
50
|
+
|
|
51
|
+
Layer pruning shortcut for Pattern 1: copy the teacher, delete layers (often
|
|
52
|
+
keeps 99%+ of quality at a fraction of the layers), then distill with MSELoss:
|
|
53
|
+
|
|
54
|
+
from copy import deepcopy
|
|
55
|
+
student = deepcopy(teacher)
|
|
56
|
+
layers = student.transformers_model.encoder.layer # BERT/MPNet/DistilBERT
|
|
57
|
+
student.transformers_model.encoder.layer = torch.nn.ModuleList(
|
|
58
|
+
[layers[0], layers[3], layers[6], layers[9]]
|
|
59
|
+
)
|
|
60
|
+
student.transformers_model.config.num_hidden_layers = 4
|
|
61
|
+
|
|
62
|
+
Tips: pre-compute teacher outputs once and cache (`dataset.save_to_disk`). LR
|
|
63
|
+
1e-4 (higher than the usual 2e-5: the target is dense regression). 1 epoch is
|
|
64
|
+
usually enough. The student inherits the teacher's weaknesses, so pick a
|
|
65
|
+
teacher strong on YOUR task. If the teacher expects an instruction prefix,
|
|
66
|
+
include it during teacher encoding so the student's target matches inference.
|
|
67
|
+
|
|
68
|
+
For multilingual student distillation (extend an English teacher to other
|
|
69
|
+
languages without in-language supervised data), see `train_sentence_transformer_make_multilingual_example.py`.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
from __future__ import annotations
|
|
73
|
+
|
|
74
|
+
import argparse
|
|
75
|
+
import logging
|
|
76
|
+
import os
|
|
77
|
+
from contextlib import nullcontext
|
|
78
|
+
|
|
79
|
+
import torch
|
|
80
|
+
from datasets import Dataset, load_dataset
|
|
81
|
+
|
|
82
|
+
from sentence_transformers import (
|
|
83
|
+
SentenceTransformer,
|
|
84
|
+
SentenceTransformerModelCardData,
|
|
85
|
+
SentenceTransformerTrainer,
|
|
86
|
+
SentenceTransformerTrainingArguments,
|
|
87
|
+
)
|
|
88
|
+
from sentence_transformers.sentence_transformer.evaluation import EmbeddingSimilarityEvaluator
|
|
89
|
+
from sentence_transformers.sentence_transformer.losses import MSELoss
|
|
90
|
+
from sentence_transformers.sentence_transformer.modules import Normalize
|
|
91
|
+
from sentence_transformers.util.similarity import SimilarityFunction
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def autocast_ctx():
|
|
95
|
+
"""bf16/fp16 autocast for evaluator calls outside the trainer (which has its own autocast)."""
|
|
96
|
+
if not torch.cuda.is_available():
|
|
97
|
+
return nullcontext()
|
|
98
|
+
dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
|
|
99
|
+
return torch.autocast("cuda", dtype=dtype)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def log_trackio_dashboard():
|
|
103
|
+
"""Surface the Trackio dashboard URL so the user can watch training live."""
|
|
104
|
+
try:
|
|
105
|
+
from huggingface_hub import whoami
|
|
106
|
+
|
|
107
|
+
hf_user = whoami().get("name")
|
|
108
|
+
if hf_user:
|
|
109
|
+
logging.info(
|
|
110
|
+
f"Trackio dashboard (live training progress): https://huggingface.co/spaces/{hf_user}/trackio"
|
|
111
|
+
)
|
|
112
|
+
except Exception:
|
|
113
|
+
pass
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
TEACHER_MODEL_NAME = "sentence-transformers/all-mpnet-base-v2"
|
|
117
|
+
STUDENT_MODEL_NAME = "distilbert/distilbert-base-uncased"
|
|
118
|
+
|
|
119
|
+
CORPUS_DATASET = "sentence-transformers/all-nli"
|
|
120
|
+
CORPUS_SUBSET = "pair"
|
|
121
|
+
|
|
122
|
+
TRAIN_SIZE = 50_000
|
|
123
|
+
EVAL_SIZE = 1_000
|
|
124
|
+
OUTPUT_DIR = "models/distilbert-distilled-from-mpnet"
|
|
125
|
+
RUN_NAME = "distilbert-distill-from-mpnet"
|
|
126
|
+
|
|
127
|
+
TEACHER_ENCODE_BATCH_SIZE = 256
|
|
128
|
+
TRAIN_BATCH_SIZE = 128
|
|
129
|
+
SMOKE_TEST = os.environ.get("SMOKE_TEST") == "1"
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def setup_logging():
|
|
133
|
+
"""Configure logging + TF32. Tees to logs/{RUN_NAME}.log and silences HTTP spam."""
|
|
134
|
+
os.makedirs("logs", exist_ok=True)
|
|
135
|
+
logging.basicConfig(
|
|
136
|
+
format="%(asctime)s - %(message)s",
|
|
137
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
138
|
+
level=logging.INFO,
|
|
139
|
+
handlers=[logging.StreamHandler(), logging.FileHandler(f"logs/{RUN_NAME}.log")],
|
|
140
|
+
force=True,
|
|
141
|
+
)
|
|
142
|
+
for noisy in ("httpx", "httpcore", "huggingface_hub", "urllib3", "filelock", "fsspec"):
|
|
143
|
+
logging.getLogger(noisy).setLevel(logging.WARNING)
|
|
144
|
+
if torch.cuda.is_available():
|
|
145
|
+
torch.set_float32_matmul_precision("high") # TF32 on Ampere+, no quality loss
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def main() -> None:
|
|
149
|
+
parser = argparse.ArgumentParser()
|
|
150
|
+
parser.add_argument(
|
|
151
|
+
"--eval-only", type=str, default=None, help="Skip training; load this saved model and run only the evaluator."
|
|
152
|
+
)
|
|
153
|
+
cli, _ = parser.parse_known_args()
|
|
154
|
+
|
|
155
|
+
setup_logging()
|
|
156
|
+
|
|
157
|
+
if cli.eval_only:
|
|
158
|
+
logging.info(f"Eval-only mode: loading model from {cli.eval_only}")
|
|
159
|
+
model = SentenceTransformer(cli.eval_only)
|
|
160
|
+
stsb = load_dataset("sentence-transformers/stsb", split="validation")
|
|
161
|
+
evaluator = EmbeddingSimilarityEvaluator(
|
|
162
|
+
sentences1=stsb["sentence1"],
|
|
163
|
+
sentences2=stsb["sentence2"],
|
|
164
|
+
scores=stsb["score"],
|
|
165
|
+
main_similarity=SimilarityFunction.COSINE,
|
|
166
|
+
name="sts-dev",
|
|
167
|
+
)
|
|
168
|
+
with autocast_ctx():
|
|
169
|
+
evaluator(model)
|
|
170
|
+
return
|
|
171
|
+
|
|
172
|
+
logging.info(f"Loading teacher: {TEACHER_MODEL_NAME}")
|
|
173
|
+
teacher = SentenceTransformer(TEACHER_MODEL_NAME)
|
|
174
|
+
|
|
175
|
+
logging.info(f"Loading student: {STUDENT_MODEL_NAME}")
|
|
176
|
+
student = SentenceTransformer(
|
|
177
|
+
STUDENT_MODEL_NAME,
|
|
178
|
+
model_card_data=SentenceTransformerModelCardData(
|
|
179
|
+
language="en",
|
|
180
|
+
license="apache-2.0",
|
|
181
|
+
model_name=f"{STUDENT_MODEL_NAME.split('/')[-1]} distilled from {TEACHER_MODEL_NAME.split('/')[-1]}",
|
|
182
|
+
),
|
|
183
|
+
)
|
|
184
|
+
# Match the teacher's final Normalize. MSELoss against unit-norm targets fights student
|
|
185
|
+
# outputs at norm ~5-10 and can silently regress
|
|
186
|
+
if any(isinstance(m, Normalize) for m in teacher) and not any(isinstance(m, Normalize) for m in student):
|
|
187
|
+
student.append(Normalize())
|
|
188
|
+
|
|
189
|
+
if student.get_embedding_dimension() != teacher.get_embedding_dimension():
|
|
190
|
+
raise SystemExit(
|
|
191
|
+
f"Student dim ({student.get_embedding_dimension()}) != teacher dim "
|
|
192
|
+
f"({teacher.get_embedding_dimension()}). Plain MSELoss requires matching dims. "
|
|
193
|
+
"Either pick a student with matching dim, or add a Dense projection layer "
|
|
194
|
+
"(PCA-initialized from teacher embeddings). See the 'MISMATCHED EMBEDDING DIMS' "
|
|
195
|
+
"section in this script's docstring."
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
logging.info(f"Loading corpus: {CORPUS_DATASET} ({CORPUS_SUBSET})")
|
|
199
|
+
train_size = 50 if SMOKE_TEST else TRAIN_SIZE
|
|
200
|
+
eval_size = 20 if SMOKE_TEST else EVAL_SIZE
|
|
201
|
+
if SMOKE_TEST:
|
|
202
|
+
logging.info("SMOKE_TEST=1: trimmed dataset; will run max_steps=1 and skip Hub push")
|
|
203
|
+
raw = load_dataset(CORPUS_DATASET, CORPUS_SUBSET, split="train")
|
|
204
|
+
sentences = list(dict.fromkeys(s for row in raw for s in (row["anchor"], row["positive"]) if isinstance(s, str)))
|
|
205
|
+
sentences = sentences[: train_size + eval_size]
|
|
206
|
+
train_sentences = sentences[:train_size]
|
|
207
|
+
eval_sentences = sentences[train_size : train_size + eval_size]
|
|
208
|
+
|
|
209
|
+
logging.info(f"Encoding {len(train_sentences):,} training sentences with the teacher (may take a while)")
|
|
210
|
+
teacher_train = teacher.encode(
|
|
211
|
+
train_sentences, batch_size=TEACHER_ENCODE_BATCH_SIZE, convert_to_numpy=True, show_progress_bar=True
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
logging.info(f"Encoding {len(eval_sentences):,} eval sentences with the teacher")
|
|
215
|
+
teacher_eval = teacher.encode(
|
|
216
|
+
eval_sentences, batch_size=TEACHER_ENCODE_BATCH_SIZE, convert_to_numpy=True, show_progress_bar=True
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
train_dataset = Dataset.from_dict({"sentence": train_sentences, "label": teacher_train.tolist()})
|
|
220
|
+
eval_dataset = Dataset.from_dict({"sentence": eval_sentences, "label": teacher_eval.tolist()})
|
|
221
|
+
|
|
222
|
+
logging.info(f"Building training dataset ({len(train_dataset):,}) and eval dataset ({len(eval_dataset):,})")
|
|
223
|
+
|
|
224
|
+
loss = MSELoss(model=student)
|
|
225
|
+
|
|
226
|
+
logging.info("Setting up STS-B evaluator for quality tracking")
|
|
227
|
+
stsb = load_dataset("sentence-transformers/stsb", split="validation")
|
|
228
|
+
evaluator = EmbeddingSimilarityEvaluator(
|
|
229
|
+
sentences1=stsb["sentence1"],
|
|
230
|
+
sentences2=stsb["sentence2"],
|
|
231
|
+
scores=stsb["score"],
|
|
232
|
+
main_similarity=SimilarityFunction.COSINE,
|
|
233
|
+
name="sts-dev",
|
|
234
|
+
)
|
|
235
|
+
logging.info("Teacher performance:")
|
|
236
|
+
evaluator(teacher)
|
|
237
|
+
logging.info("Student performance before distillation:")
|
|
238
|
+
# Must run before deriving metric_key: evaluator(model) mutates primary_metric to add the name_ prefix.
|
|
239
|
+
baseline_eval = evaluator(student)[evaluator.primary_metric]
|
|
240
|
+
metric_key = f"eval_{evaluator.primary_metric}"
|
|
241
|
+
|
|
242
|
+
args = SentenceTransformerTrainingArguments(
|
|
243
|
+
output_dir=OUTPUT_DIR,
|
|
244
|
+
num_train_epochs=1,
|
|
245
|
+
max_steps=1 if SMOKE_TEST else -1,
|
|
246
|
+
per_device_train_batch_size=TRAIN_BATCH_SIZE,
|
|
247
|
+
per_device_eval_batch_size=TRAIN_BATCH_SIZE,
|
|
248
|
+
learning_rate=1e-4,
|
|
249
|
+
weight_decay=0.01,
|
|
250
|
+
warmup_steps=0.1,
|
|
251
|
+
bf16=True,
|
|
252
|
+
eval_strategy="steps",
|
|
253
|
+
eval_steps=0.1,
|
|
254
|
+
save_strategy="steps",
|
|
255
|
+
save_steps=0.1,
|
|
256
|
+
save_total_limit=2,
|
|
257
|
+
logging_steps=0.01,
|
|
258
|
+
logging_first_step=True,
|
|
259
|
+
load_best_model_at_end=True,
|
|
260
|
+
metric_for_best_model=metric_key,
|
|
261
|
+
greater_is_better=True,
|
|
262
|
+
report_to="none" if SMOKE_TEST else "trackio",
|
|
263
|
+
run_name=RUN_NAME,
|
|
264
|
+
seed=12,
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
trainer = SentenceTransformerTrainer(
|
|
268
|
+
model=student,
|
|
269
|
+
args=args,
|
|
270
|
+
train_dataset=train_dataset,
|
|
271
|
+
eval_dataset=eval_dataset,
|
|
272
|
+
loss=loss,
|
|
273
|
+
evaluator=evaluator,
|
|
274
|
+
)
|
|
275
|
+
if not SMOKE_TEST:
|
|
276
|
+
log_trackio_dashboard()
|
|
277
|
+
trainer.train()
|
|
278
|
+
|
|
279
|
+
logging.info("Student performance after distillation:")
|
|
280
|
+
score = evaluator(student)[evaluator.primary_metric]
|
|
281
|
+
delta = score - baseline_eval
|
|
282
|
+
verdict = "WIN" if delta >= 0.005 else "MARGINAL" if delta >= 0 else "REGRESSION"
|
|
283
|
+
logging.info(f"VERDICT: {verdict} | score={score:.4f} | baseline={baseline_eval:.4f} | delta={delta:+.4f}")
|
|
284
|
+
|
|
285
|
+
final_dir = f"{OUTPUT_DIR}/final"
|
|
286
|
+
student.save_pretrained(final_dir)
|
|
287
|
+
logging.info(f"Saved to {final_dir}")
|
|
288
|
+
|
|
289
|
+
if SMOKE_TEST:
|
|
290
|
+
logging.info("SMOKE_TEST=1: skipping Hub push")
|
|
291
|
+
return
|
|
292
|
+
|
|
293
|
+
try:
|
|
294
|
+
commit_url = student.push_to_hub(RUN_NAME)
|
|
295
|
+
logging.info(f"Pushed model to {commit_url.rsplit('/commit/', 1)[0]}")
|
|
296
|
+
except Exception:
|
|
297
|
+
import traceback
|
|
298
|
+
|
|
299
|
+
logging.error(f"Hub push failed:\n{traceback.format_exc()}")
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
if __name__ == "__main__":
|
|
303
|
+
main()
|