Spaces:
Sleeping
Sleeping
| # import gradio as gr | |
| # from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline | |
| # # --- Load Model --- | |
| # MODEL_PATH = "./tinyllama-jobskills-final_update_4" # Path to your model | |
| # tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) | |
| # model = AutoModelForCausalLM.from_pretrained( | |
| # MODEL_PATH, | |
| # trust_remote_code=True, | |
| # device_map="auto", # Use GPU if available | |
| # low_cpu_mem_usage=True, | |
| # ) | |
| # pipe = pipeline( | |
| # "text-generation", | |
| # model=model, | |
| # tokenizer=tokenizer, | |
| # device_map="auto" | |
| # ) | |
| # # --- Chat Function --- | |
| # def chat_fn(message, history): | |
| # # Use the same format as training data | |
| # prompt = f"### Question:\n{message}\n\n### Answer:\n" | |
| # # Generate response | |
| # response = pipe( | |
| # prompt, | |
| # max_new_tokens=32, # allow longer output | |
| # do_sample=False, | |
| # temperature=0.7, | |
| # top_p=1.0 | |
| # )[0]["generated_text"] | |
| # # Extract only the answer part | |
| # reply = response.split("### Answer:")[-1].strip() | |
| # # Format into bullet points | |
| # skills = [s.strip() for s in reply.replace(",", "\n").split("\n") if s.strip()] | |
| # formatted_reply = "\n".join([f"- {s}" for s in skills]) | |
| # return formatted_reply | |
| # # --- Gradio UI --- | |
| # with gr.Blocks() as demo: | |
| # gr.Markdown("## 🚀 Chat with My AI Skills Model") | |
| # chatbot = gr.Chatbot(type="messages") | |
| # msg = gr.Textbox(label="Type your question here...") | |
| # clear = gr.Button("Clear") | |
| # def user_fn(user_message, chat_history): | |
| # bot_message = chat_fn(user_message, chat_history) | |
| # chat_history.append({"role": "user", "content": user_message}) | |
| # chat_history.append({"role": "assistant", "content": bot_message}) | |
| # return "", chat_history | |
| # msg.submit(user_fn, [msg, chatbot], [msg, chatbot]) | |
| # clear.click(lambda: [], None, chatbot, queue=False) | |
| # # --- Launch --- | |
| # if __name__ == "__main__": | |
| # demo.launch() | |
| import gradio as gr | |
| from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, BitsAndBytesConfig | |
| import torch # Needed for torch.bfloat16 | |
| # --- Load Model --- | |
| MODEL_PATH = "./tinyllama-jobskills-final_update_4" | |
| # --- Define Quantization Configuration --- | |
| # This is the new way to specify 4-bit or 8-bit loading | |
| # For 4-bit: | |
| bnb_config = BitsAndBytesConfig( | |
| load_in_4bit=True, | |
| bnb_4bit_quant_type="nf4", # Or "fp4" | |
| bnb_4bit_use_double_quant=True, | |
| bnb_4bit_compute_dtype=torch.bfloat16, # Or torch.float16 if not using bfloat16 | |
| ) | |
| # For 8-bit (if preferred, though 4-bit is smaller and often good enough) | |
| # bnb_config = BitsAndBytesConfig( | |
| # load_in_8bit=True | |
| # ) | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) | |
| model = AutoModelForCausalLM.from_pretrained( | |
| MODEL_PATH, | |
| trust_remote_code=True, | |
| device_map="auto", | |
| low_cpu_mem_usage=True, | |
| quantization_config=bnb_config, # <--- Pass the BitsAndBytesConfig object here | |
| ) | |
| pipe = pipeline( | |
| "text-generation", | |
| model=model, | |
| tokenizer=tokenizer, | |
| device_map="auto" # Redundant if model is already on device, but harmless | |
| ) | |
| # --- Chat Function --- | |
| def chat_fn(message): | |
| prompt = f"### Question:\n{message}\n\n### Answer:\n" | |
| response = pipe( | |
| prompt, | |
| max_new_tokens=32, | |
| do_sample=False, | |
| # temperature and top_p are ignored when do_sample=False, so remove them: | |
| # temperature=0.7, | |
| # top_p=1.0, | |
| return_full_text=False # Get only the newly generated text | |
| )[0]["generated_text"] | |
| reply = response.split("### Answer:")[-1].strip() | |
| skills = [s.strip() for s in reply.replace(",", "\n").split("\n") if s.strip()] | |
| formatted_reply = "\n".join([f"- {s}" for s in skills]) | |
| return formatted_reply | |
| # --- Gradio UI --- | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## 🚀 Chat with My AI Skills Model") | |
| chatbot = gr.Chatbot(label="Chat History") | |
| msg = gr.Textbox(label="Type your question here...", placeholder="Ask about job skills...") | |
| clear = gr.Button("Clear") | |
| def user_fn(user_message, chat_history): | |
| chat_history = chat_history or [] | |
| chat_history.append([user_message, None]) | |
| bot_message = chat_fn(user_message) | |
| chat_history[-1][1] = bot_message | |
| return "", chat_history | |
| msg.submit(user_fn, [msg, chatbot], [msg, chatbot]) | |
| clear.click(lambda: [], None, chatbot, queue=False) | |
| # --- Launch --- | |
| if __name__ == "__main__": | |
| demo.launch() | |