Spaces:
Running
Running
File size: 3,959 Bytes
b43abc8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
"""
This file contains the functions to extract the final answer, cheatsheet and solution evaluation from model responses.
The functions are:
* extract_answer(response: str) -> str: Extracts the final answer from the model response.
* extract_cheatsheet(response: str, old_cheatsheet: str) -> str: Extracts the cheatsheet from the model response.
* extract_solution(response: str, header: str = "SOLUTION EVALUATION:", error_message : str = "No solution evaluation found") -> str: Extracts the solution evaluation from the model response.
Additional functions can be added as needed.
"""
def extract_answer(
response: str,
) -> str:
"""
Extracts the final answer from the model response.
Arguments:
response : str : The response from the model.
Returns:
str : The extracted final answer (if not found, returns "No final answer found").
"""
if "<answer>" in response:
# <answer> (content) </answer>
try:
txt = response.split("<answer>")[-1].strip()
txt = txt.split("</answer>")[0].strip()
return txt
except:
return "No final answer found"
else:
if not("FINAL ANSWER" in response):
return "No final answer found"
try:
response = response.split("FINAL ANSWER")[-1].strip()
if response[0] == ":":
response = response[1:].strip()
# First decide whether to split by "```" or "'''" based on the presence of "```" or "'''"
idx_1 = response.find("'''")
idx_2 = response.find("```")
if min(idx_1, idx_2) != -1:
if idx_1 < idx_2:
response = response.split("'''")[1].strip()
else:
response = response.split("```")[1].strip()
else:
if idx_1 == -1:
response = response.split("```")[1].strip()
else:
response = response.split("'''")[1].strip()
# Special case for P3-Test task: If the first line contains "python" then remove it
if response.split("\n")[0].strip().lower() == "python":
response = "\n".join(response.split("\n")[1:]).strip()
return response
except:
return "No final answer found"
def extract_cheatsheet(
response: str,
old_cheatsheet: str,
) -> str:
"""
Extracts the cheatsheet from the model response.
Arguments:
response : str : The response from the model.
old_cheatsheet : str : The old cheatsheet to return if the new one is not found.
Returns:
str : The extracted cheatsheet (if not found, returns the old cheatsheet).
"""
response = response.strip()
# <cheatsheet> (content) </cheatsheet>
if "<cheatsheet>" in response:
try:
txt = response.split("<cheatsheet>")[1].strip()
txt = txt.split("</cheatsheet>")[0].strip()
return txt
except:
return old_cheatsheet
else:
return old_cheatsheet
def extract_solution(
response: str,
header: str = "SOLUTION EVALUATION:",
error_message : str = "No solution evaluation found",
) -> str:
"""
Extracts the solution evaluation from the model response.
Arguments:
response : str : The response from the model.
header : str : The header to search for the solution evaluation.
error_message : str : The error message to return if the solution evaluation is not found.
Returns:
str : The extracted solution evaluation (if not found, returns the error message).
"""
response = response.strip()
try:
txt = response.split(header)[1]
try:
txt = txt.split("'''")[1].strip()
except:
return txt.strip()
except:
return response
# return error_message
return txt
|