
    PL
jr                      d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ ddlAmBZC ddlDmEZE ddlFmGZG ddlHmIZI ddlJmKZKmLZL  ejM        eN          ZOd ZP	 	 	 	 	 d(d)d&ZQd'gZRdS )*u  The agent conversation loop — extracted from ``run_agent.AIAgent``.

This is the biggest single chunk pulled out of ``run_agent.py``: the
roughly 3,900-line :func:`run_conversation` body that drives one user
turn through the agent (model call, tool dispatch, retries, fallbacks,
compression, post-turn hooks, background memory/skill review nudges).

The function takes the parent ``AIAgent`` instance as its first
argument (``agent``) and accesses its state via attribute lookup.
``_ra().AIAgent.run_conversation`` is now a thin forwarder.

Symbols that production code or tests patch on ``run_agent`` directly
(``handle_function_call``, ``_set_interrupt``, ``OpenAI``, ...) are
resolved through :func:`_ra` so those patches keep working.
    )annotationsN)AnyDictListOptional_is_oauth_tokenset_runtime_main)_summarize_user_message_for_log)KawaiiSpinner)FailoverReasonclassify_api_error)IterationBudget)build_memory_context_block)	_repair_tool_call_arguments_sanitize_messages_non_ascii_sanitize_messages_surrogates_sanitize_structure_non_ascii_sanitize_structure_surrogates_sanitize_surrogates_sanitize_tools_non_ascii_strip_images_from_messages_strip_non_ascii)estimate_messages_tokens_roughestimate_request_tokens_roughget_next_probe_tier(parse_available_output_tokens_from_errorparse_context_limit_from_errorsave_context_length)clear_nous_rate_limitis_genuine_nous_rate_limitnous_rate_limit_remainingrecord_nous_rate_limit)_install_safe_stdio)apply_anthropic_cache_control)jittered_backoff)has_incomplete_scratchpad)estimate_usage_costnormalize_usagedisplay_hermes_homeset_session_contextstrip_pattern_and_formatset_current_write_origin)base_url_host_matchesenv_var_enabledc                     ddl } | S )zLazy reference to ``run_agent`` so callers can patch
    ``run_agent.handle_function_call`` / ``run_agent._set_interrupt`` /
    ``run_agent.OpenAI`` and have those patches reach this code path.
    r   N	run_agentr6   s    ;/home/kuhnn/.hermes/hermes-agent/agent/conversation_loop.py_rar9   L   s    
     user_messagestrsystem_messageconversation_historyList[Dict[str, Any]]task_idstream_callbackOptional[callable]persist_user_messageOptional[str]returnDict[str, Any]c                   EFGHIJK t                                                         	 ddlm}  |t	           dd          pdt	           dd          pd           n# t
          $ r Y nw xY wddlm}  | j                   ddl	m
}	  |	t	           dd	                                                       t          |t                    rt          |          }t          |t                    rt          |          }| _        d
 _        | _        |pt          t%          j                              }
|
 _        d _        d _        d _        d _        d _        d _        d _        d
 _        d _        d _        d _         j         !                                 d
 _"        d _#         j$        dk    r;	  %                                r &                    d           n# t
          $ r Y nw xY w j'        r (                                 d
 _'        tS           j*                   _+        tY          |          }t[          |          dk    r|d
d         dz   n|}|.                    dd          }t^          0                    d j        pd j1         j2        pd j3        pdt[          |pg           |           |rti          |          ng }|r. j5        6                                s 7                    |           |rV j8        dk    rKts          d |D                       }|dk    r,| _8         j:        dk    r j;        dk    r| j:        z   _;         xj8        dz  c_8        t	           dd
          }||<                                 t	           dd
          }||<                                 ||n|}d} j:        dk    r9d j=        v r0 j>        r) xj;        dz  c_;         j;         j:        k    r	d}d _;        d|d}|?                    |           t[          |          dz
  }| _         j@        sGtY          |          } A                    d|d
d          t[          |          dk    rdnd d            jB        =d
}|rQ jC        rJ	  jC        D                     j                  }|r|E                    d           pd
}n# t
          $ r Y nw xY w|r| _B        nމ F                    |           _B        	 dd!lGmH}  |d" j         j1        t	           d#d
          pd$           n2# t
          $ r%}t^          I                    d%|           Y d
}~nd
}~ww xY w jC        rY	  jC        J                     j         jB                   n2# t
          $ r%}t^          K                    d&|           Y d
}~nd
}~ww xY w jB        } jL        rct[          |           jM        jN         jM        jO        z   dz   k    r5t          ||pd jQ        pd
'          }| jM        jR        k    r	t^          0                    d(|d) jM        jR        d) j1         jM        jS        d)            &                    d*|d)d+ jM        jR        d)d,           t          d-          D ]}t[          |          } U                    ||||
.          \  }}t[          |          |k    r nSd
}d _        d _        d
 _        d _        d _        t          ||pd jQ        pd
'          }| jM        jR        k     r nd}	 dd!lGmH}  |d/ j        |ti          |          t          |            j1        t	           d#d
          pdt	           d0d
          pd1          } g }!| D ]}"t          |"t                    r>|"E                    d2          r)|!?                    t          |"d2                              Ut          |"t                    r)|"X                                r|!?                    |"           |!rd3Y                    |!          }n2# t
          $ r%}t^          I                    d4|           Y d
}~nd
}~ww xY wd}#d
}$d}%d}&d}'d}(g })d}*d}+i  _Z        t          j\                    j]         _^        t                      `                    d j^                    ja        r/t                      `                    d j^                   d _b        nd
 _c        d _b         jd        rK	 t          |t                    r|nd}, jd        e                     j8        |,           n# t
          $ r Y nw xY wd}- jd        rG	 t          |t                    r|nd}. jd        f                    |.          pd}-n# t
          $ r Y nw xY w j$        d5k    r g                    ||||
|6          S |# j*        k     r j+        jh        dk    s ji        br jj        k                                  ja        r"d}%d7}+ j@        s A                    d8           bnd|#dz  }#|# _l         m                    d9|#             ji        rd _i        nT j+        n                                s;d:}+ j@        s0 A                    d; j+        jo         d< j+        jp         d=           an݉ jq        "	 g }/t          t          |                    D ]\  }0}1|1E                    d>          d?k    r|1E                    d@          rt[          |          |0z
  }2i G||2d
         D ]N}3|3E                    d>          dAk    r n2|3E                    dB          }4|4r|3E                    dCd          G|4<   OGfdD|1d@         D             }/ n q                    |#|/           n3# t
          $ r&}5t^          K                    dE|#|5           Y d
}5~5nd
}5~5ww xY w jt        dk    rdF j=        v r xju        dz  c_u         v                                }6|6rid}7t          t[          |          dz
  dGdG          D ]}8||8         }9t          |9t                    r|9E                    d>          dAk    rdH|6 }:|9E                    dCd          };t          |;t                    r	|;|:z   |9dC<   nB	 |;rti          |;          ng }<|<?                    dI|:dJ           |<|9dC<   n# t
          $ r Y nw xY wd}7t^          K                    dK|8            n|7sqt	           dLd
          }=|=<|=5   jw        r jw        dz   |6z    _w        n|6 _w        d
d
d
           n# 1 swxY w Y   n"t	           dMd
          };|;r|;dz   |6z   n|6 _w        t	           dNd
          pt          jy        t                    }> {                    ||> j        O          }?|?dk    r|>0                    dP|? j        pdQ            |                    |          }@|@dk    r|>0                    dR|@ j        pdQ           g }At          |          D ]a\  }B}C|C}                                }D|B|k    r|CE                    d>          dk    rg }E|-r&t          |-          }F|Fr|E?                    |F           |r|E?                    |           |ErI|DE                    dCd          }Gt          |Gt                    r|Gd3z   d3Y                    |E          z   |DdC<                        |C|D           dS|Dv r|D                    dS           dT|Dv r|D                    dT           |D                    dUd
                                            r                     |D           |A?                    |D           c|pd}H j        r|Hd3z    j        z   X                                }H|Hr	dV|Hdg|Az   }A j        rj|Ar!|Ad         E                    d>          dVk    rdnd}It           j                  D ]0\  }B}J|A                    |I|Bz   |J}                                           1 j        rt          |A j         j        W          }A                     |A          }A                     |A          }A|AD ]G}Kt          |KE                    dC          t                    r|KdC         X                                |KdC<   H|AD ]}K|KE                    d@          }L|Lsg }M|LD ]ؐJt          Jt                    rdXJv r	 t          j        JdX         dY                   }Ni JdXi JdX         dYt          j        |NdZd[          iiJnS# t
          $ rF t          JdX         dY         JdX         E                    d\d]                    JdX         dY<   Y nw xY w|M?                    J           |M|Kd@<   t!          |A           ts          d^ |AD                       }Ot#          |A          }Pd
K j@        s                     d j         d_|# d< j*         d                                 j         d`t[          |A           da|Pd)db|Od)dc                                 j         dd jQ        rt[           jQ                  nd            nt)          j        t-          j                              }Qt)          j        t-          j                              }R j        r                     |Q d|R d           ns                                 s_                                 rKt)          j        g de          }St-          |Q d|R d|S j        f          KK                                  j        rt          jK        dg j1         dht[          |           di jQ        rt[           jQ                  nd            t          jK        dj|r|dG         d>         nd            t          jK        dk|Pd)dl           t?          j                    }Td}U j        }Vd}Wd-}Xd}Yd}Zd}[d}\d}]d}^d}_d}`d}ad}bd}cdm}dd
}ed
}f|U|Vk     ;r  j2        dnk    r	 ddolm}gm}h  |g            }i|i|idk    rdp |h|i           dq}j                      j         dr|j dsdt            &                    dr|j                                             rd}Ud}*d}W                     ||           dr|j du||#dd|jdvS n# tL          $ r Y nt
          $ r Y nw xY w	                                                        |A          }f j        rtU          |f            j$        dwk    r)                                                     |fdx          }f	 dd!lGmH} |fE                    dy          }kt          |kth                    s|fE                    dz          }kt          |kth                    s|A}k |	 di d||
d} j        pdd~|dti          |          d# j3        pdd j1        d j2        d j        d j$        d|#dt          |kth                    rti          |k          ng dt[          |A          dt[           jQ        pg           d|Pd|Od j         n# t
          $ r Y nw xY wt_          d          r                     |fd            Kfd}ld}mt	           dd          rd}mn j2        dk    svt           j        pd                                                              d          s;t           j        pd                                                              d          rd}mn;                                 s'ddlm}n t          t	           dd
          |n          rd}m|mr                     |f|l          }en                     |f          }et?          j                    |Tz
  }oKrK                    d           d
K j        r                     d            j@        s!                      j         d|odd            j        rG|ert	          |edd          nd}pt          jK        d|p dtq          |ed          r|ej        nd            d}qg }r j$        dwk    r                                 }s|s                    |e          s|ed}q|r?                    d           n(t          t	          |edd          pd          X                                                                }t|tdv rt	          |edd
          }ut          |ut                    r|uE                    d          n|urt          |u          nd|t d}vt          jI        d|t|v                                            d}q|r?                    d|t d|v            nFt	          |edd
          }wt          |wt                    r|wX                                nd}x|xr*t^          K                    dt[          |x                     nt	          |edd
          }yt	          |edd
          }zt^          I                    d|y|zt	          |edd
          d j$         d j2                    d}q|r?                    d           nf j$        dk    r[                                 }{|{                    |e          s0d}q|e|r?                    d           n|r?                    d           n  j$        dk    rY                                 }|||                    |e          s/d}q|e|r?                    d           n|r?                    d           n                                 }}|}                    |e          ssd}q|e|r?                    d           nYtq          |ed          s|r?                    d           n2|ej        |r?                    d           n|r?                    d           |qryKrK                    d           d
K j        r                     d           |Udz  }U j        t[           j                  k     r &                    d                                            rd}Ud}*d}WgdHd}~|erptq          |ed          r_|ej        rXt          |ej                  Htq          |ej        d          r,|ej        j        r |ej        j        E                    dd          }~n/|er-tq          |ed          r|ej        rt          |ej                  H|~dk    r$|er"tq          |ed          r|ej1        r
d|ej1         }~|~dk    rL|erJd t          |e                                          D             } j        rt          jK        d|            d
}|ertq          |ed          r|ej        ryt	          |ej        dd
          }|4t          |ej        t                    r|ej        E                    d          }|+	 t          |          }n# t          t          f$ r Y nw xY w|dk    rd|odd}na|dk    rd|odd}nS|dk    rd}nJ|dv rd| d|odd}n;|dv rd| dȝ}n0|d| d|odd}n#|odk     rd|od̛d͝}n|odk    rd|oddϝ}nd|od̛d}                      j         d|U d<|V ddŠY                    |r           dt                                 j         d|~ dt                                H          }                      j         d| dt                                 j         d| dt           |U|Vk    r &                    d|V dם                                            rd}Ud}*d}W{ &                    d|V dٝ           t          j         j         d|V d۝                                ||           |d|#d|V d| ddݜS t          |Udd߬          }                      j         d|d̛d| ddt           t          jI        d|U d<|V ddŠY                    |r           d|~            t?          j                    |z   }d}t?          j                    |k     r߉ ja        r[                      j         ddt                                ||                                             d| d|U d<|V d||#dddS t?          j        d           |dz  }|dz  dk    rB m                    d|U d<|V dt          |t?          j                    z
             d           t?          j                    |k     ߐU j$        dwk    rpt	          |edd
          }t	          |edd
          }d
}t          |t                    r|E                    d          }nt	          |dd
          }|dk    r|dv rd}dndm}dn j$        dk    r/                                 }|                    |ej                  }dn j$        dk    r1                                 }|                    |e          }|j        }dnj                                 }|                    |e          }|j        }d|}                     |d||          r!                      j         ddt           d}d|ddk    r؉                      j         ddt           d
}                                 } j$        dk    r|                    |e j                  }n|                    |e          }|}|rt	          |dCd
          nd
}|rt          t	          |d@d
                    nd}t          |o!t          j        d|t          j                            }| o|o|d
