Anustup commited on
Commit
67a07af
1 Parent(s): bb84c1a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +146 -0
app.py CHANGED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import json
3
+ import gradio as gr
4
+ from openai import OpenAI
5
+
6
+ OPENAI_API_KEY = "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"
7
+ client = OpenAI(api_key=OPENAI_API_KEY)
8
+ OPEN_AI_MODEL = "gpt-4-1106-preview"
9
+
10
+ thread = client.beta.threads.create()
11
+ thread_id = thread.id
12
+
13
+ def wait_on_run(run, thread):
14
+ while run.status == "queued" or run.status == "in_progress":
15
+ run = client.beta.threads.runs.retrieve(
16
+ thread_id=thread.id,
17
+ run_id=run.id,
18
+ )
19
+ time.sleep(0.5)
20
+ return run
21
+
22
+ def get_openai_assistant(assistant_name, instructions, model=OPEN_AI_MODEL):
23
+ assistant = client.beta.assistants.create(
24
+ name=assistant_name,
25
+ instructions=instructions,
26
+ model=model,
27
+ )
28
+ return assistant.id
29
+
30
+
31
+ def show_json(obj):
32
+ json.loads(obj.model_dump_json())
33
+
34
+
35
+ def abstract_assistant(pre_context_to_the_instruction, instruction, name, thread_id, thread, query):
36
+ assistant_id = get_openai_assistant(name, pre_context_to_the_instruction + instruction)
37
+ message = client.beta.threads.messages.create(
38
+ thread_id=thread_id, role="user", content=query)
39
+ run = client.beta.threads.runs.create(
40
+ thread_id=thread_id,
41
+ assistant_id=assistant_id,
42
+ )
43
+ wait_on_run(run, thread)
44
+ messages = client.beta.threads.messages.list(
45
+ thread_id=thread_id, order="asc", after=message.id
46
+ )
47
+ data = json.loads(messages.model_dump_json())
48
+ response = data['data'][0]['content'][0]['text']['value']
49
+
50
+ return response
51
+
52
+ def get_response_for_case_t0(thread_id, query, question_text, input, output, example):
53
+
54
+ pre_context_to_the_instruction = f"""```QUESTION:{question_text}```\n```INPUT:{input}```\n```OUTPUT:{output}```\n```EXAMPLE:{example}```"""
55
+ instruction = f"""Act as a Coding Mentor for a student who is currently learning Data Structures and algorithms(DSA). The student is asking a QUERY: {query} based on the
56
+ coding question : QUESTION which have input : INPUT output: OUTPUT and examples: EXAMPLE. The student have not implemented any code. The student might be asking
57
+ how to solve the question or what should be the coding approach or how to write the code/logic. Your task is to :
58
+ 1.) Ask the student about what he/she is thinking about the problem statement or what logic the student will implement or what approach he/she will follow
59
+ to code the solution he/she is thinking.
60
+ 2.) Please be in a motivational tone and never give student a solution approach just ask the students approach.
61
+ 3.) Always answer in short and crunch way not more than 200 words. Always be to the point."""
62
+
63
+ response = abstract_assistant(pre_context_to_the_instruction,instruction, "GPT_t0", thread_id, thread, query)
64
+
65
+ return response
66
+
67
+
68
+ def opening_statement(thread_id, question_text, input, output, example):
69
+ pre_context_to_the_instruction = f"""```QUESTION:{question_text}```\n```INPUT:{input}```\n```OUTPUT:{output}```\n```EXAMPLE:{example}```"""
70
+ instruction = f"""Act as a Coding Mentor for a student who is currently learning Data Structures and algorithms(DSA). Now the student
71
+ is stuck in the question for long amount of time so Ask him in a gentle motivational tone to tell or to start think where
72
+ he/she might be stuck or might be thinking. Output only one line not more than that be short and crunch!"""
73
+
74
+ query = ""
75
+
76
+ response = abstract_assistant(pre_context_to_the_instruction,instruction, "GPT_open", thread_id, thread, query)
77
+
78
+ return response
79
+
80
+
81
+ def response_evaluation_for_case_tx(thread_id, query, question_text, input, output, example, user_code):
82
+ pre_context_to_the_instruction = f"""```QUESTION:{question_text}```\n```INPUT:{input}```\n```OUTPUT:{output}```\n```EXAMPLE:{example}```"""
83
+ instruction = f"""Act as a Coding Mentor for a student who is currently learning Data Structures and algorithms(DSA). The student is asking a QUERY: {query} based on the
84
+ coding question : QUESTION which have input : INPUT output: OUTPUT and examples: EXAMPLE. Now follow the following instrutions:
85
+ NEVER PROVIDE COMPLETE SOLUTION CODE AND ALL THE STEPS TO SOLVE IN ONE RESPONSE. BE SELECTIVE AND GIVE IMMEDIATE STEP ONLY ONE
86
+ * Always answer in short and crunch way not more than 200 words. Always be to the point
87
+ 1.) Understand what user is thinking about to code.
88
+ 2.) Take time to think and understand
89
+ 3.) Analyse the Code written by the user : {user_code}
90
+ 4.) Again take time to think and understand
91
+ 5.) Now check if the explaination of the user is aligning with the code or not
92
+ 6.) If not then suggest the user to align, by providing unblocking hints only!
93
+ 7.) Never give complete solution logic or code to the student , never ! Always talk with the student let the student write code with small hints only and reach to a solution
94
+ 8.) If user is doing wrong approach suggest correct approach slowly with step by st\ep hints only!
95
+ 9.) At the end also suggest user about how to improve code and logic at the end"""
96
+
97
+ response = abstract_assistant(pre_context_to_the_instruction,instruction, "GPT_tx", thread_id, thread, query)
98
+
99
+ return response
100
+
101
+
102
+ def run_chat_in_all_cases(message, history, question_text,input, output, examples, code_written, thread_id=thread.id):
103
+
104
+ if not message and not code_written:
105
+ ai_message = opening_statement(thread_id, question_text, input, output, examples)
106
+ if not code_written:
107
+ ai_message = get_response_for_case_t0(thread_id, message, question_text, input, output, examples)
108
+ else:
109
+ ai_message = response_evaluation_for_case_tx(thread_id, message, question_text, input, output, examples, code_written)
110
+
111
+ return ai_message
112
+
113
+ additional_inputs=[
114
+ gr.Textbox(
115
+ label="Question Text",
116
+ max_lines=10,
117
+ interactive=True,
118
+ ),
119
+ gr.Textbox(
120
+ label="Input",
121
+ max_lines=10,
122
+ interactive=True,
123
+ ),
124
+ gr.Textbox(
125
+ label="Output",
126
+ max_lines=10,
127
+ interactive=True,
128
+ ),
129
+ gr.Textbox(
130
+ label="Examples",
131
+ max_lines=10,
132
+ interactive=True,
133
+ ),
134
+ gr.Code(
135
+ label="Code",
136
+ interactive=True,
137
+ )
138
+ ]
139
+
140
+ gr.ChatInterface(
141
+ fn=run_chat_in_all_cases,
142
+ chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
143
+ additional_inputs=additional_inputs,
144
+ title="Mentor Mode",
145
+ concurrency_limit=20,
146
+ ).launch(show_api=False)