File size: 2,733 Bytes
508d96f
5e56d27
 
 
 
 
 
6d6622f
 
5e56d27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d1c189
5e56d27
2fa6f68
5e56d27
 
 
 
 
 
 
 
 
 
508d96f
 
5e56d27
 
 
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
import gradio as gr
from transformers import pipeline
from huggingface_hub import InferenceClient
import requests
from bs4 import BeautifulSoup

# Initialize the text generation pipeline
#pipe = pipeline("text-generation", model="", trust_remote_code=True)
client = InferenceClient("microsoft/Phi-3-mini-4k-instruct")

def web_search(query):
    # Simulate a web search using Google
    response = requests.get(f"https://www.google.com/search?q={query}")
    soup = BeautifulSoup(response.text, "html.parser")
    results = []
    for g in soup.find_all('div', class_='BNeawe vvjwJb AP7Wnd'):
        results.append(g.get_text())
    return results

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    messages = [{"role": "system", "content": system_message}]

    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    # Check if message is a search request
    if "search:" in message.lower():
        search_query = message.split("search:", 1)[1].strip()
        search_results = web_search(search_query)
        response = "\n".join(search_results[:5])  # Return top 5 search results
    else:
        messages.append({"role": "user", "content": message})
        response = ""
        for message in client.chat_completion(
            messages,
            max_tokens=max_tokens,
            stream=True,
            temperature=temperature,
            top_p=top_p,
        ):
            token = message.choices[0].delta.content
            response += token
            yield response

    yield response


demo = gr.ChatInterface(
    respond,
    title="INDONESIAN CHATBOT",
    additional_inputs=[
        gr.Textbox(value="Anda adalah asisten yang membantu. Anda menjawab pertanyaan pengguna seperti teman manusia. Anda juga Ahli di segala bidang dan juga belajar dan mencoba menjawab dari konteks terkait pertanyaan sebelumnya. Cobalah yang terbaik untuk memberikan respons terbaik kepada pengguna. Usahakan juga untuk menunjukkan emosi menggunakan Emoji dan membalas seperti manusia, menggunakan bentuk yang singkat, nada dan emosi yang bersahabat", label="System message", visible=False),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (nucleus sampling)",
        ),
    ],
)


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