ur                     |           p|d
u }|rWd}                      j         ddt           d}                     |
                                ||           |||#dd|dS  j$        dv r*|}|%|s"|'dz  }'                     ||d          }|?                    |           |j        r|)?                    |j                   |'d-k     rZ                      j         d|' d           ddd}|?                    |           | _                             |           d}c*n5                     dY                    |)                    X                                }                     |
                                ||           |pd
||#ddd dS  j$        dv r|}||r|(dk     r'|(dz  }(                      j         ddt                                 j         ddt                                |
                                ||           d
||#ddddS t[          |          dk    rh                      j         d                                |          }                     |
                                ||           d
||#ddddS                       j         ddt                                ||           d
||#ddddvS tq          |ed          r|ej        rt          |ej         j2         j$                  }|j        }|j        }|j        }|||d} jM                            |           t	           jM        d	d          r jM        jS        }t	           jM        d
d          rFt           j1         j        |            A                     j         d|d)d j1                    d jM        _        d jM        _         xj        |z  c_         xj        |z  c_         xj        |z  c_         xj        dz  c_         xj        |j        z  c_         xj        |j        z  c_         xj        |j        z  c_         xj        |j        z  c_         xj        |j        z  c_        d}|j        r#|r!d|j         d<| dd|j        z  |z  dd}t^          0                    d j         j1         j2        pd||||o|	  	         t           j1        | j2         j        t	           dd                    }|j        # xj        t          |j                  z  c_        |j         _        |j         _         jC        r j        r	  j        s                                   jC                             j        |j        |j        |j        |j        |j        |j        t          |j                  nd
|j        |j         j2         j        |j        dk    rdnd
 j1        d           n:# t
          $ r-}t^          K                    d j        ||           Y d
}~nd
}~ww xY w j        r8t          jK        d|d         d)d|d         d)d|d         d)           |j        }|j        }|d         }|s|rI j@        sB|dk    r	||z  dz  nd}                      j         d|d)d<|d)d|dd |d)d!
           d}a j2        dnk    r#	 dd"lm}  |             n# t
          $ r Y nw xY w m                    d#|# d$           $n# t          $ r KrK                    d           d
K j        r                     d           t?          j                    |Tz
  }                      j         d%dt                                ||           d}%d&|d̛d'}$Y #not
          $ #r[}KrK                    d(           d
K j        r                     d           t          |t                    r8t	           d)d          d*k     r t          |                                          }d+|v pd,|v }d-|v pd.|v o| }t!          |          }t          |Ath                    rt!          |A          rd}t          |ft                    rt          |f          rd}t          t	           d/d
          th                    rt!           j                  rd}|s|rY xj        dz  c_        |r!                      j         d0dt           n                       j         d1dt           Y d
}~9|rd _        t          |          }t          |Ath                    rt          |A           t          |ft                    rtU          |f           d}t          t	           d/d
          th                    rt           j                  }d}t          t	           d2d
          th                    rt           jQ                  }d}t          |t                    r!t          |          }||k    r|}| _B        d}t          t	           d3d
          t                    r)t           j                  }| j        k    r	| _        d}d}t          t	           d4d
          t                    r j        E                    d5          nd
}t          |t                    rtU          |          }d}t	           dd
          pd}|rt          |          }||k    r| _        t          t	           d4d
          t                    r| j        d<   t	           dd
          &tq           j        d          r| j        _        d}                      j         d6dt            xj        dz  c_        |p	|p|p|p|p|}|r!                      j         d7dt           n                       j         d8dt           Y d
}~*d}	 t          t	          |d9d
          pt	          |dd
          pt          |                    }n# t
          $ r Y nw xY wt	          |d:d
          }d;}|                                Ft          Ffd<|D                       }|d
u pd=t          |          cxk    od>k     nc }t	           d?d          rn|rl|rjd _#        t          |          }t          |Ath                    rt          |A                                 j         d@|rdAndqz   dt           Y d
}~it	          |d:d
          }                     |          }t	           dBd
          }|rt	          |ĐdCdD          ndD}Őt          |t	           dd          pdt	           dd          pd|P||Art[          |A          ndE          }t^          K                    dF|Ɛj	        j
        |Ɛj        |Ɛj        |Ɛj        |Ɛj        |Ɛj                                        ||a|Ɛj	        |ÐG          \  }}a|rY d
}~||Ɛj	        t"          j        k    r[|^sYd}^                     |A          r&                      j         dHdt           Y d
}~t^          0                    dI           |Ɛj	        t"          j        k    r j$        dk    r j        r|_sd}_t	           dJd          spd _        	  j                                         n# t
          $ r Y nw xY w                                                        j         dKdt           Y d
}~ j$        dwk    rf j2        dLv r\|dMk    rU|YsSd}Y                     dt          r: j2        dNk    rdOndP}ȉ                      j         dQ|ț dR           Y d
}~  j$        dSk    r j2        dnk    rx|dMk    rp|[smd}[                     dt          rt7           j         dT           Y d
}~ lddUlm}  |ɦ            }d}	 t	          |d9d
          pt	          |dVd
          }|́t          |̦          d
dW         }n# t
          $ r Y nw xY wt7           j         dX           |rt7           j         dY|˛            t7           j         dZ           t7           j         d[           t7           j         d\           t7           j         d]           t7           j         d^|ʛ d_           t7           j         d`            j2        dak    rD|dMk    r=|\s;d}\                                 r$                      j         db           Y d
}~! j$        dk    r|dMk    rtq           dc          r|Zsd}Zdddlm }  !                                rt7           j         de           Y d
}~"Z j"        } ||Φ          rdfndg}ϐt7           j         dh           t7           j         di|ϛ            t7          |r+t[          |Φ          djk    r j         dk|d
dj          dn
 j         dl           t7           j         d[           ddUlm}  |ɦ            }ʐt7           j         dm|ʛ dn           t7           j         do|ʛ dp           t7           j         dq           t7           j         dr           t7           j         ds           t7           j         dt           |Ɛj	        t"          j#        k    r|]sd}]|D ].}1t          |1t                    r|1                    dud
           /                      j         dvdt           t          jI        dw j        t[          |                     Y d
}~$S|Ɛj	        t"          j$        k    r|`sd}`	 ddxl%m&}  |Љ jQ                  \  }}n5# t
          $ r(}t          jI        dy j        |Ӧ           d}Y d
}~nd
}~ww xY w|rF                      j         dz|қ d{dt           t          jI        d| j        |Ҧ           Y d
}~%
t          jI        d} j                   |Udz  }Ut?          j                    |Tz
  }ԉ m                    d~|U d<|V dȝ           tO          |          jz        }t          |                                          H (                    |          }t^          I                    d|U|V|Չ                                 |֦           t	           dd          }t	           dd          }Gt	           dd          }|rd| dnd}ى                      j         d|U d<|V d|՛ |ٛ dt                                 j         d|כ d|؛ dt                                 j         d|G dt                                 j         d|֛ dt           |rY|d>k     rRt	          |d9d
          }|rt          |          d
d         nd
}|r"                      j         d|ڛ dt                                 j         d|ddt[          |A           d|Pd)dl            )                                rdHv r                      j         d|؛ ddt            j*        r@                      j         ddt                                 j         ddt                                 j         d|؛ dt            ja        r                      j         ddt                                ||                                             d|՛ d                     t          |                     d||#dddcY d
}~S t	          |d:d
          }|Ɛj	        t"          j+        k    r+dD}ۉ jM        }|jS        }||k    r|ܐ,                     j1        |ۉ j        t	           dd           j2                   tq          |ܐd	          rd|_        d|_                              j         d|d)d|d)dldt           |*dz  }*|*|Xk    rt[          |          }މ U                    |||P|
.          \  }}d
}t[          |          |k     s||k    r? &                    d|d)d|d)d           t?          j        d*           d}bY d
}~n?|Ɛj	        t"          j-        t"          j.        hv }|r j        t[           j                  k     rnt_           j0         j2        t	           dd
                    }|s> &                    d                                |Ɛj	                  rd}Ud}*d}WY d
}~*y|r j2        dnk    r|Ɛj	        t"          j-        k    r|sd}	 ddlm1}m2} t	          |dVd
          }|rt	          |dd
          nd
} || j3                  }|r |||Ð           nt          j0        d           n# t
          $ r Y nw xY w|r|V}UY d
}~++|Ɛj	        t"          j4        k    }|dk    rt           j        t                    rd j        v r                      j         ddt                                 j         ddt                                 j         ddt                                 j         ddt                                 j         ddt           |r|*dz  }*|*|Xk    r                      j         d|X ddt                                 j         ddt           t          j         j         d|X d                                ||           |d|#d|X dddddcY d
}~S  &                    d|* d<|X d           t[          |          }މ U                    |||P|
.          \  }}d
}t[          |          |k     rJ &                    d|ޛ dt[          |           d           t?          j        d*           d}bY d
}~n                      j         ddt                                 j         ddt           t          j         j         d                                ||           |d|#dddddcY d
}~S |Ɛj	        t"          j5        k    }|rƉ jM        }|jS        }ݐtm          H          }|to          d|dz
            }| _8                              j         d|d)d|d)d|d)dȝdt           |*dz  }*|*|Xk    r                      j         d|X ddt                                 j         ddt           t          j         j         d|X d                                ||           |d|#d|X dddddcY d
}~S d}bY d
}~nts          H          }t	           dd          pd                                }t	           dd          pd:                    d<                                          }|dv p|젲                    d          }|o	|d
u odHv }|r2||k     r,|}                      j         d|d)d|d)dȝdt           n:|r(|}                      j         d|d)ddt           ntw          |ݦ          }|r||k     r|ܐ,                     j1        | j        t	           dd           j2                   tq          |ܐd	          r!d|_        t          |o||k              |_                              j         d|d)d|d)dldt           n                       j         dÝdt           |*dz  }*|*|Xk    r                      j         d|X ddt                                 j         ddt           t          j         j         d|X d                                ||           |d|#d|X dddddcY d
}~S  &                    d|Pd)d|* d<|X d           t[          |          }މ U                    |||P|
.          \  }}d
}t[          |          |k     s|rc||k     r]t[          |          |k     r, &                    d|ޛ dt[          |           d           t?          j        d*           d}bY d
}~n݉                      j         dƝdt                                 j         dǝdt           t          j         j         d|Pd)dɝ                                ||           |d|#d|Pd)d˝ddddcY d
}~S t          |t          t          f          oAt          |t          t          j<        f           ot          |tz          j>                   }|pv|Ɛj         om|Ɛj         od|Ɛj	        t"          j-        t"          j.        t"          j?        t"          j5        t"          j4        t"          j+        t"          j#        hvo| }|r? &                    d| d͝                                            rd}Ud}*d}WY d
}~3|f                     |fd|Ϧ            &                    d| d҉ (                    |                                            j         d| dҝdt                                 j         d|כ d|؛ dt                                 j         d|G dt           |Ɛj@        s|Ɛj	        t"          j.        k    ry|אdLv r|dMk    r|אdk    r                      j         dԝdt                                 j         d՝dt                                 j         d֝dt                                 j         dםdt           n                      j         d؝dt                                 j         dٝdt           nÉ                      j         dڝdt                                 j         d۝dt                                 j         d|؛ d]dt           t          t          |G          dݦ          r                       j         dޝdt           n                       j         dߝdt           t          j         j         d|            |d=k    r;|Pdk    st[          |A          dk    r!                      j         ddt           n                     ||           d
||#ddt          |          dvcY d
}~S |U|Vk    r|Ws$ B                    ||U|V          r
d}Wd}UY d
}~7 &                    d|V d                                            rd}Ud}*d}WY d
}~7> (                    |          }|r &                    d|V d|            n &                    d|V d|                                  j         d| dt           t	          |d:d
           ot          HfddD                       }|r@                      j         ddt                                 j         ddt           t          j        d j        |V|||t[          |A          |Pd)           |f                     |fd|Ϧ                                ||           d|V d| }|r|dz  }|||#dd|dvcY d
}~S d
}|rt	          t	          |dVd
          dd
          }|r{tq          |d          ri|E                    d          p|E                    d          }|r;	 t          t          |          d          }n# t          t          f$ r Y nw xY w|r|nt          |Udd          }|r& &                    d|d̛d|Udz    d<|V d           n! &                    d|d̛d|U d<|V d           t^          I                    d||U|V                                 |           t?          j                    |z   }d}t?          j                    |k     r ja        r^                      j         ddt                                ||                                             d|U d<|V d||#dddcY d
}~S t?          j        d           |dz  }|dz  dk    rC m                    d|U d<|V dt          |t?          j                    z
             d           t?          j                    |k     Y d
}~nd
}~ww xY w|U|Vk     ; |%rd}+n|br(|#dz  }# j+        D                                 |Udz  }Ud}bE|cr3 j        r j        nd}||'dz   z  }t          |d           _8        F
|e4d}+t7           j         d                                 ||           n	                                  }i } j$        dk    r j        |d<    |j        |efi |}|}|j        }d|j        t          |j        t                    st|j        }t          |t                    rH|E                    dId          p*|E                    dCd          pt          j        |          |_        nt          |th                    rg }|D ]}t          |t                    r|?                    |           -t          |t                    rD|E                    d          dIk    r*|?                    |E                    dId                     t          |t                    r,dI|v r(|?                    t          |dI                              dY                    |          |_        nt          |          |_        	 dd!lGmH} t	          |d@d
          pg } |j        pd} |	 di d||
d} j        pdd# j3        pdd j1        d j2        d j        d j$        d|#d|odT|ddt[          |A          dt	          |edd
          dV|ed E                    |e          d|dt[          |          dt[          |            n# t
          $ r Y nw xY w|j        r j@        sx j        r&                      j         d	|j                    nK                      j         d	|j        d
d          t[          |j                  dk    rdnd            |j        r jF        r|j        X                                }t          jG        d
d|          X                                }|r%|H                    d          d         d
d         nd}|rAt	           dd          dk    r+	  F                    d|           nJ# t
          $ r Y n>w xY w|r7	  F                    dd|d
d>         d
           n# t
          $ r Y nw xY wt          |j        pd          rԉ xj        dz  c_                              j         d            j        d*k    r)                      j         d j         d           J                      j         ddt           d _                             |          }                     |
                                ||           d
||#ddddS d _         j$        dwk    r|ddk    r xj        dz  c_                             ||d          }t          |E                    dC          pdX                                          }t          |E                    dS          t                    r5t          |E                    dSd          X                                          nd}t          |E                    d                    }t          |E                    d                    }|s
|s|s|r|r|dG         nd
}t          |t                    r|E                    d          nd
}	|E                    d          }
t          |t                    r|E                    d          nd
}|E                    d          }t          |t                    o|E                    d>          d?k    o|E                    dT          dk    oq|E                    dC          pd|E                    dC          pdk    o@|E                    dS          pd|E                    dS          pdk    o|	|
k    o||k    }|s+|?                    |            J                    |            j        d-k     rL j@        s'                      j         d j         d           | _                             |           Nyd _                             ||           d
||#ddddS tq           d          rd _        |jK        	r j@        s5                      j         dt[          |jK                   d            j        rL|jK        D ]CJt          jK        dJjL        jM         dJjL        jN        d
dW          d           D|jK        D ]~JJjL        jM         j=        vre O                    JjL        jM                  }|r>t7           j         dJjL        jM         d| d           |JjL        _M         fd|jK        D             }|r xj        dz  c_        dŠY                    t           j=                            }|d         }t[          |          dk    r|d
d         dz   n|}                      j         d | d! j         d            j        d-k    rK                      j         d"dt           d _                             ||           d
||#ddd#| dS                      ||d          }|?                    |           |jK        D ]gJJjL        jM         j=        vrd$JjL        jM         d%| }nd&}|?                    dAJjL        jM        JjQ        |d'           hQ|d _        g I|jK        D ]+JJjL        jN        }t          |t          th          f          r$t          j        |          JjL        _N        U|Ct          |t                    s-t          |          JjL        _N        JjL        jN        }|r|X                                sd(JjL        _N        	 t          j        |           # t          j<        $ r=}I?                    JjL        jM        t          |          f           Y d
}~%d
}~ww xY wIrߐt          Ifd)|jK        D                       }|r`                      j         d*|dd+dt           d _                             |
                                ||           d
