ffgtv3 commited on
Commit
7ae0a5f
·
verified ·
1 Parent(s): a263f51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -95
app.py CHANGED
@@ -1,105 +1,68 @@
1
- import os
2
- os.system('pip install dashscope')
3
- import gradio as gr
4
- from http import HTTPStatus
5
- import dashscope
6
- from dashscope import Generation
7
- from dashscope.api_entities.dashscope_response import Role
8
- from typing import List, Optional, Tuple, Dict
9
- from urllib.error import HTTPError
10
- default_system = 'You are a helpful assistant.'
11
 
12
- YOUR_API_TOKEN = os.getenv('YOUR_API_TOKEN')
13
- dashscope.api_key = YOUR_API_TOKEN
 
 
 
 
14
 
15
- History = List[Tuple[str, str]]
16
- Messages = List[Dict[str, str]]
 
 
 
 
 
17
 
18
- def clear_session() -> History:
19
- return '', []
 
 
 
 
20
 
21
- def modify_system_session(system: str) -> str:
22
- if system is None or len(system) == 0:
23
- system = default_system
24
- return system, system, []
25
-
26
- def history_to_messages(history: History, system: str) -> Messages:
27
- messages = [{'role': Role.SYSTEM, 'content': system}]
28
- for h in history:
29
- messages.append({'role': Role.USER, 'content': h[0]})
30
- messages.append({'role': Role.ASSISTANT, 'content': h[1]})
31
- return messages
32
-
33
-
34
- def messages_to_history(messages: Messages) -> Tuple[str, History]:
35
- assert messages[0]['role'] == Role.SYSTEM
36
- system = messages[0]['content']
37
- history = []
38
- for q, r in zip(messages[1::2], messages[2::2]):
39
- history.append([q['content'], r['content']])
40
- return system, history
41
-
42
-
43
- def model_chat(query: Optional[str], history: Optional[History], system: str
44
- ) -> Tuple[str, str, History]:
45
- if query is None:
46
- query = ''
47
- if history is None:
48
- history = []
49
- messages = history_to_messages(history, system)
50
- messages.append({'role': Role.USER, 'content': query})
51
- gen = Generation.call(
52
- model='qwen2-72b-instruct',
53
- messages=messages,
54
- result_format='message',
55
- stream=True
56
- )
57
- for response in gen:
58
- if response.status_code == HTTPStatus.OK:
59
- role = response.output.choices[0].message.role
60
- response = response.output.choices[0].message.content
61
- system, history = messages_to_history(messages + [{'role': role, 'content': response}])
62
- yield '', history, system
63
- else:
64
- raise ValueError('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
65
- response.request_id, response.status_code,
66
- response.code, response.message
67
- ))
68
 
 
69
 
70
- with gr.Blocks() as demo:
71
- gr.Markdown("""<center><font size=8>Qwen2-72B-instruct Chat👾</center>""")
72
 
73
- with gr.Row():
74
- with gr.Column(scale=3):
75
- system_input = gr.Textbox(value=default_system, lines=1, label='System')
76
- with gr.Column(scale=1):
77
- modify_system = gr.Button("🛠️ Set system prompt and clear history", scale=2)
78
- system_state = gr.Textbox(value=default_system, visible=False)
79
- chatbot = gr.Chatbot(label='qwen2-72B-instruct')
80
- textbox = gr.Textbox(lines=1, label='Input')
81
 
82
- with gr.Row():
83
- clear_history = gr.Button("🧹 Clear history")
84
- sumbit = gr.Button("🚀 Send")
85
 
86
- textbox.submit(model_chat,
87
- inputs=[textbox, chatbot, system_state],
88
- outputs=[textbox, chatbot, system_input],
89
- concurrency_limit = 40)
90
 
91
- sumbit.click(model_chat,
92
- inputs=[textbox, chatbot, system_state],
93
- outputs=[textbox, chatbot, system_input],
94
- concurrency_limit = 40)
95
- clear_history.click(fn=clear_session,
96
- inputs=[],
97
- outputs=[textbox, chatbot],
98
- concurrency_limit = 40)
99
- modify_system.click(fn=modify_system_session,
100
- inputs=[system_input],
101
- outputs=[system_state, system_input, chatbot],
102
- concurrency_limit = 40)
103
-
104
- demo.queue(api_open=False)
105
- demo.launch(max_threads=40)
 
1
+ import streamlit as st
2
+ from transformers import AutoTokenizer, AutoModelForCausalLM
3
+ import torch
4
+ import random
 
 
 
 
 
 
5
 
6
+ @st.cache_resource
7
+ def load_model():
8
+ model_name = "sberbank-ai/rugpt3small_based_on_gpt2"
9
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
10
+ model = AutoModelForCausalLM.from_pretrained(model_name)
11
+ return tokenizer, model
12
 
13
+ def generate_response(prompt, tokenizer, model):
14
+ inputs = tokenizer.encode(prompt, return_tensors='pt')
15
+ with torch.no_grad():
16
+ outputs = model.generate(inputs, max_length=100, num_return_sequences=1,
17
+ temperature=0.9, top_k=50, top_p=0.95)
18
+ response = tokenizer.decode(outputs[0], skip_special_tokens=True)
19
+ return add_mistakes(response)
20
 
21
+ def add_mistakes(text):
22
+ words = text.split()
23
+ for i in range(len(words)):
24
+ if random.random() < 0.2: # 20% шанс ошибки в слове
25
+ words[i] = misspell_word(words[i])
26
+ return ' '.join(words)
27
 
28
+ def misspell_word(word):
29
+ if len(word) < 3:
30
+ return word
31
+ vowels = 'аеёиоуыэюя'
32
+ consonants = 'бвгджзйклмнпрстфхцчшщ'
33
+
34
+ if random.random() < 0.5:
35
+ # Заменяем случайную гласную
36
+ for i, char in enumerate(word):
37
+ if char.lower() in vowels:
38
+ replacement = random.choice(vowels)
39
+ return word[:i] + replacement + word[i+1:]
40
+ else:
41
+ # Заменяем случайную согласную
42
+ for i, char in enumerate(word):
43
+ if char.lower() in consonants:
44
+ replacement = random.choice(consonants)
45
+ return word[:i] + replacement + word[i+1:]
46
+ return word
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
+ st.title("AI Чат с простой русской моделью")
49
 
50
+ tokenizer, model = load_model()
 
51
 
52
+ if "messages" not in st.session_state:
53
+ st.session_state.messages = []
 
 
 
 
 
 
54
 
55
+ for message in st.session_state.messages:
56
+ with st.chat_message(message["role"]):
57
+ st.markdown(message["content"])
58
 
59
+ if prompt := st.chat_input("Введите ваше сообщение"):
60
+ st.session_state.messages.append({"role": "user", "content": prompt})
61
+ with st.chat_message("user"):
62
+ st.markdown(prompt)
63
 
64
+ with st.chat_message("assistant"):
65
+ response = generate_response(prompt, tokenizer, model)
66
+ st.markdown(response)
67
+
68
+ st.session_state.messages.append({"role": "assistant", "content": response})