anilguleroglu commited on
Commit
5e7630e
·
verified ·
1 Parent(s): d60a6cb

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -0
app.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import LlamaTokenizerFast
3
+ from peft import AutoPeftModelForCausalLM
4
+ import torch
5
+ from io import BytesIO
6
+
7
+
8
+ # ------------------------------------------------
9
+ # Model ve tokenizer'ı sadece bir kez yükleyelim:
10
+ # ------------------------------------------------
11
+ @st.cache_resource
12
+ def load_model_and_tokenizer():
13
+ tokenizer = LlamaTokenizerFast.from_pretrained("anilguleroglu/cllm-0.0.2-chat-final")
14
+ model = AutoPeftModelForCausalLM.from_pretrained("anilguleroglu/cllm-0.0.2-chat-final")
15
+ return model, tokenizer
16
+
17
+ model, tokenizer = load_model_and_tokenizer()
18
+
19
+
20
+ # ------------------------------------------------
21
+ # Metin üretim fonksiyonu
22
+ # ------------------------------------------------
23
+ def generate_text(prompt, max_length=512):
24
+ inputs = tokenizer(prompt, return_tensors="pt")
25
+
26
+ outputs = model.generate(
27
+ inputs.input_ids,
28
+ attention_mask=inputs.attention_mask,
29
+ max_length=max_length,
30
+ num_return_sequences=1,
31
+ eos_token_id=tokenizer.eos_token_id,
32
+ pad_token_id=tokenizer.eos_token_id,
33
+ do_sample=True,
34
+ top_k=10,
35
+ top_p=0.9,
36
+ temperature=0.1,
37
+ repetition_penalty=1.3
38
+ )
39
+
40
+ response = tokenizer.decode(outputs[0], skip_special_tokens=False)
41
+ print(len(response))
42
+ keyword = "<|start_header_id|> assistant<|end_header_id|>"
43
+ print("RESPONSE:")
44
+ print(response)
45
+ # Anahtar kelimeden sonrasını çıkarma
46
+ if keyword in response:
47
+ extracted_content = response.split(keyword, 1)[1].strip()
48
+ return extracted_content
49
+ else:
50
+ response
51
+
52
+
53
+
54
+
55
+ # ------------------------------------------------
56
+ # Chat için prompt oluşturma fonksiyonu
57
+ # (system mesajını eklemek isteğe bağlı;
58
+ # bu örnekte system mesajı "apply_chat_template"
59
+ # fonksiyonuna elle eklenebilir.)
60
+ # ------------------------------------------------
61
+ def build_prompt(system_message, chat_history):
62
+ """
63
+ system_message: string
64
+ chat_history: [
65
+ {"role":"user", "content":"..."},
66
+ {"role":"assistant", "content":"..."},
67
+ ...
68
+ ]
69
+ """
70
+ # System mesajını chat'in başına eklemek için:
71
+ # (İsterseniz LlamaTokenizerFast'in 'apply_chat_template'
72
+ # metodunu da kullanabilirsiniz.)
73
+
74
+ # Bu örnekte basit bir şekilde kendimiz birleştiriyoruz:
75
+ chat_history = [{"role": "system", "content": system_message}] + chat_history
76
+ return tokenizer.apply_chat_template(chat_history, tokenize=False, add_generation_prompt=True)
77
+
78
+
79
+ # ------------------------------------------------
80
+ # Streamlit Arayüzü
81
+ # ------------------------------------------------
82
+ def main():
83
+ st.title("Basit Chat Ekranı (Llama Modeli)")
84
+
85
+ # Session state'de system mesajı ve konuşmaları tutalım
86
+ if "system_message" not in st.session_state:
87
+ st.session_state["system_message"] = ""
88
+
89
+ if "messages" not in st.session_state:
90
+ st.session_state["messages"] = [] # {"role":"user"/"assistant", "content":...}
91
+
92
+ # System mesajı giriş alanı
93
+ st.session_state["system_message"] = st.text_area(
94
+ "System Mesajı (konuşmayı resetleseniz de kaybolmaz)",
95
+ st.session_state["system_message"],
96
+ height=100
97
+ )
98
+
99
+ # Reset buttonu
100
+ if st.button("Konuşmayı Sıfırla"):
101
+ st.session_state["messages"] = []
102
+
103
+ # Mevcut konuşmayı ekranda göster
104
+ st.subheader("Konuşma Geçmişi")
105
+ for msg in st.session_state["messages"]:
106
+ if msg["role"] == "user":
107
+ with st.chat_message("user"):
108
+ st.write(msg["content"])
109
+ else:
110
+ with st.chat_message("assistant"):
111
+ st.write(msg["content"])
112
+
113
+ # Kullanıcı girişi
114
+ user_input = st.chat_input(placeholder="Mesajınızı yazın ve Enter'a basın...")
115
+ if user_input:
116
+ # 1) Kullanıcı mesajını ekle
117
+ st.session_state["messages"].append({"role": "user", "content": user_input})
118
+
119
+ # 2) Prompt'u oluştur
120
+ prompt = build_prompt(st.session_state["system_message"], st.session_state["messages"])
121
+
122
+ # 3) Modelden cevap al
123
+ with st.chat_message("assistant"):
124
+ with st.spinner("Model cevap üretiyor..."):
125
+ generated_text = generate_text(prompt)
126
+
127
+
128
+ # 5) Asistan cevabını kaydet
129
+ st.session_state["messages"].append({"role": "assistant", "content": generated_text})
130
+
131
+ # 6) Ekrana yaz
132
+ st.write(generated_text)
133
+
134
+ # PDF Download
135
+ st.divider()
136
+
137
+
138
+ if __name__ == "__main__":
139
+ main()