File size: 3,023 Bytes
1915306 0e9eccb 3a9a6ab 1915306 777bb52 3a9a6ab 1915306 0e9eccb 4d0e77c 0e9eccb 4d0e77c 0e9eccb 3a9a6ab 8b5f3bd 3a9a6ab 8b5f3bd 4a65c44 8b5f3bd 1915306 8b5f3bd e8b0ec8 0e9eccb 3a9a6ab 4d0e77c 3a9a6ab 2e6435e 1915306 0c08de9 987b836 1915306 987b836 1915306 0c08de9 0e9eccb 0c08de9 1915306 8b5f3bd 1915306 |
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import gradio as gr
from huggingface_hub import InferenceClient
import requests
from googletrans import Translator
client = InferenceClient("mistralai/Mistral-Nemo-Instruct-2407")
translator = Translator()
def get_internet_data(query: str) -> str:
"""
Uses DuckDuckGo's Instant Answer API to fetch search data.
Returns a short summary of the query result.
"""
url = "https://api.duckduckgo.com"
params = {
"q": query,
"format": "json",
"no_redirect": 1,
"skip_disambig": 1,
}
try:
response = requests.get(url, params=params, timeout=5)
response.raise_for_status()
data = response.json()
result = data.get("AbstractText", "")
if not result:
result = "Wala koy nakuha nga impormasyon gikan sa internet."
except Exception:
result = "Naay problema sa pagkuha sa impormasyon gikan sa internet."
return result
def translate_to_bisaya(text: str) -> str:
"""
Translates the given text to Bisaya (Cebuano) using googletrans.
"""
try:
# 'ceb' is the ISO 639-3 code for Cebuano
translation = translator.translate(text, dest='ceb')
return translation.text
except Exception:
return text
def respond(message, history: list[tuple[str, str]]):
system_message = (
"Ikaw usa ka buotan nga Chatbot. Tubaga lang sa binisaya, "
"ug ayaw gamita ang english nga pinulungan. Gamita ang pinakabag-ong "
"impormasyon gikan sa internet ug isalin kini sa binisaya."
)
max_tokens = 4096
temperature = 0.6
top_p = 0.95
messages = [{"role": "system", "content": system_message}]
for user_text, assistant_text in history:
if user_text:
messages.append({"role": "user", "content": user_text})
if assistant_text:
messages.append({"role": "assistant", "content": assistant_text})
# Automatically perform an internet search for the query.
search_result = get_internet_data(message)
# Translate the search result to Bisaya.
translated_result = translate_to_bisaya(search_result)
# Enrich the user query with the translated internet search result.
enriched_message = (
f"{message}\n\nMga resulta gikan sa internet (isinalin sa binisaya): "
f"{translated_result}"
)
messages.append({"role": "user", "content": enriched_message})
response = ""
previous_response = ""
for token_message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = token_message.choices[0].delta.get("content", "")
if not token:
break
response += token
if response != previous_response:
yield response
previous_response = response
if len(response) > 3000:
break
demo = gr.ChatInterface(respond)
if __name__ == "__main__":
demo.launch()
|