horde-model-reference 7.0.2__tar.gz → 7.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {horde_model_reference-7.0.2/src/horde_model_reference.egg-info → horde_model_reference-7.2.0}/PKG-INFO +1 -1
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/schemas/stable_diffusion.schema.json +27 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/apply_backfill_report.py +94 -1
- horde_model_reference-7.2.0/scripts/hash_components.py +322 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/_version.py +3 -3
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/annotator_catalog.py +8 -0
- horde_model_reference-7.2.0/src/horde_model_reference/canonical_components.py +177 -0
- horde_model_reference-7.2.0/src/horde_model_reference/component_hash.py +407 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/classes/legacy_converters.py +65 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/classes/legacy_models.py +19 -1
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_reference_records.py +16 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0/src/horde_model_reference.egg-info}/PKG-INFO +1 -1
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/SOURCES.txt +8 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/scm_file_list.json +8 -0
- horde_model_reference-7.2.0/src/horde_model_reference.egg-info/scm_version.json +8 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/pending_queue/test_apply.py +34 -4
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_annotator_catalog.py +10 -3
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_annotator_records.py +15 -22
- horde_model_reference-7.2.0/tests/test_canonical_components.py +95 -0
- horde_model_reference-7.2.0/tests/test_component_hash.py +148 -0
- horde_model_reference-7.2.0/tests/test_hash_components_script.py +75 -0
- horde_model_reference-7.2.0/tests/test_hash_components_submit.py +141 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_records.py +35 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_torch_free_imports.py +1 -0
- horde_model_reference-7.2.0/tests/test_v2_to_legacy_conversion.py +83 -0
- horde_model_reference-7.0.2/src/horde_model_reference.egg-info/scm_version.json +0 -8
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.dockerignore +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.env.example +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.env.primary.example +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.env.sync.example +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.git-blame-ignore-revs +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/codeql.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/docker-publish.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/docker-validation.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/docs.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/lint.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/maintests.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/prtests.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/r2_sync.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.github/workflows/release.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.gitignore +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.gitmodules +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.hadolint.yaml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.pre-commit-config.yaml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/.readthedocs.yaml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/CONTRIBUTING.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/DEPLOYMENT.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/Dockerfile +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/LICENSE +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/MANIFEST.in +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docker-compose.redis.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docker-compose.sync.example.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docker-compose.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/build_docs.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/analytics_pipeline.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/architecture_overview.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/canonical_format.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/design_decisions.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/gated_r2_mirror.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/http_service.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/integrations.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/request_lifecycle.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/concepts/sync_system.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/consume_the_http_api.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/filter_models_for_a_worker.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/installation.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/mirror_models_to_r2.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/offline_and_resilient_reads.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/submit_models_via_the_api.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/guides/write_a_live_provider.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/base_cache.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/cache_hydrator.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/constants.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/deletion_risk_analysis.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/deletion_risk_cache.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/filter_presets.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/statistics.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/statistics_cache.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/text_model_grouping.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/analytics/text_model_parser.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/audit/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/audit/events.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/audit/reader.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/audit/replay.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/audit/writer.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/base.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/filesystem_backend.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/github_backend.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/http_backend.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/redis_backend.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/backends/replica_backend_base.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/cli/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/data/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/diff_service.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/http_retry.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/integrations/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/integrations/data_merger.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/integrations/horde_api_integration.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/integrations/horde_api_models.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/classes/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/classes/legacy_converters.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/classes/legacy_models.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/convert_all_legacy_dbs.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/text_csv_utils.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/validate_sd.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/legacy/validation/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/meta_consts.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_consts/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_consts/image.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_consts/shared.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_consts/text.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_kind_validation.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_reference_manager.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_reference_metadata.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/model_reference_records.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/path_consts.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/apply.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/audit_events.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/audit_view.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/diff_utils.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/models.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/service.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/pending_queue/store.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/providers/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/providers/base.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/providers/registry.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/providers/static_provider.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/query.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/query_fields.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/registries.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/app.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/pending_queue/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/pending_queue/audit_router.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/pending_queue/dependencies.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/pending_queue/router.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/shared.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/statistics/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/statistics/routers/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/statistics/routers/deletion_risk.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/statistics/routers/statistics.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/create_update.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/metadata.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/pending_queue.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/pending_queue_audit.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/references.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/shared.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v1/routers/write_validations.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/models.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/metadata.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/pending_queue.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/pending_queue_audit.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/references.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/search.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/text_utils.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/user.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/service/v2/routers/write_validations.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/showcase/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/source_consts.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/comparator.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/config.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/github_client.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/legacy_text_validator.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/text_generation_serializer.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/sync/watch_mode.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/text_backend_names.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/text_model_duplicates.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/text_model_write_processor.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/horde_model_reference/util.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/index.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/api_deployments.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/audit_trail.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/glossary.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/conventions.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/pending_queue_endpoints.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/v1_endpoints.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/v2_endpoints.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/http_api/v2_text_utils.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/legacy_csv_conversion.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/model_providers.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/model_reference_backend.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/model_reference_records.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/pending_queue.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/reference/replica_backend_base.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/stylesheets/extra.css +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/.pages +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/configuration_and_troubleshooting.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/getting_started.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/querying_models.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/registering_providers.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/using_the_http_api.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/docs/tutorials/working_with_records.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/examples/01_quickstart.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/examples/02_query_recipes.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/examples/03_working_with_records.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/examples/04_register_provider.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/examples/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/mkdocs.yml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/pyproject.toml +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/schemas/stable_diffusion.example.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/get_all_names.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/legacy_text/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/legacy_text/convert.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/legacy_text/defaults.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/legacy_text/generation_params.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/legacy_text/reverse_convert.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/allowlist.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/byte_source.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/object_store.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/planner.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/redistributable_allowlist.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/r2_sync/sync.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/seed_annotator_reference.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/sync/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/sync/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/sync/github_app_auth_example.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/sync/sync_github_references.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/verify_query_fields.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/setup.cfg +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/base_cache.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/cache_hydrator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/constants.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/deletion_risk_analysis.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/deletion_risk_cache.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/filter_presets.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/statistics.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/statistics_cache.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/text_model_grouping.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/analytics/text_model_parser.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/annotator_records.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/audit/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/audit/events.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/audit/reader.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/audit/replay.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/audit/writer.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/base.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/filesystem_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/github_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/http_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/local_readonly_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/redis_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/backends/replica_backend_base.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/cli/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/cli/migrate_layout.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/data/defaults.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/data/generation_params.json +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/diff_service.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/download_engine.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/group_aliases.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/group_families.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/group_schema_store.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/http_retry.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/integrations/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/integrations/data_merger.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/integrations/horde_api_integration.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/integrations/horde_api_models.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/classes/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/convert_all_legacy_dbs.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/text_csv_utils.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/legacy/validate_sd.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/meta_consts.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_consts/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_consts/image.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_consts/shared.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_consts/text.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_kind_validation.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_reference_manager.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/model_reference_metadata.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/on_disk_layout.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/path_consts.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/apply.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/audit_events.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/audit_view.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/diff_utils.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/materialize.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/models.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/service.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/pending_queue/store.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/providers/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/providers/base.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/providers/pending_provider.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/providers/registry.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/providers/static_provider.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/py.typed +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/query.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/query_fields.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/registries.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/app.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/pending_queue/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/pending_queue/audit_router.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/pending_queue/dependencies.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/pending_queue/router.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/shared.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/statistics/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/statistics/routers/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/statistics/routers/deletion_risk.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/statistics/routers/statistics.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/create_update.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/metadata.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/pending_queue.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/pending_queue_audit.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/references.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/shared.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v1/routers/write_validations.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/models.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/metadata.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/pending_queue.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/pending_queue_audit.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/references.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/search.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/text_utils.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/user.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/service/v2/routers/write_validations.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/showcase/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/source_consts.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/comparator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/config.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/github_client.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/legacy_text_validator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/text_generation_serializer.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/sync/watch_mode.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/text_backend_names.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/text_model_duplicates.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/text_model_write_processor.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/util.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/dependency_links.txt +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/entry_points.txt +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/requires.txt +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference.egg-info/top_level.txt +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/README.md +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/test_backends_init.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/test_http_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/test_local_readonly_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/test_primary_mode.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/backends/test_redis_backend.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/check_model_ref_type_blocks.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/conftest.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/create_env_file_example.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/create_example_json.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/helpers.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/conftest.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_data_merger.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_deletion_risk_analysis_live.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_deletion_risk_worker_count.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_horde_api_integration.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_horde_api_integration_live.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/horde_api/test_indexed_horde_types.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/integrations/test_stats_aggregation.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/pending_queue/test_audit_view.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/pending_queue/test_diff_service.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/pending_queue/test_service.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/pending_queue/test_store.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_api_design_phase4.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_pending_models_endpoint.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_pending_queue_audit_endpoints.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_replica_backend_base.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_shared_allowlists.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_shared_auth.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_text_utils.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_user_roles_endpoint.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_v1_api.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_v2_api.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/service/test_v2_search.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_cache_hydrator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_deletion_risk_analysis.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_extras_and_aliases.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_group_families.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_statistics.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_statistics_cache.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_text_model_grouping.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/statistics_and_audit/test_text_model_parser.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/__init__.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_comparator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_comparator_integration.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_config.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_github_client.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_legacy_text_validator.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/sync/test_text_generation_serializer.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_audit_replay.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_audit_trail.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_broken_tutu_grouping.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_canonical_format.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_combined_model_statistics.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_consts.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_convert_legacy_database.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_converters.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_csv_rows_to_legacy_dict.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_download_engine.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_env_example.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_examples.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_metadata.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_migrate_layout.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_model_kind_validation.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_model_providers.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_model_reference_manager.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_on_disk_layout.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_pending_materialize.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_pending_provider.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_query.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_r2_sync.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_registries.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_scripts.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_text_generation_csv_conversion.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_text_generation_file_paths.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_text_model_duplicates.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_text_model_group.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_text_model_write_processor.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/tests/test_zimage_presence_contract.py +0 -0
- {horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: horde_model_reference
|
|
3
|
-
Version: 7.0
|
|
3
|
+
Version: 7.2.0
|
|
4
4
|
Summary: A helper library providing a way to work with the lists of generation models, utility models, and any other related files required for the AI-Horde ecosystem.
|
|
5
5
|
Author-email: tazlin <tazlin.on.github@gmail.com>, db0 <mail@dbzer0.com>
|
|
6
6
|
License: GNU AFFERO GENERAL PUBLIC LICENSE
|
{horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/schemas/stable_diffusion.schema.json
RENAMED
|
@@ -17,6 +17,18 @@
|
|
|
17
17
|
"title": "Sha256Sum",
|
|
18
18
|
"type": "string"
|
|
19
19
|
},
|
|
20
|
+
"content_hash": {
|
|
21
|
+
"anyOf": [
|
|
22
|
+
{
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "null"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"default": null,
|
|
30
|
+
"title": "Content Hash"
|
|
31
|
+
},
|
|
20
32
|
"file_purpose": {
|
|
21
33
|
"anyOf": [
|
|
22
34
|
{
|
|
@@ -134,6 +146,21 @@
|
|
|
134
146
|
},
|
|
135
147
|
"title": "Download",
|
|
136
148
|
"type": "array"
|
|
149
|
+
},
|
|
150
|
+
"embedded_component_hashes": {
|
|
151
|
+
"anyOf": [
|
|
152
|
+
{
|
|
153
|
+
"additionalProperties": {
|
|
154
|
+
"type": "string"
|
|
155
|
+
},
|
|
156
|
+
"type": "object"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"type": "null"
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
"default": null,
|
|
163
|
+
"title": "Embedded Component Hashes"
|
|
137
164
|
}
|
|
138
165
|
},
|
|
139
166
|
"title": "GenericModelRecordConfig",
|
{horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/scripts/apply_backfill_report.py
RENAMED
|
@@ -157,6 +157,98 @@ def _apply_model_reference_corrections(
|
|
|
157
157
|
return True
|
|
158
158
|
|
|
159
159
|
|
|
160
|
+
# ── v2-only category corrections (no legacy representation) ───────────────
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _is_v2_only_category(category: str) -> bool:
|
|
164
|
+
"""Return whether *category* has no legacy representation (e.g. ``controlnet_annotator``).
|
|
165
|
+
|
|
166
|
+
Such a category has no v1 endpoint, so its corrections must go through the v2 per-model API.
|
|
167
|
+
"""
|
|
168
|
+
try:
|
|
169
|
+
from horde_model_reference.meta_consts import get_category_descriptor
|
|
170
|
+
|
|
171
|
+
return get_category_descriptor(category).has_legacy_format is False
|
|
172
|
+
except Exception:
|
|
173
|
+
return False
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _patch_config_download(record: dict[str, Any], corrections: list[dict[str, Any]]) -> int:
|
|
177
|
+
"""Update ``sha256sum`` in v2 ``config.download`` entries matching each correction's ``file_name``.
|
|
178
|
+
|
|
179
|
+
Returns the number of entries patched.
|
|
180
|
+
"""
|
|
181
|
+
downloads: list[dict[str, Any]] = record.get("config", {}).get("download", [])
|
|
182
|
+
patched = 0
|
|
183
|
+
for corr in corrections:
|
|
184
|
+
target = corr["file_name"]
|
|
185
|
+
new_sha = corr["new_sha256"]
|
|
186
|
+
for dentry in downloads:
|
|
187
|
+
if dentry.get("file_name") == target:
|
|
188
|
+
old = dentry.get("sha256sum")
|
|
189
|
+
if old != new_sha:
|
|
190
|
+
dentry["sha256sum"] = new_sha
|
|
191
|
+
patched += 1
|
|
192
|
+
print(f" {target}: {old} -> {new_sha}")
|
|
193
|
+
else:
|
|
194
|
+
print(f" {target}: already correct ({new_sha})")
|
|
195
|
+
break
|
|
196
|
+
else:
|
|
197
|
+
print(f" WARNING: file '{target}' not found in config.download; skipping.", file=sys.stderr)
|
|
198
|
+
return patched
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def _apply_v2_corrections(
|
|
202
|
+
client: httpx.Client,
|
|
203
|
+
base_url: str,
|
|
204
|
+
category: str,
|
|
205
|
+
entries: list[dict[str, Any]],
|
|
206
|
+
*,
|
|
207
|
+
dry_run: bool,
|
|
208
|
+
) -> bool:
|
|
209
|
+
"""Fetch, patch, and PUT each model of a v2-only category via the v2 per-model API. Return True on success.
|
|
210
|
+
|
|
211
|
+
Like the v1 path, a successful PUT returns ``202`` (queued for approval); a maintainer applies the batch.
|
|
212
|
+
"""
|
|
213
|
+
print(f"\nCategory: {category} ({len(entries)} correction(s)) [v2-only]")
|
|
214
|
+
by_model: dict[str, list[dict[str, Any]]] = {}
|
|
215
|
+
for entry in entries:
|
|
216
|
+
by_model.setdefault(entry["model_name"], []).append(entry)
|
|
217
|
+
|
|
218
|
+
base = base_url.rstrip("/")
|
|
219
|
+
ok = True
|
|
220
|
+
for model_name, corrections in by_model.items():
|
|
221
|
+
url = f"{base}/api/model_references/v2/{category}/model/{model_name}"
|
|
222
|
+
try:
|
|
223
|
+
resp = client.get(url, timeout=30)
|
|
224
|
+
resp.raise_for_status()
|
|
225
|
+
except httpx.HTTPError as exc:
|
|
226
|
+
print(f" WARNING: could not fetch '{model_name}' ({exc}); skipping.", file=sys.stderr)
|
|
227
|
+
continue
|
|
228
|
+
|
|
229
|
+
record = resp.json()
|
|
230
|
+
if _patch_config_download(record, corrections) == 0:
|
|
231
|
+
print(f" No changes needed for '{model_name}'.")
|
|
232
|
+
continue
|
|
233
|
+
if dry_run:
|
|
234
|
+
print(f" [DRY-RUN] Would PUT updated record for '{model_name}'.")
|
|
235
|
+
continue
|
|
236
|
+
|
|
237
|
+
try:
|
|
238
|
+
put = client.put(url, json=record, timeout=30)
|
|
239
|
+
except httpx.HTTPError as exc:
|
|
240
|
+
print(f" FAILED to PUT '{model_name}': {exc}", file=sys.stderr)
|
|
241
|
+
ok = False
|
|
242
|
+
continue
|
|
243
|
+
if put.status_code in (200, 201, 202):
|
|
244
|
+
verb = "queued for approval" if put.status_code == 202 else "updated"
|
|
245
|
+
print(f" OK ({put.status_code}): '{model_name}' {verb}.")
|
|
246
|
+
else:
|
|
247
|
+
print(f" FAILED ({put.status_code}): {put.text}", file=sys.stderr)
|
|
248
|
+
ok = False
|
|
249
|
+
return ok
|
|
250
|
+
|
|
251
|
+
|
|
160
252
|
# ── main ─────────────────────────────────────────────────────────────────
|
|
161
253
|
|
|
162
254
|
|
|
@@ -205,7 +297,8 @@ def main() -> int:
|
|
|
205
297
|
|
|
206
298
|
with httpx.Client(headers=headers, timeout=args.timeout) as client:
|
|
207
299
|
for category, entries in groups.items():
|
|
208
|
-
|
|
300
|
+
apply_fn = _apply_v2_corrections if _is_v2_only_category(category) else _apply_model_reference_corrections
|
|
301
|
+
if not apply_fn(client, args.base_url, category, entries, dry_run=args.dry_run):
|
|
209
302
|
ok = False
|
|
210
303
|
|
|
211
304
|
if args.dry_run:
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"""Offline pass: populate reference records with component content hashes and derive the canonical set.
|
|
2
|
+
|
|
3
|
+
Fetches the live reference, computes the torch-free tensor-region content hash of each model's VAE and
|
|
4
|
+
text-encoder components over HTTP range requests (never downloading a whole checkpoint), then optionally
|
|
5
|
+
writes the populated per-category records locally and/or submits them to a live PRIMARY service. It always
|
|
6
|
+
writes a ``canonical_components.json`` registry, and reports what could not be hashed.
|
|
7
|
+
|
|
8
|
+
What gets hashed, per model:
|
|
9
|
+
|
|
10
|
+
* every declared standalone component file (a ``DownloadRecord`` whose ``file_purpose`` is ``vae`` or
|
|
11
|
+
``text_encoders``) is hashed whole and recorded on that download's ``content_hash``; this covers the
|
|
12
|
+
split-file families (Flux/Qwen/Z-Image), whose large encoders live here.
|
|
13
|
+
* a monolithic checkpoint (a model with no separate VAE file) has its **embedded VAE** extracted and
|
|
14
|
+
recorded in the config's ``embedded_component_hashes``. Embedded text encoders are intentionally not
|
|
15
|
+
hashed: ComfyUI renames and reshuffles those keys at load, so a torch-free file hash cannot reproduce the
|
|
16
|
+
standalone form.
|
|
17
|
+
|
|
18
|
+
Anything that cannot be hashed (a ``.ckpt`` pickle, a host that ignores range requests, a network error, a
|
|
19
|
+
checkpoint with no VAE) is skipped and left without a hash, so it simply falls back to a normal load
|
|
20
|
+
downstream. The canonical set is then derived by frequency with a curated allow/deny override.
|
|
21
|
+
|
|
22
|
+
Submitting is opt-in and cautious: ``--submit`` writes the populated records to a PRIMARY service, but only
|
|
23
|
+
previews (dry-run) unless ``--no-dry-run`` is also passed. ``--api-version v2`` PUTs the v2 record (which
|
|
24
|
+
carries the new hash fields natively) and needs a ``canonical_format='v2'`` deployment; ``--api-version v1``
|
|
25
|
+
converts each record to the legacy shape and POST/PUTs it to the legacy image-generation endpoint (matching
|
|
26
|
+
the ``submit_*`` scripts). Run from the checkout so the library is importable, e.g.::
|
|
27
|
+
|
|
28
|
+
uv run --no-sync scripts/hash_components.py --output-dir ./component_hashes --limit 20
|
|
29
|
+
uv run --no-sync scripts/hash_components.py --submit --api-version v2 --apikey "$AI_HORDE_API_KEY"
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import argparse
|
|
35
|
+
import json
|
|
36
|
+
import sys
|
|
37
|
+
from dataclasses import dataclass
|
|
38
|
+
from pathlib import Path
|
|
39
|
+
from typing import TYPE_CHECKING
|
|
40
|
+
|
|
41
|
+
import requests
|
|
42
|
+
from loguru import logger
|
|
43
|
+
|
|
44
|
+
from horde_model_reference.canonical_components import DEFAULT_MIN_SHARED_MODELS, derive_canonical_registry
|
|
45
|
+
from horde_model_reference.component_hash import (
|
|
46
|
+
ComponentKind,
|
|
47
|
+
NoComponentTensorsError,
|
|
48
|
+
RangeNotSupportedError,
|
|
49
|
+
UnsupportedComponentError,
|
|
50
|
+
UnsupportedContainerError,
|
|
51
|
+
component_kind_for_purpose,
|
|
52
|
+
hash_embedded_component_url,
|
|
53
|
+
hash_standalone_component_url,
|
|
54
|
+
)
|
|
55
|
+
from horde_model_reference.meta_consts import MODEL_REFERENCE_CATEGORY
|
|
56
|
+
from horde_model_reference.model_reference_manager import ModelReferenceManager
|
|
57
|
+
|
|
58
|
+
if TYPE_CHECKING:
|
|
59
|
+
from collections.abc import Sequence
|
|
60
|
+
|
|
61
|
+
from horde_model_reference.model_reference_records import GenericModelRecord
|
|
62
|
+
|
|
63
|
+
_SAFETENSORS_SUFFIX = ".safetensors"
|
|
64
|
+
_EMBEDDED_VAE_KEY = "vae"
|
|
65
|
+
_DEFAULT_PRIMARY_URL = "https://models.aihorde.net"
|
|
66
|
+
_APIKEY_ENV_VARS = ("AI_HORDE_API_KEY", "HORDE_API_KEY")
|
|
67
|
+
_SUBMIT_OK_STATUSES = frozenset({200, 201, 202})
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@dataclass(frozen=True)
|
|
71
|
+
class ComponentHashTask:
|
|
72
|
+
"""One planned hashing action for a record: which download to fetch, and how to hash it."""
|
|
73
|
+
|
|
74
|
+
download_index: int
|
|
75
|
+
url: str
|
|
76
|
+
kind: ComponentKind
|
|
77
|
+
embedded: bool
|
|
78
|
+
"""True to extract an embedded VAE from a monolithic checkpoint; False to hash a standalone file whole."""
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _looks_like_safetensors(file_name: str, file_url: str) -> bool:
|
|
82
|
+
"""Return whether a download is a safetensors container (the only form this pass can hash)."""
|
|
83
|
+
if file_name.lower().endswith(_SAFETENSORS_SUFFIX):
|
|
84
|
+
return True
|
|
85
|
+
return file_url.lower().split("?", 1)[0].endswith(_SAFETENSORS_SUFFIX)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def plan_component_hash_tasks(record: GenericModelRecord, *, skip_existing: bool) -> list[ComponentHashTask]:
|
|
89
|
+
"""Plan which components of *record* to hash, without doing any I/O.
|
|
90
|
+
|
|
91
|
+
Standalone component files are hashed whole. A model with no separate VAE file is treated as monolithic
|
|
92
|
+
and its primary safetensors files are probed for an embedded VAE. When *skip_existing* is set, downloads
|
|
93
|
+
that already carry the relevant hash are left alone.
|
|
94
|
+
"""
|
|
95
|
+
downloads = record.config.download
|
|
96
|
+
has_standalone_vae = any(
|
|
97
|
+
component_kind_for_purpose(download.file_purpose) is ComponentKind.VAE for download in downloads
|
|
98
|
+
)
|
|
99
|
+
existing_embedded_vae = (record.config.embedded_component_hashes or {}).get(_EMBEDDED_VAE_KEY)
|
|
100
|
+
|
|
101
|
+
tasks: list[ComponentHashTask] = []
|
|
102
|
+
for index, download in enumerate(downloads):
|
|
103
|
+
if not _looks_like_safetensors(download.file_name, download.file_url):
|
|
104
|
+
continue
|
|
105
|
+
kind = component_kind_for_purpose(download.file_purpose)
|
|
106
|
+
if kind is not None:
|
|
107
|
+
if skip_existing and download.content_hash is not None:
|
|
108
|
+
continue
|
|
109
|
+
tasks.append(ComponentHashTask(index, download.file_url, kind, embedded=False))
|
|
110
|
+
elif not has_standalone_vae and not (skip_existing and existing_embedded_vae is not None):
|
|
111
|
+
tasks.append(ComponentHashTask(index, download.file_url, ComponentKind.VAE, embedded=True))
|
|
112
|
+
return tasks
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _hash_task(task: ComponentHashTask, *, session: requests.Session) -> str | None:
|
|
116
|
+
"""Execute a hashing task, returning the hash or None when the component cannot be hashed."""
|
|
117
|
+
try:
|
|
118
|
+
if task.embedded:
|
|
119
|
+
return hash_embedded_component_url(task.url, task.kind, session=session)
|
|
120
|
+
return hash_standalone_component_url(task.url, session=session)
|
|
121
|
+
except NoComponentTensorsError:
|
|
122
|
+
return None
|
|
123
|
+
except (UnsupportedContainerError, UnsupportedComponentError) as skip_reason:
|
|
124
|
+
logger.debug("Not hashable ({}): {}", skip_reason, task.url)
|
|
125
|
+
return None
|
|
126
|
+
except (RangeNotSupportedError, requests.RequestException) as fetch_error:
|
|
127
|
+
logger.warning("Could not fetch component ({}): {}", fetch_error, task.url)
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _record_hash(record: GenericModelRecord, task: ComponentHashTask, content_hash: str) -> None:
|
|
132
|
+
"""Store *content_hash* on the record, on the download for a standalone file or in the embedded map."""
|
|
133
|
+
if task.embedded:
|
|
134
|
+
embedded = dict(record.config.embedded_component_hashes or {})
|
|
135
|
+
embedded[_EMBEDDED_VAE_KEY] = content_hash
|
|
136
|
+
record.config.embedded_component_hashes = embedded
|
|
137
|
+
else:
|
|
138
|
+
record.config.download[task.download_index].content_hash = content_hash
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def hash_category_records(
|
|
142
|
+
records: dict[str, GenericModelRecord],
|
|
143
|
+
*,
|
|
144
|
+
session: requests.Session,
|
|
145
|
+
skip_existing: bool,
|
|
146
|
+
limit: int,
|
|
147
|
+
) -> list[str]:
|
|
148
|
+
"""Hash the components of every record in a category in place; return the names that changed."""
|
|
149
|
+
changed: list[str] = []
|
|
150
|
+
for processed, (name, record) in enumerate(records.items()):
|
|
151
|
+
if limit and processed >= limit:
|
|
152
|
+
break
|
|
153
|
+
wrote_any = False
|
|
154
|
+
for task in plan_component_hash_tasks(record, skip_existing=skip_existing):
|
|
155
|
+
content_hash = _hash_task(task, session=session)
|
|
156
|
+
if content_hash is None:
|
|
157
|
+
continue
|
|
158
|
+
_record_hash(record, task, content_hash)
|
|
159
|
+
wrote_any = True
|
|
160
|
+
form = "embedded" if task.embedded else "file"
|
|
161
|
+
logger.info("Hashed {} {} for {}: {}", form, task.kind, name, content_hash)
|
|
162
|
+
if wrote_any:
|
|
163
|
+
changed.append(name)
|
|
164
|
+
return changed
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _resolve_apikey(cli_value: str | None) -> str:
|
|
168
|
+
"""Return the API key from the CLI or a known environment variable, exiting if none is set."""
|
|
169
|
+
import os
|
|
170
|
+
|
|
171
|
+
apikey = cli_value or next((os.environ[var] for var in _APIKEY_ENV_VARS if os.environ.get(var)), None)
|
|
172
|
+
if not apikey:
|
|
173
|
+
sys.exit(f"No API key provided. Pass --apikey or set one of {', '.join(_APIKEY_ENV_VARS)}.")
|
|
174
|
+
return apikey
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def _report_submission(response: requests.Response, name: str) -> None:
|
|
178
|
+
"""Log the outcome of a single submission."""
|
|
179
|
+
if response.status_code in _SUBMIT_OK_STATUSES:
|
|
180
|
+
logger.info("Submitted {}: HTTP {}", name, response.status_code)
|
|
181
|
+
else:
|
|
182
|
+
logger.error("Submit failed for {}: HTTP {} {}", name, response.status_code, response.text[:200])
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _submit_record(
|
|
186
|
+
record: GenericModelRecord,
|
|
187
|
+
name: str,
|
|
188
|
+
category: MODEL_REFERENCE_CATEGORY,
|
|
189
|
+
*,
|
|
190
|
+
api_version: str,
|
|
191
|
+
base_url: str,
|
|
192
|
+
apikey: str,
|
|
193
|
+
session: requests.Session,
|
|
194
|
+
dry_run: bool,
|
|
195
|
+
update: bool,
|
|
196
|
+
timeout: float,
|
|
197
|
+
) -> None:
|
|
198
|
+
"""Submit one populated record to a PRIMARY service via the chosen API version, honouring dry-run."""
|
|
199
|
+
headers = {"apikey": apikey, "Content-Type": "application/json"}
|
|
200
|
+
root = base_url.rstrip("/")
|
|
201
|
+
if api_version == "v2":
|
|
202
|
+
url = f"{root}/api/model_references/v2/{category.value}/{name}"
|
|
203
|
+
payload = record.model_dump(mode="json")
|
|
204
|
+
method_name = "PUT"
|
|
205
|
+
sender = session.put
|
|
206
|
+
else:
|
|
207
|
+
from horde_model_reference.legacy.classes.legacy_converters import image_generation_record_to_legacy_dict
|
|
208
|
+
|
|
209
|
+
url = f"{root}/api/model_references/v1/{category.value}"
|
|
210
|
+
payload = image_generation_record_to_legacy_dict(record)
|
|
211
|
+
method_name = "PUT" if update else "POST"
|
|
212
|
+
sender = session.put if update else session.post
|
|
213
|
+
|
|
214
|
+
if dry_run:
|
|
215
|
+
logger.info("[dry-run] {} {} for {}", method_name, url, name)
|
|
216
|
+
return
|
|
217
|
+
_report_submission(sender(url, json=payload, headers=headers, timeout=timeout), name)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _load_curated(
|
|
221
|
+
curated_json: Path | None,
|
|
222
|
+
allow: Sequence[str],
|
|
223
|
+
deny: Sequence[str],
|
|
224
|
+
) -> tuple[set[str], set[str]]:
|
|
225
|
+
"""Merge inline ``--allow``/``--deny`` hashes with an optional curated JSON of the same shape."""
|
|
226
|
+
allow_set = set(allow)
|
|
227
|
+
deny_set = set(deny)
|
|
228
|
+
if curated_json is not None:
|
|
229
|
+
payload = json.loads(curated_json.read_text(encoding="utf-8"))
|
|
230
|
+
allow_set.update(payload.get("allow", []))
|
|
231
|
+
deny_set.update(payload.get("deny", []))
|
|
232
|
+
return allow_set, deny_set
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def run(args: argparse.Namespace) -> int:
|
|
236
|
+
"""Fetch the reference, hash components, emit/submit populated records, and write the canonical registry."""
|
|
237
|
+
output_dir = Path(args.output_dir)
|
|
238
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
239
|
+
allow_set, deny_set = _load_curated(args.curated_json, args.allow, args.deny)
|
|
240
|
+
apikey = _resolve_apikey(args.apikey) if args.submit else ""
|
|
241
|
+
|
|
242
|
+
manager = ModelReferenceManager.get_instance()
|
|
243
|
+
all_references = manager.get_all_model_references(overwrite_existing=args.overwrite_existing)
|
|
244
|
+
|
|
245
|
+
session = requests.Session()
|
|
246
|
+
combined: dict[str, GenericModelRecord] = {}
|
|
247
|
+
for category in args.categories:
|
|
248
|
+
records = all_references.get(category, {})
|
|
249
|
+
if not records:
|
|
250
|
+
logger.warning("No records for category {}", category)
|
|
251
|
+
continue
|
|
252
|
+
changed = hash_category_records(records, session=session, skip_existing=args.skip_existing, limit=args.limit)
|
|
253
|
+
logger.info("Category {}: {} of {} models changed", category, len(changed), len(records))
|
|
254
|
+
if args.emit_json:
|
|
255
|
+
serialized = ModelReferenceManager.model_reference_to_json_dict(records)
|
|
256
|
+
(output_dir / f"{category.value}.records.json").write_text(
|
|
257
|
+
json.dumps(serialized, indent=2, sort_keys=True),
|
|
258
|
+
encoding="utf-8",
|
|
259
|
+
)
|
|
260
|
+
if args.submit:
|
|
261
|
+
for name in changed:
|
|
262
|
+
_submit_record(
|
|
263
|
+
records[name],
|
|
264
|
+
name,
|
|
265
|
+
category,
|
|
266
|
+
api_version=args.api_version,
|
|
267
|
+
base_url=args.primary_url,
|
|
268
|
+
apikey=apikey,
|
|
269
|
+
session=session,
|
|
270
|
+
dry_run=not args.no_dry_run,
|
|
271
|
+
update=args.update,
|
|
272
|
+
timeout=args.timeout,
|
|
273
|
+
)
|
|
274
|
+
combined.update(records)
|
|
275
|
+
|
|
276
|
+
registry = derive_canonical_registry(
|
|
277
|
+
combined,
|
|
278
|
+
min_shared_models=args.min_shared_models,
|
|
279
|
+
allow=allow_set,
|
|
280
|
+
deny=deny_set,
|
|
281
|
+
)
|
|
282
|
+
registry_path = output_dir / "canonical_components.json"
|
|
283
|
+
registry_path.write_text(registry.model_dump_json(indent=2), encoding="utf-8")
|
|
284
|
+
logger.info("Derived {} canonical components -> {}", len(registry.components), registry_path)
|
|
285
|
+
return 0
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def _parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace:
|
|
289
|
+
parser = argparse.ArgumentParser(description="Populate reference records with component content hashes.")
|
|
290
|
+
parser.add_argument("--output-dir", default="component_hashes", help="Directory for the emitted JSON files.")
|
|
291
|
+
parser.add_argument(
|
|
292
|
+
"--categories",
|
|
293
|
+
nargs="+",
|
|
294
|
+
type=MODEL_REFERENCE_CATEGORY,
|
|
295
|
+
default=[MODEL_REFERENCE_CATEGORY.image_generation],
|
|
296
|
+
help="Model reference categories to hash (default: image_generation).",
|
|
297
|
+
)
|
|
298
|
+
parser.add_argument("--min-shared-models", type=int, default=DEFAULT_MIN_SHARED_MODELS)
|
|
299
|
+
parser.add_argument("--allow", nargs="*", default=[], help="Content hashes to force into the canonical set.")
|
|
300
|
+
parser.add_argument("--deny", nargs="*", default=[], help="Content hashes to exclude from the canonical set.")
|
|
301
|
+
parser.add_argument("--curated-json", type=Path, default=None, help='JSON: {"allow": [...], "deny": [...]}.')
|
|
302
|
+
parser.add_argument("--limit", type=int, default=0, help="Hash only the first N models per category (0 = all).")
|
|
303
|
+
parser.add_argument("--skip-existing", action="store_true", help="Do not re-hash records with a hash already.")
|
|
304
|
+
parser.add_argument("--overwrite-existing", action="store_true", help="Force the backend to refetch reference.")
|
|
305
|
+
parser.add_argument("--no-emit-json", action="store_false", dest="emit_json", help="Do not write records JSON.")
|
|
306
|
+
parser.add_argument("--submit", action="store_true", help="Submit populated records to a PRIMARY service.")
|
|
307
|
+
parser.add_argument("--api-version", choices=["v1", "v2"], default="v2", help="Submit API version (default v2).")
|
|
308
|
+
parser.add_argument("--primary-url", default=_DEFAULT_PRIMARY_URL, help="PRIMARY service base URL for --submit.")
|
|
309
|
+
parser.add_argument("--apikey", default=None, help=f"API key for --submit (or set {'/'.join(_APIKEY_ENV_VARS)}).")
|
|
310
|
+
parser.add_argument("--no-dry-run", action="store_true", help="With --submit, perform real writes.")
|
|
311
|
+
parser.add_argument("--update", action="store_true", help="For v1 submit, PUT (update) instead of POST (create).")
|
|
312
|
+
parser.add_argument("--timeout", type=float, default=30.0, help="Per-request timeout in seconds.")
|
|
313
|
+
return parser.parse_args(argv)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def main(argv: Sequence[str] | None = None) -> int:
|
|
317
|
+
"""Entry point for the offline component-hashing pass."""
|
|
318
|
+
return run(_parse_args(argv))
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
if __name__ == "__main__":
|
|
322
|
+
sys.exit(main())
|
{horde_model_reference-7.0.2 → horde_model_reference-7.2.0}/src/horde_model_reference/_version.py
RENAMED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '7.0
|
|
22
|
-
__version_tuple__ = version_tuple = (7,
|
|
21
|
+
__version__ = version = '7.2.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (7, 2, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g320a47a13'
|
|
@@ -90,6 +90,7 @@ ANNOTATOR_FILES: tuple[AnnotatorFile, ...] = (
|
|
|
90
90
|
AnnotatorFile(
|
|
91
91
|
repo=ANNOTATOR_HF_REPO,
|
|
92
92
|
filename="ControlNetHED.pth",
|
|
93
|
+
sha256="5ca93762ffd68a29fee1af9d495bf6aab80ae86f08905fb35472a083a4c7a8fa",
|
|
93
94
|
control_types=("hed", "fakescribbles"),
|
|
94
95
|
preprocessors=("HEDPreprocessor", "FakeScribblePreprocessor"),
|
|
95
96
|
),
|
|
@@ -97,12 +98,14 @@ ANNOTATOR_FILES: tuple[AnnotatorFile, ...] = (
|
|
|
97
98
|
AnnotatorFile(
|
|
98
99
|
repo=ANNOTATOR_HF_REPO,
|
|
99
100
|
filename="res101.pth",
|
|
101
|
+
sha256="1d696b2ef3e8336b057d0c15bc82d2fecef821bfebe5ef9d7671a5ec5dde520b",
|
|
100
102
|
control_types=("depth",),
|
|
101
103
|
preprocessors=("LeReS-DepthMapPreprocessor",),
|
|
102
104
|
),
|
|
103
105
|
AnnotatorFile(
|
|
104
106
|
repo=ANNOTATOR_HF_REPO,
|
|
105
107
|
filename="latest_net_G.pth",
|
|
108
|
+
sha256="50ec735d74ed6499562d898f41b49343e521808b8dae589aa3c2f5c9ac9f7462",
|
|
106
109
|
control_types=("depth",),
|
|
107
110
|
preprocessors=("LeReS-DepthMapPreprocessor",),
|
|
108
111
|
),
|
|
@@ -110,18 +113,21 @@ ANNOTATOR_FILES: tuple[AnnotatorFile, ...] = (
|
|
|
110
113
|
AnnotatorFile(
|
|
111
114
|
repo=ANNOTATOR_HF_REPO,
|
|
112
115
|
filename="body_pose_model.pth",
|
|
116
|
+
sha256="25a948c16078b0f08e236bda51a385d855ef4c153598947c28c0d47ed94bb746",
|
|
113
117
|
control_types=("openpose",),
|
|
114
118
|
preprocessors=("OpenposePreprocessor",),
|
|
115
119
|
),
|
|
116
120
|
AnnotatorFile(
|
|
117
121
|
repo=ANNOTATOR_HF_REPO,
|
|
118
122
|
filename="hand_pose_model.pth",
|
|
123
|
+
sha256="b76b00d1750901abd07b9f9d8c98cc3385b8fe834a26d4b4f0aad439e75fc600",
|
|
119
124
|
control_types=("openpose",),
|
|
120
125
|
preprocessors=("OpenposePreprocessor",),
|
|
121
126
|
),
|
|
122
127
|
AnnotatorFile(
|
|
123
128
|
repo=ANNOTATOR_HF_REPO,
|
|
124
129
|
filename="facenet.pth",
|
|
130
|
+
sha256="8beb52e548624ffcc4aed12af7aee7dcbfaeea420c75609fee999fe7add79d43",
|
|
125
131
|
control_types=("openpose",),
|
|
126
132
|
preprocessors=("OpenposePreprocessor",),
|
|
127
133
|
),
|
|
@@ -129,6 +135,7 @@ ANNOTATOR_FILES: tuple[AnnotatorFile, ...] = (
|
|
|
129
135
|
AnnotatorFile(
|
|
130
136
|
repo=ANNOTATOR_HF_REPO,
|
|
131
137
|
filename="upernet_global_small.pth",
|
|
138
|
+
sha256="bebfa1264c10381e389d8065056baaadbdadee8ddc6e36770d1ec339dc84d970",
|
|
132
139
|
control_types=("seg",),
|
|
133
140
|
preprocessors=("SemSegPreprocessor",),
|
|
134
141
|
),
|
|
@@ -136,6 +143,7 @@ ANNOTATOR_FILES: tuple[AnnotatorFile, ...] = (
|
|
|
136
143
|
AnnotatorFile(
|
|
137
144
|
repo=ANNOTATOR_HF_REPO,
|
|
138
145
|
filename="mlsd_large_512_fp32.pth",
|
|
146
|
+
sha256="5696f168eb2c30d4374bbfd45436f7415bb4d88da29bea97eea0101520fba082",
|
|
139
147
|
control_types=("mlsd", "hough"),
|
|
140
148
|
preprocessors=("M-LSDPreprocessor",),
|
|
141
149
|
),
|