|  | @@ -62,6 +62,8 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |          thought_str = "thought:"
 | 
	
		
			
				|  |  |          thought_idx = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        last_character = ""
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          for response in llm_response:
 | 
	
		
			
				|  |  |              if response.delta.usage:
 | 
	
		
			
				|  |  |                  usage_dict["usage"] = response.delta.usage
 | 
	
	
		
			
				|  | @@ -74,35 +76,38 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |              while index < len(response):
 | 
	
		
			
				|  |  |                  steps = 1
 | 
	
		
			
				|  |  |                  delta = response[index : index + steps]
 | 
	
		
			
				|  |  | -                last_character = response[index - 1] if index > 0 else ""
 | 
	
		
			
				|  |  | +                yield_delta = False
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if delta == "`":
 | 
	
		
			
				|  |  | +                    last_character = delta
 | 
	
		
			
				|  |  |                      code_block_cache += delta
 | 
	
		
			
				|  |  |                      code_block_delimiter_count += 1
 | 
	
		
			
				|  |  |                  else:
 | 
	
		
			
				|  |  |                      if not in_code_block:
 | 
	
		
			
				|  |  |                          if code_block_delimiter_count > 0:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  |                              yield code_block_cache
 | 
	
		
			
				|  |  |                          code_block_cache = ""
 | 
	
		
			
				|  |  |                      else:
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          code_block_cache += delta
 | 
	
		
			
				|  |  |                      code_block_delimiter_count = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if not in_code_block and not in_json:
 | 
	
		
			
				|  |  |                      if delta.lower() == action_str[action_idx] and action_idx == 0:
 | 
	
		
			
				|  |  |                          if last_character not in {"\n", " ", ""}:
 | 
	
		
			
				|  |  | +                            yield_delta = True
 | 
	
		
			
				|  |  | +                        else:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  | +                            action_cache += delta
 | 
	
		
			
				|  |  | +                            action_idx += 1
 | 
	
		
			
				|  |  | +                            if action_idx == len(action_str):
 | 
	
		
			
				|  |  | +                                action_cache = ""
 | 
	
		
			
				|  |  | +                                action_idx = 0
 | 
	
		
			
				|  |  |                              index += steps
 | 
	
		
			
				|  |  | -                            yield delta
 | 
	
		
			
				|  |  |                              continue
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                        action_cache += delta
 | 
	
		
			
				|  |  | -                        action_idx += 1
 | 
	
		
			
				|  |  | -                        if action_idx == len(action_str):
 | 
	
		
			
				|  |  | -                            action_cache = ""
 | 
	
		
			
				|  |  | -                            action_idx = 0
 | 
	
		
			
				|  |  | -                        index += steps
 | 
	
		
			
				|  |  | -                        continue
 | 
	
		
			
				|  |  |                      elif delta.lower() == action_str[action_idx] and action_idx > 0:
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          action_cache += delta
 | 
	
		
			
				|  |  |                          action_idx += 1
 | 
	
		
			
				|  |  |                          if action_idx == len(action_str):
 | 
	
	
		
			
				|  | @@ -112,24 +117,25 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |                          continue
 | 
	
		
			
				|  |  |                      else:
 | 
	
		
			
				|  |  |                          if action_cache:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  |                              yield action_cache
 | 
	
		
			
				|  |  |                              action_cache = ""
 | 
	
		
			
				|  |  |                              action_idx = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if delta.lower() == thought_str[thought_idx] and thought_idx == 0:
 | 
	
		
			
				|  |  |                          if last_character not in {"\n", " ", ""}:
 | 
	
		
			
				|  |  | +                            yield_delta = True
 | 
	
		
			
				|  |  | +                        else:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  | +                            thought_cache += delta
 | 
	
		
			
				|  |  | +                            thought_idx += 1
 | 
	
		
			
				|  |  | +                            if thought_idx == len(thought_str):
 | 
	
		
			
				|  |  | +                                thought_cache = ""
 | 
	
		
			
				|  |  | +                                thought_idx = 0
 | 
	
		
			
				|  |  |                              index += steps
 | 
	
		
			
				|  |  | -                            yield delta
 | 
	
		
			
				|  |  |                              continue
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                        thought_cache += delta
 | 
	
		
			
				|  |  | -                        thought_idx += 1
 | 
	
		
			
				|  |  | -                        if thought_idx == len(thought_str):
 | 
	
		
			
				|  |  | -                            thought_cache = ""
 | 
	
		
			
				|  |  | -                            thought_idx = 0
 | 
	
		
			
				|  |  | -                        index += steps
 | 
	
		
			
				|  |  | -                        continue
 | 
	
		
			
				|  |  |                      elif delta.lower() == thought_str[thought_idx] and thought_idx > 0:
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          thought_cache += delta
 | 
	
		
			
				|  |  |                          thought_idx += 1
 | 
	
		
			
				|  |  |                          if thought_idx == len(thought_str):
 | 
	
	
		
			
				|  | @@ -139,12 +145,20 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |                          continue
 | 
	
		
			
				|  |  |                      else:
 | 
	
		
			
				|  |  |                          if thought_cache:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  |                              yield thought_cache
 | 
	
		
			
				|  |  |                              thought_cache = ""
 | 
	
		
			
				|  |  |                              thought_idx = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                    if yield_delta:
 | 
	
		
			
				|  |  | +                        index += steps
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  | +                        yield delta
 | 
	
		
			
				|  |  | +                        continue
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  if code_block_delimiter_count == 3:
 | 
	
		
			
				|  |  |                      if in_code_block:
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          yield from extra_json_from_code_block(code_block_cache)
 | 
	
		
			
				|  |  |                          code_block_cache = ""
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -156,8 +170,10 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |                      if delta == "{":
 | 
	
		
			
				|  |  |                          json_quote_count += 1
 | 
	
		
			
				|  |  |                          in_json = True
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          json_cache += delta
 | 
	
		
			
				|  |  |                      elif delta == "}":
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          json_cache += delta
 | 
	
		
			
				|  |  |                          if json_quote_count > 0:
 | 
	
		
			
				|  |  |                              json_quote_count -= 1
 | 
	
	
		
			
				|  | @@ -168,16 +184,19 @@ class CotAgentOutputParser:
 | 
	
		
			
				|  |  |                                  continue
 | 
	
		
			
				|  |  |                      else:
 | 
	
		
			
				|  |  |                          if in_json:
 | 
	
		
			
				|  |  | +                            last_character = delta
 | 
	
		
			
				|  |  |                              json_cache += delta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if got_json:
 | 
	
		
			
				|  |  |                          got_json = False
 | 
	
		
			
				|  |  | +                        last_character = delta
 | 
	
		
			
				|  |  |                          yield parse_action(json_cache)
 | 
	
		
			
				|  |  |                          json_cache = ""
 | 
	
		
			
				|  |  |                          json_quote_count = 0
 | 
	
		
			
				|  |  |                          in_json = False
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if not in_code_block and not in_json:
 | 
	
		
			
				|  |  | +                    last_character = delta
 | 
	
		
			
				|  |  |                      yield delta.replace("`", "")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  index += steps
 |