diff --git a/app/services/digest/loader.py b/app/services/digest/loader.py index ccbc627..1f1e6be 100644 --- a/app/services/digest/loader.py +++ b/app/services/digest/loader.py @@ -50,10 +50,24 @@ _SOURCE_COUNTRY_SQL = text(""" def _to_numpy_embedding(raw: Any) -> np.ndarray | None: - """pgvector 컬럼을 numpy array(float32)로 정규화.""" + """pgvector 컬럼을 numpy array(float32)로 정규화. + + raw SQL + asyncpg 조합에서 pgvector type 이 등록 안 되어 있으면 + embedding 이 '[0.1,0.2,...]' 같은 string 으로 반환된다. ORM 을 안 쓰므로 + 이 경우 직접 파싱해야 한다. + """ if raw is None: return None - arr = np.asarray(raw, dtype=np.float32) + if isinstance(raw, str): + import json + try: + raw = json.loads(raw) + except json.JSONDecodeError: + return None + try: + arr = np.asarray(raw, dtype=np.float32) + except (TypeError, ValueError): + return None if arr.size == 0: return None return arr