File size: 2,420 Bytes
9af61ac
0b10ccb
2a05c69
 
0b10ccb
4639906
0b10ccb
2a05c69
0b10ccb
4639906
2a05c69
 
 
0b10ccb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92c55b6
0b10ccb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92c55b6
 
0b10ccb
 
92c55b6
0b10ccb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import gradio as gr
from tool import LinkupSearchTool

def run_search(query, depth, api_key):
    if not query.strip() or not depth or not api_key.strip():
        return "❌ All fields are required."

    try:
        tool = LinkupSearchTool(linkup_api_key=api_key)
        return tool.forward(query=query, depth=depth)
    except Exception as e:
        return f"❌ Error: {str(e)}"

def enable_submit(q, d, k):
    return gr.Button.update(interactive=bool(q.strip() and d and k.strip()))

with gr.Blocks(title="Linkup Web Search Tool") as demo:
    gr.Markdown(
        """
        # πŸ” Linkup Web Search Tool
        Perform real-time web search using [Linkup API](https://linkup.so).

        🧠 Supports `standard` and `deep` query depth.  
        πŸ” Requires your personal Linkup API key.  
        πŸ’‘ Ideal for facts, trends, research, and real-time data discovery.
        """,
        elem_id="header",
    )

    with gr.Row():
        query_input = gr.Textbox(
            label="Search Query",
            placeholder="e.g. AI trends in 2024",
            lines=1,
        )
        depth_input = gr.Dropdown(
            label="Search Depth",
            choices=["standard", "deep"],
            value="standard",
            allow_custom_value=False,
        )
        api_key_input = gr.Textbox(
            label="Linkup API Key",
            placeholder="Paste your Linkup API key here",
            type="password",
        )

    search_btn = gr.Button("πŸ” Search", interactive=False)
    output = gr.Markdown("πŸ’¬ *Enter a query and click Search to begin.*", elem_id="output")

    # Loading spinner and search button connection
    search_btn.click(
        fn=run_search,
        inputs=[query_input, depth_input, api_key_input],
        outputs=output,
        show_progress=True,
    )

    # Dynamic form validation
    query_input.input(enable_submit, [query_input, depth_input, api_key_input], [search_btn])
    depth_input.input(enable_submit, [query_input, depth_input, api_key_input], [search_btn])
    api_key_input.input(enable_submit, [query_input, depth_input, api_key_input], [search_btn])

    # Footer
    gr.Markdown(
        """
        ---
        βœ… Built with [SmolAgents](https://github.com/huggingface/smolagents) + [Gradio](https://gradio.app)  
        πŸ”— Powered by [Linkup](https://linkup.so)
        """,
        elem_id="footer",
    )

demo.launch()