mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-07-10 22:32:16 +02:00
40 lines
1.2 KiB
Python
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
|