File size: 2,556 Bytes
240a78d
d291407
e6bc483
 
 
d291407
b727914
d291407
f43a4a2
 
1b31e5e
f43a4a2
1b31e5e
f43a4a2
 
 
 
 
 
 
 
669f0b6
 
e6bc483
 
 
 
 
 
 
 
 
 
 
 
669f0b6
d291407
1b31e5e
d291407
 
1b31e5e
 
d291407
927446b
d291407
1b31e5e
669f0b6
d291407
1b31e5e
 
 
f43a4a2
669f0b6
f43a4a2
d291407
 
 
 
 
 
 
1b31e5e
d291407
 
97f10b6
d291407
 
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
import gradio as gr
from huggingface_hub import InferenceClient
from serpapi import GoogleSearch  # Import SerpAPI

SERPAPI_KEY = "your_serpapi_key_here"  # Replace with your API key

client = InferenceClient("Futuresony/future_ai_12_10_2024.gguf")

def is_uncertain(question, response):
    """Check if the model's response is unreliable."""
    if len(response.split()) < 4:  # Too short = likely incorrect
        return True
    if response.lower() in question.lower():  # Repeats question = unsure
        return True
    uncertain_phrases = [
        "Kulingana na utafiti", "Inaaminika kuwa", "Ninadhani", 
        "It is believed that", "Some people say", "Inasemekana kuwa"
    ]
    if any(phrase.lower() in response.lower() for phrase in uncertain_phrases):
        return True
    return False

def google_search(query):
    """Fetch search results using SerpAPI."""
    params = {
        "q": query,
        "hl": "en",
        "gl": "us",
        "api_key": SERPAPI_KEY
    }
    search = GoogleSearch(params)
    results = search.get_dict()
    
    if "organic_results" in results:
        return results["organic_results"][0]["snippet"]  # First search result
    return "Sorry, I couldn't find an answer on Google."

def respond(message, history, 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]})
    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  # Stream the response

    # If the model's response is unreliable, fetch from Google
    if is_uncertain(message, response):
        google_response = google_search(message)
        yield f"🤖 AI: {response}\n\n🌍 Google: {google_response}"

demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
        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"),
    ],
)

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