nikeshn commited on
Commit
e77e132
Β·
verified Β·
1 Parent(s): da03013

Update src/api/agent.py

Browse files
Files changed (1) hide show
  1. 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
- result, source_url = await _search_pubmed_articles(context, limit=6)
 
 
 
 
 
 
 
2828
  source_name = "pubmed"
2829
  else:
2830
- result, source_url = await _search_primo_catalog(context, limit=6)
 
 
 
 
 
 
 
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