@@ -158,8 +158,9 @@ def answer_question(
158158 [previous_code ],
159159 )
160160 code = generating_context ["answer" ]
161-
162161 final_code = previous_code + "\n " + code
162+ # do not show figure
163+ final_code = final_code .replace ("plt.show()" , "" )
163164 global_env = {"finding" : None }
164165 try :
165166 exec (final_code , global_env )
@@ -607,9 +608,9 @@ def check_order(order: dict, chart_info: dict):
607608 if not is_sorted :
608609 result ["answer" ] = False
609610
610- result ["rationale" ] = f"Sort { order ['channel' ]} in { order ['order' ]} order."
611+ result ["rationale" ] = f"{ order ['channel' ]} is sorted in { order ['order' ]} order."
611612 if result ["answer" ] is False :
612- result ["rationale" ] = result ["rationale" ].replace ("Sort " , "Doesn't sort " )
613+ result ["rationale" ] = result ["rationale" ].replace ("is sorted " , "is not sorted " )
613614
614615 return result
615616
@@ -627,7 +628,13 @@ def __init__(self, llm: BaseChatModel, agent):
627628 def _add_verification (self , verification ):
628629 self .verifications .append (verification )
629630 # display
630- answer = "✅" if verification ["answer" ] else "❌"
631+ answer = ""
632+ if verification ["answer" ] is True :
633+ answer = "✅"
634+ elif verification ["answer" ] is False :
635+ answer = "❌"
636+ elif verification ["answer" ] is None :
637+ answer = "❔"
631638 aspect = verification ["aspect" ].capitalize ()
632639 rationale = verification ["rationale" ]
633640 print (answer + " " + aspect + ": " + rationale )
@@ -642,7 +649,7 @@ def verify(
642649 ):
643650 self .verifications = []
644651 understand_fail_result = {
645- "answer" : False ,
652+ "answer" : None ,
646653 "aspect" : "Visualization understanding" ,
647654 "rationale" : "Cannot understand the visualization." ,
648655 }
@@ -658,7 +665,10 @@ def verify(
658665 # STEP2: check chart type, data encoding and title
659666 self .verify_chart_info (request , chart_info , variable_descriptions )
660667 pass_verify = all (
661- [verification ["answer" ] for verification in self .verifications ]
668+ [
669+ verification ["answer" ] is True
670+ for verification in self .verifications
671+ ]
662672 )
663673 if pass_verify :
664674 # STEP3: check visualization data
@@ -707,6 +717,22 @@ def verify_data(
707717 try :
708718 # STEP 1: Spot-Check
709719 data = chart_info ["data" ]
720+ encoding = chart_info ["encoding" ]
721+ # check label
722+ for channel in encoding .keys ():
723+ if "title" not in encoding [channel ]:
724+ verification = {
725+ "aspect" : channel + " label" ,
726+ "answer" : None ,
727+ "rationale" : "Channel "
728+ + channel
729+ + " is not labeled, so accurate understanding of the data on the graph is difficult." ,
730+ }
731+ self ._add_verification (verification )
732+ verifications .append (verification )
733+ if len (verifications ) > 0 :
734+ return verifications
735+
710736 # random pick NUM_SAMPLE data points
711737 indexes = range (len (data ))
712738 sampled_indexes = random .sample (indexes , NUM_SAMPLE )
@@ -737,11 +763,11 @@ def verify_data(
737763 if verification :
738764 self ._add_verification (verification )
739765 verifications .append (verification )
740- if verification ["answer" ] is False :
766+ if verification ["answer" ] is not True :
741767 break
742768
743769 pass_verify = all (
744- [verification ["answer" ] for verification in verifications ]
770+ [verification ["answer" ] is True for verification in verifications ]
745771 )
746772 if not pass_verify :
747773 return verifications
0 commit comments