mostafaamiri commited on
Commit
df5c858
1 Parent(s): b4f40fb

Upload 2 files

Browse files
Files changed (2) hide show
  1. main.py +111 -0
  2. requirements.txt +15 -0
main.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.llms import LlamaCpp
2
+ from langchain.callbacks.manager import CallbackManager
3
+ from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
4
+ import gradio as gr
5
+ import re
6
+ import os
7
+
8
+
9
+ # MODEL_PATH = "persian_llama_7b.Q8_K_M.gguf"
10
+ # TEMPRATURE = 0.3
11
+ # MAX_TOKENS = 800
12
+ # for k,v in os.environ.items():
13
+ # if(k=="MODEL_PATH"):
14
+ # MODEL_PATH = v
15
+ # if(k== "TEMPRATURE"):
16
+ # TEMPRATURE = v
17
+ # if(k == "MAX_TOKENS"):
18
+ # MAX_TOKENS = v
19
+
20
+ # print("model: "+MODEL_PATH)
21
+ # print("temp: "+TEMPRATURE)
22
+ # print("max_tokens: "+MAX_TOKENS)
23
+ n_gpu_layers = 40 # Change this value based on your model and your GPU VRAM pool.
24
+ n_batch = 512 # Should be between 1 and n_ctx, consider the amount of VRAM in your GPU.
25
+ n_ctx=2048
26
+
27
+ callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
28
+ path = "mostafaamiri/persian-llama-7b-GGUF-Q4/persian_llama_7b.Q8_K_M.gguf"
29
+ # persian_llama_7b.Q4_K_M.gguf
30
+ # persian_llama_7b.Q8_K_M.gguf
31
+ # persian_llama_7b.f32.gguf
32
+ # Make sure the model path is correct for your system!
33
+ llm = LlamaCpp(
34
+ model_path= path,
35
+ n_gpu_layers=n_gpu_layers, n_batch=n_batch,
36
+ callback_manager=callback_manager,
37
+ verbose=True,
38
+ n_ctx=n_ctx,
39
+ temperature=TEMPRATURE,
40
+ max_tokens=MAX_TOKENS,
41
+ top_p=1,
42
+ )
43
+ dal_image = "![AIDAL COMPANY|64x64](data:image/png;base64,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)"
44
+
45
+
46
+ def generate_output(text):
47
+ result = ""
48
+ for s in llm.stream(text):
49
+ result += s
50
+ yield result
51
+
52
+
53
+ def clear():
54
+ return "", ""
55
+
56
+ def like_log(input, output):
57
+ with open("like_log.txt", "a") as f:
58
+ f.write("{\"model\": \""+MODEL_PATH+"\",\n\"temprature\": "+TEMPRATURE+",\n\"input\": \""+input+"\",\n\"output\": \""+output+"\"},\n")
59
+
60
+ def dislike_log(input, output):
61
+ with open("dislike_log.txt", "a") as f:
62
+ f.write("{\"model\": \""+MODEL_PATH+"\",\n\"temprature\": "+TEMPRATURE+",\n\"input\": \""+input+"\",\n\"output\": \""+output+"\"},\n")
63
+
64
+
65
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
66
+ gr.Markdown(
67
+ dal_image+
68
+ """
69
+ <br>
70
+ <div dir="rtl">
71
+ <h1>
72
+ مدل هوش مصنوعی دال
73
+ </h1>
74
+ <p dir="rtl">
75
+ تماس با ما با
76
+ <br/>
77
+ info[@]aidal.ir
78
+ </p>
79
+ </div>
80
+ """)
81
+ with gr.Row():
82
+ inputs=gr.Textbox(label="ورودی",placeholder="سوال خود را وارد کنید",rtl=True)
83
+
84
+ with gr.Row():
85
+ submit_btn= gr.Button("ارسال", variant="primary")
86
+ clear_btn = gr.ClearButton(value="پاک کردن", variant="secondary")
87
+ with gr.Row():
88
+ outputs=gr.Textbox(label="خروجی",rtl=True)
89
+ submit_btn.click(fn=generate_output,
90
+ inputs= [inputs],
91
+ outputs= [outputs])
92
+ clear_btn.click(fn=clear, inputs=[], outputs=[inputs, outputs])
93
+ with gr.Row():
94
+ like_btn= gr.Button("👍🏾")
95
+ dislike_btn= gr.Button("👎🏾")
96
+ like_btn.click(fn=like_log,
97
+ inputs= [inputs, outputs],
98
+ outputs=[]
99
+ )
100
+ dislike_btn.click(fn=dislike_log,
101
+ inputs= [inputs, outputs],
102
+ outputs=[]
103
+ )
104
+ # gr_interface = gr.Interface(fn=generate_output,
105
+ # inputs=gr.Textbox(label="ورودی",placeholder="سوال خود را وارد کنید",rtl=True),
106
+ # outputs=gr.Textbox(label="خروجی",rtl=True),
107
+ # live=False,
108
+ # flagging_options=["👍🏾","👎🏾"],
109
+ # concurrency_limit=5)
110
+
111
+ demo.launch(server_name='0.0.0.0',share=True)
requirements.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ langchain==0.0.335
2
+ langsmith==0.0.64
3
+ peft==0.7.0
4
+ safetensors==0.3.1
5
+ scikit-learn==1.3.0
6
+ scipy==1.11.1
7
+ sentencepiece==0.1.99
8
+ tokenizers==0.15.0
9
+ torch==2.0.1
10
+ torchaudio==2.0.2
11
+ torchvision==0.15.2
12
+ transformers==4.36.0
13
+ bitsandbytes==0.41.1
14
+ gradio==4.13.0
15
+ llama-cpp-python==0.2.28