@@ -51,7 +51,7 @@ async def get_next_action(model, messages, objective, session_id):
5151 operation = await call_gpt_4_vision_preview_labeled (messages , objective )
5252 return operation , None
5353 if model == "gpt-4-with-ocr" :
54- operation = await call_gpt_4_vision_preview_ocr (messages , objective )
54+ operation = await call_gpt_4_vision_preview_ocr (messages , objective , model )
5555 return operation , None
5656 elif model == "agent-1" :
5757 return "coming soon"
@@ -192,14 +192,16 @@ def call_gemini_pro_vision(messages, objective):
192192 return call_gpt_4_vision_preview (messages )
193193
194194
195- async def call_gpt_4_vision_preview_ocr (messages , objective ):
195+ async def call_gpt_4_vision_preview_ocr (messages , objective , model ):
196196 if VERBOSE :
197- print ("[call_gpt_4_vision_preview_ocr] extracted_text" )
198- time .sleep (1 )
199- client = config .initialize_openai ()
197+ print ("[call_gpt_4_vision_preview_ocr]" )
200198
201199 # Construct the path to the file within the package
202200 try :
201+ time .sleep (1 )
202+ client = config .initialize_openai ()
203+
204+ confirm_system_prompt (messages , objective , model )
203205 screenshots_dir = "screenshots"
204206 if not os .path .exists (screenshots_dir ):
205207 os .makedirs (screenshots_dir )
@@ -312,7 +314,8 @@ async def call_gpt_4_vision_preview_ocr(messages, objective):
312314 f"{ ANSI_GREEN } [Self-Operating Computer]{ ANSI_RED } [Error] Something went wrong. Trying another method { ANSI_RESET } " ,
313315 e ,
314316 )
315- return call_gpt_4_vision_preview (messages )
317+ traceback .print_exc ()
318+ return gpt_4_fallback (messages , objective , model )
316319
317320
318321async def call_gpt_4_vision_preview_labeled (messages , objective ):
@@ -447,6 +450,7 @@ async def call_gpt_4_vision_preview_labeled(messages, objective):
447450 f"{ ANSI_GREEN } [Self-Operating Computer]{ ANSI_RED } [Error] Something went wrong. Trying another method { ANSI_RESET } " ,
448451 e ,
449452 )
453+ traceback .print_exc ()
450454 return call_gpt_4_vision_preview (messages )
451455
452456
@@ -462,3 +466,39 @@ def get_last_assistant_message(messages):
462466 else :
463467 return messages [index ]
464468 return None # Return None if no assistant message is found
469+
470+
471+ def gpt_4_fallback (messages , objective , model ):
472+ if VERBOSE :
473+ print ("[gpt_4_fallback]" )
474+ system_prompt = get_system_prompt ("gpt-4-vision-preview" , objective )
475+ new_system_message = {"role" : "system" , "content" : system_prompt }
476+ # remove and replace the first message in `messages` with `new_system_message`
477+
478+ messages [0 ] = new_system_message
479+ if VERBOSE :
480+ print ("[gpt_4_fallback] new messages" , messages )
481+
482+ if VERBOSE :
483+ print ("[gpt_4_fallback][updated]" )
484+ print ("[gpt_4_fallback][updated] len(messages)" , len (messages ))
485+
486+ return call_gpt_4_vision_preview (messages )
487+
488+
489+ def confirm_system_prompt (messages , objective , model ):
490+ """
491+ On `Exception` we default to `call_gpt_4_vision_preview` so we have this function to reassign system prompt in case of a previous failure
492+ """
493+ if VERBOSE :
494+ print ("[confirm_system_prompt]" )
495+
496+ system_prompt = get_system_prompt (model , objective )
497+ new_system_message = {"role" : "system" , "content" : system_prompt }
498+ # remove and replace the first message in `messages` with `new_system_message`
499+
500+ messages [0 ] = new_system_message
501+
502+ if VERBOSE :
503+ print ("[confirm_system_prompt][updated]" )
504+ print ("[confirm_system_prompt][updated] len(messages)" , len (messages ))
0 commit comments