import gradio as gr from llama_cpp import Llama from huggingface_hub import hf_hub_download import random # Custom CSS for better styling custom_css = """ .gradio-container { background: linear-gradient(to bottom, #1a1a2e, #16213e) !important; } .header-text { text-align: center; color: #e2e8f0; font-size: 2.5em; font-weight: bold; margin: 1em 0; text-shadow: 0 0 10px rgba(255, 255, 255, 0.3); } .subheader { text-align: center; color: #94a3b8; font-size: 1.2em; margin-bottom: 2em; } .controls-section { background: rgba(255, 255, 255, 0.05); padding: 1.5em; border-radius: 10px; margin: 1em 0; } .model-info { background: rgba(0, 0, 0, 0.2); padding: 1em; border-radius: 8px; margin-top: 1em; color: #94a3b8; } """ # Initialize model model_path = hf_hub_download( repo_id="AstroMLab/AstroSage-8B-GGUF", filename="AstroSage-8B-Q8_0.gguf" ) llm = Llama( model_path=model_path, n_ctx=2048, n_threads=4, chat_format="llama-3", seed=42, f16_kv=True, logits_all=False, use_mmap=True, use_gpu=True ) # Placeholder responses for when context is empty GREETING_MESSAGES = [ "Greetings! I am AstroSage, your guide to the cosmos. What would you like to explore today?", "Welcome to our cosmic journey! I am AstroSage. How may I assist you in understanding the universe?", "AstroSage here. Ready to explore the mysteries of space and time. How may I be of assistance?", "The universe awaits! I'm AstroSage. What astronomical wonders shall we discuss?", ] def get_random_greeting(): return random.choice(GREETING_MESSAGES) def respond(message, history, system_message, max_tokens, temperature, top_p): messages = [{"role": "system", "content": system_message}] for user_msg, assistant_msg in history: if user_msg: messages.append({"role": "user", "content": user_msg}) if assistant_msg: messages.append({"role": "assistant", "content": assistant_msg}) messages.append({"role": "user", "content": message}) response = llm.create_chat_completion( messages=messages, max_tokens=max_tokens, temperature=temperature, top_p=top_p ) return response["choices"][0]["message"]["content"] def regenerate(message, history, system_message, max_tokens, temperature, top_p): # Remove the last assistant message from history if history and len(history) > 0: history = history[:-1] # Generate a new response return respond(message, history, system_message, max_tokens, temperature, top_p) def clear_context(): return [], get_random_greeting() with gr.Blocks(css=custom_css) as demo: gr.HTML( """
📚 Model: AstroSage-LLAMA-3.1-8B (8-bit Quantized)
🔧 Built with llama.cpp, Gradio, and Python
💫 Specialized in astronomy, astrophysics, and cosmology