Spaces:
Sleeping
Sleeping
EtienneB
commited on
Commit
·
9945183
1
Parent(s):
1e05108
Update agent.py
Browse files
agent.py
CHANGED
|
@@ -13,11 +13,13 @@ from tools import (absolute, add, analyze_csv_file, analyze_excel_file,
|
|
| 13 |
arvix_search, audio_transcription, compound_interest,
|
| 14 |
convert_temperature, divide, exponential,
|
| 15 |
extract_text_from_image, factorial, floor_divide,
|
| 16 |
-
get_current_time_in_timezone,
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
| 21 |
|
| 22 |
# Load Constants
|
| 23 |
load_dotenv()
|
|
@@ -33,7 +35,7 @@ tools = [
|
|
| 33 |
is_prime, least_common_multiple, percentage_calculator,
|
| 34 |
wiki_search, analyze_excel_file, arvix_search,
|
| 35 |
audio_transcription, python_code_parser, analyze_csv_file,
|
| 36 |
-
extract_text_from_image, reverse_sentence, web_content_extract
|
| 37 |
]
|
| 38 |
|
| 39 |
# Load system prompt
|
|
@@ -45,7 +47,7 @@ If you are asked for a number, don't use a comma to write your number, nor use u
|
|
| 45 |
If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise.
|
| 46 |
If you are asked for a comma separated list, apply the above rules depending on whether the element to be put in the list is a number or a string.
|
| 47 |
Format your output as: Answers (answers): [{"task_id": ..., "submitted_answer": ...}]
|
| 48 |
-
Do
|
| 49 |
"""
|
| 50 |
|
| 51 |
# System message
|
|
@@ -82,6 +84,7 @@ def build_graph():
|
|
| 82 |
# Get task_id from state or set a placeholder
|
| 83 |
task_id = state.get("task_id", "1") # Replace with actual logic if needed
|
| 84 |
formatted = f'Answers (answers): [{{"task_id": "{task_id}", "submitted_answer": "{answer_text}"}}]'
|
|
|
|
| 85 |
return {"messages": [formatted]}
|
| 86 |
|
| 87 |
# --- Graph Definition ---
|
|
@@ -121,6 +124,21 @@ def is_valid_agent_output(output):
|
|
| 121 |
except Exception:
|
| 122 |
return False
|
| 123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
# test
|
| 125 |
if __name__ == "__main__":
|
| 126 |
question = "When was a picture of St. Thomas Aquinas first added to the Wikipedia page on the Principle of double effect?"
|
|
|
|
| 13 |
arvix_search, audio_transcription, compound_interest,
|
| 14 |
convert_temperature, divide, exponential,
|
| 15 |
extract_text_from_image, factorial, floor_divide,
|
| 16 |
+
get_current_time_in_timezone,
|
| 17 |
+
|
| 18 |
+
greatest_common_divisor, is_prime, least_common_multiple,
|
| 19 |
+
logarithm, modulus, multiply, percentage_calculator, power,
|
| 20 |
+
python_code_parser, reverse_sentence,
|
| 21 |
+
roman_calculator_converter, square_root, subtract,
|
| 22 |
+
web_content_extract, web_search, wiki_search)
|
| 23 |
|
| 24 |
# Load Constants
|
| 25 |
load_dotenv()
|
|
|
|
| 35 |
is_prime, least_common_multiple, percentage_calculator,
|
| 36 |
wiki_search, analyze_excel_file, arvix_search,
|
| 37 |
audio_transcription, python_code_parser, analyze_csv_file,
|
| 38 |
+
extract_text_from_image, reverse_sentence, web_content_extract,
|
| 39 |
]
|
| 40 |
|
| 41 |
# Load system prompt
|
|
|
|
| 47 |
If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise.
|
| 48 |
If you are asked for a comma separated list, apply the above rules depending on whether the element to be put in the list is a number or a string.
|
| 49 |
Format your output as: Answers (answers): [{"task_id": ..., "submitted_answer": ...}]
|
| 50 |
+
Do NOT include the format string or any JSON inside the submitted_answer field. Only output a single flat list as: Answers (answers): [{"task_id": ..., "submitted_answer": ...}]
|
| 51 |
"""
|
| 52 |
|
| 53 |
# System message
|
|
|
|
| 84 |
# Get task_id from state or set a placeholder
|
| 85 |
task_id = state.get("task_id", "1") # Replace with actual logic if needed
|
| 86 |
formatted = f'Answers (answers): [{{"task_id": "{task_id}", "submitted_answer": "{answer_text}"}}]'
|
| 87 |
+
formatted = extract_flat_answer(formatted)
|
| 88 |
return {"messages": [formatted]}
|
| 89 |
|
| 90 |
# --- Graph Definition ---
|
|
|
|
| 124 |
except Exception:
|
| 125 |
return False
|
| 126 |
|
| 127 |
+
|
| 128 |
+
def extract_flat_answer(output):
|
| 129 |
+
# Try to find the innermost Answers (answers): [{...}]
|
| 130 |
+
pattern = r'Answers \(answers\): \[(\{.*?\})\]'
|
| 131 |
+
matches = re.findall(pattern, output)
|
| 132 |
+
if matches:
|
| 133 |
+
# Use the last match (innermost)
|
| 134 |
+
try:
|
| 135 |
+
answers_list = json.loads(f'[{matches[-1]}]')
|
| 136 |
+
if isinstance(answers_list, list) and "task_id" in answers_list[0] and "submitted_answer" in answers_list[0]:
|
| 137 |
+
return f'Answers (answers): [{matches[-1]}]'
|
| 138 |
+
except Exception:
|
| 139 |
+
pass
|
| 140 |
+
return output # fallback
|
| 141 |
+
|
| 142 |
# test
|
| 143 |
if __name__ == "__main__":
|
| 144 |
question = "When was a picture of St. Thomas Aquinas first added to the Wikipedia page on the Principle of double effect?"
|