File size: 1,666 Bytes
4e39c00
d3d47a7
6809b1f
 
d3d47a7
cdc39dd
5f9e82d
d3d47a7
e640910
d3d47a7
 
 
6809b1f
 
 
 
 
d3d47a7
6809b1f
d3d47a7
6809b1f
 
d3d47a7
 
 
6809b1f
d3d47a7
5f9e82d
0f37419
d3d47a7
 
4e39c00
5f9e82d
75a4dbe
d3d47a7
75a4dbe
0f37419
d3d47a7
 
 
 
 
 
 
 
69a704b
076687f
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
import gradio as gr
from huggingface_hub import InferenceClient
import requests
from bs4 import BeautifulSoup
import re

# Initialize Hugging Face InferenceClient
client = InferenceClient(model="HuggingFaceH4/zephyr-7b-beta")

def is_url(input_string):
    url_pattern = re.compile(r'^(https?://)?([a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,4}))(?:/[^\s]*)?/?$')
    return url_pattern.match(input_string) is not None

def scrape_website(url):
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        return ' '.join([p.text for p in soup.find_all('p')])
    except Exception as e:
        return f"Failed to scrape the website. Error: {str(e)}"

def generate_response(input_text):
    if is_url(input_text):
        scraped_content = scrape_website(input_text)
        return f"I've found the following content from the website:\n\n{scraped_content}"
    else:
        response = client.text_generation(f"User: {input_text}\nAssistant:", max_new_tokens=100, temperature=0.6)
        return response['generated_text']

def process_input(input_text):
    return generate_response(input_text)

# Define Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("# Conversational Chatbot with Web Scraping Ability")
    
    with gr.Row():
        with gr.Column():
            text_input = gr.Textbox(label="Enter your message or URL here")
            submit_button = gr.Button("Submit")
        
        with gr.Column():
            response_output = gr.Textbox(label="Chatbot Response", interactive=False)
    
    submit_button.click(fn=process_input, inputs=[text_input], outputs=[response_output])
    
demo.launch()