- Add FeatureExtractor for CLIP-based image/text feature extraction - Add ObjectiveMetricsCalculator for technical quality metrics - Add VLMEvaluator for vision language model evaluation - Add HybridQualityGate combining objective + VLM evaluation - Enhance CharacterMemory with visual feature support - Add quality optional dependency (torch, ftfy, regex) - Add unit tests for new modules 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
# Copyright (C) 2025 AIDC-AI
|
|
# Tests for FeatureExtractor
|
|
|
|
import pytest
|
|
|
|
from pixelle_video.services.quality.feature_extractor import (
|
|
FeatureExtractor,
|
|
FeatureExtractorConfig,
|
|
)
|
|
|
|
|
|
class TestFeatureExtractorConfig:
|
|
"""Tests for FeatureExtractorConfig"""
|
|
|
|
def test_default_values(self):
|
|
config = FeatureExtractorConfig()
|
|
assert config.model_name == "ViT-B/32"
|
|
assert config.device == "auto"
|
|
assert config.cache_features is True
|
|
|
|
|
|
class TestFeatureExtractor:
|
|
"""Tests for FeatureExtractor"""
|
|
|
|
def test_init_default(self):
|
|
extractor = FeatureExtractor()
|
|
assert extractor.config.model_name == "ViT-B/32"
|
|
|
|
def test_is_available_check(self):
|
|
"""Test availability check (may be True or False)"""
|
|
extractor = FeatureExtractor()
|
|
# Just check it returns a boolean
|
|
assert isinstance(extractor.is_available, bool)
|
|
|
|
def test_extract_without_clip(self):
|
|
"""Test graceful degradation when CLIP unavailable"""
|
|
extractor = FeatureExtractor()
|
|
if not extractor.is_available:
|
|
result = extractor.extract_image_features("/fake/path.png")
|
|
assert result is None
|
|
|
|
def test_clear_cache(self):
|
|
"""Test cache clearing"""
|
|
extractor = FeatureExtractor()
|
|
extractor._feature_cache["test"] = "value"
|
|
extractor.clear_cache()
|
|
assert len(extractor._feature_cache) == 0
|