import gradio as gr from huggingface_hub import InferenceClient import os # ============================================================ # ১. মডেল সেটআপ # ============================================================ model_id = os.getenv("MODEL_ID", "zai-org/GLM-5.2") def respond( message, history: list[dict[str, str]], system_message, max_tokens, temperature, top_p, hf_token: gr.OAuthToken | None, ): """ Lychee GPT - Hugging Face Inference API ব্যবহার করে স্ট্রিমিং রেসপন্স """ # টোকেন নির্বাচন (লগইন করলে OAuth, নইলে Secret) if hf_token is not None: token = hf_token.token else: token = os.getenv("HF_TOKEN") if token is None: yield "⚠️ Please login or set HF_TOKEN in Space Secrets." return client = InferenceClient(token=token, model=model_id) messages = [{"role": "system", "content": system_message}] messages.extend(history) messages.append({"role": "user", "content": message}) response = "" try: for msg in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token_text = msg.choices[0].delta.content or "" response += token_text yield response except Exception as e: yield f"❌ Error: {str(e)}. Check logs or model availability." # ============================================================ # ২. Gradio UI # ============================================================ chatbot = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox( value="You are Lychee GPT, a helpful AI assistant created by MX LLMS and MD Mushfiqur Rahim.", label="System message" ), gr.Slider(minimum=1, maximum=4096, 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"), ], title="🍈 Lychee GPT", description="Created by MD Mushfiqur Rahim & MX LLMS. Powered by Hugging Face Inference API.", ) # ============================================================ # ৩. ডেমো (Login Button সহ) # ============================================================ with gr.Blocks(title="Lychee GPT") as demo: with gr.Sidebar(): gr.LoginButton() chatbot.render() if __name__ == "__main__": demo.launch()