Update src/api/agent.py
Browse files- src/api/agent.py +44 -2
src/api/agent.py
CHANGED
|
@@ -2823,11 +2823,30 @@ async def _run_search_mode(
|
|
| 2823 |
) -> Tuple[str, List[dict], List[dict], str]:
|
| 2824 |
context = await _prepare_queries(question, context, model, is_follow_up)
|
| 2825 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2826 |
if context.source == "pubmed":
|
| 2827 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2828 |
source_name = "pubmed"
|
| 2829 |
else:
|
| 2830 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2831 |
source_name = "primo"
|
| 2832 |
|
| 2833 |
search_results = result.get("results", []) or []
|
|
@@ -2853,6 +2872,25 @@ async def _run_search_mode(
|
|
| 2853 |
|
| 2854 |
answer += _source_badge(source_name, source_url)
|
| 2855 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2856 |
# ββ Bottom: AI tools recommendation panel βββββββββββββββββββββββββββββββββ
|
| 2857 |
answer += _ai_tools_footer(context)
|
| 2858 |
|
|
@@ -2861,6 +2899,10 @@ async def _run_search_mode(
|
|
| 2861 |
link = item.get("primo_url") or item.get("link")
|
| 2862 |
if link:
|
| 2863 |
sources.append({"title": item.get("title", "Result"), "url": link})
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2864 |
return answer, search_results, sources, source_url
|
| 2865 |
|
| 2866 |
|
|
|
|
| 2823 |
) -> Tuple[str, List[dict], List[dict], str]:
|
| 2824 |
context = await _prepare_queries(question, context, model, is_follow_up)
|
| 2825 |
|
| 2826 |
+
# Run PRIMO (or PubMed) and OpenAlex in parallel.
|
| 2827 |
+
# Skip OpenAlex for books-only searches β it only indexes journal articles.
|
| 2828 |
+
use_openalex = context.resource_type != "books"
|
| 2829 |
+
|
| 2830 |
+
import asyncio as _aio
|
| 2831 |
if context.source == "pubmed":
|
| 2832 |
+
if use_openalex:
|
| 2833 |
+
(result, source_url), oa_papers = await _aio.gather(
|
| 2834 |
+
_search_pubmed_articles(context, limit=6),
|
| 2835 |
+
_openalex_search(context.topic, limit=5),
|
| 2836 |
+
)
|
| 2837 |
+
else:
|
| 2838 |
+
result, source_url = await _search_pubmed_articles(context, limit=6)
|
| 2839 |
+
oa_papers = []
|
| 2840 |
source_name = "pubmed"
|
| 2841 |
else:
|
| 2842 |
+
if use_openalex:
|
| 2843 |
+
(result, source_url), oa_papers = await _aio.gather(
|
| 2844 |
+
_search_primo_catalog(context, limit=6),
|
| 2845 |
+
_openalex_search(context.topic, limit=5),
|
| 2846 |
+
)
|
| 2847 |
+
else:
|
| 2848 |
+
result, source_url = await _search_primo_catalog(context, limit=6)
|
| 2849 |
+
oa_papers = []
|
| 2850 |
source_name = "primo"
|
| 2851 |
|
| 2852 |
search_results = result.get("results", []) or []
|
|
|
|
| 2872 |
|
| 2873 |
answer += _source_badge(source_name, source_url)
|
| 2874 |
|
| 2875 |
+
# ββ OpenAlex open-access papers section βββββββββββββββββββββββββββββββββββ
|
| 2876 |
+
if oa_papers:
|
| 2877 |
+
answer += (
|
| 2878 |
+
"<br><br><strong>π Open Access Papers (via OpenAlex)</strong><br>"
|
| 2879 |
+
"<span style='font-size:.78rem;color:#6b7280'>"
|
| 2880 |
+
"Freely available peer-reviewed articles on this topic:</span><br>"
|
| 2881 |
+
)
|
| 2882 |
+
for i, paper in enumerate(oa_papers[:5], 1):
|
| 2883 |
+
answer += (
|
| 2884 |
+
f'<br><strong>[{i}]</strong> '
|
| 2885 |
+
f'<a href="{paper["link"]}" target="_blank" '
|
| 2886 |
+
f'style="color:#003366;font-weight:600">{_escape(paper["title"])}</a><br>'
|
| 2887 |
+
f'<span style="font-size:.78rem;color:#6b7280">'
|
| 2888 |
+
f'{_escape(paper["authors"])} Β· {paper["year"]}'
|
| 2889 |
+
f'{(" Β· " + _escape(paper["venue"])) if paper.get("venue") else ""}'
|
| 2890 |
+
f'</span>'
|
| 2891 |
+
)
|
| 2892 |
+
answer += _source_badge("openalex_badge", "https://openalex.org")
|
| 2893 |
+
|
| 2894 |
# ββ Bottom: AI tools recommendation panel βββββββββββββββββββββββββββββββββ
|
| 2895 |
answer += _ai_tools_footer(context)
|
| 2896 |
|
|
|
|
| 2899 |
link = item.get("primo_url") or item.get("link")
|
| 2900 |
if link:
|
| 2901 |
sources.append({"title": item.get("title", "Result"), "url": link})
|
| 2902 |
+
# Also include OA papers in sources
|
| 2903 |
+
for paper in oa_papers[:3]:
|
| 2904 |
+
if paper.get("link"):
|
| 2905 |
+
sources.append({"title": paper["title"], "url": paper["link"]})
|
| 2906 |
return answer, search_results, sources, source_url
|
| 2907 |
|
| 2908 |
|