||#ddddS  xj        dz  c_        Id         \  }H                      j         d,| d-H             j        d-k     r(                      j         d j         d           S                      j         d.           d _                             ||d          }|?                    |           d/ ID             }|jK        D ]tJJjL        jM        |v r+t          Jfd0ID                       }d1| d2}nd3}|?                    dAJjL        jM        JjQ        |d'           uTd _         S                    |jK                  |_K         T                    |jK                  |_K                             ||d          }|j        pd}|rى                     |          rÐ| _        t          h d4          Et          Efd5|jK        D                       }| _        |r                                 rd _        n[ W                                rF                     |          X                                }|r                     d6|            d}|rt          |dG         t                    rj|dG         E                    dU          rO|                                 d}|r6t          |dG         t                    r|dG         E                    dU          O|rd _        d _        d _        |?                    |            J                    |            jX        r(	  X                    d
           n# t
          $ r Y nw xY w Y                    |||
|#            j"        f j"        } d7}+ Z                    |           }$ &                    d8| j[         d| j\                    |?                    d?|$d           n^d}(d _]        d9 |jK        D             }!|!d:hk    r j+        D                                  jM        }|Đj^        dk    r
|Đj^        }"nt          | jQ        pd
;          }" jL        rV|Đ                    |"          r? A                    d<            U                    || jM        j^        |
.          \  }}d
}| _                             |           X^|j        pd}$d _                             |$          st	           d=d          pd}#                     |#          ryd>}+                     |#          X                                }$t^          0                    d?t[          |$                      &                    d@           |$}$d __        	nt	           dAd
          }%|%rt	           dBd          r{dC}+t^          0                    dD            &                    dE           d
 _        d _        d _                             |%          X                                }$d __        nt          dF |dGd
         D                       }&t          t          j        dH|$pdt          j                            }'|&rt	           dId          s|'sd _        d
 _        d _        t^          0                    dJ            &                    dK                                ||d          }(dL|(dC<   d|(dM<   |?                    |(           |?                    ddNddO           Zt          t	          |dSd
          p&t	          |dPd
          pt	          |dud
          p|'          })|)r j        d*k     r xj        dz  c_        t^          0                    dQ j                    &                    dR j         dS                                |d          }d|dU<   |?                    |           | _                             |           [͉                     |$          X                                 }*|)o j        d*k    }+|*rj|)r|+rd j        d-k     rY xj        dz  c_        t^          I                    dT j         j1                    &                    dU j         d           \s|*r j        rt^          I                    dV j         j1         j2                    &                    dW                                            rXd _         &                    dX j1         d j2         dȝ           t^          0                    dY j1         j2                   ],dZ}+ `                    |          }, a                    |                                ||d          }dL|dC<   d|d[<   |?                    |           |,r\t[          |,          d>k    r|,d
d>         dz   n|,}-t^          I                    d\|-            &                    d]           nQt^          I                    d^ j         j1         j2                    &                    d_ j        rd`ndaz              dL}$n}d _        d _         j$        dwk    r j=        r|&d*k     r b                    ||$|b          r|&dz  }&                     |d          }|?                    |            J                    |           ddcd}|?                    |           | _                             |           _d}&|)rdY                    |)          |$z   }$g })d}'                     |$          X                                }$                     ||d          }.|rt          |dG         t                    r|dG         E                    dU          s8|dG         E                    dM          s|dG         E                    d[          r|                                 |rnt          |dG         t                    rS|dG         E                    dU          L|dG         E                    dM          h|dG         E                    d[          |?                    |.           dd|d dȝ}+ j@        s A                    de|# df           n*# t
          $ r}dg|# dt          |           H	 t7          dhH            n4# t          t          f$ r t^                              H           Y nw xY wt^          K                    di|#dj           t          t[          |          dz
  dGdG          D ]}B||B         }Ct          |Ct                    s n|CE                    d>          dAk    r<|CE                    d>          d?k    r|CE                    d@          rdk ||Bdz   d
         D             }/|Cd@         D ]}JJrt          Jt                    sJdl         |/vrSdAt                      jd        e                    J          Jdl         dmH d'}0|?                    |0           ~ |# j*        dz
  k    r4dnHd
d          dȝ}+doH }$|?                    d?|$d           Y d
}~n1Y d
}~nd
}~ww xY w|# j*        k     r j+        jh        dk    b ji        b|$D|# j*        k    s j+        jh        dk    r(dp|# d< j*         dȝ}+ &                    dq|# d< j*         dr            j@        s" A                    d;|# d< j*         ds            f                    ||#          }$t          jh        E                    dt          }1|1r	 t                      i                    du|1dv|# d< j*         dwdx|
y           t^          0                    dz|1|# j*                   n0# t
          $ r# t^          I                    d{|1dj           Y nw xY w|$d
uo
|# j*        k     }2 j                    |tY          |          |2                                |
            a                    |                                ||           |r|dG         E                    d>          nd
}3d
}4|3dAk    rt          |          D ]}1|1E                    d>          d?k    rp|1E                    d@          r[|1d@         }5|5rMt          |5d         t                    r1|5dG         E                    dXi           E                    d\          }4 nts          d| |D                       }6|$rt[          |$          nd}7 j+        r j+        jo        nd}8 j+        r j+        jp        nd}9d}}:|+ j1        |# j*        |8|9|6|3|7 j        pdf
};|3dAk    r"|%s t_          jI        d~|:z   dz   g|;|4R   nt_          j0        |:g|;R   |$r|%s	 t	           dd
          pi }<|<rL k                                r7 l                    |<          }=|=r|$:                                d3z   |=z   }$n9# t
          $ r,}>t^          K                    d|>           Y d
}>~>n
d
}>~>ww xY w|$r|%s	 dd!lGmH}  |d|$ j        pd j1        t	           d#d
          pd          }?|?D ]!}@t          |@t                    r|@r|@}$ n"n3# t
          $ r&}t^          I                    d|           Y d
}~nd
}~ww xY w|$ry|%sw	 dd!lGmH}  |d j        ||$ti          |           j1        t	           d#d
          pd           n3# t
          $ r&}t^          I                    d|           Y d
}~nd
}~ww xY wd
}At          |          D ]V}C|CE                    d>          dk    r n:|CE                    d>          d?k    r |CE                    dS          r|CdS         }A nWi d|$d|Ady|d|#d|2d|+ddd|%dt	           dd          d j1        d j2        d j        d j        d j        d j        d j        d j         j         j         j        t	           jM        dd          pd j         j         j        d}B j"         j"        m                                |Bd<    v                                }C|Cr|C|Bd<   d __        |%r jc        r jc        |Bd<                                     d
 _        d}D jt        dk    r# ju         jt        k    rdF j=        v r
d}Dd _u         n                    ||$|%           |$rA|%s?|s|Dr:	  o                    ti          |          ||D           n# t
          $ r Y nw xY w	 dd!lGmH}  |d j        |2|% j1        t	           d#d
          pd           n3# t
          $ r&}t^          I                    d|           Y d
}~nd
}~ww xY w|BS (  a  
    Run a complete conversation with tool calling until completion.

    Args:
        user_message (str): The user's message/question
        system_message (str): Custom system message (optional, overrides ephemeral_system_prompt if provided)
        conversation_history (List[Dict]): Previous conversation messages (optional)
        task_id (str): Unique identifier for this task to isolate VMs between concurrent tasks (optional, auto-generated if not provided)
        stream_callback: Optional callback invoked with each text delta during streaming.
            Used by the TTS pipeline to start audio generation before the full response.
            When None (default), API calls use the standard non-streaming path.
        persist_user_message: Optional clean user message to store in
            transcripts/history when user_message contains API-only
            synthetic prefixes.
                or queuing follow-up prefetch work.

    Returns:
        Dict: Complete conversation result with final response and message history
    r   r
   provider modelr-   r1   _memory_write_originassistant_toolNFTanthropic_messagesu~   🔌 Detected stale connections from a previous provider issue — cleaned up automatically. Proceeding with fresh connection.P   z...
 zPconversation turn: session=%s model=%s provider=%s platform=%s history=%d msg=%rnoneunknownc              3  L   K   | ]}|                     d           dk    dV   dS )roleuser   Nget.0ms     r8   	<genexpr>z#run_conversation.<locals>.<genexpr>   s?       
 
quuV}}/F/FA/F/F/F/F
 
r:   rV   _stream_context_scrubber_stream_think_scrubbermemoryrU   )rT   contentu   💬 Starting conversation: '<   'system_prompt)invoke_hookon_session_startplatform)
session_idrJ   rf   z on_session_start hook failed: %sz*Session DB update_system_prompt failed: %s)rc   toolszDPreflight compression: ~%s tokens >= %s threshold (model %s, ctx %s),u   📦 Preflight compression: ~z tokens >= z# threshold. This may take a moment.   )approx_tokensr@   pre_llm_call_user_id)rg   r;   r>   is_first_turnrJ   rf   	sender_idcontextz

zpre_llm_call hook failed: %scodex_app_server)r;   original_user_messagemessageseffective_task_idshould_review_memoryinterrupted_by_useru2   
⚡ Breaking out of tool loop due to interrupt...zstarting API call #budget_exhaustedu%   
⚠️  Iteration budget exhausted (/z iterations used)rT   	assistant
tool_callstooltool_call_idr`   c                    g | ]h}t          |t                    |d          d                             |                    d                    |d                              d          diS )functionnameid	arguments)r   resultr   
isinstancedictrX   )rZ   tc_results_by_ids     r8   
<listcomp>z$run_conversation.<locals>.<listcomp>=  s~     & & & !#)"d33&(*:v(>*8*<*<RVVD\\*J*J-/
^-?-?-L-L & & &r:   z&step_callback error (iteration %s): %sskill_managez

User guidance: text)typer   z<Pre-API-call steer drain: injected into tool msg at index %d_pending_steer_lock_pending_steerlogger)r   rg   zFSanitized %s corrupted tool_call arguments before request (session=%s)-zFRepaired %s message-alternation violations before request (session=%s)	reasoningfinish_reason_thinking_prefillsystem)	cache_ttlnative_anthropicr~   r   )ri   :)
separators	sort_keysr   ?c              3  N   K   | ] }t          t          |                    V  !d S N)lenr<   )rZ   msgs     r8   r\   z#run_conversation.<locals>.<genexpr>2  s.      @@C#c#hh--@@@@@@r:   u   🔄 Making API call #u      📊 Request size: z messages, ~z
 tokens (~z chars)u      🔧 Available tools: )brainsparklepulsemoonstar)spinner_typeprint_fnzAPI Request - Model: z, Messages: z	, Tools: zLast message role: zTotal message size: ~z tokensstopnous)r#   format_remainingu,   Nous Portal rate limit active — resets in .u   ⏳ z Trying fallback...)forcezg

