stacktrace-QA / app.py
krrishD's picture
Update app.py
1396358
import random
import gradio as gr
import openai
import os
import re
openai.api_key = os.environ.get("open_ai_key")
prompt = ['''
You are a ''',
'''
machine learning developer, trying to debug this code:
StackTrace:
Traceback (most recent call last):
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/process.py”, line 258, in _bootstrap
self.run()
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/process.py”, line 93, in run
self._target(*self._args, **self._kwargs)
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/utils/data/dataloader.py”, line 61, in _worker_loop
data_queue.put((idx, samples))
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/queues.py”, line 341, in put
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/reduction.py”, line 51, in dumps
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/multiprocessing/reductions.py”, line 121, in reduce_storage
RuntimeError: unable to open shared memory object </torch_54163_3383444026> in read-write mode at /opt/conda/conda-bld/pytorch_1525909934016/work/aten/src/TH/THAllocator.c:342
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/util.py”, line 262, in _run_finalizers
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/util.py”, line 186, in call
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/shutil.py”, line 476, in rmtree
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/shutil.py”, line 474, in rmtree
OSError: [Errno 24] Too many open files: ‘/tmp/pymp-sgew4xdn’
Process Process-1:
Traceback (most recent call last):
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/process.py”, line 258, in _bootstrap
self.run()
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/process.py”, line 93, in run
self._target(*self._args, **self._kwargs)
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/utils/data/dataloader.py”, line 61, in _worker_loop
data_queue.put((idx, samples))
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/queues.py”, line 341, in put
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/reduction.py”, line 51, in dumps
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/multiprocessing/reductions.py”, line 121, in reduce_storage
RuntimeError: unable to open shared memory object </torch_54163_3383444026> in read-write mode at /opt/conda/conda-bld/pytorch_1525909934016/work/aten/src/TH/THAllocator.c:342
Traceback (most recent call last):
File “/home/nlpgpu3/LinoHong/FakeNewsByTitle/main.py”, line 25, in
for mini_batch in trainloader :
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/utils/data/dataloader.py”, line 280, in next
idx, batch = self._get_batch()
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/utils/data/dataloader.py”, line 259, in _get_batch
return self.data_queue.get()
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/queues.py”, line 335, in get
res = self._reader.recv_bytes()
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/connection.py”, line 216, in recv_bytes
buf = self._recv_bytes(maxlength)
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/connection.py”, line 407, in _recv_bytes
buf = self._recv(4)
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/multiprocessing/connection.py”, line 379, in _recv
chunk = read(handle, remaining)
File “/home/nlpgpu3/anaconda3/envs/linohong3/lib/python3.6/site-packages/torch/utils/data/dataloader.py”, line 178, in handler
_error_if_any_worker_fails()
RuntimeError: DataLoader worker (pid 54163) exited unexpectedly with exit code 1.
Process finished with exit code 1
Question: Any idea how I can solve this problem?
Are follow up questions needed here: Yes
Follow up: Does your code run with less num_workers or num_workers=0?
Intermediate Answer: It worked when I set num_workers equals to 0, but doesn’t work greater or equal to 1
Follow up: Could you try to increase the shared memory and try setting num_workers>0 again?
Intermediate Answer: It worked! Can you explain what happened here?
So the final answer is: The error usually means that your system doesn’t provide enough shared memory for multiple workers (used via num_workers>0). Check the shared memory limitation of your system and try to increase it.
StackTrace:
Traceback (most recent call last):
File "main.py", line 39, in <module>
request = create_request(page)
File "main.py", line 15, in create_request
url = base_url + data
TypeError: can only concatenate str (not "bytes") to str
Question: How do I fix this?
Are follow up questions needed here: Yes
Follow up: Could you try to decode the data before passing it to the url?
Intermediate Answer: Yes, it made the data a string and worked!
So the final answer is: You can try to decode the data before passing it to the url like this:
data = urllib.parse.unquote(data)
StackTrace: ''',
'''
Question: ''',
'''
Are follow up questions needed here:''',]
def extract_answer(generated):
if '\n' not in generated:
last_line = generated
else:
last_line = generated.split('\n')[-1]
if ':' not in last_line:
after_colon = last_line
else:
after_colon = generated.split(':')[-1]
if ' ' == after_colon[0]:
after_colon = after_colon[1:]
if '.' == after_colon[-1]:
after_colon = after_colon[:-1]
return after_colon
def extract_question(generated):
if '\n' not in generated:
last_line = generated
else:
last_line = generated.split('\n')[-1]
if 'Follow up:' not in last_line:
print('we probably should never get here...' + generated)
if ':' not in last_line:
after_colon = last_line
else:
after_colon = generated.split(':')[-1]
if ' ' == after_colon[0]:
after_colon = after_colon[1:]
if '?' != after_colon[-1]:
print('we probably should never get here...' + generated)
return after_colon
def get_last_line(generated):
if '\n' not in generated:
last_line = generated
else:
last_line = generated.split('\n')[-1]
return last_line
def greenify(input):
return "\x1b[102m" + input + "\x1b[0m"
def yellowfy(input):
return "\x1b[106m" + input + "\x1b[0m"
def call_gpt(cur_prompt, stop):
ans = openai.Completion.create(
model="text-davinci-002",
max_tokens=256,
stop=stop,
prompt=cur_prompt,
temperature=0.7,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
returned = ans['choices'][0]['text']
print( greenify(returned), end='')
return returned
def initial_query_builder(language, code, question, intermediate = "\nIntermediate Answer:", followup = "\nFollow up:", finalans= '\nSo the final answer is:'):
cur_prompt = prompt[0] + language + prompt[1] + code + prompt[2] + question + prompt[3]
# print("prompt: ", cur_prompt, end ='')
## check if follow up in the query, if not, make sure it contains the final answer. otherwise re-run until at least one of the 2 is in the response. break after 3 attempts.
attempts = 0
ret_text = ''
while followup not in ret_text and finalans not in ret_text:
attempts +=1
ret_text = call_gpt(cur_prompt, intermediate)
print(str(attempts) + " ret_text:", ret_text)
if attempts == 3:
break
if "final answer is" in ret_text:
updated_prompt = cur_prompt + re.findall(r".*?(?=is:)", ret_text)[0] + " is: Let's think step-by-step. "
ret_text = call_gpt(updated_prompt, intermediate)
return ret_text
def subsequent_query_builder(curr_prompt, external_answer, intermediate = "\nIntermediate Answer:", followup = "\nFollow up:", finalans= '\nSo the final answer is:'):
print("curr_prompt: ", curr_prompt)
curr_prompt += intermediate + ' ' + external_answer + '.'
## check if follow up in the query, if not, make sure it contains the final answer. otherwise re-run until at least one of the 2 is in the response. break after 3 attempts.
attempts = 0
ret_text = ''
while followup not in ret_text and finalans not in ret_text:
attempts +=1
ret_text = call_gpt(curr_prompt, intermediate)
print("subsequent query " + str(attempts) + " ret_text:", ret_text)
if attempts == 3:
break
print("ret_text: ", ret_text)
if "final answer is" in ret_text:
updated_prompt = curr_prompt + re.findall(r".*?(?=is:)", ret_text)[0] + " is: Let's think step-by-step. "
# print("updated_prompt: ", updated_prompt)
ret_text = call_gpt(updated_prompt, intermediate)
return ret_text
"""subsequent query builder:
the way to rebuild the prompt for each subsequent call:
1. every user response is 'intermediate answer'
2. until you hit 'so the final answer is: ' you're good
3.
"""
def prompt_builder(history, intermediate = "\nIntermediate Answer:", followup = "\nFollow up:", finalans= '\nSo the final answer is:'):
#set language
language = history[1][0]
#set stack trace
stacktrace = history[0][0]
#set question (hardcoded)
question = "Any idea how I can solve this problem?"
# initial prompt
curr_prompt = prompt[0] + language + prompt[1] + stacktrace + prompt[2] + question + prompt[3]
#set subsequent conversation thread
if len(history) >= 2: #subsequent conversations have occurred
curr_prompt += history[1][1] ## get the first response to the stacktrace prompt
for conversation in history[2:]:
#grab intermediate answer
curr_prompt += intermediate + ' ' + conversation[0] + '.'
#grab the follow up
curr_prompt += conversation[1]
return curr_prompt
def chat(message, history):
history = history or []
print(len(history))
if len(history) == 0: ## just the stacktrace
response = "which language is this in? (python, java, c++, kotlin, etc.)"
elif len(history) == 1: ## stacktrace + just entered the language
# get stacktrace
stacktrace = history[0][0]
# get language
language = message
# set question (hardcoded for v1)
question = "Any idea how I can solve this problem?"
response = initial_query_builder(language, stacktrace, question)
else: # subsequent prompts
# get stacktrace
stacktrace = history[0][0]
# get language
language = history[1][0]
# set question (hardcoded for v1)
question = "Any idea how I can solve this problem?"
curr_prompt = prompt_builder(history)
response = subsequent_query_builder(curr_prompt, message)
# response = query_builder(language, stacktrace, question)
print("response: ", response)
history.append((message, response))
return history, history
def clear(arg):
return "Enter your response - feel free to elaborate further, ask questions, etc."
with gr.Blocks() as demo:
user_state=gr.State([])
gr.Markdown("""# StackTrace QA Bot""")
with gr.Row():
with gr.Column():
inp = gr.Textbox(placeholder="enter your stacktrace here")
btn = gr.Button("Enter message")
output = gr.Chatbot().style(color_map=("green", "pink"))
# allow_flagging="never",
inp.submit(chat, [inp, user_state], [output, user_state])
inp.submit(clear, inp, inp)
btn.click(chat, [inp, user_state], [output, user_state])
btn.click(clear, inp, inp)
gr.Markdown("""### need help? got feedback? have thoughts? etc. ➜ Join the [Discord](https://discord.gg/KvG3azf39U)""")
gr.Examples(examples=['''PYTORCH: ---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
/var/folders/49/9g9lxm9d3f3br8zlg2l2fmz80000gn/T/ipykernel_1349/2634282627.py in <module>
----> 1 torch.onnx.export(model, x, "output.onnx")
/opt/anaconda3/lib/python3.9/site-packages/torch/onnx/utils.py in export(model, args, f, export_params, verbose, training, input_names, output_names, operator_export_type, opset_version, do_constant_folding, dynamic_axes, keep_initializers_as_inputs, custom_opsets, export_modules_as_functions)
502 """
503
--> 504 _export(
505 model,
506 args,
/opt/anaconda3/lib/python3.9/site-packages/torch/onnx/utils.py in _export(model, args, f, export_params, verbose, training, input_names, output_names, operator_export_type, export_type, opset_version, do_constant_folding, dynamic_axes, keep_initializers_as_inputs, fixed_batch_size, custom_opsets, add_node_names, onnx_shape_inference, export_modules_as_functions)
1527 _validate_dynamic_axes(dynamic_axes, model, input_names, output_names)
1528
-> 1529 graph, params_dict, torch_out = _model_to_graph(
1530 model,
1531 args,
/opt/anaconda3/lib/python3.9/site-packages/torch/onnx/utils.py in _model_to_graph(model, args, verbose, input_names, output_names, operator_export_type, do_constant_folding, _disable_torch_constant_prop, fixed_batch_size, training, dynamic_axes)
1113
1114 try:
-> 1115 graph = _optimize_graph(
1116 graph,
1117 operator_export_type,
/opt/anaconda3/lib/python3.9/site-packages/torch/onnx/utils.py in _optimize_graph(graph, operator_export_type, _disable_torch_constant_prop, fixed_batch_size, params_dict, dynamic_axes, input_names, module)
580 _C._jit_pass_lint(graph)
581 _C._jit_pass_onnx_autograd_function_process(graph)
--> 582 C._jit_pass_lower_all_tuples(graph)
583
584 # we now record some ops like ones/zeros
RuntimeError: outerNode->outputs().size() == node->inputs().size() INTERNAL ASSERT FAILED at "/Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/passes/dead_code_elimination.cpp":140, please report a bug to PyTorch.''', '''RUST: error[E0382]: use of moved value: `primes`
--> src/main.rs:9:31
|
9 | if vectorIsPrime(num, primes) {
| ^^^^^^ value moved here, in previous iteration of loop
|
= note: move occurs because `primes` has type `std::vec::Vec<u64>`, which does not implement the `Copy` trait
''', "REACT: Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object."],inputs=inp, cache_examples=False,)
if __name__ == "__main__":
demo.launch(debug=True)