File size: 2,787 Bytes
bbd5c76
 
06323bb
 
 
 
 
 
 
 
 
 
 
3421ed4
 
 
 
 
6761a81
3421ed4
6761a81
06323bb
 
8735569
06323bb
3421ed4
06323bb
bbd5c76
6761a81
 
 
3421ed4
 
 
 
 
bbd5c76
6761a81
 
 
bbd5c76
3421ed4
 
6761a81
 
 
 
 
 
 
f5e2959
6761a81
 
 
f5e2959
 
6761a81
f5e2959
6761a81
f5e2959
 
3421ed4
fdefcb0
6761a81
9eb3d05
619f1a8
 
 
 
 
6761a81
3421ed4
6761a81
 
 
3421ed4
bbd5c76
 
 
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
76
77
78
79
import gradio as gr
from huggingface_hub import InferenceClient
import requests
from bs4 import BeautifulSoup
from bs4.element import Comment

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True

def get_text_from_url(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    texts = soup.find_all(text=True)
    visible_texts = filter(tag_visible, texts)
    return "\n".join(t.strip() for t in visible_texts)

# Get the text from your homepage (and any additional extensions as needed)
text_list = []
homepage_url = "https://sites.google.com/view/abhilashnandy/home/"
extensions = ["", "pmrf-profile-page"]
for ext in extensions:
    url_text = get_text_from_url(homepage_url + ext)
    text_list.append(url_text)

# Optionally, repeat for sub-links if necessary

# Build a system message with the homepage info
SYSTEM_MESSAGE = (
    "You are a QA chatbot to answer queries (in less than 30 words) on my homepage that has the following information -\n\n"
    + "\n\n".join(text_list)
    + "\n\n"
)

# Use a model that works well on CPU, has a decently long context, and low inference latency.
# Here we choose a small chat-optimized model:
client = InferenceClient("TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF")

def respond(message, history: list[tuple[str, str]], system_message=SYSTEM_MESSAGE,
            max_tokens=140, temperature=0.7, top_p=0.95):
    messages = [{"role": "system", "content": system_message}]
    for val in history:
        if len(val) >= 1:
            messages.append({"role": "user", "content": "Question: " + val[0]})
        if len(val) >= 2:
            messages.append({"role": "assistant", "content": "Answer: " + val[1]})
    messages.append({"role": "user", "content": message})
    try:
        response = client.chat_completion(
            messages,
            max_tokens=max_tokens,
            temperature=temperature,
            top_p=top_p,
            # stream=True,  # Uncomment to enable streaming
        )
        return response.choices[0].message["content"]
    except Exception as e:
        print(f"An error occurred: {e}")
        return str(e)

initial_message = [("user", "Yo who dis Abhilash?")]
markdown_note = "## Ask Anything About Me! (Might show a tad bit of hallucination!)"

demo = gr.Blocks()
with demo:
    gr.Markdown(markdown_note)
    gr.ChatInterface(
        fn=respond,
        examples=["Yo who dis Abhilash?", "What is Abhilash's most recent publication?"],
        additional_inputs=[
            # You can add extra Gradio components here if needed.
        ],
    )

if __name__ == "__main__":
    demo.launch()