File size: 1,241 Bytes
6817686
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
from sentence_transformers import SentenceTransformer
from config import EMBEDDING_MODEL, VECTOR_DIMENSIONS
from core.logger import get_logger

logger = get_logger(__name__)

_model = None #caching the model load. Using Singleton patter with lazy initiallization

def load_embedding_model() -> SentenceTransformer:

    global _model 
    if _model is None:
        logger.info(f"Loading embedding model: {EMBEDDING_MODEL}")
        _model = SentenceTransformer(EMBEDDING_MODEL)
        logger.info(f"Model loaded - vector size: {VECTOR_DIMENSIONS}")
    
    return _model

def embed_text(text: str) -> np.ndarray:

    #input validation
    if not text.strip():
        logger.error("Cannot embed empty text")
        raise ValueError("Text cannot be empty")
    
    model = load_embedding_model()

    logger.info(f"Embedding text: {len(text)} chars")
    embedded_text = model.encode(text)


    if embedded_text.shape[0] != VECTOR_DIMENSIONS:
        logger.error(f"Dimension mismatch: expected {VECTOR_DIMENSIONS}, got : {embedded_text.shape[0]}")
        raise ValueError(f"Embedding dimension mismatch")    
    
    logger.info(f"Embedded successfully: shape {embedded_text.shape}")
    
    return embedded_text