No fallback provider available. Try again after the reset, or add a fallback provider in config.yaml.)final_responsers   	api_calls	completedfailederrorcodex_responses)allow_streamrs   inputpre_api_requestr@   rg   r;   r>   base_urlapi_modeapi_call_countrequest_messagesmessage_count
tool_countapprox_input_tokensrequest_char_count
max_tokensHERMES_DUMP_REQUESTS	preflight)reasonc                 v    r                     d           d  j        r                     d           d S d S )NrI   )r   thinking_callback)agentthinking_spinners   r8   _stop_spinnerz'run_conversation.<locals>._stop_spinner  sT    ' 0(--b111+/(. 4//333334 4r:   _disable_streamingzcopilot-acpzacp://copilotz
acp+tcp://)Mockclient)on_first_deltau   ⏱️  API call completed in z.2fszN/AzAPI Response received - Model: z	, Usage: usagezresponse is Nonestatus>   r   	cancelledr   messagezResponses API returned status 'z>Codex response status='%s' (error=%s). Routing to fallback. %szresponse.status=z: output_textzaCodex response.output is empty but output_text is present (%d chars); deferring to normalization.incomplete_detailszeCodex response.output is empty after stream backfill (status=%s, incomplete_details=%s, model=%s). %sz	api_mode=z
 provider=zresponse.output is emptyz/response.content invalid (not a non-empty list)bedrock_conversez/Bedrock response invalid (no output or choices)choicesz#response has no 'choices' attributezresponse.choices is Nonezresponse.choices is emptyu   (´;ω;`) oops, retrying...u<   ⚠️ Empty/malformed response — switching to fallback...Unknownmetadataprovider_namezmodel=c                n    i | ]2\  }}|                     d           |t          |          dd         3S )_Nd   )
startswithr<   )rZ   kvs      r8   
<dictcomp>z$run_conversation.<locals>.<dictcomp>  sA    %r%r%r$!Q`a`l`lmp`q`q%raQ%r%r%rr:   z*Response attributes for invalid response: codei  z-upstream provider timed out (Cloudflare 524, z.0fzs)i  zupstream gateway timeout (504, i  z'rate limited by upstream provider (429)>       zupstream server error (z, >       zupstream provider overloaded ()zupstream error (code 
   zfast response (z.1fu   s) — likely rate limitedzslow response (u   s) — likely upstream timeoutzresponse time u&   ⚠️  Invalid API response (attempt z): u      🏢 Provider: u      📝 Provider message: u      ⏱️  u   ⚠️ Max retries (u.   ) for invalid responses — trying fallback...u   ❌ Max retries (z,) exceeded for invalid responses. Giving up.zInvalid API response after z	 retries.z
 retries: )rs   r   r   r   r   g      @g      ^@)
base_delay	max_delayu   ⏳ Retrying in zs (z)...zInvalid API response (retry z | Provider: u3   ⚡ Interrupt detected during retry wait, aborting.z$Operation interrupted during retry (z
, attempt z).)r   rs   r   r   interruptedg?   zretry backoff (z), zs remainingr   
incomplete>   lengthmax_output_tokensr   uA   ⚠️  Treating suspicious Ollama/GLM stop response as truncateduQ   ⚠️  Response truncated (finish_reason='length') - model hit max output tokens)strip_tool_prefixz8<(?:think|thinking|reasoning|REASONING_SCRATCHPAD)[^>]*>zModel used all output tokens on reasoning with none left for the response. Try lowering reasoning effort or increasing max_tokens.uV   💭 Reasoning exhausted the output token budget — no visible response was produced.u  ⚠️ **Thinking Budget Exhausted**

The model used all its output tokens on reasoning and had none left for the actual response.

To fix this:
→ Lower reasoning effort: `/thinkon low` or `/thinkon minimal`
→ Or switch to a larger/non-reasoning model with `/model`)r   rs   r   r   partialr   >   r   chat_completionsrM   u   ↻ Requesting continuation (z/3)...z[System: Your previous response was truncated by the output length limit. Continue exactly where you left off. Do not restart or repeat prior text. Finish the answer directly.]z9Response remained truncated after 3 continuation attemptsu=   ⚠️  Truncated tool call detected — retrying API call...uf   ⚠️  Truncated tool call response detected again — refusing to execute incomplete tool arguments.z-Response truncated due to output length limitu3      ⏪ Rolling back to last complete assistant turnu-   ❌ First response truncated - cannot recoverz3First response truncated due to output length limit)rH   r   )prompt_tokenscompletion_tokenstotal_tokens_context_probed_context_probe_persistableu   💾 Cached context length: z tokens for z cache=z (r   z%)zHAPI call #%d: model=%s provider=%s in=%d out=%d total=%d latency=%.1fs%sapi_key)rH   r   r   includedsubscription_included)input_tokensoutput_tokenscache_read_tokenscache_write_tokensreasoning_tokensestimated_cost_usdcost_statuscost_sourcebilling_providerbilling_base_urlbilling_moderJ   r   z4Token persistence failed (session=%s, tokens=%d): %szToken usage: prompt=r   z, completion=r   z, total=r   u      💾 Cache: z	 tokens (z% hit, z	 written))r!   z
API call #z
 completedu    ⚡ Interrupted during API call.z3Operation interrupted: waiting for model response (zs elapsed).u   (╥_╥) error, retrying..._unicode_sanitization_passes   z'ascii'ascii	surrogatez'utf-8'prefill_messagesuH   ⚠️  Stripped invalid surrogate characters from messages. Retrying...uP   ⚠️  Surrogate encoding error — retrying after full-payload sanitization...rh   ephemeral_system_prompt_client_kwargsdefault_headersu   ⚠️  API key contained non-ASCII characters (bad copy-paste?) — stripped them. If auth fails, re-copy the key from your provider's dashboard.ud   ⚠️  System encoding is ASCII — stripped non-ASCII characters from request payload. Retrying...uT   ⚠️  System encoding is ASCII — enabling full-payload sanitization for retry...bodystatus_code)z%only 'text' content type is supportedz#only text content type is supportedzimage_url is not supportedzimage content is not supportedzmultimodal is not supportedz#multimodal content is not supportedz!multimodal input is not supportedzvision is not supportedzvision input is not supportedzdoes not support imageszdoes not support image inputzdoes not support multimodalzdoes not support visionzmodel does not support imagezimage_url'. expectedz,unknown variant `image_url`, expected `text`z(unknown variant image_url, expected textc              3      K   | ]}|v V  	d S r    )rZ   p
_err_lowers     r8   r\   z#run_conversation.<locals>.<genexpr>:  s8       2 2()AO2 2 2 2 2 2r:   i  r   _vision_supporteduV   ⚠️  Server rejected image content — switching to text-only mode for this sessionz,. Stripped images from history and retrying.context_compressorcontext_lengthi@ )rH   rJ   rk   r  num_messageszTError classified: reason=%s status=%s retryable=%s compress=%s rotate=%s fallback=%s)r	  has_retried_429classified_reasonerror_contextuE   📐 Image(s) exceeded provider size limit — shrank and retrying...zlimage-shrink recovery: no data-URL image parts found or shrink didn't reduce size; surfacing original error._oauth_1m_beta_disabledui   🔕 OAuth subscription doesn't support the 1M-context beta — disabled for this session and retrying...>   	xai-oauthopenai-codexi  r  z	xAI OAuthCodexu   🔐 z. auth refreshed after 401. Retrying request...r   u<   🔐 Nous agent key refreshed after 401. Retrying request...r+   response   u/   🔐 Nous 401 — Portal authentication failed.z   Response: zS   Most likely: Portal OAuth expired, account out of credits, or agent key revoked.z   Troubleshooting:u6        • Re-authenticate: hermes login --provider nousuA        • Check credits / billing: https://portal.nousresearch.comu$        • Verify stored credentials: z
/auth.jsonuK        • Switch providers temporarily: /model <model> --provider openroutercopilotuA   🔐 Copilot credentials refreshed after 401. Retrying request..._anthropic_api_keyr   uC   🔐 Anthropic credentials refreshed after 401. Retrying request...zBearer (OAuth/setup-token)zx-api-key (API key)u-   🔐 Anthropic 401 — authentication failed.z   Auth method:    z   Token prefix: z   Token: (empty or short)u"        • Check ANTHROPIC_TOKEN in z+/.env for Hermes-managed OAuth/setup tokensu$        • Check ANTHROPIC_API_KEY in z)/.env for API keys or legacy token valuesuJ        • For API keys: verify at https://platform.claude.com/settings/keysuD        • For Claude Code: run 'claude /login' to refresh, then retryu=        • Legacy cleanup: hermes config set ANTHROPIC_TOKEN ""uA        • Clear stale keys: hermes config set ANTHROPIC_API_KEY ""reasoning_detailsuV   ⚠️  Thinking block signature invalid — stripped all thinking blocks, retrying...zP%sThinking block signature recovery: stripped reasoning_details from %d messagesr/   z5%sllama.cpp grammar recovery: strip helper failed: %su<   ⚠️  llama.cpp rejected tool schema grammar — stripped z' pattern/format keyword(s), retrying...zU%sllama.cpp grammar recovery: stripped %d pattern/format keyword(s) from tool schemasue   %sllama.cpp grammar error but no pattern/format keywords to strip — falling through to normal retryzAPI error recovery (attempt z;API call failed (attempt %s/%s) error_type=%s %s summary=%sz [HTTP ]u!   ⚠️  API call failed (attempt u      🔌 Provider: z	  Model: u      🌐 Endpoint: u      📝 Error: i,  u      📋 Details: u      ⏱️  Elapsed: zs  Context: z msgs, ~zsupport tool useu$      💡 No OpenRouter providers for z1 support tool calling with your current settings.zU      Your provider_routing.only restriction is filtering out tool-capable providers.zY      Try removing the restriction or adding providers that support tools for this model.zH      Check which providers support tools: https://openrouter.ai/models/u?   ⚡ Interrupt detected during error handling, aborting retries.z+Operation interrupted: handling API error ()rJ   r  r   r   rH   uO   ⚠️  Anthropic long-context tier requires extra usage — reducing context: u    → u   🗜️ Context reduced to z tokens (was z), retrying...)rH   r   u9   ⚠️ Rate limited — switching to fallback provider...)r"   r$   headers)r   last_known_state)r   r  zNous 429 looks like upstream capacity (no exhausted bucket in headers or last-known state) -- not tripping cross-session breaker.i  zmodels.inference.ai.azure.comuJ      💡 GitHub Models free tier (models.inference.ai.azure.com) caps everyzJ      request at ~8K tokens. Hermes' system prompt + tool schemas baselinezF      exceeds that floor, so this endpoint cannot run an agentic loop.zK      Use the `copilot` provider with a Copilot subscription token (`hermesu=         setup` → GitHub Copilot), or pick any other provider.u   ❌ Max compression attempts (z&) reached for payload-too-large error.uR      💡 Try /new to start a fresh conversation, or /compress to retry compression.z413 compression failed after z
 attempts.z5Request payload too large: max compression attempts (z
) reached.)rs   r   r   r   r   r   compression_exhaustedu@   ⚠️  Request payload too large (413) — compression attempt u   🗜️ Compressed z messages, retrying...u2   ❌ Payload too large and cannot compress further.z/413 payload too large. Cannot compress further.z9Request payload too large (413). Cannot compress further.@   uM   ⚠️  Output cap too large for current prompt — retrying with max_tokens=z (available_tokens=z; context_length unchanged at z!Context compression failed after z3Context length exceeded: max compression attempts (>   
minimax-cnminimax)z https://api.minimax.io/anthropicz"https://api.minimaxi.com/anthropiczcontext window exceeds limit (z!Context limit detected from API: zBProvider reported overflow amount only; keeping context_length at z tokens and compressing.u3   ⚠️  Context length exceeded — stepping down: uM   ⚠️  Context length exceeded at minimum tier — attempting compression...u   🗜️ Context too large (~u    tokens) — compressing (u8   ❌ Context length exceeded and cannot compress further.u      💡 The conversation has accumulated too much content. Try /new to start fresh, or /compress to manually trigger compression.zContext length exceeded: z! tokens. Cannot compress further.zContext length exceeded (z" tokens). Cannot compress further.u!   ⚠️ Non-retryable error (HTTP u   ) — trying fallback...non_retryable_client_error)r   r   u   ❌ Non-retryable error (HTTP u%   ❌ Non-retryable client error (HTTP z). Aborting.r  uK      💡 Codex OAuth token was rejected (HTTP 401). Your token may have beenz?      refreshed by another client (Codex CLI, VS Code). To fix:z?      1. Run `codex` in your terminal to generate fresh tokens.z3      2. Then run `hermes auth` to re-authenticate.u8      💡 xAI OAuth token was rejected (HTTP 401). To fix:zW      re-authenticate with xAI Grok OAuth (SuperGrok Subscription) from `hermes model`.u9      💡 Your API key was rejected by the provider. Check:u-         • Is the key valid? Run: hermes setupu+         • Does your account have access to zopenrouter.aiu?         • Check credits: https://openrouter.ai/settings/creditsu6      💡 This type of error won't be fixed by retrying.zNon-retryable client error: iP  uU   ⚠️  Skipping session persistence for large failed session to prevent growth loop.)retry_countmax_retriesu"   ) exhausted — trying fallback...u   ❌ Rate limited after u    retries — u   ❌ API failed after u      💀 Final error: c              3      K   | ]}|v V  	d S r   r  )rZ   r  	error_msgs     r8   r\   z#run_conversation.<locals>.<genexpr>
  s7          1Y            r:   )zconnection lostzconnection resetzconnection closedznetwork connectionznetwork error
terminatedu      💡 The provider's stream connection keeps dropping. This often happens when the model tries to write a very large file in a single tool call.z~      Try asking the model to use execute_code with Python's open() for large files, or to write the file in smaller sections.zP%sAPI call failed after %s retries. %s | provider=%s model=%s msgs=%s tokens=~%smax_retries_exhaustedzAPI call failed after u  

The provider's stream connection keeps dropping — this often happens when generating very large tool call responses (e.g. write_file with long content). Try asking me to use execute_code with Python's open() for large files, or to write in smaller sections.rX   zretry-afterzRetry-Afterx   g       @g      N@u   ⏱️ Rate limited. Waiting zs (attempt z4Retrying API call in %ss (attempt %s/%s) %s error=%sz<Operation interrupted: retrying API call after error (retry zerror retry backoff (interrupted_during_api_calli   i   !all_retries_exhausted_no_responseu:   ❌ All API retries exhausted with no successful response.r   r   post_api_requestapi_durationresponse_modelassistant_messageassistant_content_charsassistant_tool_call_countu   🤖 Assistant: z,</?(?:REASONING_SCRATCHPAD|think|reasoning)>_delegate_depth	_thinkingzreasoning.availableuL   ⚠️  Incomplete <REASONING_SCRATCHPAD> detected (opened but never closed)u   🔄 Retrying API call (z/2)...uA   ❌ Max retries (2) for incomplete scratchpad. Saving as partial.z/Incomplete REASONING_SCRATCHPAD after 2 retriescodex_reasoning_itemscodex_message_itemsu0   ↻ Codex response incomplete; continuing turn (z/3)z@Codex response remained incomplete after 3 continuation attempts_codex_incomplete_retriesu   🔧 Processing z tool call(s)...zTool call: z with args: u   🔧 Auto-repaired tool name: 'z' -> 'c                N    g | ]!}|j         j        j        v|j         j        "S r  )r~   r   valid_tool_names)rZ   r   r   s     r8   r   z$run_conversation.<locals>.<listcomp>  s;     & & &)+{'u/EEE K$EEEr:   u   ⚠️  Unknown tool 'u3   ' — sending error to model for agent-correction (uI   ❌ Max retries (3) for invalid tool calls exceeded. Stopping as partial.z#Model generated invalid tool call: zTool 'z#' does not exist. Available tools: zZSkipped: another tool call in this turn used an invalid name. Please retry this tool call.)rT   r   r|   r`   z{}c              3     K   | ]P}|j         j        d  D             v |j         j        pd                                                    d           V  QdS )c                    h | ]\  }}|S r  r  )rZ   nr   s      r8   	<setcomp>z-run_conversation.<locals>.<genexpr>.<setcomp>+  s    /P/P/Pda/P/P/Pr:   rI   )}r  N)r~   r   r   rstripendswith)rZ   r   invalid_json_argss     r8   r\   z#run_conversation.<locals>.<genexpr>(  sv       % %;+/P/P>O/P/P/PPP  [28b@@BBKKJWWWPPPP% %r:   u>   ⚠️  Truncated tool call arguments detected (finish_reason=u   ) — refusing to execute.u1   ⚠️  Invalid JSON in tool call arguments for 'z': u;   ⚠️  Injecting recovery tool results for invalid JSON...c                    h | ]\  }}|S r  r  )rZ   r   r   s      r8   r@  z#run_conversation.<locals>.<setcomp>T  s    (O(O(O'$(O(O(Or:   c              3  B   K   | ]\  }}|j         j        k    |V  d S r   r~   r   )rZ   r?  er   s      r8   r\   z#run_conversation.<locals>.<genexpr>W  s8      *d*dAaSUS^ScNcNc1NcNcNcNc*d*dr:   zError: Invalid JSON arguments. z_. For tools with no required parameters, use an empty object: {}. Please retry with valid JSON.z;Skipped: other tool call in this response had invalid JSON.>   todor_   r   session_searchc              3  4   K   | ]}|j         j        v V  d S r   rG  )rZ   r   _HOUSEKEEPING_TOOLSs     r8   r\   z#run_conversation.<locals>.<genexpr>  sB       , , (,??, , , , , ,r:   u     ┊ 💬 guardrail_haltu   ⚠️ Tool guardrail halted c                &    h | ]}|j         j        S r  rG  )rZ   r   s     r8   r@  z#run_conversation.<locals>.<setcomp>  s    UUU"R[-UUUr:   execute_code)rh   u     ⟳ compacting context… _current_streamed_assistant_textpartial_stream_recoveryuG   Partial stream content delivered (%d chars) — using as final responseuD   ↻ Stream interrupted — using delivered content as final response_last_content_with_tools$_last_content_tools_all_housekeepingfallback_prior_turn_contentuO   Empty follow-up after tool calls — using prior turn content as final responseuM   ↻ Empty response after tool calls — using earlier content as final answerc              3  H   K   | ]}|                     d           dk    V  dS )rT   r{   NrW   rY   s     r8   r\   z#run_conversation.<locals>.<genexpr>V  sE       * * f/* * * * * *r:   z<think>|<thinking>|<reasoning>_post_tool_empty_retrieduH   Empty response after tool calls — nudging model to continue processinguD   ⚠️ Model returned empty after tool calls — nudging to continuez(empty)_empty_recovery_syntheticz~You just executed tool calls but returned an empty response. Please process the tool results above and continue with the task.)rT   r`   rX  reasoning_contentuM   Thinking-only response (no visible content) — prefilling to continue (%d/2)u7   ↻ Thinking-only response — prefilling to continue (z/2)uB   Empty response (no content or reasoning) — retry %d/3 (model=%s)u/   ⚠️ Empty response from model — retrying (uO   Empty response after %d retries — attempting fallback (model=%s, provider=%s)uL   ⚠️ Model returning empty responses — switching to fallback provider...u   ↻ Switched to fallback: z<Fallback activated after empty responses: now using %s on %sempty_response_exhausted_empty_terminal_sentinelzaReasoning-only response (no visible content) after exhausting retries and fallback. Reasoning: %su[   ⚠️ Model produced reasoning but no visible response after all retries. Returning empty.zfEmpty response (no content or reasoning) after %d retries. No fallback available. model=%s provider=%su/   ❌ Model returned no content after all retriesz and fallback attempts.z#. No fallback providers configured.)r;   assistant_contentrs   zr[System: Continue now. Execute the required tool calls and only send your final answer after completing the task.]ztext_response(finish_reason=u"   🎉 Conversation completed after z OpenAI-compatible API call(s)z)Error during OpenAI-compatible API call #u   ❌ z Outer loop error in API call #%d)exc_infoc                z    h | ]8}t          |t                    r!|                    d           dk    0|d         9S )rT   r{   r|   r   rY   s     r8   r@  z#run_conversation.<locals>.<setcomp>i  sP     $ $ $%a..$ 4555==F3J3J .)3J3J3Jr:   r   zError executing tool: zerror_near_max_iterations(z0I apologize, but I encountered repeated errors: zmax_iterations_reached(u#   ⚠️ Iteration budget exhausted (u   ) — asking model to summariseu   ) — requesting summary...HERMES_KANBAN_TASKkanban_blockzIteration budget exhausted (u;   ) — task could not complete within the allowed iterations)r@   r   )r@   zBkanban_block called for task %s after iteration exhaustion (%d/%d)zBFailed to call kanban_block after iteration exhaustion for task %sc              3     K   | ]I}t          |t                    r2|                    d           dk    0|                    d          EdV  JdS )rT   ry   rz   rV   Nr   rY   s     r8   r\   z#run_conversation.<locals>.<genexpr>  sf        a#$55==K#?#?AEE,DWDW#? 	
#?#?#?#? r:   zuTurn ended: reason=%s model=%s api_calls=%d/%d budget=%d/%d tool_turns=%d last_msg_role=%s response_len=%d session=%sz>Turn ended with pending tool result (agent may appear stuck). z last_tool=%s_turn_failed_file_mutationsz(file-mutation verifier footer failed: %stransform_llm_output)response_textrg   rJ   rf   z$transform_llm_output hook failed: %spost_llm_call)rg   r;   assistant_responser>   rJ   rf   zpost_llm_call hook failed: %sr   last_reasoningr   r   turn_exit_reasonr   r   response_previewed_response_was_previewedr   r   r   r   r   last_prompt_tokens)r   r   r   rk  r   r   r   	guardrailpending_steerinterrupt_message)rr   r   r   )messages_snapshotreview_memoryreview_skillson_session_end)rg   r   r   rJ   rf   zon_session_end hook failed: %s)r   )r0  (p  r%   _ensure_db_sessionagent.auxiliary_clientr   getattr	Exceptionhermes_loggingr.   rg   tools.skill_provenancer2   _restore_primary_runtimer   r<   r   _stream_callback_persist_user_message_idx_persist_user_message_overrideuuiduuid4_current_task_id_invalid_tool_retries_invalid_json_retries_empty_content_retries_incomplete_scratchpad_retriesr:  _thinking_prefill_retriesrW  rR  rS  _mute_post_responser   _tool_guardrailsreset_for_turn_tool_guardrail_halt_decisionr  r   _cleanup_dead_connections_emit_status_compression_warning_replay_compression_warningr   max_iterationsiteration_budgetr   r   replacer   inforJ   rH   rf   list_todo_store	has_items_hydrate_todo_store_user_turn_countsum_memory_nudge_interval_turns_since_memoryresetr<  _memory_storeappend
quiet_mode_safe_print_cached_system_prompt_session_dbget_sessionrX   _build_system_prompthermes_cli.pluginsrd   warningupdate_system_promptdebugcompression_enabledr  protect_first_nprotect_last_nr   rh   threshold_tokensr  range_compress_contextboolr   stripjoinrb  	threadingcurrent_threadident_execution_thread_idr9   _set_interrupt_interrupt_requested _interrupt_thread_signal_pending_interrupt_message_memory_manageron_turn_startprefetch_all_run_codex_app_server_turn	remaining_budget_grace_call_checkpoint_mgrnew_turn_api_call_count_touch_activityconsumeused	max_totalstep_callback	enumeratereversed_skill_nudge_interval_iters_since_skill_drain_pending_steerr   logging	getLogger__name___sanitize_tool_call_arguments_repair_message_sequencecopyr   _copy_reasoning_content_for_apipop_should_sanitize_tool_calls#_sanitize_tool_calls_for_strict_apir  r  insert_use_prompt_cachingr&   
_cache_ttl_use_native_cache_layout_sanitize_api_messages#_drop_thinking_only_and_merge_usersjsonloadsdumpsr   r   r   _vprint
log_prefixrandomchoicer   get_thinking_facesget_thinking_verbsr   _has_stream_consumers_should_start_quiet_spinner	_print_fnstartverbose_loggingtime_api_max_retriesagent.nous_rate_guardr#   r   _try_activate_fallback_persist_sessionImportError_reset_stream_delivery_tracking_build_api_kwargs_force_ascii_payloadr   _get_transportpreflight_kwargsr   r   r4   _dump_api_request_debuglowerr   unittest.mockr   !_interruptible_streaming_api_call_interruptible_api_callr   hasattrr   validate_response_client_log_contextr   _fallback_index_fallback_chainr   r   r   varsitemsint	TypeError
ValueError_clean_error_messager'   clear_interruptsleepmap_finish_reasonstop_reasonnormalize_responser   _should_treat_stop_as_truncated_is_anthropic_oauthresearch
IGNORECASE_has_content_after_think_block_cleanup_task_resources_build_assistant_messager`   _session_messages_save_session_log_strip_think_blocks"_get_messages_up_to_last_assistantr*   r   r   r   update_from_responser    r   r   session_prompt_tokenssession_completion_tokenssession_total_tokenssession_api_callssession_input_tokensr   session_output_tokenssession_cache_read_tokensr   session_cache_write_tokensr   session_reasoning_tokensr   r)   
amount_usdsession_estimated_cost_usdfloatr   session_cost_statussourcesession_cost_source_session_db_createdupdate_token_countsr!   InterruptedErrorUnicodeEncodeErrorr   r   r   r   r  r   r   anyr   _extract_api_error_contextr   r   valuer	  	retryableshould_compressshould_rotate_credentialshould_fallback_recover_with_credential_poolr   image_too_large#_try_shrink_image_parts_in_messages!oauth_long_context_beta_forbiddenr  _anthropic_clientclose_rebuild_anthropic_client%_try_refresh_codex_client_credentials$_try_refresh_nous_client_credentialsprinthermes_constantsr,   '_try_refresh_copilot_client_credentialsagent.anthropic_adapterr	   )_try_refresh_anthropic_client_credentialsr  thinking_signaturellama_cpp_grammar_patterntools.schema_sanitizerr0   r   _summarize_api_error_is_openrouter_urlproviders_allowedlong_context_tierupdate_model
rate_limitbilling!_pool_may_recover_from_rate_limit_credential_poolr"   r$   _rate_limit_statepayload_too_largecontext_overflowr   max_ephemeral_max_output_tokensr   rB  r   JSONDecodeErrorsslSSLError
overloadedis_authr3   _try_recover_primary_transportminrefund#_usage_summary_for_api_request_hooktool_progress_callbacksubsplitr(   _emit_interim_assistant_messagerz   r~   r   r   _repair_tool_callsortedr   next_cap_delegate_task_calls_deduplicate_tool_calls	frozensetall _should_emit_quiet_tool_messagesstream_delta_callback_execute_tool_calls#_toolguard_controlled_halt_response	tool_namer   _stream_needs_breakrk  rj  _extract_reasoning)_drop_trailing_empty_response_scaffolding"_looks_like_codex_intermediate_ackOSErrorAIAgent_get_tool_call_name_static_handle_max_iterationsosenvironhandle_function_call_save_trajectory_file_mutation_verifier_enabled$_format_file_mutation_failure_footerto_metadata_sync_external_memory_for_turn_spawn_background_review(L  r   r;   r=   r>   r@   rA   rC   r   r.   r2   rt   _preview_text_msg_previewrs   prior_user_turnsscrubberthink_scrubberrr   _should_review_memoryuser_msgcurrent_turn_user_idx_print_previewstored_promptsession_row_invoke_hookexcrH  active_system_prompt_preflight_tokens_pass	_orig_len_plugin_user_context_pre_results
_ctx_partsrr   r   r   codex_ack_continuationslength_continue_retriestruncated_tool_call_retriestruncated_response_partscompression_attempts_turn_exit_reason	_turn_msg_ext_prefetch_cache_query
prev_tools_idx_m
_fwd_start_tm_tcid	_step_err_pre_api_steer	_injected_si_smmarkerexistingblocks_lockrequest_loggerrepaired_tool_callsrepaired_seqapi_messagesidxr   api_msg_injections_fenced_baseeffective_system
sys_offsetpfmamtcsnew_tcsargs_objtotal_charsrk   faceverbr   api_start_timer'  r(  primary_recovery_attemptedmax_compression_attemptscodex_auth_retry_attemptedanthropic_auth_retry_attemptednous_auth_retry_attemptedcopilot_auth_retry_attemptedthinking_sig_retry_attemptedimage_shrink_retry_attemptedoauth_1m_beta_retry_attempted!llama_cpp_grammar_retry_attemptedr   restart_with_compressed_messages restart_with_length_continuationr   r  
api_kwargsr#   _fmt_nous_remaining_nous_remaining	_nous_msgr   r   _use_streamingr   r1  
resp_modelresponse_invaliderror_details_ct_v_codex_resp_status_codex_error_obj_codex_error_msg	_out_text_out_text_stripped_resp_status_resp_incomplete_tv_btv_ctvr   
resp_attrs_resp_error_code	_code_raw_failure_hintcleaned_provider_error	wait_time	sleep_end_backoff_touch_counterr   r   incomplete_reason_tfr_bt_fr_bedrock_result_cc_fr_finish_resultr3  
_trunc_msg_trunc_transport_trunc_result_trunc_content_trunc_has_tool_calls_has_think_tags_thinking_exhausted_exhaust_error_exhaust_responseinterim_msgcontinue_msgpartial_responserolled_back_messagescanonical_usager   r   r   
usage_dictctx
_cache_pctcost_resultcachedwrittenprompthit_pctr!   api_elapsed	api_error_err_str_is_ascii_codec_is_surrogate_error_surrogates_found_messages_sanitized_prefill_sanitized_tools_sanitized_system_sanitized_sanitized_system_sanitized_ephemeral_headers_sanitized_default_headers_credential_sanitized_raw_key
_clean_key_any_sanitized	_err_body_err_status_IMAGE_REJECTION_PHRASES_looks_like_image_rejection
_status_ok_imgs_removedr	  r  _compressor_ctx_len
classifiedrecovered_with_pool_label_dhh_fn_dhh
_body_text_bodyr	   keyauth_methodr0   r   	_stripped
_strip_excelapsed_time
error_type_error_summary	_provider_model_status_code_str_err_body_str_reduced_ctx
compressorold_ctxoriginal_lenis_rate_limitedpool_may_recover_genuine_nous_rate_limitr"   r$   	_err_resp	_err_hdrsis_payload_too_largeis_context_length_erroravailable_outsafe_outparsed_limit_provider_lower_base_loweris_minimax_providerminimax_delta_only_overflownew_ctxis_local_validation_erroris_client_error_final_summary_is_stream_drop_final_response_retry_after_resp_headers_ra_raw_boost_base_boost
_transport_normalize_kwargs
normalizedrawpartspart_assistant_tool_calls_assistant_text_think_text
first_lineinterim_has_contentinterim_has_reasoninginterim_has_codex_reasoninginterim_has_codex_message_itemslast_msglast_codex_itemsinterim_codex_itemslast_codex_message_itemsinterim_codex_message_itemsduplicate_interimrepairedinvalid_tool_calls	availableinvalid_nameinvalid_previewassistant_msgr`   args
_truncatedrf  recovery_assistantinvalid_nameserrtool_resultturn_content_all_housekeepingclean_had_prefilldecision	_tc_names_real_tokens_partial_streamed
_recoveredfallback_prior_was_tool_has_inline_thinking
_nudge_msg_has_structured_truly_empty_prefill_exhaustedreasoning_textreasoning_preview	final_msganswered_idserr_msg_kanban_taskr   _last_msg_role_last_tool_name_tcs_turn_tool_count	_resp_len_budget_used_budget_max	_diag_msg
_diag_args_failedfooter_ver_err_transform_results_hook_resultrg  r   _leftover_steer_should_review_skillsrL  r  r   r*  rD  r   r   sL  `                                                                                                                                                                                                                                                                                                                                    @@@@@@@r8   run_conversationr  U   s/   < 	;;;;;;E:r**0bE7B''-2	
 	
 	
 	
    
 322222())) @?????WU,BDTUUVVV
 
""$$$
 ,$$ :+L99&,, J34HII -E&*E#+?E(43tz||#4#4
 /E #$E"#E#$E +,E(&'E#&'E#%*E"%)E"16E. %E)*E&	))+++*.E'
 #E
 ~---	..00 """  
  	 	 	D	 ! *))+++%)"
 -U-ABBE 4LAAM36}3E3E3J3JM#2#&..P]L''c22L
KKZ"FEK1L9#)S)=)C%D%D	   .BIt()))rH
  8E$5$?$?$A$A 8!!"6777  
\ 6! ; ; 
 
+
 
 
 
 
 a%5E"+a//E4MQR4R4R -=u?[,[) 
a
 u8$??H U$<dCCN! 5I4T00Zf
 "$q((E222# 3!!Q&!!$(DDD$(!()E% <88HOOHMMA-&;E# }8FF{.":M{X[\jXkXknpXpXpuuvx{{{||| "* 	E$5 	#/;;E<LMM M$/OOO$D$D$LM     	R +8E'' +0*D*D^*T*TE'
	HJJJJJJ&$/+$UJ==C	      H H HA3GGGGGGGGH   RR%::5;KUMhiiii  R R RLL!MqQQQQQQQQR !6 	!;MME4D#6EFHIJ J J
 :.4"+%
 
 
  8 IIIKKV$((+<@@+:>>   *0AM * *.?O* * *   q  MM	161H1Hn<M- 2I 2 2.. x==I--E (,$ 01,23/15.=B:,1)$A"6"<"+-% % %!
 %u'?'PPPE Q <BBBBBB#|'.!%h#$8999+UJ55;eZ66<"	
 	
 	
 !#
 	% 	%A!T"" %quuY'7'7 %!!#a	l"3"34444As## %		 %!!!$$$ 	;#);;z#:#:  < < <5s;;;;;;;;< NNK"#*,! DFE%
 "+!9!;!;!AE
 EE :;;;! 7T5#=>>>16..#' 16.
  	1;<QSV1W1W_--]_I!//0F	RRRR 	 	 	D	  	.89NPS.T.T\**Z\F"'"7"D"DV"L"L"RPR 	 	 	D	 ~+++//%"7/!6 0 
 
 	
 E000U5K5UXY5Y5Y^c^v5Y&&((( % 	K 5# Y!!"WXXX! .DNDDEEE
 # 	',E$$'//11 	 2# ^!!  #]5KaKf  #]  #]ini  jJ  #]  #]  #]  ^  ^  ^ *b
 )(8*<*< = =  HD"vvf~~449M9M4%(]]T%9
)+#+JKK#8 O OC"wwv&88 %$'GGN$;$;E$ O8;	28N8Nu 5& & & & ')&6& & &
 ##NJ???? b b bE~W`aaaaaaaab
 '!++"e&<<<$$)$$ 3355 #	nIS]]Q.B77  smc4(( SWWV__-F-FC>CCF"wwy"55H!(C00 	!)1F):I!7?%GT(^^^RF"MM66*J*JKKK-3C	NN( ! ! ! D! $ILLV   E n  '<dCC$ B B / B383G$3NQ_3_E003AE0	B B B B B B B B B B B B B B B  'u.>EEHQY+mHtOn,L,L_mE( !$77V7;LX;V;V#AA!' B 
 

 ""X# 'C   55h??!X 'C   !(++ *	) *	)HChhjjG +++60I0I & 489LMMG 4#**7333' =&&';<<< W#KK	266E!%-- W-2V^fkk+>V>V-V	* 11#w??? g%%K((('))O,,,KK+T222
 0022 C99'BBB ((((" 052( 	c 06 9E<Y Y``bb 	\%-:JKKL|[L ! 	B+_Q0C0CF0K0Kx0W0W^_J%e&<== B BS##J$4chhjjAAAA $ 	8*!&!?  L 33LAA @@NN  	6 	6B"&&++S11 6 "9 3 3 5 59 	' 	'B&&&&C G # #b$'' J",<,<#':bn[.I#J#J J 1 n1' (Z*.* * *1 1   %   6QzN;7zN..vs;;7 7:{333
 r""""&B| 	&l333 @@<@@@@@6|DD   	)MMqu/qq~qqX]XlqqqrrrMMU-  V  VSEVEV  V  Vdq  V  V  V  @K  V  V  V  V  W  W  WMMU-pp\a\gHnEKHXHXHXmnppqqqq =!A!C!CDDD=!A!C!CDDD& 	) ''4(;(;$(;(;(;<<<<0022 )u7X7X7Z7Z )  &}-Z-Z-Z[[#0D1D1D41D1D1DS_jojy#z#z#z  &&(((   	LM  L%+  L  L3x==  L  Lw|  xC  dJcfglgrcscscs  IJ  L  L  M  M  MM^0\V0D0DV\^^___MJ-JJJJKKK,%*"#$ #("',&"'!%*$',$',$(-%,1)+0(+0(
K'' ~'''        '@&?&A&AO&27J7JQ)<)<_)M)MQ Q Q " $/SSYSSS"& &    **+=)+=+=>>> 7799 %*+K3409>6$..x9MNNN!Dy !D !D !D
 )1)7).&*%.     #   D    De55777"44\BB
- >1*===>%666!&!5!5!7!7!H!Hbg!H!h!hJ!NNNNNN'1~~j'A'A$%&6== C+5>>'+B+B(%&6== 8+7( !L)   1 1 $)#3#9r &;%:	
 .2(^^^ "'!52 $kk "' "' "' (6~ DNN^`dCeCe)m.>)?)?)?km '*,&7&7&7 $'u{'8b#9#9#9 -:M  ,7;!" $)#3#3#  & !   D ##9:: R11*[1QQQ4 4 4 4 4 4 "& 5"6>> /%*NN Nm335>/R006688CCOTT 45>/R006688CCLQQ 4 &+NN4466 / 322222!'%4"@"@$GG /).! I$FF"=  G    HH  %<<ZHHH#y{{^; $ ,$))"---'+$* 0++B///' jMMU%5"h"hUa"h"h"h"hiii( TFN!Y7E!B!B!BTYJM  #SJ  #S  #Skrs{  ~E  lF  lF  ZQYaYgYg  LQ  #S  #S  T  T  T $)  ">%666!0022E 228<< -U#+/3,)001CDDDD
 25WXxQS5T5T5ZXZ1[1[1a1a1c1c1i1i1k1k.15LLL3:8Wd3S3S 0GQRbdhGiGi %a$4$8$8$C$C$CBR *a-=)>)>)>)`K])`)`)` !1
 !($d$68H$)$=$=$?$?!" !" !"
 48 0 - 4 45pHZ5p5p^n5p5p q q q q -4HmT,R,R	JTU^`cJdJd5lY__5F5F5Fjl 2#5 !U$*LL)R(+,>(?(?%& %& %& %& 4;8Xt3T3TL7>xI]_c7d7d$4$*NN)[(46F(/'4(H(H(^EN(^(^en(^(^%& %& %& 8<$4$1$8$89S$T$T$T^';;;..00C00:: d+/(#+)001CDDDD)001bccc^'999 //11D11(;; d+/(#+)001CDDDD)001bccc //11D11(;; 	N+/(#+)001CDDDD!(9!=!= N)001VWWWW%-5)001KLLLL)001LMMM# D' 0(--.KLLL+/(. 4//333  1$K
 ,s53H/I/III**+ijjj3355 !&'/0,5:2  !*I$-M :GHg$>$> :8> :$'$7$7	"8>:>> d8>CZ d,4N,C,G,GYb,c,cM! :gh	&B&B :xGW :$'(8$9$9	 %	11h178U\C]C]1bjbp1(A(A(A %	11h1%r%r$x..BVBVBXBX%r%r%r
 0 e#M*cWa*c*cddd (,$ %GHg$>$> %8> %$+HNFD$I$I	$,HND1Q1Q,(0(:(:6(B(BI$0%36y>> 0 0$-z#: % % % $%
 (3..(lXd(l(l(l(l)S00(^,(^(^(^(^)S00(R)Z77(jBR(j(jVb(j(j(j(j)Z77(\IY(\(\(\)5(h@P(h(hT`(h(h(h(h%**(f,(f(f(f(f%**(j,(j(j(j(j(L(L(L(L(LMMU%5  #V  #V]h  #V  #Vkv  #V  #V{  |E  |E  FS  |T  |T  #V  #V  ^bM  c  c  cMMU%5"X"X"X"X`dMeee-2-G-G	-R-R*MMU%5"i"iQg"i"iquMvvvMMU%5"Q"Q-"Q"QY]M^^^"k11**+}++}+}+}~~~ 7799 %*+K3409>6$**+x{+x+x+xyyy)9&l&lVa&l&l&lmmm..x9MNNN(0).)7%i;%i%iZg%i%i&*     !1X] ^ ^ ^IMMU%5"l"ly"l"l"lYf"l"l"ltxMyyyO  %X;  %X  %XQ\  %X  %Xaeajajkxayay  %X  %X  IV  %X  %X  Y  Y  Y !%	i 7I-.*)++	11 5 
!MMU-=*r*r*rz~M!228=QRRR!11333 3PYf  3P  3Pr}  3P  3P  AL  3P  3P  3P,4-;-2/3$ $  
3 /!3.1C71<<!11!M+ !M !M !M !M#&y49;;'>#?#?!M !M !M  # )++	11*  >%666$Xx>>F)0;OQU)V)V&(,%!"4d;; X,>,B,B8,L,L)),34FRV,W,W)--2CGf2f2f(0(.^';;; //11D$($:$:8;O$P$PMM^'999"1133F&,&?&?&I&IO$3$AMM"1133F%+%>%>x%H%HN$2$@M(6%<<%)   	1
 $/rrr"& &    )1 H,,MMU%5  #I  #I  #I  QUM  V  V  V "&J',';';'='=$~)===(8(K(K$8Q )L ) ) )9(K(KH(U(U!.JMW%aWZD%I%I%I]aN]g,rD\SW1X1X,Y,Y,Ymr) '+& 29W*M, ,' 'O 21 + ,47t@d@des@t@t<t 6-5 ( + 5 '
 $/ A A A"& &   Z * 556GHHH..x9MNNN.?(0)7).'+%3     ~)ggg,6),8AV83q83*/*H*HIZ\i*j*jK$OOK88808 [ 8 ? ?@Q@Y Z Z Z6:: %','7 %H %H(?%H %H %H!" !" !"
 -3)e0" 0" !) = = =:B 7 % 7 7 A A ACG @ %/4/H/HQiIjIj/k/k/q/q/s/s,!99:KLLL!228=QRRR2B2Jd,4-;-2+/)d$ $  ~)ggg,6),8=R8:Q>> ;q @ ; %','7$v$v$v*. !. !" !" !" !)!MM#(#3  !\  !\  !\&* *    "99:KLLL!228=QRRR26,4-;-2+/)X$ $  8}}q(()9&n&n&nooo/4/W/WX`/a/a,556GHHH..x9MNNN /3(<)7).'+%T     )9&h&h&hptuuu..x9MNNN.2(0)7).&*%Z     8W-- (. &5 !&!&' ' 'O
 %4$AM(7(E%#2#?L)6->(4" "J
 ,AA*MMM
 u79JERR T#6E"5#;=Y[`aa A/U^SQQQ!--1A.._b...rwr}..  A  A  ACH0@NS0K//=@//337HH33..,>..++q0++../2NN..//?3PP//337XX33448ZZ4422o6VV22 "$J&8 `] ` &`/P  &`  &`S`  &`  &`dghw  iJ  eJ  KX  eX  &`  &`  &`  &`
KKb/en>YPY%'8,$j	   #6'!&!& 'y" = =# # #K #-988E+BX<Y<YY880;0BE-0;0BE- ( #U-= #" $)#< ; % 8 8 : : :!-AA % 0-<-I.=.K2A2S3B3U1@1Q#.#9#E 499O3P3P3PKO,7,>,7,>1616#.#5#C#C .E-DIM&+k/0! B    $  )    #LL V % 0,       	 , t  'sZ=X  's  's  'sis  uH  jI  's  's  's  U_  `n  Uo  's  's  's  t  t  t ->F-@G'8F ' 53C =CaZZ6F?S#8#8Q$/ I I%<I I*0<I I 'HI I4;HI I I   #( >V++OOOOOO--////$   %%&M>&M&M&MNNN#   # ,$))"---'+$* 0++B///"ikkN:!1SSS[_```&&x1EFFF"!sWb!s!s!s!s g g g# ,$))*HIII'+$* 0++B/// i);<< W!PnpqArAruvAvAv"9~~3355H&/8&;&Rw(?RO $x/ K%1I/6I ( )Fh(O(O%!,55 58FF 504-!*d33 59*EE 504-!'%1CT"J"JDQQ 589OPP 504- ) !,? !::a?::, 	!MM#(#3 } } }&* *    
 "MM#(#3  !F  !F  !F&* *    !& f!592 /K8.T.T+%lD99 G8FFF
 &j$77 F9*EEE-2*%ge5G&N&NPTUU f1MeNd1e1e.+0(%geWd&C&CTJJ V/H/U/U,,1)%&:C@@ 90@AU0V0V-04HHH7H 4>O ;48 1%ge5NPT&U&UWZ[[ 93CEDa3b3b03u7TTT@T =48 1-2*  *'%9I4*P*PRVWW&E0445FGGG!% )
 &&6== a1NO_1`1`. 16-#*5)T#B#B#Hb# ")9()C)CJ)X550:#-ge=Mt.T.TVZ#[#[ !QFPE$8$C $+5(D#A#A#MRYZ_ZfhqRrRr#M;EEL$88< 5 %','7 %W %W %W +/	 !. !" !" !" ::a?::/ 515/5  15  2	5
  5 ' * 	!MM#(#3  !Z  !Z  !Z&* *    
 "MM#(#3  !J  !J  !J&* *    ! 	 #GIvt$D$D %3$+Iy$$G$G%3$'	NN!4 !4II !   D%iEE#,(H '__..
.1 2 2 2 2-E2 2 2 / /+ )D0SSC<L<L5R5R5R5Rs5R5R5R5R
E#6==3 #
 /4E+$?$I$IM!,55 B3LAAAMM + H H HMZcII`ce #	 "    HHHH%iEE % @ @ K K &e-A4HHMXd7;0@&III^d/$UJ;;Ar!%"55;"/#+6B!I\!2!2!2  
 j%+Z-C(**D79S	   8=7Z7Z +$3&0&7"/	 8[ 8 84#_ ' HHHH %)GGG8 H 480@@NN $/ 6 6 6"& &   
 !V   %)YYY*>>>1 ?9 ? 591"5*CUKK !8<5!!399;;;;( ! ! ! D!77999$/ a a a"& &   
 ! N&777*GGG#s**6 + 26.BBBNN !05+0M0MSZ)9&v&v&v&v&vwww N&888&00#s**5 + 15-AAAMM !!1oooppp  POOOOO"799D!#J '	64 @ @ hGIWacgDhDh ,),UDSD)9J$   U-^^^___! N!1LL
LLMMMU-  C  C  C  D  D  DU-BBBCCCU-eeefffU-pppqqqU-ccSWcccdddU-zzz{{{Ni//#s**8 + 480DDFF !)9&|&|&|}}} N&:::#s**';<< +: + 6:2GGGGGGFFHH !!1vvvwww 2CBQ/RUBVBV"q">">\qKU-\\\]]]U-LL{LLMMMQT  \Y\]`YaYadfYfYfU-MMCRCMMMMoto  m\  m\  m\  ]  ]  ]U-BBBCCCOOOOOO"799DU-  C  CQU  C  C  C  D  D  DU-  C  CSW  C  C  C  D  D  DU-yyyzzzU-ssstttU-nnnoooU-rrrsss %)JJJ8 K 480& > >%b$// >FF#6===MM + E E E" "   
 O=(#h--  
 HHHH %)QQQ= R 9=5&SSSSSS'?'?'L'L99$ & & &S!,j   %&						& ! !$/ [ [(1[ [ ["& &   
  J!,i  
 ! OP(   q #y{{^;%%O;OOOOO   ")__5
	NN0022	!&!;!;I!F!FQ--//"   $E:yAA	z9== ;;?J#R#;[#;#;#;#;PR !1  Q  QT_  Q  Qbm  Q  Qr|  Q  O  Q  Q  Y]  ^  ^  ^!1aaYaaY_aaimnnn!1LLULLTXYYY!1RR.RRZ^___ i;#4#4 '	64 @ @I<E$OC	NN4C4$8$84M$ i)9&[&[M&[&[cghhh!1  Y  Y|  Y  Y  Yehiuevev  Y  Y  AN  Y  Y  Y  Y  Z  Z  Z ,,..*i77MM +  K  KQW  K  K  K" "    . $/  G  G  G"& &    $/  K  K  K"& &    MM +}}u{}}" "    - 
MMU%5"v"v"v  CM  D  D  D**85IJJJ))+++ +UXb  +U  +Ufk  gA  gA  BE  FO  BP  BP  gQ  gQ  +U  +U  +U$,%3%*'+        &iEE $(HHH#)L!&!9J(7G--"//"'++7%*^$+E9b$A$A%*^ 0    #:/@AA J9=J6
 EJJA$/ G G&FG G/;FG G G #'	 &    )A-(+/GGG'*8}}9>9P9P$n*7$5 :Q : :6"6 04,x==<777\;Q;Q!..!Bl V !B !B(/ A!B !B !B   !JqMMM?C<!EEEE #-"3"-"*8 # # %u'<s5CX?Y?Y'Y'Y
 (I.!&!(
D!A!A( ( ($
 , %**+fggg 77z?P7QQ %*+K3409>6$HHHH. $(!&00")^-FFF/ G 05,        %,Iz4$H$H	  )3GIy$???.2 " 4N3M$--2-D4 4 40 4 22(1.;    
 $L!9   %   / ! '2  %)II %  3&&"5>377 '75>IIMM +www" "    MM +www" "    MM +sss" "    MM +xxx" "    MM +jjj" "   
 ( .(A-(+.FFF)9  'Z  'ZYq  'Z  'Z  'Z  bf  g  g  g)9  'N  'N  'N  VZ  [  [  [)9&|&|Xp&|&|&|}}}..x9MNNN(0).)7 &B]u  &B  &B  &B'+&*59          &&  (_j~  (_  (_  BZ  (_  (_  (_  `  `  `#&x==L5:5L5L . 1 6M 6 62H2 ,0(8}}|33**+y+y+yTWX`TaTa+y+y+yzzz
1;?8)9&m&m&muyzzz)9  'N  'N  'N  VZ  [  [  [)9&j&j&jkkk..x9MNNN(0).)7%`'+&*59          %)HH ( + U!&!9J(7G %MY$W$WM$0 $'q-"*<#=#==E:$/ m m8@Em m1>lm m`glm m m #'	 &    -1,/2JJJ!MMU-=  +B  +B]u  +B  +B  +B  JNM  O  O  O!MMU-=  +R  +R  +R  Z^M  _  _  _#MU-=  +E  +E`x  +E  +E  +E  F  F  F!228=QRRR,4-2-; *D_w  *D  *D  *D+/*.9=$ $       <@8 $B)#L#LL'.uj"'E'E'K&R&R&T&TO#*5*b#A#A#GR"O"OPS"T"T"Z"Z"\"\K'+DD &11 3   ( , J(D0J<	I 0
 $ ?w(>(>".)9  'A  'A\c  'A  'A  'At{  'A  'A  'A  'A  IM  N  N  N  N4 	?")$/ ] ]9@\] ] ]"& &     #6g">"> V7W#4#4"//"'++2%*^$+E9b$A$A%*^ 0    #:/@AA 	9=J6 EI , H1HE EJA )9  'Q  'Qnu  'Q  'Q  'Q  F  'Q  'Q  'Q  'Q  Y]  ^  ^  ^  ^)9  'I  'I  'I  QU  V  V  V(A-(+.FFF)9&}&}Yq&}&}&}  FJ  K  K  K)9  'N  'N  'N  VZ  [  [  [)9  'A  'A\t  'A  'A  'A  B  B  B..x9MNNN(0).)7%[s%%%'+&*59          &&  (gm  (g  (g  (g  rF  (g  (g  Ia  (g  (g  (g  h  h  h#&x==L5:5L5L . 1 6M 6 62H2 ,0(8}}|33w37WCTCTx==<77!../}\/}/}X[\dXeXe/}/}/}~~~
1;?8 )9&s&s&s{  A  A  A)9  '}  '}  '}  EI  J  J  J)9  'G  'GTa  'G  'G  'G  'G  H  H  H..x9MNNN(0).)7%t%t%t%t%t'+&*59         , y:y*ABB @&!$68L#M  @ 'y#,??? * . &00 
 * ::
&-*5*2*5*;*<*<*=6 #2 21  " # < &&'p;'p'p'pqqq3355 !&'/0,5:2 !-55&/KS\ 6    &&C C C 55i@@C C   MMU%5"u"u\g"u"u"u  ~BM  C  C  CMMU%5"e"e"e"e]c"e"emqMrrrMMU%5"P"P"P"PX\M]]]!) Z->.BX-X-X$(EEE+Y\J\J\(N:: %1A  /O  /O  /O  W[  !\  !\  !\ %1A  /C  /C  /C  KO  !P  !P  !P %1A  /C  /C  /C  KO  !P  !P  !P %1A.v.v.v  C  !D  !D  !D  !D %1A.{.{.{  DH  !I  !I  !I %1A  /[  /[  /[  cg  !h  !h  !h  !h!MMU-=*x*x*x  AEM  F  F  F!MMU-=*l*l*ltxMyyy!MMU-=*s*sjp*s*s*s{M  A  A  A4SZZQQ P %1A  /C  /C  /C  KO  !P  !P  !P)9&q&q&qy}~~~MU%5"^"^S\"^"^___ #c))}u/D/DLHYHY\^H^H^$/ P P P"& &     ..x9MNNN*.$,%3%*"&!$Y        +--
 6 !%:^:^!{ ;_ ; ; ! 6:2&' &&'mk'm'm'mnnn3355 !&'/0,5:2 %*%?%?	%J%JN& o**+o[+o+o_m+o+opppp**+m;+m+m]k+m+mnnnMMU%5"\"\N"\"\dhMiii $I}dCCC          9         $ ' $/ ; ; ; #' &    $/ ) ) ) #' &    Mj(+~!63|+<+<>R>R  
 "-55&/Fi 6    **85IJJJ&f{&f&fVd&f&fO& 'F +:$,%3%*"&!/         $" %$+GIz4,P,PR[]a$b$bM$ %)F)F %"/"3"3M"B"B"fmFWFWXeFfFf" %%/25>>3/G/G$-z#: % % % $%,8{LL>N{gjvz>{>{>{	" u&&  (Ey  (E  (E  (Ealopap  (E  (Es~  (E  (E  (E  F  F  F  F&&'s)'s's'sT_'s'sbm's's'stttJ--//   !IKK)3	)*&ikkI--1 
)9&n&n&nvz{{{..x9MNNN--/// /Kmx  /K  /K  |G  /K  /K  /K(0)7).+/          JsOOO +a/*-3q88--IK I I+ I I"9ty{{#:;;I I I  # ikkI--g$g] K''p<  	 =+ 	aN"))+++ 1K/4,+ 	 /4.>H%**DK $;a$?@F14VU1C1CE.
  CU%aaabbb""8-ABBBi	--//J "~!5559>9R!"5666xUUCTUUJ *&4M
 !(4ZHYHacf=g=g4'/c4(( 9030C0C0pswwyZ\G]G]0paeakloapap%--T** 9E # < <%dC00 <!LL....'d33 <8H8HF8R8R!LL&")=)=>>>>'d33 <$!LLT&\):):;;;04		%0@0@%--03C%-JJJJJJ(/0A<QU(V(V(\Z\%"3";"Ar&  --  %/52 #^1r	
  ++ #^^ #^^ #^^ $2> ". #0- #&l"3"3"3 $+8Wd#C#C#C &X  CCHMMM  '8&7!" -0,@,@,@#$ /22G.H.H.H%  (     !( a1A a( aMMU%5"b"bGXG`"b"bccccMMU%5  #`  #`GXG`aebeaeGf  #`qt  vG  vO  rP  rP  SV  rV  rVhmhm  \^  #`  #`  a  a  a ") e.J /7==?? fCR %'' 
 ALS[..t44Q7<<QS
 	'%1BA"F"F"J"J44[*MMMM$     445JKYdeifieiYjlpqqqq$   
 )):)B)HbII 44944!1  A  A  A71<<MMU%5"{"{uOs"{"{"{||| MMU%5"x"x"x  AEM  F  F  F;<E8+0+S+ST\+]+](112CDDD**85IJJJ +/$8%3%*#'!R   45E0~!222}7T7T//14//#<<=NP]^^&*KOOI,F,F,L"+S+S+U+U&V&V#Zdepetet  vA  fB  fB  DG  [H  [H  )S[__["-M-M-S-S-U-U(V(V(V  NS%.2;??CZ3[3[.\.\+26{G\7]7]2^2^/ (K,K 3K 7	K 08Ax||TH Q[[ceiPjPj'tx||4K'L'L'Lpt$*5//:Q*R*R'V`aikoVpVp/zx||<Q/R/R/Rvz,2=//BW2X2X/"8T22 T$LL00K?T$LL99\IT &\\)44:PY@Z@Z@`^`aT &\\+66<"+//R]B^B^Bdbde	T
 -0CCT 58SS & - K 444==kJJJ2Q66 + Q)9  'P  'Pkp  lK  'P  'P  'P  Q  Q  Q.6E+++H55523/&&x1EFFF&* (!/!&#_    ;<< 423/ !+ C
' |MMU%5"z"zsK\KgGhGh"z"z"z{{{( t/: t t&rBK4D&r&rRTR]RghlilhlRm&r&r&rssss ,6 8 8B{'u/EEE#(#:#:2;;K#L#L# 8!U%5"y"yVXVaVf"y"ynv"y"y"yzzz/7BK,& & & &/@/K& & &" & $//14// !%		&1G*H*H I II#5a#8LCF|CTCTWYCYCYl3B3&7%&?&?_kOMMU%5  #r  #r_  #r  #r  RW  Rm  #r  #r  #r  s  s  s2a77)9  'E  'E  'E  MQ  R  R  R673..x9MNNN.2(0)7).'+%\?%\%\     %*$B$BCTVc$d$dMOOM222/: 
 
;+53III&or{/?&o&odm&o&oGG 'CG $*$&K$4,.E'.	) )     ./+ %'!+6 M MB;0D!$t55 !04
40@0@- '
40E0E'03D		-!{4 !tzz|| !04- M
4((((/ M M M)00"+2BCFF1KLLLLLLLLM % D! "% % % % %"3">% % % " "J
 " $/ Z Z.;Z Z Z"& &   
 783556GHHH..x9MNNN.2(0)7).'+%T     //14//+<Q+?(IyMMU%5  #B  #Bhq  #B  #Bv  #B  #B  C  C  C2Q66)9&v&vSXSn&v&v&vwww  )9&v&v&vwww673 .3-K-KL]_l-m-m* (:;;; )P(O=N(O(O(O"3">  B!{/=@@&**d*d*d*d9J*d*d*d&d&d%Ec %E %E %E !, /l$OO(.(*(802+6	- -     ! /0+ 05/M/M%00 0!, 05/L/L%00 0!, !& > >?PR_ ` `  18>B AE$H$H$V$V A5AE2 +4 5 5 5 + +' ), , , , ,"3">, , , ) )% BSE>( AU-H-H-J-J A4811??AA A % 9 9, G G M M O O  A!MM*?*?*?@@@  %("8B<66( !(()<==(
 LLNNN#'L ("8B<66( !(()<==(   567E334E0 27....55mDDD . 33D9999$    ))*;XGXZhiii6B$BH(8%%*%N%Nx%X%XN&&]8J]]hm]]   OO[^$T$TUUU
 /0+ -1)
 VU8I8TUUU	 000*11333  $61A55 $/#ALL $A (;t$ $ $L , 
01L1L\1Z1Z 
0%%&CDDD5:5L5L .&+&>&Q 1 6M 6 62H2 ,0( +3'''111  "3!:!@b -2) ;;NKK ~  'I2NNTRT & ;;<MNN ,E)%*%>%>?P%Q%Q%W%W%Y%Y
:
OO  
 **0   *48<5  'u.H$OOH GE3Y[`$a$a ,I)$uvvv**+z{{{9=6EJB784
 */)B)B8)L)L)R)R)T)T8<5 '* * *!)"##* * * ' 'O ,0	=*0bM , ,( ($! '/I5 Q Q$! !5$!
 :>6 :>6EJB5   **2   &+%C%CDUWd%e%e
09
9-BF
#>? 
333 $*!L :>) )    ! '+ 1;EE 0"#46I4PP0"#46I4PP0 0	' 'O ' !5+JQ+N+N771<77<!;  
 **E % ?E E E   ',&D&D-|' ' <@$78 4442:///999  (-'@'@&( (egg$L ( A!;q@ ' $ !_ !@R !X]XtwxXxXx449444!8%+  
 **B % <B B B   ! $ %(= %J!8%+!N	   **@   !7799 %;<E8!..!6U[ !6 !6$)N!6 !6 !6   #KK!5 %U^  
 %
 )C%%*%=%=>O%P%PNCCHMMM$)$B$BCTVc$d$dM/8M), AEM"<=OOM222% LOP^L_L_beLeLeN4C4,@5,H,Hky),->  
 **K   
 3 "8%+!N   **M<A<Q  E88DF   &/N 01,23/ N&777. 8/!33@@%1*8!) A   4 ,q0+"'"@"@ART`"a"aKOOK00099+FFF !'Q$ $L OOL111.6E+++H555*+'+ 0%'WW-E%F%F%WN/1,./+!&!:!:>!J!J!P!P!R!R!::;Lm\\	 	#"8B<66	# !(()<==		#
 $B<++,GHH	# $B<++,FGG	# LLNNN 	#"8B<66	# !(()<==		#
 $B<++,GHH	# $B<++,FGG	# 	***$S=$S$S$S!' {%%&y>&y&y&yzzz 1	 1	 1	^N^^VYZ[V\V\^^I((Y(())))Z( ( ( (Y'''''( LL;^VZL[[[
 S]]Q.B77  sm!#t,, E776??f,,776??k11cggl6K6K1$ $!)#'((!3$ $ $L
 ",/ 	5 	5!GB)=)=Gxd8<77(.(+(P(PQS(T(T024+OI+O+O	' 'G %OOG444 !5!999$R3B3$R$R$R!!_T]!_!_  P PQQQ :9999W1	Eb E000U5K5UXY5Y5Y^c^v5Yjc %...!+q00
 _n^^uG[^^^,. , ,5CW , , ,	
 	
 	
  	, , ,%J^ , , ,   55hOO z~~&:;; 	**"#/) .) )161E) ) )  . +    ) .%2F   
    - !	       d*T~@T/TI 
8%D\%R%RT]^^^ 
!!"3444 
33H===	8%9::: 2:CXb\%%f---tNO8$$ 	 	Bvvf~~,,1E1E,,' OJtAw55 O&*2hll:r&B&B&F&Fv&N&NO       (6<N###1I272HO5)..aL6;6LS%(22RSK	D 
 	5;8Lk.)"F	J L)*	
 	
 )	
 	
 	
 	
 	
 	I+
++++"  Ok O	Oe%BDIIORG O5@@BB OCCGLL O%3%:%:%<%<v%E%NN 	O 	O 	OLLCXNNNNNNNN	O  Hk H	HFFFFFF!-&, +1rk 
D99?R" " " !3  lC00 \ %1NE 	H 	H 	HNNA3GGGGGGGG	H  Ak A	AFFFFFFL +2#1%)(^^k 
D99?R      	A 	A 	ANN:C@@@@@@@@	A N!!  776??f$$E776??k))cggk.B.B) -NE.. 	H 	^	
 	Y 	- 	5 	{ 	ge-FNN 	 	EN 	EN 	2 	4 	U<  	e>!" 	E:#$ 4"<2%e&>@TVWXX]\]#>001  F4 *6#AMMOO{ 0022O 2"1$)E!  ?u/ ?&+&>"# 
 "E "#a''(E,GGG%"888 $#$  
((3% )     k /D H] 	**"&x..33 +    
  	 	 	D	>BBBBBB'#+UJ55;	
 	
 	
 	
 	
  > > >7========> Ms  4A( (
A54A5)G2 2
G?>G?'8S   
S-,S-0U 
U5U00U5 %V& &
W0WWDa 
b'bb89e2 2
e?>e?5g 
gg,C-o 
p
$pp
0t
tt"vv
vEAAFFAAG&G%AG&R'A=AU	 T%"AU	 U	AU"U	AU"U!AU"U&A4Bn WDA[) [(Bn [)
A[6[3Bn [5A[6[6XBn s;FBn zAz zBn zAz/z,Bn z.Az/z/EBn @ABn A+C>Bn E*A=Bn G)J9Bn R#CBn U&A0Bn W:Bn XABn Y(A:Bn [#?Bn \#JBn f=B&Bi$ i#Bn i$
Bji.#BjjBn jBjjB3Bn mBm! m Bn m!
Bm.m+Bn m-Bm.m.Bn nBD~p,
D~p6FD~wK+D~B>D~C?CDD D~D
CDDD~DCDDC)D~G=DD~LAD~M(A#D~OCO(O'D~O(
CO5O2D~O4CO5O58D~P3A+D~R$AD~T D~T>CUUD~U
CU"UD~U!CU"U"DD~ZA#D~[.G3D~c'D~dCd!d D~d!
Ced+Cee	D~eCeeAD~fM"D~t D~tED~yB+D~|)D~|7A-C~%~$D~~%
C~2~/D~~1C~2~2D~~?E<D~D;D~EB!D~G(A>D~I&D~I,DD~N	D~ND~NID~W1D~W7CD~Z>B	D~]D~]DD~a'K>D~m%D~m+'D~n4D~oE$D~t6D~t<A(D~v% DwwD~wDwwD~wDwwD'D~|D~|	A>D~~D~@8GFj HCEK' K&Fj K'
EK4K1Fj K3EK4K4D#Fj PEP2 P1Fj P2
EP?P<Fj P>EP?P?Fj Q%EQ, Q+Fj Q,
EQ9Q6Fj Q8EQ9Q9A;Fj S6A0Fj U'LFj a0&Fj bH<Fj kBFj m3CFj q
Eq!q Fj q!Er/q22Er*r$Fj r*Er/r/BFj t>A5Fj v5CFj zHFj B5FC CFj C
FCCFj CFCCBFj E"C1Fj ICFj LB!Fj ODFj SC2Fj WB$Fj Y*B7Fj \#DFj aB>Fj dFFj jFrj!Frj9FkkFrk.Fl k=Frk?Fl l F
FrrFru8AFw w*FxxFx@A$GA, A,GB"A7GBBGB"B*AGD D
GD6DGD1D1GD6D>AGF F
GF1FGF,F,GF1N-(GO O
GO#O"GO#O'5GP P
GQP'GQQGQr  )NNNNN)r;   r<   r=   r<   r>   r?   r@   r<   rA   rB   rC   rD   rE   rF   )S__doc__
__future__r   r  r  ro  r  r
  rO  r  r  r}  typingr   r   r   r   r;  r	   rt  r   agent.codex_responses_adapterr   agent.displayr   agent.error_classifierr   r   agent.iteration_budgetr   agent.memory_managerr   agent.message_sanitizationr   r   r   r   r   r   r   r   r   agent.model_metadatar   r   r   r   r   r    r  r!   r"   r#   r$   agent.process_bootstrapr%   agent.prompt_cachingr&   agent.retry_utilsr'   agent.trajectoryr(   agent.usage_pricingr)   r*   r9  r,   r  rw  r.   r?  r0   rx  r2   utilsr3   r4   r  r  r   r9   r  __all__r  r:   r8   <module>r     s;     # " " " " "   				  				 



       , , , , , , , , , , , , 3 3 3 3 3 3 3 3 3 3 3 3 I I I I I I ' ' ' ' ' ' E E E E E E E E 2 2 2 2 2 2 ; ; ; ; ; ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                           8 7 7 7 7 7 > > > > > > . . . . . . 6 6 6 6 6 6 D D D D D D D D ; ; ; ; ; ; . . . . . . ; ; ; ; ; ; ; ; ; ; ; ; 8 8 8 8 8 8 8 8		8	$	$   15*.*.Y= Y= Y= Y= Y=zz 
r:   