Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from transformers import LlamaTokenizerFast | |
| from peft import AutoPeftModelForCausalLM | |
| import torch | |
| from io import BytesIO | |
| # ------------------------------------------------ | |
| # Model ve tokenizer'ı sadece bir kez yükleyelim: | |
| # ------------------------------------------------ | |
| def load_model_and_tokenizer(): | |
| tokenizer = LlamaTokenizerFast.from_pretrained("anilguleroglu/cllm-0.0.2-chat-final") | |
| model = AutoPeftModelForCausalLM.from_pretrained("anilguleroglu/cllm-0.0.2-chat-final") | |
| return model, tokenizer | |
| model, tokenizer = load_model_and_tokenizer() | |
| # ------------------------------------------------ | |
| # Metin üretim fonksiyonu | |
| # ------------------------------------------------ | |
| def generate_text(prompt, max_length=1024): | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| outputs = model.generate( | |
| inputs.input_ids, | |
| attention_mask=inputs.attention_mask, | |
| max_length=max_length, | |
| num_return_sequences=1, | |
| eos_token_id=tokenizer.eos_token_id, | |
| pad_token_id=tokenizer.eos_token_id, | |
| do_sample=True, | |
| top_k=10, | |
| top_p=0.9, | |
| temperature=0.3, | |
| repetition_penalty=1.3 | |
| ) | |
| response = tokenizer.decode(outputs[0], skip_special_tokens=False) | |
| print(len(response)) | |
| keyword = "<|start_header_id|> assistant<|end_header_id|>" | |
| print("RESPONSE:") | |
| print(response) | |
| # Anahtar kelimeden sonrasını çıkarma | |
| if keyword in response: | |
| extracted_content = response.split(keyword, 1)[1].strip().replace("<|eot_id|>","") | |
| return extracted_content | |
| else: | |
| response | |
| # ------------------------------------------------ | |
| # Chat için prompt oluşturma fonksiyonu | |
| # (system mesajını eklemek isteğe bağlı; | |
| # bu örnekte system mesajı "apply_chat_template" | |
| # fonksiyonuna elle eklenebilir.) | |
| # ------------------------------------------------ | |
| def build_prompt(system_message, chat_history): | |
| """ | |
| system_message: string | |
| chat_history: [ | |
| {"role":"user", "content":"..."}, | |
| {"role":"assistant", "content":"..."}, | |
| ... | |
| ] | |
| """ | |
| # System mesajını chat'in başına eklemek için: | |
| # (İsterseniz LlamaTokenizerFast'in 'apply_chat_template' | |
| # metodunu da kullanabilirsiniz.) | |
| # Bu örnekte basit bir şekilde kendimiz birleştiriyoruz: | |
| chat_history = [{"role": "system", "content": system_message}] + chat_history | |
| return tokenizer.apply_chat_template(chat_history, tokenize=False, add_generation_prompt=True) | |
| # ------------------------------------------------ | |
| # Streamlit Arayüzü | |
| # ------------------------------------------------ | |
| def main(): | |
| st.title("CLLM-0.0.2 Chat") | |
| # Session state'de system mesajı ve konuşmaları tutalım | |
| if "system_message" not in st.session_state: | |
| st.session_state["system_message"] = "" | |
| if "messages" not in st.session_state: | |
| st.session_state["messages"] = [] # {"role":"user"/"assistant", "content":...} | |
| # System mesajı giriş alanı | |
| st.session_state["system_message"] = st.text_area( | |
| "System Mesajı (konuşmayı resetleseniz de kaybolmaz)", | |
| st.session_state["system_message"], | |
| height=100 | |
| ) | |
| # Reset buttonu | |
| if st.button("Konuşmayı Sıfırla"): | |
| st.session_state["messages"] = [] | |
| # Mevcut konuşmayı ekranda göster | |
| st.subheader("Konuşma Geçmişi") | |
| for msg in st.session_state["messages"]: | |
| if msg["role"] == "user": | |
| with st.chat_message("user"): | |
| st.write(msg["content"]) | |
| else: | |
| with st.chat_message("assistant"): | |
| st.write(msg["content"]) | |
| # Kullanıcı girişi | |
| user_input = st.chat_input(placeholder="Mesajınızı yazın ve Enter'a basın...") | |
| if user_input: | |
| # 1) Kullanıcı mesajını ekle | |
| st.session_state["messages"].append({"role": "user", "content": user_input}) | |
| # 2) Prompt'u oluştur | |
| prompt = build_prompt(st.session_state["system_message"], st.session_state["messages"]) | |
| # 3) Modelden cevap al | |
| with st.chat_message("assistant"): | |
| with st.spinner("Model cevap üretiyor..."): | |
| generated_text = generate_text(prompt) | |
| # 5) Asistan cevabını kaydet | |
| st.session_state["messages"].append({"role": "assistant", "content": generated_text}) | |
| # 6) Ekrana yaz | |
| st.write(generated_text) | |
| # PDF Download | |
| st.divider() | |
| if __name__ == "__main__": | |
| main() |