import os import gradio as gr from openai import OpenAI from dotenv import load_dotenv load_dotenv() class Chatbot: def __init__(self): self.api_key = os.getenv("OPENROUTER_API_KEY") if not self.api_key: raise ValueError( "OpenRouter API key tidak ditemukan. " + "Harap set di Hugging Face Secrets atau file .env" ) self.client = OpenAI( base_url="https://openrouter.ai/api/v1", api_key=self.api_key, ) self.model = "deepseek/deepseek-r1-zero:free" self.system_prompt = "Anda adalah asisten AI yang membantu dan ramah." def generate_response(self, message, history): try: messages = [{"role": "system", "content": self.system_prompt}] for i, h in enumerate(history): messages.append({ "role": "user" if i % 2 == 0 else "assistant", "content": h }) messages.append({"role": "user", "content": message}) completion = self.client.chat.completions.create( extra_headers={ "HTTP-Referer": "https://huggingface.co/spaces", "X-Title": "DeepSeek Chatbot", }, model=self.model, messages=messages, temperature=0.7, max_tokens=500 ) return completion.choices[0].message.content except Exception as e: print(f"Error: {str(e)}") return f"Maaf, terjadi kesalahan: {str(e)}" try: chatbot = Chatbot() except ValueError as e: print(str(e)) chatbot = None def respond(message, history): if not chatbot: return "Error: Inisialisasi chatbot gagal. Periksa konfigurasi API key." return chatbot.generate_response(message, history) examples = [ "Apa itu machine learning?", "Buatkan cerpen tentang robot", "Jelaskan hukum termodinamika pertama", "Apa perbedaan AI dan manusia?" ] with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown(""" # 🤖 DeepSeek R1 Zero Chatbot Chatbot cerdas menggunakan model DeepSeek R1 Zero melalui OpenRouter API """) with gr.Row(): with gr.Column(): # Perbaikan: Menghapus parameter yang tidak didukung gr.ChatInterface( respond, examples=examples ) with gr.Column(): gr.Markdown(""" ### Tentang Chatbot Ini - **Model**: DeepSeek R1 Zero - **Platform**: OpenRouter API - **Framework**: Gradio - **Host**: Hugging Face Spaces """) if __name__ == "__main__": demo.launch()