|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("=========\nBegin import library\n") |
|
|
|
|
|
import random |
|
import gradio as gr |
|
from huggingface_hub import InferenceClient |
|
|
|
|
|
import os |
|
from google import genai |
|
|
|
print("\nEnd import library\n=========") |
|
|
|
|
|
|
|
|
|
|
|
print("=========\nBegin definition Backend Logic\n") |
|
|
|
print("Create default API settings") |
|
gemini_API_key=os.getenv("GEMINI_API_KEY") |
|
|
|
client = genai.Client( |
|
api_key=gemini_API_key, |
|
http_options=genai.types.HttpOptions(api_version='v1alpha'), |
|
) |
|
print("Set default model") |
|
used_model = "gemini-2.5-flash-preview-04-17" |
|
|
|
print("define class format_history") |
|
class format_history: |
|
@staticmethod |
|
def format_for_gemini(history): |
|
print("Format history") |
|
gemini_history = [] |
|
|
|
for message_to_check in history: |
|
if message_to_check.get("role") == "user" : |
|
gemini_history.append({ |
|
"role": "user", |
|
"parts": [{"text": message_to_check.get("content", "")}] |
|
}) |
|
elif message_to_check.get("role") == "assistant" : |
|
gemini_history.append({ |
|
"role": "model", |
|
"parts": [{"text": message_to_check.get("content", "")}] |
|
}) |
|
return gemini_history |
|
|
|
print("define class gemini api actions") |
|
class gemini_API_actions: |
|
apy_key = "" |
|
used_model = "" |
|
|
|
@staticmethod |
|
def set_used_model(new_model: str): |
|
used_model = new_model |
|
return |
|
|
|
@staticmethod |
|
def set_API_key(new_api_key: str): |
|
apy_key = new_api_key |
|
return |
|
|
|
@staticmethod |
|
def response_to_model(user_message, history): |
|
print(f"\n=========\nUser message\n{user_message}\n") |
|
|
|
formated_history = format_history.format_for_gemini(history) |
|
|
|
print(f"his: {formated_history}") |
|
print("Create chat") |
|
chat = client.chats.create(model=this.used_model, history=formated_history) |
|
|
|
print("Start response") |
|
response = chat.send_message(message["text"]) |
|
print(f"\nResponse\n{response}=========\n") |
|
|
|
return response.text |
|
|
|
print("Define response work body") |
|
def model_response(message, history): |
|
print(f"\n=========\nUser message\n{message}\n") |
|
|
|
formated_history = format_history.format_for_gemini(history) |
|
|
|
print(f"his: {formated_history}") |
|
print("Create chat") |
|
chat = client.chats.create(model=used_model, history=formated_history) |
|
|
|
try: |
|
print("Start response") |
|
response = chat.send_message(message["text"]) |
|
print(f"\nResponse\n{response}=========\n") |
|
|
|
return response.text |
|
|
|
except Exception as e: |
|
print(f"\n=== Error ===\n{str(e)}") |
|
return f"I apologize, but I encountered an error: {str(e)}" |
|
|
|
print("Define test1 response work") |
|
def random_response(message, history): |
|
return random.choice(["Yes", "No"]) |
|
|
|
print("\nEnd definition Backend Logic\n=========") |
|
|
|
|
|
|
|
|
|
|
|
print("=========\nBegin definition User Interface (UI)\n") |
|
|
|
with gr.Blocks(theme=gr.themes.Soft(primary_hue="teal", secondary_hue="slate", neutral_hue="neutral")) as demo: |
|
print("Create visitor badge") |
|
gr.HTML("""<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2Fzelk12%2FChat_interface_test_With_backend"> |
|
<img src="https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2Fzelk12%2FChat_interface_test_With_backend&countColor=%23263759" /> |
|
</a>""") |
|
|
|
print("Create API block") |
|
with gr.Accordion( |
|
"API", |
|
open=False, |
|
): |
|
print("Create API key textbox row") |
|
with gr.Row(): |
|
print("Create API key textbox") |
|
Textbox_Block_API_key = gr.Textbox( |
|
label="API key", |
|
scale=4, |
|
) |
|
|
|
print("Create API block button row") |
|
with gr.Row(): |
|
print("Create API apply button") |
|
Button_Block_Apply_API_key = gr.Button( |
|
value="Apply", |
|
scale=1, |
|
) |
|
print("Create API reset button") |
|
Button_Block_Reset_API_key = gr.Button( |
|
value="Reset", |
|
scale=1, |
|
) |
|
|
|
print("Create API state markdown") |
|
Markdown_Block_API_key_State = gr.Markdown("API key State: False") |
|
|
|
|
|
|
|
print("Create provider dropdown") |
|
Dropdown_Block_Choose_provider = gr.Dropdown(label="Choose provider") |
|
|
|
|
|
|
|
print("Create provider state") |
|
Markdown_Block_Povider_State = gr.Markdown("Provider State: False") |
|
|
|
|
|
|
|
print("Create main chat window") |
|
ChatIntarface_Block_Main_chat_window = gr.ChatInterface(model_response, |
|
multimodal=True, |
|
chatbot=gr.Chatbot( |
|
label="output", |
|
type="messages", |
|
), |
|
type="messages", |
|
textbox=gr.MultimodalTextbox( |
|
label="input", |
|
max_plain_text_length=9999999, |
|
), |
|
editable=True, |
|
title="Chat interface test", |
|
save_history=True, |
|
) |
|
|
|
print("Create output token markdown") |
|
Markdown_Block_Output_token = gr.Markdown("Token in output: False") |
|
print("Create input token markdown") |
|
Markdown_Block_Input_token = gr.Markdown("Token in input: False") |
|
|
|
print("Create ssettings block") |
|
with gr.Accordion( |
|
"Settings", |
|
open=False, |
|
): |
|
print("Create model dropdown") |
|
Dropdown_Block_Choose_model = gr.Dropdown(label="Choose model") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Create system instructions textbox") |
|
Textbox_Block_System_instructions = gr.Textbox(label="System instructions",) |
|
print("Create slider model temperature") |
|
Slier_Block_Model_Temperature = gr.Slider(label="temperature", |
|
interactive=True, |
|
minimum=0, |
|
maximum=2, |
|
value=0.95) |
|
print("Create slider model topP") |
|
Slier_Block_Model_topP = gr.Slider(label="topP", |
|
interactive=True, |
|
minimum=0, |
|
maximum=1, |
|
value=0.5) |
|
print("Create slider model topK") |
|
Slier_Block_Model_topK = gr.Slider(label="topK", |
|
interactive=True, |
|
value=100) |
|
print("Create checkbox output stream") |
|
Checkbox_Block_Output_Stream = gr.Checkbox( |
|
label="Enable output stream" |
|
) |
|
print("Create checkbox Grounding with Google Search") |
|
Checkbox_Block_Google_Grounding_Search = gr.Checkbox( |
|
label="Grounding with Google Search" |
|
) |
|
|
|
print("\nEnd definition User Interface (UI)\n=========") |
|
|
|
print("=========\nBegin launch demo\n") |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|
|
print("\nEnd launch demo\n=========") |