File size: 1,800 Bytes
34bff5b
 
 
 
 
 
9d2647f
 
34bff5b
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2647f
 
 
34bff5b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2647f
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import gradio as gr
import pandas as pd
from langchain_community.utilities import SearxSearchWrapper

from utils.helpers import map_results

from .base import BaseInterfaceWrapper


async def searxng_search(
    query: str, searxng_host: str, max_results: int = 5
) -> pd.DataFrame:
    """
    Given a search query, returns the search results from SearxNG.

    Args:
        query (str): The search query.
        searxng_host (str): The SearxNG host URL.
        searxng_headers (dict): The SearxNG headers for additional metadata and authentication.
        max_results (int, optional): The number of maximum results to return. Defaults to 5.

    Returns:
        dict: The search results from SearxNG Search Engine. Fields:
            headers (list): The headers of the columns in the search results. Contains "title", "link", "body".
            data (list): The data in the search results. Each row contains the title, link, and body of the search result.
    """
    searxng = SearxSearchWrapper(
        searx_host=searxng_host,
        k=max_results,
    )
    results = await searxng.aresults(
        query,
        num_results=max_results,
    )
    mapping = {
        "title": "title",
        "link": "link",
        "snippet": "body",
    }
    results = await map_results(results, mapping)
    return results


class SearxNGInterfaceWrapper(BaseInterfaceWrapper):
    def __init__(self):
        super().__init__(
            fn=searxng_search,
            inputs=[
                gr.Textbox(label="Search Query"),
                gr.Slider(
                    minimum=1, maximum=10, step=1, value=5, label="Number of Results"
                ),
            ],
            title="SearxNG Search",
            description="Search the web using SearxNG Search Engine.",
        )