Spaces:
Sleeping
Sleeping
Update agent.py
Browse files
agent.py
CHANGED
@@ -63,7 +63,7 @@ class GaiaAgent:
|
|
63 |
|
64 |
**Thought:** First, carefully consider the task. What information do you need to answer the question? Do you need to use a tool?
|
65 |
**Tool:** If you need to search, use the search_tavily tool. The format is: <TOOL_CODE>search_tavily("your search query")</TOOL_CODE>
|
66 |
-
**Observation:** After a tool call, you will receive an observation (the tool's output).
|
67 |
**Answer:** Once you have gathered all necessary information, provide your final, concise answer directly.
|
68 |
|
69 |
Your available tools:
|
@@ -82,11 +82,11 @@ class GaiaAgent:
|
|
82 |
"""
|
83 |
|
84 |
max_iterations = 3
|
85 |
-
|
86 |
|
87 |
for i in range(max_iterations):
|
88 |
# Lägg till "Thought:" här för att uppmuntra modellen att starta sin tankeprocess
|
89 |
-
full_prompt = prompt +
|
90 |
|
91 |
print(f"[{i+1}/{max_iterations}] Generating response with prompt length: {len(full_prompt)}")
|
92 |
|
@@ -97,9 +97,10 @@ class GaiaAgent:
|
|
97 |
pad_token_id=self.tokenizer.eos_token_id,
|
98 |
do_sample=True,
|
99 |
top_k=50, top_p=0.95,
|
100 |
-
temperature=0.7
|
101 |
)[0]['generated_text']
|
102 |
|
|
|
103 |
new_content = generated_text[len(full_prompt):].strip()
|
104 |
print(f"DEBUG - Full generated_text: \n---START---\n{generated_text}\n---END---")
|
105 |
print(f"DEBUG - Extracted new_content: '{new_content}'")
|
@@ -108,12 +109,26 @@ class GaiaAgent:
|
|
108 |
if "Answer:" in new_content:
|
109 |
final_answer = new_content.split("Answer:", 1)[1].strip()
|
110 |
print(f"Final answer from model:\n{final_answer}")
|
111 |
-
return final_answer
|
|
|
112 |
elif "<TOOL_CODE>" in new_content and "</TOOL_CODE>" in new_content:
|
113 |
-
|
114 |
-
|
115 |
-
|
|
|
|
|
|
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
print(f"Tool call detected: {tool_call_str}")
|
118 |
|
119 |
try:
|
@@ -121,18 +136,24 @@ class GaiaAgent:
|
|
121 |
query = tool_call_str[len("search_tavily("):-1].strip().strip('"').strip("'")
|
122 |
tool_output = search_tavily(query)
|
123 |
print(f"Tool result: {tool_output[:200]}...")
|
124 |
-
|
|
|
|
|
125 |
else:
|
126 |
tool_output = f"Unknown tool: {tool_call_str}"
|
127 |
print(f"Error: {tool_output}")
|
128 |
-
|
129 |
except Exception as tool_e:
|
130 |
tool_output = f"Error running tool {tool_call_str}: {tool_e}"
|
131 |
print(f"Error: {tool_output}")
|
132 |
-
|
133 |
else:
|
134 |
-
#
|
135 |
-
|
|
|
136 |
print(f"Model generated non-tool/non-answer content. Appending: {new_content[:100]}...")
|
137 |
|
138 |
-
|
|
|
|
|
|
|
|
63 |
|
64 |
**Thought:** First, carefully consider the task. What information do you need to answer the question? Do you need to use a tool?
|
65 |
**Tool:** If you need to search, use the search_tavily tool. The format is: <TOOL_CODE>search_tavily("your search query")</TOOL_CODE>
|
66 |
+
**Observation:** After a tool call, you will receive an observation (the tool's output). This is factual information.
|
67 |
**Answer:** Once you have gathered all necessary information, provide your final, concise answer directly.
|
68 |
|
69 |
Your available tools:
|
|
|
82 |
"""
|
83 |
|
84 |
max_iterations = 3
|
85 |
+
current_response_history = "" # Ny variabel för att bygga upp historiken
|
86 |
|
87 |
for i in range(max_iterations):
|
88 |
# Lägg till "Thought:" här för att uppmuntra modellen att starta sin tankeprocess
|
89 |
+
full_prompt = prompt + current_response_history + "\n\nThought:"
|
90 |
|
91 |
print(f"[{i+1}/{max_iterations}] Generating response with prompt length: {len(full_prompt)}")
|
92 |
|
|
|
97 |
pad_token_id=self.tokenizer.eos_token_id,
|
98 |
do_sample=True,
|
99 |
top_k=50, top_p=0.95,
|
100 |
+
temperature=0.7
|
101 |
)[0]['generated_text']
|
102 |
|
103 |
+
# Extrahera endast den nya delen av texten (modellens respons efter den sista "Thought:")
|
104 |
new_content = generated_text[len(full_prompt):].strip()
|
105 |
print(f"DEBUG - Full generated_text: \n---START---\n{generated_text}\n---END---")
|
106 |
print(f"DEBUG - Extracted new_content: '{new_content}'")
|
|
|
109 |
if "Answer:" in new_content:
|
110 |
final_answer = new_content.split("Answer:", 1)[1].strip()
|
111 |
print(f"Final answer from model:\n{final_answer}")
|
112 |
+
return final_answer # Returnera det slutgiltiga svaret
|
113 |
+
|
114 |
elif "<TOOL_CODE>" in new_content and "</TOOL_CODE>" in new_content:
|
115 |
+
# Modellen genererade ett verktygskall.
|
116 |
+
# Vi vill inte inkludera modellens egna "Observation:" eller "Tool:"-text i historiken
|
117 |
+
# innan verktyget faktiskt körts. Vi tar bara själva tool_code strängen.
|
118 |
+
|
119 |
+
tool_call_start = new_content.find("<TOOL_CODE>")
|
120 |
+
tool_call_end = new_content.find("</TOOL_CODE>") + len("</TOOL_CODE>")
|
121 |
|
122 |
+
# Försök att extrahera tanken som ledde till verktygskallet
|
123 |
+
thought_part = ""
|
124 |
+
if "Thought:" in new_content[:tool_call_start]:
|
125 |
+
thought_part = new_content.split("Thought:", 1)[1].split("Tool:", 1)[0].strip()
|
126 |
+
elif tool_call_start > 0: # Om det finns text före tool code
|
127 |
+
thought_part = new_content[:tool_call_start].strip()
|
128 |
+
|
129 |
+
tool_code_section = new_content[tool_call_start:tool_call_end]
|
130 |
+
tool_call_str = tool_code_section.replace("<TOOL_CODE>", "").replace("</TOOL_CODE>", "").strip()
|
131 |
+
|
132 |
print(f"Tool call detected: {tool_call_str}")
|
133 |
|
134 |
try:
|
|
|
136 |
query = tool_call_str[len("search_tavily("):-1].strip().strip('"').strip("'")
|
137 |
tool_output = search_tavily(query)
|
138 |
print(f"Tool result: {tool_output[:200]}...")
|
139 |
+
|
140 |
+
# Lägg till tanken, verktygskallet och det FAKTISKA observationen till historiken
|
141 |
+
current_response_history += f"\n\nThought: {thought_part}\nTool: {tool_code_section}\nObservation: {tool_output}\n"
|
142 |
else:
|
143 |
tool_output = f"Unknown tool: {tool_call_str}"
|
144 |
print(f"Error: {tool_output}")
|
145 |
+
current_response_history += f"\n\nThought: {thought_part}\nTool: {tool_code_section}\nObservation: {tool_output}\n"
|
146 |
except Exception as tool_e:
|
147 |
tool_output = f"Error running tool {tool_call_str}: {tool_e}"
|
148 |
print(f"Error: {tool_output}")
|
149 |
+
current_response_history += f"\n\nThought: {thought_part}\nTool: {tool_code_section}\nObservation: {tool_output}\n"
|
150 |
else:
|
151 |
+
# Modellen genererade varken ett verktygskall eller ett slutgiltigt svar.
|
152 |
+
# Lägg till det den faktiskt genererade till historiken så den kan fortsätta sin tanke.
|
153 |
+
current_response_history += f"\n\nThought: {new_content}\n"
|
154 |
print(f"Model generated non-tool/non-answer content. Appending: {new_content[:100]}...")
|
155 |
|
156 |
+
# Om max_iterations nås utan slutgiltigt svar
|
157 |
+
return "Agent could not complete the task within the allowed iterations. Latest relevant content: " + \
|
158 |
+
(current_response_history[-500:] if current_response_history else "No meaningful content generated.")
|
159 |
+
|