SurfSense/surfsense_backend/app/capabilities/web/discover/providers/linkup.py

40 lines
1.2 KiB
Python

"""Linkup discover provider (env-keyed via ``LINKUP_API_KEY``)."""
from __future__ import annotations
import asyncio
from linkup import LinkupClient
from app.capabilities.web.discover.schemas import DiscoverHit
from app.config import config
class LinkupProvider:
name = "linkup"
def is_available(self) -> bool:
return bool(config.LINKUP_API_KEY)
async def search(self, query: str, top_k: int) -> list[DiscoverHit]:
client = LinkupClient(api_key=config.LINKUP_API_KEY)
response = await asyncio.to_thread(
client.search, query=query, depth="standard", output_type="searchResults"
)
hits: list[DiscoverHit] = []
for result in getattr(response, "results", None) or []:
url = getattr(result, "url", "") or ""
if not url:
continue
content = getattr(result, "content", "") or ""
hits.append(
DiscoverHit(
url=url,
title=getattr(result, "name", "") or url,
snippet=content or None,
provider=self.name,
)
)
if len(hits) >= top_k:
break
return hits