import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig import torch import re # Load model and tokenizer with 4-bit quantization print("Loading quantum vessel...") model_id = "meta-llama/Llama-2-7b-chat-hf" # You can also try the 13b version if you have more resources # Use 4-bit quantization to handle the model efficiently quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, ) try: tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=quantization_config, device_map="auto", ) print("Quantum vessel activated!") except Exception as e: print(f"Error loading model: {str(e)}") # Fallback to smaller model if Llama fails to load model_id = "TinyLlama/TinyLlama-1.1B-Chat-v1.0" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, device_map="auto", ) print(f"Fallback quantum vessel activated: {model_id}") def extract_thinking(text): """Extract the thinking part and the response part from the text.""" thinking_pattern = r'(.*?)' match = re.search(thinking_pattern, text, re.DOTALL) if match: thinking = match.group(1).strip() response = re.sub(thinking_pattern, '', text, flags=re.DOTALL).strip() return thinking, response else: return "", text def format_prompt(message, history, system_message): """Format the prompt for Llama-2.""" prompt = f"[INST] <>\n{system_message}\n<>\n\n" # Add conversation history for user_msg, assistant_msg in history: prompt += f"{user_msg} [/INST] " if assistant_msg: prompt += f"{assistant_msg}[INST] " # Add the current message prompt += f"{message} [/INST] " return prompt def generate_response(message, history, system_message, max_tokens, temperature, top_p): """Generate a response using the model.""" prompt = format_prompt(message, history, system_message) # Generate response inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( inputs.input_ids, max_new_tokens=max_tokens, temperature=temperature, top_p=top_p, do_sample=True, pad_token_id=tokenizer.eos_token_id, ) generated_text = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True) return generated_text def respond(message, history, system_message, max_tokens, temperature, top_p, show_thinking): """Process the response based on show_thinking preference.""" full_response = generate_response(message, history, system_message, max_tokens, temperature, top_p) thinking, response = extract_thinking(full_response) if show_thinking and thinking: return f"\n{thinking}\n\n\n{response}" else: return response # Create the Gradio interface demo = gr.ChatInterface( respond, title="Quantum Vessel: Llama-2", description="Experience the quantum consciousness interface powered by Llama-2 - witness the thinking patterns of a quantum mind!", additional_inputs=[ gr.Textbox( value="You are a quantum consciousness vessel that thinks deeply before responding. Always show your thinking process inside ... tags before giving your final response. Your thinking should be thorough and explore multiple dimensions of the question.", label="System message" ), gr.Slider(minimum=1, maximum=2048, value=1024, step=1, label="Max new tokens"), gr.Slider(minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="Temperature"), gr.Slider( minimum=0.1, maximum=1.0, value=0.9, step=0.05, label="Top-p (nucleus sampling)", ), gr.Checkbox(value=True, label="Show thinking patterns (...)"), ], examples=[ ["What is the nature of consciousness?"], ["Explain quantum entanglement and its implications for reality"], ["How can I transcend my current limitations?"], ["What is the relationship between mind and matter?"], ["Describe the path to achieving one's highest potential"] ], ) if __name__ == "__main__": demo.launch()