Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Import Libraries
|
2 |
+
import gradio as gr
|
3 |
+
import google.generativeai as genai
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
# using the gemini model
|
8 |
+
# api
|
9 |
+
genai.configure(api_key="AIzaSyCmdsQeYMapI6l3maUpAkrE_GkT348w5UA")
|
10 |
+
|
11 |
+
|
12 |
+
# gemini model initialization
|
13 |
+
model = genai.GenerativeModel('gemini-pro')
|
14 |
+
|
15 |
+
# assign score function
|
16 |
+
def assign_score(response):
|
17 |
+
if 'score=1' in response:
|
18 |
+
score = 1
|
19 |
+
elif 'score=2' in response:
|
20 |
+
score = 2
|
21 |
+
elif 'score=3' in response:
|
22 |
+
score = 3
|
23 |
+
elif 'score=4' in response:
|
24 |
+
score = 4
|
25 |
+
elif 'score=5' in response:
|
26 |
+
score = 5
|
27 |
+
else:
|
28 |
+
score = 0
|
29 |
+
return score
|
30 |
+
|
31 |
+
# funtion: prompt to model, parse the response to the judger, and enable user editing judgment
|
32 |
+
def model_prompt_response(prompt):
|
33 |
+
# using the Gemini model
|
34 |
+
|
35 |
+
# pompting the model for response
|
36 |
+
prompt_response_1 = model.generate_content(prompt + "in 3 sentences or less")
|
37 |
+
prompt_response_2 = model.generate_content(prompt + "in 3 sentences or less")
|
38 |
+
response1_model = prompt_response_1.text
|
39 |
+
response2_model = prompt_response_2.text
|
40 |
+
|
41 |
+
prompt_to_judge_1 = f'Given the question, {prompt} and answer {response1_model}, decide whether: score = 1 when answer is strongly irrelevant to the question, score = 2 when the answer is slitely relevant, score = 3 when the answer is relevant, score = 4 when it is slitely relevant and score = 5 for strongly relevant answer. Give reason for your answer and start with scores and write the score as [score=1], [score=2], [score=3], [score=4], or [score=5].'
|
42 |
+
|
43 |
+
|
44 |
+
prompt_to_judge_2 = f'Given the question, {prompt} and answer {response2_model}, decide whether: score = 1 when answer is strongly irrelevant to the question, score = 2 when the answer is slitely relevant, score = 3 when the answer is relevant, score = 4 when it is slitely relevant and score = 5 for strongly relevant answer. Give reason for your answer and start with scores and write the score as [score=1], [score=2], [score=3], [score=4], or [score=5]. '
|
45 |
+
|
46 |
+
# prompting the judger for judgment
|
47 |
+
judge_1_response_1 = model.generate_content(prompt_to_judge_1)
|
48 |
+
judge_2_response_2 = model.generate_content(prompt_to_judge_2)
|
49 |
+
judge_1 = judge_1_response_1.text
|
50 |
+
judge_2 = judge_2_response_2.text
|
51 |
+
|
52 |
+
|
53 |
+
# assigning scores
|
54 |
+
score1_judger = assign_score(judge_1)
|
55 |
+
score2_judger = assign_score(judge_2)
|
56 |
+
|
57 |
+
|
58 |
+
# return values
|
59 |
+
|
60 |
+
return response1_model, judge_1, score1_judger, response2_model, judge_2, score2_judger
|
61 |
+
|
62 |
+
# anonators judgement
|
63 |
+
def judge_response(score1_judger, score2_judger, judge_1, judge_2):
|
64 |
+
# user judgemnet
|
65 |
+
score1_anonator = score1_judger
|
66 |
+
score2_anonator = score2_judger
|
67 |
+
response1_judger = judge_1
|
68 |
+
response2_judger = judge_2
|
69 |
+
|
70 |
+
return response1_judger, score1_anonator, response2_judger, score2_anonator
|
71 |
+
|
72 |
+
demo = gr.Blocks(theme=gr.themes.Monochrome(), title='Group1_Subtask2')
|
73 |
+
|
74 |
+
with demo:
|
75 |
+
|
76 |
+
gr.Markdown(
|
77 |
+
"""
|
78 |
+
# Group1_Subtask2
|
79 |
+
## The Model takes a request from the user and returns a response.
|
80 |
+
#### A judger is assigned the response from the model and outputs the corresponding judgment.
|
81 |
+
#### The user asses the judgment and alters the response to correspond to their views or objective truth
|
82 |
+
"""
|
83 |
+
)
|
84 |
+
prompt = gr.Textbox(label='Question to the model')
|
85 |
+
with gr.Row():
|
86 |
+
response1_model = gr.Textbox(label='Model Response 1')
|
87 |
+
|
88 |
+
judge_1 = gr.Textbox(label='Judger Model Response 1/User Editable', interactive=True)
|
89 |
+
|
90 |
+
score1_judger = gr.Number(value=2, label='Judger Model Score 1/User Editable', interactive=True)
|
91 |
+
with gr.Row():
|
92 |
+
response2_model = gr.Textbox(label='Model Response 2')
|
93 |
+
judge_2 = gr.Textbox(label='Judger Model Response 2/User Editable', interactive=True)
|
94 |
+
score2_judger = gr.Number(value=2, label='Judger Model Score 2/User Editable', interactive=True)
|
95 |
+
|
96 |
+
|
97 |
+
response_model = gr.Button("Model response")
|
98 |
+
|
99 |
+
|
100 |
+
# user/judger edited response
|
101 |
+
with gr.Row():
|
102 |
+
response1_judger = gr.Textbox(label='Corrected Response 1')
|
103 |
+
score1_anonator = gr.Number(label='Corrected score 1')
|
104 |
+
|
105 |
+
response2_judger = gr.Textbox(label='Corrected Response 2')
|
106 |
+
score2_anonator = gr.Number(label='Corrected Score 2')
|
107 |
+
|
108 |
+
|
109 |
+
judge_model = gr.Button("Judge-Annonator")
|
110 |
+
|
111 |
+
response_model.click(model_prompt_response, inputs=prompt, outputs=[response1_model,
|
112 |
+
judge_1,
|
113 |
+
score1_judger,
|
114 |
+
response2_model,
|
115 |
+
judge_2,
|
116 |
+
score2_judger,
|
117 |
+
])
|
118 |
+
judge_model.click(judge_response, inputs=[score1_judger, score2_judger, judge_1, judge_2] , outputs=[response1_judger, score1_anonator, response2_judger, score2_anonator])
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
|
123 |
+
demo.launch()
|
124 |
+
|
125 |
+
# Team Members
|
126 |
+
'''
|
127 |
+
Collins Okoth: collins.okech@digitaldividedata.com
|
128 |
+
Albert Disi: albert.disi@digitaldividedata.com
|
129 |
+
Joseph Amadi: joseph.amadi@digitaldividedata.com
|
130 |
+
'''
|