File size: 2,321 Bytes
877e000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6e3dbdb
 
877e000
6e3dbdb
 
 
 
 
 
 
 
 
 
 
 
877e000
6e3dbdb
877e000
 
 
 
 
 
 
 
6e3dbdb
 
877e000
6e3dbdb
877e000
6e3dbdb
 
877e000
 
6e3dbdb
 
877e000
 
 
 
 
 
6e3dbdb
 
877e000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# models/property_relation.py

from .model_loader import load_model
from .logging_config import logger

def check_if_property_related(text):
    try:
        # Validate input
        if not isinstance(text, str):
            logger.warning(f"Input to check_if_property_related is not a string: {type(text)}")
            text = str(text) if text is not None else ""
        if not text.strip():
            logger.warning("Empty text provided to check_if_property_related.")
            return {
                'is_related': False,
                'confidence': 0.0,
                'error': 'No text provided',
                'model_used': 'static_fallback'
            }
        
        try:
            classifier = load_model("zero-shot-classification")  # Use standard model instead of typeform
        except Exception as e:
            logger.error(f"Error loading model in property relation: {str(e)}")
            return {
                'is_related': False,
                'confidence': 0.0,
                'error': f'Model loading error: {str(e)}',
                'model_used': 'static_fallback'
            }
        
        result = classifier(text[:1000], ["property-related", "non-property-related"])
        
        # Defensive: ensure result structure
        labels = result.get('labels', [])
        scores = result.get('scores', [])
        if not labels or not scores or len(labels) != 2 or len(scores) != 2:
            logger.error(f"Unexpected model output in check_if_property_related: {result}")
            return {
                'is_related': False,
                'confidence': 0.0,
                'error': 'Model output error',
                'model_used': 'static_fallback'
            }
        
        is_related = labels[0] == "property-related"
        model_used = getattr(classifier, 'fallback_model', 'primary_model')
        
        return {
            'is_related': is_related,
            'confidence': float(scores[0]) if is_related else float(scores[1]),
            'model_used': model_used
        }
    except Exception as e:
        logger.error(f"Error checking property relation: {str(e)}")
        return {
            'is_related': False,
            'confidence': 0.0,
            'error': str(e),
            'model_used': 'static_fallback'
        }