diff --git a/conf/infinity_mapping.json b/conf/infinity_mapping.json index 5f7ed80f2..893e18632 100644 --- a/conf/infinity_mapping.json +++ b/conf/infinity_mapping.json @@ -39,5 +39,6 @@ "doc_type_kwd": {"type": "varchar", "default": "", "analyzer": "whitespace-#"}, "toc_kwd": {"type": "varchar", "default": "", "analyzer": "whitespace-#"}, "raptor_kwd": {"type": "varchar", "default": "", "analyzer": "whitespace-#"}, - "raptor_layer_int": {"type": "integer", "default": 0} + "raptor_layer_int": {"type": "integer", "default": 0}, + "extra": {"type": "varchar", "default": ""} } diff --git a/rag/utils/infinity_conn.py b/rag/utils/infinity_conn.py index 7ffd9f13d..9407ab11a 100644 --- a/rag/utils/infinity_conn.py +++ b/rag/utils/infinity_conn.py @@ -438,6 +438,16 @@ class InfinityConnection(InfinityConnectionBase): d[k] = json.dumps(v) else: d[k] = v + elif k == "extra": + # RAPTOR writes {"raptor_method": ...} as a dict; Infinity's + # `extra` column is varchar so we serialize on the write path. + # The read path (raptor_utils._as_extra_dict) already accepts + # both dict and JSON-string. Other backends (OceanBase JSON + # column, ES/OpenSearch) keep dict shape — this is Infinity-only. + if isinstance(v, dict): + d[k] = json.dumps(v) + else: + d[k] = v if v else "" elif k == "kb_id": if isinstance(d[k], list): d[k] = d[k][0] # since d[k] is a list, but we need a str