(paper: Dict[str, Any])
| 4261 | items = value |
| 4262 | else: |
| 4263 | parsed = _load_json(value, None) |
| 4264 | if isinstance(parsed, list): |
| 4265 | items = parsed |
| 4266 | else: |
| 4267 | items = re.split(r"[,;,、]\s*", str(value or "")) |
| 4268 | if not isinstance(items, list): |
| 4269 | return [] |
| 4270 | return [str(item).strip() for item in items[: max(1, int(limit))] if str(item or "").strip()] |
| 4271 | |
| 4272 | |
| 4273 | def _paper_query_haystack(paper: Dict[str, Any]) -> str: |
| 4274 | raw_metadata = paper.get("metadata") or {} |
| 4275 | metadata = raw_metadata if isinstance(raw_metadata, dict) else _load_json(raw_metadata, {}) |
| 4276 | if not isinstance(metadata, dict): |
| 4277 | metadata = {} |
| 4278 | pieces = [ |
| 4279 | paper.get("title"), |
| 4280 | paper.get("abstract"), |
| 4281 | paper.get("summary"), |
| 4282 | paper.get("keywords"), |
| 4283 | paper.get("category"), |
| 4284 | paper.get("source"), |
| 4285 | paper.get("subjects"), |
| 4286 | paper.get("categories"), |
| 4287 | metadata.get("category"), |
| 4288 | metadata.get("keywords"), |
no test coverage detected