horde-model-reference 7.2.0__tar.gz → 7.3.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.2.0/src/horde_model_reference.egg-info → horde_model_reference-7.3.0}/PKG-INFO +1 -1
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/hash_components.py +16 -13
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/_version.py +3 -3
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/canonical_components.py +17 -14
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/component_hash.py +34 -24
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/classes/legacy_converters.py +4 -4
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/classes/legacy_models.py +12 -10
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_reference_records.py +4 -2
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0/src/horde_model_reference.egg-info}/PKG-INFO +1 -1
- horde_model_reference-7.3.0/src/horde_model_reference.egg-info/scm_version.json +8 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_component_hash.py +12 -6
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_hash_components_script.py +11 -8
- horde_model_reference-7.2.0/src/horde_model_reference.egg-info/scm_version.json +0 -8
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.dockerignore +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.env.example +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.env.primary.example +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.env.sync.example +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.git-blame-ignore-revs +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/codeql.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/docker-publish.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/docker-validation.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/docs.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/lint.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/maintests.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/prtests.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/r2_sync.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/release.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.gitignore +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.gitmodules +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.hadolint.yaml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.pre-commit-config.yaml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.readthedocs.yaml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/CONTRIBUTING.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/DEPLOYMENT.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/Dockerfile +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/LICENSE +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/MANIFEST.in +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docker-compose.redis.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docker-compose.sync.example.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docker-compose.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/build_docs.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/analytics_pipeline.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/architecture_overview.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/canonical_format.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/design_decisions.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/gated_r2_mirror.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/http_service.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/integrations.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/request_lifecycle.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/sync_system.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/consume_the_http_api.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/filter_models_for_a_worker.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/installation.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/mirror_models_to_r2.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/offline_and_resilient_reads.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/submit_models_via_the_api.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/write_a_live_provider.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/base_cache.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/cache_hydrator.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/constants.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/deletion_risk_analysis.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/deletion_risk_cache.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/filter_presets.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/statistics.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/statistics_cache.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/text_model_grouping.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/analytics/text_model_parser.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/audit/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/audit/events.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/audit/reader.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/audit/replay.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/audit/writer.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/base.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/filesystem_backend.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/github_backend.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/http_backend.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/redis_backend.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/backends/replica_backend_base.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/cli/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/data/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/diff_service.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/http_retry.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/integrations/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/integrations/data_merger.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/integrations/horde_api_integration.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/integrations/horde_api_models.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/classes/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/classes/legacy_converters.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/classes/legacy_models.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/convert_all_legacy_dbs.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/text_csv_utils.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/validate_sd.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/legacy/validation/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/meta_consts.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_consts/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_consts/image.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_consts/shared.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_consts/text.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_kind_validation.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_reference_manager.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_reference_metadata.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/model_reference_records.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/path_consts.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/apply.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/audit_events.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/audit_view.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/diff_utils.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/models.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/service.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/pending_queue/store.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/providers/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/providers/base.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/providers/registry.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/providers/static_provider.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/query.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/query_fields.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/registries.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/app.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/pending_queue/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/pending_queue/audit_router.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/pending_queue/dependencies.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/pending_queue/router.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/shared.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/statistics/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/statistics/routers/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/statistics/routers/deletion_risk.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/statistics/routers/statistics.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/create_update.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/metadata.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/pending_queue.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/pending_queue_audit.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/references.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/shared.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v1/routers/write_validations.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/models.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/metadata.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/pending_queue.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/pending_queue_audit.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/references.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/search.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/text_utils.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/user.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/service/v2/routers/write_validations.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/showcase/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/source_consts.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/comparator.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/config.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/github_client.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/legacy_text_validator.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/text_generation_serializer.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/sync/watch_mode.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/text_backend_names.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/text_model_duplicates.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/text_model_write_processor.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/util.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/index.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/api_deployments.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/audit_trail.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/glossary.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/conventions.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/pending_queue_endpoints.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/v1_endpoints.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/v2_endpoints.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/http_api/v2_text_utils.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/legacy_csv_conversion.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/model_providers.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/model_reference_backend.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/model_reference_records.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/pending_queue.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/reference/replica_backend_base.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/stylesheets/extra.css +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/.pages +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/configuration_and_troubleshooting.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/getting_started.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/querying_models.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/registering_providers.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/using_the_http_api.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/tutorials/working_with_records.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/examples/01_quickstart.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/examples/02_query_recipes.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/examples/03_working_with_records.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/examples/04_register_provider.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/examples/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/mkdocs.yml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/pyproject.toml +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/schemas/stable_diffusion.example.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/schemas/stable_diffusion.schema.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/apply_backfill_report.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/get_all_names.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/legacy_text/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/legacy_text/convert.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/legacy_text/defaults.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/legacy_text/generation_params.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/legacy_text/reverse_convert.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/allowlist.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/byte_source.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/object_store.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/planner.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/redistributable_allowlist.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/r2_sync/sync.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/seed_annotator_reference.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/sync/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/sync/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/sync/github_app_auth_example.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/sync/sync_github_references.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/scripts/verify_query_fields.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/setup.cfg +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/base_cache.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/cache_hydrator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/constants.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/deletion_risk_analysis.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/deletion_risk_cache.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/filter_presets.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/statistics.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/statistics_cache.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/text_model_grouping.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/analytics/text_model_parser.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/annotator_catalog.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/annotator_records.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/audit/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/audit/events.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/audit/reader.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/audit/replay.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/audit/writer.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/base.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/filesystem_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/github_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/http_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/local_readonly_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/redis_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/backends/replica_backend_base.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/cli/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/cli/migrate_layout.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/data/defaults.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/data/generation_params.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/diff_service.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/download_engine.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/group_aliases.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/group_families.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/group_schema_store.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/http_retry.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/integrations/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/integrations/data_merger.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/integrations/horde_api_integration.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/integrations/horde_api_models.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/classes/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/convert_all_legacy_dbs.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/text_csv_utils.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/legacy/validate_sd.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/meta_consts.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_consts/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_consts/image.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_consts/shared.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_consts/text.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_kind_validation.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_reference_manager.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/model_reference_metadata.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/on_disk_layout.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/path_consts.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/apply.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/audit_events.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/audit_view.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/diff_utils.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/materialize.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/models.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/service.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/pending_queue/store.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/providers/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/providers/base.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/providers/pending_provider.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/providers/registry.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/providers/static_provider.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/py.typed +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/query.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/query_fields.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/registries.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/app.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/pending_queue/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/pending_queue/audit_router.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/pending_queue/dependencies.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/pending_queue/router.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/shared.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/statistics/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/statistics/routers/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/statistics/routers/deletion_risk.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/statistics/routers/statistics.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/create_update.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/metadata.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/pending_queue.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/pending_queue_audit.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/references.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/shared.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v1/routers/write_validations.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/models.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/metadata.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/pending_queue.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/pending_queue_audit.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/references.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/search.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/text_utils.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/user.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/service/v2/routers/write_validations.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/showcase/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/source_consts.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/comparator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/config.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/github_client.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/legacy_text_validator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/text_generation_serializer.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/sync/watch_mode.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/text_backend_names.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/text_model_duplicates.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/text_model_write_processor.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference/util.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/SOURCES.txt +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/dependency_links.txt +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/entry_points.txt +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/requires.txt +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/scm_file_list.json +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/src/horde_model_reference.egg-info/top_level.txt +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/README.md +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/test_backends_init.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/test_http_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/test_local_readonly_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/test_primary_mode.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/backends/test_redis_backend.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/check_model_ref_type_blocks.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/conftest.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/create_env_file_example.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/create_example_json.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/helpers.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/conftest.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_data_merger.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_deletion_risk_analysis_live.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_deletion_risk_worker_count.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_horde_api_integration.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_horde_api_integration_live.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/horde_api/test_indexed_horde_types.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/integrations/test_stats_aggregation.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/pending_queue/test_apply.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/pending_queue/test_audit_view.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/pending_queue/test_diff_service.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/pending_queue/test_service.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/pending_queue/test_store.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_api_design_phase4.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_pending_models_endpoint.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_pending_queue_audit_endpoints.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_replica_backend_base.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_shared_allowlists.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_shared_auth.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_text_utils.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_user_roles_endpoint.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_v1_api.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_v2_api.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/service/test_v2_search.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_cache_hydrator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_deletion_risk_analysis.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_extras_and_aliases.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_group_families.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_statistics.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_statistics_cache.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_text_model_grouping.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/statistics_and_audit/test_text_model_parser.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/__init__.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_comparator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_comparator_integration.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_config.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_github_client.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_legacy_text_validator.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/sync/test_text_generation_serializer.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_annotator_catalog.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_annotator_records.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_audit_replay.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_audit_trail.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_broken_tutu_grouping.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_canonical_components.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_canonical_format.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_combined_model_statistics.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_consts.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_convert_legacy_database.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_converters.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_csv_rows_to_legacy_dict.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_download_engine.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_env_example.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_examples.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_hash_components_submit.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_metadata.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_migrate_layout.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_model_kind_validation.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_model_providers.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_model_reference_manager.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_on_disk_layout.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_pending_materialize.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_pending_provider.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_query.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_r2_sync.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_records.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_registries.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_scripts.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_text_generation_csv_conversion.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_text_generation_file_paths.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_text_model_duplicates.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_text_model_group.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_text_model_write_processor.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_torch_free_imports.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_v2_to_legacy_conversion.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_zimage_presence_contract.py +0 -0
- {horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: horde_model_reference
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3.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
|
|
@@ -46,7 +46,6 @@ from horde_model_reference.component_hash import (
|
|
|
46
46
|
ComponentKind,
|
|
47
47
|
NoComponentTensorsError,
|
|
48
48
|
RangeNotSupportedError,
|
|
49
|
-
UnsupportedComponentError,
|
|
50
49
|
UnsupportedContainerError,
|
|
51
50
|
component_kind_for_purpose,
|
|
52
51
|
hash_embedded_component_url,
|
|
@@ -61,7 +60,7 @@ if TYPE_CHECKING:
|
|
|
61
60
|
from horde_model_reference.model_reference_records import GenericModelRecord
|
|
62
61
|
|
|
63
62
|
_SAFETENSORS_SUFFIX = ".safetensors"
|
|
64
|
-
|
|
63
|
+
_EMBEDDABLE_KINDS = (ComponentKind.VAE, ComponentKind.TEXT_ENCODERS)
|
|
65
64
|
_DEFAULT_PRIMARY_URL = "https://models.aihorde.net"
|
|
66
65
|
_APIKEY_ENV_VARS = ("AI_HORDE_API_KEY", "HORDE_API_KEY")
|
|
67
66
|
_SUBMIT_OK_STATUSES = frozenset({200, 201, 202})
|
|
@@ -88,15 +87,13 @@ def _looks_like_safetensors(file_name: str, file_url: str) -> bool:
|
|
|
88
87
|
def plan_component_hash_tasks(record: GenericModelRecord, *, skip_existing: bool) -> list[ComponentHashTask]:
|
|
89
88
|
"""Plan which components of *record* to hash, without doing any I/O.
|
|
90
89
|
|
|
91
|
-
Standalone component files are hashed whole. A model with no
|
|
92
|
-
and its primary safetensors files are probed for
|
|
93
|
-
that already carry
|
|
90
|
+
Standalone component files are hashed whole. A model with no standalone file for a component kind is
|
|
91
|
+
treated as monolithic for that kind, and its primary safetensors files are probed for the embedded VAE
|
|
92
|
+
and text encoders. When *skip_existing* is set, components that already carry a hash are left alone.
|
|
94
93
|
"""
|
|
95
94
|
downloads = record.config.download
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
99
|
-
existing_embedded_vae = (record.config.embedded_component_hashes or {}).get(_EMBEDDED_VAE_KEY)
|
|
95
|
+
standalone_kinds = {component_kind_for_purpose(download.file_purpose) for download in downloads}
|
|
96
|
+
embedded_hashes = record.config.embedded_component_hashes or {}
|
|
100
97
|
|
|
101
98
|
tasks: list[ComponentHashTask] = []
|
|
102
99
|
for index, download in enumerate(downloads):
|
|
@@ -107,8 +104,14 @@ def plan_component_hash_tasks(record: GenericModelRecord, *, skip_existing: bool
|
|
|
107
104
|
if skip_existing and download.content_hash is not None:
|
|
108
105
|
continue
|
|
109
106
|
tasks.append(ComponentHashTask(index, download.file_url, kind, embedded=False))
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
continue
|
|
108
|
+
# Primary checkpoint: probe for each embeddable component that has no standalone file of its own.
|
|
109
|
+
for embed_kind in _EMBEDDABLE_KINDS:
|
|
110
|
+
if embed_kind in standalone_kinds:
|
|
111
|
+
continue
|
|
112
|
+
if skip_existing and embedded_hashes.get(embed_kind.value) is not None:
|
|
113
|
+
continue
|
|
114
|
+
tasks.append(ComponentHashTask(index, download.file_url, embed_kind, embedded=True))
|
|
112
115
|
return tasks
|
|
113
116
|
|
|
114
117
|
|
|
@@ -120,7 +123,7 @@ def _hash_task(task: ComponentHashTask, *, session: requests.Session) -> str | N
|
|
|
120
123
|
return hash_standalone_component_url(task.url, session=session)
|
|
121
124
|
except NoComponentTensorsError:
|
|
122
125
|
return None
|
|
123
|
-
except
|
|
126
|
+
except UnsupportedContainerError as skip_reason:
|
|
124
127
|
logger.debug("Not hashable ({}): {}", skip_reason, task.url)
|
|
125
128
|
return None
|
|
126
129
|
except (RangeNotSupportedError, requests.RequestException) as fetch_error:
|
|
@@ -132,7 +135,7 @@ def _record_hash(record: GenericModelRecord, task: ComponentHashTask, content_ha
|
|
|
132
135
|
"""Store *content_hash* on the record, on the download for a standalone file or in the embedded map."""
|
|
133
136
|
if task.embedded:
|
|
134
137
|
embedded = dict(record.config.embedded_component_hashes or {})
|
|
135
|
-
embedded[
|
|
138
|
+
embedded[task.kind.value] = content_hash
|
|
136
139
|
record.config.embedded_component_hashes = embedded
|
|
137
140
|
else:
|
|
138
141
|
record.config.download[task.download_index].content_hash = content_hash
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.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.
|
|
22
|
-
__version_tuple__ = version_tuple = (7,
|
|
21
|
+
__version__ = version = '7.3.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (7, 3, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g0d95c3fff'
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"""The canonical set of shareable model components, and how it is derived from the reference.
|
|
2
2
|
|
|
3
3
|
A component (a VAE or a text encoder) is worth sharing across processes only when several models use the
|
|
4
|
-
byte-identical weights. This module holds the derived answer to "which component
|
|
4
|
+
byte-identical weights. This module holds the derived answer to "which component identities are worth
|
|
5
5
|
materialising once and sharing?" plus, for each, where a worker can obtain the standalone file (which model
|
|
6
|
-
carries it, and whether as its own file or embedded in a checkpoint it must
|
|
6
|
+
carries it, and whether as its own file or embedded in a checkpoint it must extract).
|
|
7
7
|
|
|
8
|
-
The set is derived centrally
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
The set is derived centrally and served as data, so every worker consumes one authoritative answer rather
|
|
9
|
+
than each re-deriving it (and drifting). Derivation is by frequency with a curated override: a component
|
|
10
|
+
shared by at least ``min_shared_models`` distinct models is promoted, an allowlist can force a specific hash
|
|
11
|
+
in regardless of count, and a denylist can exclude one. The identity is the torch-free **content hash** (the
|
|
12
|
+
tensor-region file hash), which is identical on every machine; the loaded-module hash is device- and
|
|
13
|
+
dtype-dependent, so it is a machine-local runtime detail only and is never shipped here. The kind values
|
|
14
|
+
match ``on_disk_layout.COMPONENT_PURPOSE_FOLDERS`` so a materialised file's placement reuses that routing.
|
|
14
15
|
|
|
15
16
|
This module stays torch-free: it is pure reference data and grouping logic over already-computed hashes.
|
|
16
17
|
"""
|
|
@@ -61,12 +62,13 @@ class CanonicalComponentSource(BaseModel):
|
|
|
61
62
|
|
|
62
63
|
|
|
63
64
|
class CanonicalComponent(BaseModel):
|
|
64
|
-
"""A shareable component promoted to the canonical set, identified by its content hash."""
|
|
65
|
+
"""A shareable component promoted to the canonical set, identified by its content (file) hash."""
|
|
65
66
|
|
|
66
67
|
model_config = get_default_config()
|
|
67
68
|
|
|
68
69
|
content_hash: str
|
|
69
|
-
"""The
|
|
70
|
+
"""The cross-platform-stable file-content identity the registry keys on (not the machine-dependent
|
|
71
|
+
loaded-module hash)."""
|
|
70
72
|
kind: ComponentKind
|
|
71
73
|
"""The component kind (``vae`` or ``text_encoders``)."""
|
|
72
74
|
shared_by_model_count: int
|
|
@@ -98,7 +100,8 @@ def _iter_component_candidates(
|
|
|
98
100
|
"""Yield every ``(content_hash, kind, source)`` a single record contributes.
|
|
99
101
|
|
|
100
102
|
Split-file components come from each ``DownloadRecord`` that declares a component ``file_purpose`` and a
|
|
101
|
-
``content_hash``; embedded components come from the record's ``embedded_component_hashes`` map.
|
|
103
|
+
``content_hash``; embedded components come from the record's ``embedded_component_hashes`` map. A component
|
|
104
|
+
whose content hash is not yet populated contributes nothing.
|
|
102
105
|
"""
|
|
103
106
|
config = record.config
|
|
104
107
|
for download in config.download:
|
|
@@ -136,15 +139,15 @@ def derive_canonical_registry(
|
|
|
136
139
|
) -> CanonicalComponentRegistry:
|
|
137
140
|
"""Derive the canonical component set from *records* by frequency, with a curated override.
|
|
138
141
|
|
|
139
|
-
A ``(content_hash, kind)`` group is promoted when its hash is in *allow*, or when
|
|
142
|
+
A ``(content_hash, kind)`` group is promoted when its identity hash is in *allow*, or when it is not in
|
|
140
143
|
*deny* and at least *min_shared_models* distinct models carry it. Sources are collected per group and
|
|
141
144
|
deduplicated, so a worker can pick whichever carrier it already has on disk.
|
|
142
145
|
|
|
143
146
|
Args:
|
|
144
147
|
records: The reference, keyed by model name.
|
|
145
148
|
min_shared_models: The frequency threshold for automatic promotion.
|
|
146
|
-
allow:
|
|
147
|
-
deny:
|
|
149
|
+
allow: Module (identity) hashes to force into the set regardless of count.
|
|
150
|
+
deny: Module (identity) hashes to exclude even when frequent.
|
|
148
151
|
"""
|
|
149
152
|
allow_set = set(allow)
|
|
150
153
|
deny_set = set(deny)
|
|
@@ -15,15 +15,17 @@ Two forms are hashed, because a component can appear either as its own file or e
|
|
|
15
15
|
* **standalone** (:func:`hash_standalone_component`): the file *is* the component (a split-file VAE or
|
|
16
16
|
text-encoder). Every tensor is hashed with its bare key.
|
|
17
17
|
* **embedded** (:func:`hash_embedded_component`): the component's tensors are selected out of a monolithic
|
|
18
|
-
checkpoint by their known key prefix, and that prefix is stripped
|
|
19
|
-
hash of the same weights extracted to their own file.
|
|
18
|
+
checkpoint by their known key prefix, and that prefix is stripped.
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
For the **VAE**, the embedded hash equals the standalone hash of the same weights extracted to their own
|
|
21
|
+
file (ComfyUI strips the VAE prefix cleanly, no key renaming). For **text encoders** it does not: in a
|
|
22
|
+
monolithic checkpoint ComfyUI renames and structurally reshuffles them at load (SD1.5/SDXL fold
|
|
23
23
|
``conditioner.embedders.*`` into ``clip_l``/``clip_g`` and convert the OpenCLIP layout, which fuses/splits
|
|
24
|
-
tensors), so a torch-free file hash cannot reproduce
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
tensors), so a torch-free file hash cannot reproduce a standalone text-encoder file. The embedded
|
|
25
|
+
text-encoder hash is therefore a stable identity matched only against *other monolithic checkpoints* (which
|
|
26
|
+
all store the encoders the same way) and the lane's representative-checkpoint load, never against a
|
|
27
|
+
standalone text-encoder file. Split-file families (Flux/Qwen/Z-Image) ship their encoders standalone and use
|
|
28
|
+
the standalone hash directly.
|
|
27
29
|
|
|
28
30
|
This module stays inside :mod:`horde_model_reference`'s torch-free boundary (enforced by
|
|
29
31
|
``tests/test_torch_free_imports.py``): it parses the safetensors header with the stdlib and hashes byte
|
|
@@ -59,7 +61,6 @@ __all__ = [
|
|
|
59
61
|
"NoComponentTensorsError",
|
|
60
62
|
"RangeNotSupportedError",
|
|
61
63
|
"RegionReader",
|
|
62
|
-
"UnsupportedComponentError",
|
|
63
64
|
"UnsupportedContainerError",
|
|
64
65
|
"component_kind_for_purpose",
|
|
65
66
|
"hash_embedded_component",
|
|
@@ -101,12 +102,22 @@ the strip is a pure leading-substring removal with no key renaming, so stripping
|
|
|
101
102
|
bare ``encoder.``/``decoder.`` keys a standalone VAE file carries."""
|
|
102
103
|
|
|
103
104
|
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
_EMBEDDED_TE_PREFIXES: tuple[str, ...] = ("conditioner.embedders.", "cond_stage_model.")
|
|
106
|
+
"""Key prefixes under which a monolithic checkpoint stores its text encoders (SDXL
|
|
107
|
+
``conditioner.embedders.0/1.``, SD1.5 ``cond_stage_model.``). Unlike the VAE, ComfyUI renames and reshuffles
|
|
108
|
+
these keys at load, so this hash does NOT equal a standalone text-encoder file; it is a stable identity for a
|
|
109
|
+
monolithic checkpoint's text encoders, matched only against other monolithic checkpoints (and the lane's
|
|
110
|
+
representative-checkpoint load), which all store them identically."""
|
|
106
111
|
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
_EMBEDDED_PREFIXES: dict[ComponentKind, tuple[str, ...]] = {
|
|
114
|
+
ComponentKind.VAE: _EMBEDDED_VAE_PREFIXES,
|
|
115
|
+
ComponentKind.TEXT_ENCODERS: _EMBEDDED_TE_PREFIXES,
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class UnsupportedContainerError(ValueError):
|
|
120
|
+
"""Raised when a file is not a parseable safetensors container (e.g. a pickle ``.ckpt``)."""
|
|
110
121
|
|
|
111
122
|
|
|
112
123
|
class NoComponentTensorsError(LookupError):
|
|
@@ -304,13 +315,14 @@ def _select_standalone_tensors(header: dict[str, object]) -> list[ComponentTenso
|
|
|
304
315
|
return selected
|
|
305
316
|
|
|
306
317
|
|
|
307
|
-
def
|
|
308
|
-
"""Select
|
|
318
|
+
def _select_embedded_tensors(header: dict[str, object], kind: ComponentKind) -> list[ComponentTensor]:
|
|
319
|
+
"""Select *kind*'s tensors from a monolithic checkpoint, stripping the checkpoint prefix to bare keys."""
|
|
320
|
+
prefixes = _EMBEDDED_PREFIXES[kind]
|
|
309
321
|
selected: list[ComponentTensor] = []
|
|
310
322
|
for name, entry in header.items():
|
|
311
323
|
if name == "__metadata__":
|
|
312
324
|
continue
|
|
313
|
-
prefix = next((candidate for candidate in
|
|
325
|
+
prefix = next((candidate for candidate in prefixes if name.startswith(candidate)), None)
|
|
314
326
|
if prefix is None:
|
|
315
327
|
continue
|
|
316
328
|
tensor = _tensor_from_entry(name[len(prefix) :], entry)
|
|
@@ -362,22 +374,20 @@ def hash_standalone_component(reader: RegionReader) -> str:
|
|
|
362
374
|
|
|
363
375
|
|
|
364
376
|
def hash_embedded_component(reader: RegionReader, kind: ComponentKind) -> str:
|
|
365
|
-
"""Return the
|
|
377
|
+
"""Return the content hash of *kind* selected from a monolithic checkpoint read via *reader*.
|
|
366
378
|
|
|
367
|
-
|
|
368
|
-
|
|
379
|
+
The embedded VAE hash equals :func:`hash_standalone_component` of the same VAE extracted to its own file
|
|
380
|
+
(ComfyUI strips the VAE prefix cleanly). The embedded text-encoder hash does NOT equal a standalone
|
|
381
|
+
text-encoder file (ComfyUI renames those keys at load); it is a stable identity for a monolithic
|
|
382
|
+
checkpoint's text encoders, matched only against other monolithic checkpoints that store them identically.
|
|
383
|
+
Both are file-content hashes, independent of platform, device and load-time dtype selection.
|
|
369
384
|
|
|
370
385
|
Raises:
|
|
371
|
-
UnsupportedComponentError: *kind* has no supported embedded extraction (any text encoder).
|
|
372
386
|
UnsupportedContainerError: The source is not a parseable safetensors container.
|
|
373
387
|
NoComponentTensorsError: The checkpoint holds no tensors for *kind*.
|
|
374
388
|
"""
|
|
375
|
-
if kind is not ComponentKind.VAE:
|
|
376
|
-
raise UnsupportedComponentError(
|
|
377
|
-
f"Embedded extraction is not supported for {kind}; it is served by split-file component files.",
|
|
378
|
-
)
|
|
379
389
|
header, data_start = _parse_safetensors_header(reader)
|
|
380
|
-
tensors =
|
|
390
|
+
tensors = _select_embedded_tensors(header, kind)
|
|
381
391
|
if not tensors:
|
|
382
392
|
raise NoComponentTensorsError(f"No embedded {kind} tensors found in checkpoint.")
|
|
383
393
|
return _hash_selected(reader, data_start, tensors)
|
|
@@ -60,10 +60,10 @@ def image_generation_record_to_legacy_dict(record: GenericModelRecord) -> dict[s
|
|
|
60
60
|
"""Convert a v2 image-generation record to a legacy ``stable_diffusion.json`` entry dict.
|
|
61
61
|
|
|
62
62
|
Inverts the legacy-to-v2 config split: each v2 download becomes a legacy ``files`` entry (carrying its
|
|
63
|
-
``sha256sum``, ``file_type`` from ``file_purpose`` and the
|
|
64
|
-
entry (carrying the URL), and the config's ``embedded_component_hashes`` is preserved. The
|
|
65
|
-
mapped back to its legacy string form where one exists (otherwise passed through). The result
|
|
66
|
-
against :class:`LegacyStableDiffusionRecord`.
|
|
63
|
+
``sha256sum``, ``file_type`` from ``file_purpose`` and the component ``content_hash``) plus a
|
|
64
|
+
``download`` entry (carrying the URL), and the config's ``embedded_component_hashes`` is preserved. The
|
|
65
|
+
baseline is mapped back to its legacy string form where one exists (otherwise passed through). The result
|
|
66
|
+
validates against :class:`LegacyStableDiffusionRecord`.
|
|
67
67
|
|
|
68
68
|
The mapping is intentionally lossy in one direction: v2-only metadata that has no legacy counterpart
|
|
69
69
|
(record ``metadata``, ``model_classification``, ``finetune_series``) is dropped. The goal is a minimal,
|
|
@@ -83,8 +83,8 @@ class LegacyConfigFile(BaseModel):
|
|
|
83
83
|
file_type: str | None = None
|
|
84
84
|
content_hash: str | None = None
|
|
85
85
|
"""The normalized tensor-region content hash of this component file (distinct from the whole-file
|
|
86
|
-
``sha256sum``)
|
|
87
|
-
|
|
86
|
+
``sha256sum``): the cross-platform-stable identity used for cross-process sharing. ``None`` when unknown
|
|
87
|
+
or unhashable."""
|
|
88
88
|
|
|
89
89
|
@model_validator(mode="after")
|
|
90
90
|
def _ensure_sha256sum_for_model_files(self, info: ValidationInfo) -> LegacyConfigFile:
|
|
@@ -138,9 +138,9 @@ class LegacyConfig(BaseModel):
|
|
|
138
138
|
files: list[LegacyConfigFile] = Field(default_factory=list)
|
|
139
139
|
download: list[LegacyConfigDownload] = Field(default_factory=list)
|
|
140
140
|
embedded_component_hashes: dict[str, str] | None = None
|
|
141
|
-
"""Maps a component kind (``vae``, ``text_encoders``) to the
|
|
142
|
-
|
|
143
|
-
component or is unhashable."""
|
|
141
|
+
"""Maps a component kind (``vae``, ``text_encoders``) to the tensor-region content hash of that component
|
|
142
|
+
embedded in the primary checkpoint: the cross-platform-stable identity for cross-process sharing. ``None``
|
|
143
|
+
when the model embeds no shareable component or is unhashable."""
|
|
144
144
|
|
|
145
145
|
@classmethod
|
|
146
146
|
def _coerce_config_dict(cls, value: object, info: ValidationInfo) -> dict[str, Any]:
|
|
@@ -149,9 +149,10 @@ class LegacyConfig(BaseModel):
|
|
|
149
149
|
if not isinstance(value, dict):
|
|
150
150
|
raise TypeError("config entries must be provided as a mapping")
|
|
151
151
|
raw_dict: dict[str, object] = {str(k): v for k, v in value.items()}
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
|
|
152
|
+
# The embedded-hash maps are legitimate extra config entries, not part of the legacy files/download
|
|
153
|
+
# pair the ">2 entries" heuristic guards against.
|
|
154
|
+
embedded_keys = ("embedded_component_hashes",)
|
|
155
|
+
countable = {key: value for key, value in raw_dict.items() if key not in embedded_keys}
|
|
155
156
|
if len(countable) > 2:
|
|
156
157
|
_record_issue(info, "has more than 2 config entries.")
|
|
157
158
|
coerced: dict[str, Any] = {}
|
|
@@ -160,8 +161,9 @@ class LegacyConfig(BaseModel):
|
|
|
160
161
|
if not isinstance(entries, Iterable):
|
|
161
162
|
raise TypeError(f"config[{key!s}] must be iterable")
|
|
162
163
|
coerced[key] = list(entries)
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
for key in embedded_keys:
|
|
165
|
+
if raw_dict.get(key) is not None:
|
|
166
|
+
coerced[key] = raw_dict[key]
|
|
165
167
|
return coerced
|
|
166
168
|
|
|
167
169
|
_coerce_config_dict = model_validator(mode="before")(_coerce_config_dict) # type: ignore[assignment] # Pydantic wraps the classmethod in a descriptor proxy
|
|
@@ -66,8 +66,10 @@ class DownloadRecord(BaseModel): # TODO Rename? (record to subrecord?)
|
|
|
66
66
|
|
|
67
67
|
Distinct from the whole-file :attr:`sha256sum`: it hashes only the component's tensor payload (sorted by
|
|
68
68
|
name, folding in dtype/shape/bytes and excluding container metadata and key ordering), so byte-equivalent
|
|
69
|
-
VAE/text-encoder weights shipped in different containers share one hash.
|
|
70
|
-
|
|
69
|
+
VAE/text-encoder weights shipped in different containers share one hash. This cross-platform-stable value
|
|
70
|
+
(a pure function of the file bytes, independent of device and load-time dtype) is the identity the
|
|
71
|
+
canonical registry keys on for cross-process sharing. ``None`` when unknown or unhashable (e.g. a
|
|
72
|
+
``.ckpt`` pickle file)."""
|
|
71
73
|
file_purpose: str | None = None
|
|
72
74
|
"""The role this file plays for the model (e.g. ``"vae"`` or ``"text_encoders"``).
|
|
73
75
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: horde_model_reference
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3.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
|
|
@@ -17,7 +17,6 @@ import pytest
|
|
|
17
17
|
from horde_model_reference.component_hash import (
|
|
18
18
|
ComponentKind,
|
|
19
19
|
NoComponentTensorsError,
|
|
20
|
-
UnsupportedComponentError,
|
|
21
20
|
UnsupportedContainerError,
|
|
22
21
|
component_kind_for_purpose,
|
|
23
22
|
hash_embedded_component_file,
|
|
@@ -113,15 +112,22 @@ def test_embedded_vae_matches_standalone(tmp_path: Path, vae_prefix: str) -> Non
|
|
|
113
112
|
assert hash_embedded_component_file(checkpoint, ComponentKind.VAE) == hash_standalone_component_file(standalone)
|
|
114
113
|
|
|
115
114
|
|
|
116
|
-
def
|
|
117
|
-
"""Embedded text
|
|
115
|
+
def test_embedded_text_encoder_is_hashed(tmp_path: Path) -> None:
|
|
116
|
+
"""Embedded text encoders hash consistently across checkpoints, independent of UNet/VAE and stable."""
|
|
117
|
+
te = [
|
|
118
|
+
("conditioner.embedders.0.weight", "F32", (1, 2), bytes(range(16, 24))),
|
|
119
|
+
("conditioner.embedders.1.weight", "F16", (2, 2), bytes(range(1, 9))),
|
|
120
|
+
]
|
|
118
121
|
checkpoint = _write(
|
|
119
122
|
tmp_path,
|
|
120
123
|
"ckpt.safetensors",
|
|
121
|
-
[("
|
|
124
|
+
[("model.diffusion_model.x", "F16", (2,), bytes(range(40, 44))), *te],
|
|
122
125
|
)
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
te_hash = hash_embedded_component_file(checkpoint, ComponentKind.TEXT_ENCODERS)
|
|
127
|
+
# A different checkpoint carrying the same text encoders (different UNet) hashes equal.
|
|
128
|
+
other_unet = ("model.diffusion_model.x", "F16", (3,), bytes(range(60, 66)))
|
|
129
|
+
other = _write(tmp_path, "other.safetensors", [other_unet, *te])
|
|
130
|
+
assert hash_embedded_component_file(other, ComponentKind.TEXT_ENCODERS) == te_hash
|
|
125
131
|
|
|
126
132
|
|
|
127
133
|
def test_embedded_vae_missing_raises(tmp_path: Path) -> None:
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/tests/test_hash_components_script.py
RENAMED
|
@@ -47,13 +47,12 @@ def test_split_file_plans_standalone_not_embedded() -> None:
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
def
|
|
51
|
-
"""A monolithic checkpoint (no separate
|
|
50
|
+
def test_monolithic_plans_embedded_vae_and_te() -> None:
|
|
51
|
+
"""A monolithic checkpoint (no separate component files) is probed for embedded VAE and text encoders."""
|
|
52
52
|
record = _record([_download("sdxl_finetune.safetensors")])
|
|
53
53
|
tasks = plan_component_hash_tasks(record, skip_existing=False)
|
|
54
|
-
assert
|
|
55
|
-
assert tasks
|
|
56
|
-
assert tasks[0].kind is ComponentKind.VAE
|
|
54
|
+
assert all(task.embedded for task in tasks)
|
|
55
|
+
assert {task.kind for task in tasks} == {ComponentKind.VAE, ComponentKind.TEXT_ENCODERS}
|
|
57
56
|
|
|
58
57
|
|
|
59
58
|
def test_non_safetensors_is_skipped() -> None:
|
|
@@ -69,7 +68,11 @@ def test_skip_existing_standalone_hash() -> None:
|
|
|
69
68
|
assert len(plan_component_hash_tasks(record, skip_existing=False)) == 1
|
|
70
69
|
|
|
71
70
|
|
|
72
|
-
def
|
|
73
|
-
"""skip_existing leaves
|
|
74
|
-
record = _record(
|
|
71
|
+
def test_skip_existing_embedded_components() -> None:
|
|
72
|
+
"""skip_existing leaves already-recorded embedded components alone."""
|
|
73
|
+
record = _record(
|
|
74
|
+
[_download("sdxl_finetune.safetensors")],
|
|
75
|
+
embedded={"vae": "e" * 64, "text_encoders": "f" * 64},
|
|
76
|
+
)
|
|
75
77
|
assert plan_component_hash_tasks(record, skip_existing=True) == []
|
|
78
|
+
assert len(plan_component_hash_tasks(record, skip_existing=False)) == 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/docker-publish.yml
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/.github/workflows/docker-validation.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/analytics_pipeline.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/architecture_overview.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/canonical_format.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/design_decisions.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/gated_r2_mirror.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/concepts/request_lifecycle.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/consume_the_http_api.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/mirror_models_to_r2.md
RENAMED
|
File without changes
|
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/submit_models_via_the_api.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/guides/write_a_live_provider.md
RENAMED
|
File without changes
|
{horde_model_reference-7.2.0 → horde_model_reference-7.3.0}/docs/horde_model_reference/.pages
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|