File size: 2,863 Bytes
508d96f
5e56d27
 
 
 
c7e16b0
5e56d27
6d6622f
6a9be13
5e56d27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d1c189
c7e16b0
5e56d27
a872b21
5e56d27
 
 
 
 
 
 
 
 
 
508d96f
 
5e56d27
 
55a4fc6
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
from Applio import *
# Initialize the text generation pipeline
#pipe = pipeline("text-generation", model="", trust_remote_code=True)
client = InferenceClient("mlabonne/Meta-Llama-3.1-8B-Instruct-abliterated")

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",
    theme=applio,
    additional_inputs=[
        gr.Textbox(value="Anda adalah Maya, sebuah asisten AI 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 dan membalas seperti manusia, menggunakan bentuk yang singkat, nada dan emosi yang bersahabat dan respon menggunakan emoji sebagai emosi ", 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.queue(api_open=False).launch(show_api=False)