import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM import torch import os model_id = 'Bllossom/llama-3.2-Korean-Bllossom-3B' # 환경 변수에서 액세스 토큰 가져오기 hf_access_token = os.getenv('HUGGINGFACEHUB_API_TOKEN') # 토크나이저와 모델 로드 tokenizer = AutoTokenizer.from_pretrained( model_id, use_auth_token=hf_access_token ) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.bfloat16, device_map="auto", use_auth_token=hf_access_token ) def respond( message, history, system_message, max_tokens, temperature, top_p, ): # 프롬프트 생성 prompt = system_message + "\n" for user_msg, bot_msg in history: prompt += f"User: {user_msg}\nAssistant: {bot_msg}\n" prompt += f"User: {message}\nAssistant:" # 입력 토큰화 inputs = tokenizer(prompt, return_tensors="pt").to(model.device) # 모델 응답 생성 outputs = model.generate( **inputs, max_new_tokens=max_tokens, temperature=temperature, top_p=top_p, do_sample=True, eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.eos_token_id, ) # 응답 디코딩 response = tokenizer.decode(outputs[0], skip_special_tokens=True) response = response[len(prompt):].strip() # 히스토리에 추가 history.append((message, response)) return history # Gradio 인터페이스 생성 demo = gr.ChatInterface( fn=respond, additional_inputs=[ gr.Textbox( value="You are a friendly Chatbot.", label="System message" ), gr.Slider(minimum=1, maximum=2048, 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 (nucleus sampling)", ), ], ) if __name__ == "__main__": demo.launch()