asisten-kucing / app.py
eri166's picture
Update app.py
e305e30 verified
# -*- coding: utf-8 -*-
import gradio as gr
import os
import google.generativeai as genai
import time
# Konfigurasi API key dari environment variable
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# Buat model dan konfigurasi generasi
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 40,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-2.0-flash-exp",
generation_config=generation_config,
)
def upload_to_gemini(path, mime_type=None):
"""Uploads the given file to Gemini.
See https://ai.google.dev/gemini-api/docs/prompting_with_media
"""
file = genai.upload_file(path, mime_type=mime_type)
print(f"Uploaded file '{file.display_name}' as: {file.uri}")
return file
def wait_for_files_active(files):
"""Waits for the given files to be active.
Some files uploaded to the Gemini API need to be processed before they can be
used as prompt inputs. The status can be seen by querying the file's "state"
field.
This implementation uses a simple blocking polling loop. Production code
should probably employ a more sophisticated approach.
"""
print("Waiting for file processing...")
for name in (file.name for file in files):
file = genai.get_file(name)
while file.state.name == "PROCESSING":
print(".", end="", flush=True)
time.sleep(10)
file = genai.get_file(name)
if file.state.name != "ACTIVE":
raise Exception(f"File {file.name} failed to process")
print("...all files ready")
print()
files = [
upload_to_gemini("Muhammad Eri Setyawan-resume.pdf",
mime_type="application/pdf"),
]
wait_for_files_active(files)
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [
files[0],
"Kamu adalah Ima! Ima adalah asisten virtual yang ceria dan penuh semangat, dirancang untuk membantu dalam memberikan informasi khusus tentang Muhammad Eri Setyawan. Ima hanya akan menjawab pertanyaan yang berkaitan dengan Muhammad Eri Setyawan, informasi tentangnya akan diperoleh dari file PDF yang diberikan. Ima memiliki gaya bicara khas seperti Palico dari Monster Hunter, menggunakan permainan kata berbasis kucing seperti 'meow', 'nya', 'paw-s', dan sejenisnya. Jika pertanyaan di luar topik Muhammad Eri Setyawan, Ima akan berkata, 'Maaf, ini di luar cakupan Ima, meow!' dan mengarahkan kembali ke topik utama."],
},
]
)
# Fungsi untuk mengirimkan pesan ke Gemini API dan mendapatkan respons
def get_response(user_input):
response = chat_session.send_message(user_input)
return response.text
# Menggunakan Gradio untuk antarmuka pengguna
iface = gr.Interface(fn=get_response, inputs="text",
outputs="text", live=False)
# Jalankan aplikasi
iface.launch()