
    )jo                      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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"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l1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZD  ejE        eF          ZGdZHd<dZId ZJd=d"ZKd>d$ZLd?d'ZMd@d)ZNdAd*ZOdBd+ZPd, ZQdCdDd0ZR	 	 	 	 	 dEdFd:ZSd;gZTdS )Gu  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)_summarize_user_message_for_log)KawaiiSpinner)FailoverReasonclassify_api_error)IterationBudget)build_turn_context)TurnRetryState)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)MINIMUM_CONTEXT_LENGTHestimate_messages_tokens_roughestimate_request_tokens_rough&get_context_length_from_provider_error(parse_available_output_tokens_from_errorsave_context_length)_install_safe_stdio)apply_anthropic_cache_control)jittered_backoff)has_incomplete_scratchpad)estimate_usage_costnormalize_usage)PARTIAL_STREAM_STUB_ID)set_session_context)set_current_write_origin)base_url_host_matchesenv_var_enabledz3Operation interrupted: waiting for model response (agentr   request_tokensintreturnOptional[str]c                   t          | dd          sdS t          | dd          }t          |t                    r|dk    rdS |t          k    rdS t          | dd          pd}t          | dd          pd	}t          | d
d          pd}t	          t          | dd          pg           }t
                              d||||t          ||t          | dd          pd	  	         d| d|ddt          ddS )zIReturn a user-facing error when Ollama is loaded with too little context.toolsN_ollama_num_ctxr   model the selected modelbase_urlzunknown base URLproviderunknownzOllama runtime context too small for Hermes tool use: model=%s provider=%s base_url=%s runtime_context=%d minimum_context=%d estimated_request_tokens=%d tool_count=%d session=%s
session_idnonezOllama loaded `z` with only ,z6 tokens of runtime context, but Hermes needs at least a   tokens for reliable tool use.

Increase the Ollama context for this model and restart/reload the model before trying again. A known-good starting point is 65,536 tokens. In Hermes config, set `model.ollama_num_ctx: 65536` (and `model.context_length: 65536` if you also override the displayed model context). If you manage the model through an Ollama Modelfile, set `PARAMETER num_ctx 65536` there instead.)getattr
isinstancer,   r   lenloggerwarning)r*   r+   runtime_ctxr2   r5   r6   
tool_counts          </home/ubuntu/.hermes/hermes-agent/agent/conversation_loop.py_ollama_context_limit_errorrC   J   sA   5'4(( t%!2D99Kk3'' ;!+;+;t,,,tE7B''?+?Euj"--C1CHuj"--:HWUGT228b99J
NN	 	|T**4f   	7% 	7 	7[O 	7 	7.DP	7 	7 	7
    c                     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_agentrF   s    rB   _rarH   v   s    
 rD   
capabilitystrc                p    	 ddl m}m}  |d          } |||           }|pdS # t          $ r Y dS w xY w)Nr   )&format_nous_portal_entitlement_messageget_nous_portal_account_infoTforce_fresh)rI   r3   )hermes_cli.nous_accountrL   rM   	Exception)rI   rL   rM   account_infomessages        rB   _nous_entitlement_messagerT      s    	
 	
 	
 	
 	
 	
 	
 	

 43EEE88!
 
 
 }"   rrs   $' 
55boolc                    t          |          }|sdS |                                D ]#}|                     | j         d| d           $dS )NF      💡 Tforce)rT   
splitlines_vprint
log_prefix)r*   rI   rS   lines       rB    _print_nous_entitlement_guidancer^      sh    '
33G u""$$ G G)99499FFFF4rD   r6   r5   c                    | pd                                                                 } | dk    rdS t          |pd          }t          |d          pt          |d          S )Nr3   nousTzinference-api.nousresearch.comzinference.nousresearch.com)striplowerrJ   r(   )r6   r5   bases      rB   _is_nous_inference_routerd      sk    B%%''--//H6tx~2Dd$DEE 	E 'CDDrD   r2   c                p   t          ||          rt          |           S |pd                                pd}|pd                                pd}| d| ddg}t          t	          |pd          d          r|                    d           |                    d	           d
                    |          S )Nr3   zthe selected providerr4   zI reported that billing, credits, or account entitlement is exhausted for .z=Add credits or update billing with that provider, then retry.openrouter.aiz:OpenRouter credits: https://openrouter.ai/settings/creditszOYou can switch providers temporarily with /model <model> --provider <provider>.
)rd   rT   ra   r(   rJ   appendjoin)rI   r6   r5   r2   provider_labelmodel_labelliness          rB   _billing_or_entitlement_messagern      s      (33 5(444n"++--H1HN;B%%''?+?K  ; ;,7; ; ; 	HE SR00/BB SQRRR	LLbccc99UrD   c                   t          ||||          }|sdS |                                D ]#}|                     | j         d| d           $dS )NrI   r6   r5   r2   FrW   TrX   )rn   rZ   r[   r\   )r*   rI   r6   r5   r2   rS   r]   s          rB   &_print_billing_or_entitlement_guidancerq      s     .	  G  u""$$ G G)99499FFFF4rD   c                    	 ddl m}  |d          }|j        durdS |                     d          S # t          $ r Y dS w xY w)zFRefresh Nous runtime credentials after a fresh paid-entitlement check.r   )rM   TrN   FrX   )rP   rM   paid_service_access$_try_refresh_nous_client_credentialsrQ   )r*   rM   rR   s      rB   ._try_refresh_nous_paid_entitlement_credentialsru      s    
HHHHHH33EEE+477599 : 
 
 	
    uus   5 5 
AAc           
        d}d}|r| j         r	 | j                             | j                  }|'|                    d          }|d}n|dk    rd}n|}d}n8# t          $ r+}t
                              d| j        |           Y d}~nd}~ww xY w|r	|| _        dS |r%|d	v r!t
                              d
| j        |           |                     |          | _        	 ddl	m
}  |d| j        | j        t          | dd          pd           n2# t          $ r%}t
                              d|           Y d}~nd}~ww xY w	 ddlm}	  |	|            n,# t          $ r t
                              dd           Y nw xY w| j         ra	 | j                             | j        | j                   dS # t          $ r,}t
                              d| j        |           Y d}~dS d}~ww xY wdS )u_  Restore the cached system prompt from the session DB or build it fresh.

    Mutates ``agent._cached_system_prompt`` and persists a freshly-built
    prompt back to the session DB on first build.  Extracted from
    ``run_conversation`` so the prefix-cache restore path can be tested in
    isolation.

    Three-way state distinction for the stored row, surfaced via logs so
    silent prefix-cache misses are visible in ``agent.log``:

      * ``missing`` — no session row yet (legitimate first turn).
      * ``null``   — row exists, ``system_prompt`` column is NULL.
        Legacy session predating system-prompt persistence, or a migration
        leftover.  Warns when ``conversation_history`` is non-empty.
      * ``empty``  — row exists, ``system_prompt`` column is the empty
        string.  Indicates a previous-turn write that ran but stored
        nothing (silent persistence bug).  Always warns.
      * ``present`` — row exists with a usable prompt → reused verbatim.

    Read or write failures against the session DB log at WARNING (not
    DEBUG) so persistent issues (disk full, schema drift, lock contention)
    surface without needing verbose mode.  This used to be a debug-level
    log that silently broke prefix-cache reuse on the gateway path
    (which constructs a fresh ``AIAgent`` per turn and depends on this
    DB roundtrip).
    Nmissingsystem_promptnullr3   emptypresentu   Session DB get_session failed for system-prompt restore (session=%s): %s. Falling back to fresh build — prefix cache will miss for this turn.)ry   rz   zStored system prompt for session %s is %s; rebuilding from scratch this turn. Prefix cache will miss until the rebuild persists. Investigate the previous turn's update_system_prompt write path.r   )invoke_hookon_session_startplatform)r8   r2   r~   z on_session_start hook failed: %s)seed_credits_at_session_startz*cold-start credits seed failed (fail-open)T)exc_infozSession DB update_system_prompt failed for session %s: %s. Subsequent turns will rebuild the system prompt and miss the prefix cache.)_session_dbget_sessionr8   getrQ   r>   r?   _cached_system_prompt_build_system_prompthermes_cli.pluginsr|   r2   r;   agent.credits_trackerr   debugupdate_system_prompt)
r*   system_messageconversation_historystored_promptstored_statesession_row
raw_promptexc_invoke_hookr   s
             rB   _restore_or_build_system_promptr      s   6 ML  1 	+778HIIK&(___==
%#)LL2%%#*LL$.M#,L 	 	 	NN1  #	       	   '4# 
0A A A
 	/ l	
 	
 	
 #("<"<^"L"LE
	@BBBBBB'+UJ55;		
 	
 	
 	
 	
  @ @ @93????????@RGGGGGG%%e,,,, R R RADQQQQQR  		2253CUE`aaaaa 	 	 	NN)  #	        		 	sZ   AA 
B"!BB0D 
D=D88D=E &E<;E<%F. .
G$8!GG$is_partial_stubdropped_toolsOptional[List[str]]c                `    | r%|r#d                     |d d                   }d| dS | r	 dS 	 dS )N,    z"[System: Your previous tool call (aF  ) was too large and the stream timed out before it could be delivered. Do NOT retry the same tool call with the same large content. Instead, break the content into multiple smaller tool calls (e.g. use multiple patch calls or write smaller files). Each tool call's arguments must be under ~8K tokens to avoid stream timeouts.]z[System: The previous response was cut off by a network error mid-stream. Continue exactly where you left off. Do not restart or repeat prior text. Finish the answer directly.]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.])rj   )r   r   	tool_lists      rB   _get_continuation_promptr   T  sp     
= 
IImBQB/00	
0
0 
0 
0	
 
 
+	
 	
I	
 	
rD   user_messager   r   List[Dict[str, Any]]task_idstream_callbackOptional[callable]persist_user_messageDict[str, Any]c                N   123456789 t           ||||||t          t          t          t          t
          t          t                    }|j        }|j	        }|j
        }	|j        }|j        }
|j        }|j        }|j        }|j        }|j        }|j        }d}d}d}d}d}d}d}g }d}d} j        dk    r                     |||	||          S | j        k     r j        j        dk    s j        pr j                                          j        r"d}d	} j        s                     d
           on|dz  }| _                             d|             j        rd _        nT j                                         s;d} j        s0                     d j        j!         d j        j"         d           on= j#        "	 g }tI          tK          |	                    D ]\  }}|&                    d          dk    r|&                    d          rtO          |	          |z
  }i 3|	|d         D ]N}|&                    d          dk    r n2|&                    d          } | r|&                    dd          3| <   O3fd|d         D             } n #                    ||           n3# tP          $ r&}!tR          *                    d||!           Y d}!~!nd}!~!ww xY w j+        dk    rd j,        v r xj-        dz  c_-         .                                }"|"rud}#t_          tO          |	          dz
  dd          D ]}$|	|$         }%ta          |%tb                    r|%&                    d          dk    rddl2m3}&  |&|"          }'|%&                    dd          }(ta          |(th                    r	|(|'z   |%d<   nB	 |(rtk          |(          ng })|)6                    d|'d           |)|%d<   n# tP          $ r Y nw xY wd}#tR          *                    d|$            n|#sqto           d d          }*|*<|*5   j8        r j8        d!z   |"z    _8        n|" _8        ddd           n# 1 swxY w Y   n"to           d"d          }(|(r|(d!z   |"z   n|" _8        to           d#d          pts          j:        tv                    }+ <                    |	|+ j=        $          },|,dk    r|+>                    d%|, j=        pd&            ?                    |	          }-|-dk    r|+>                    d'|- j=        pd&           g }.tI          |	          D ]h\  }/}0|0@                                }1|/|k    r|0&                    d          d(k    rg }2|r&t          |          }3|3r|26                    |3           |r|26                    |           |2rI|1&                    dd          }4ta          |4th                    r|4d)z   d)B                    |2          z   |1d<    C                    |0|1           d*|1v r|1D                    d*           d+|1v r|1D                    d+           |1D                    d,d            E                                r F                    |1 jG        -           |.6                    |1           j|
pd}5 jH        r|5d)z    jH        z   I                                }5|5r	d.|5d/g|.z   }. jJ        rj|.r!|.d         &                    d          d.k    rdnd}6tI           jJ                  D ]0\  }/}7|.K                    |6|/z   |7@                                           1 jL        rt          |. jN         jO        0          }. P                    |.          }. Q                    |.          }.|.D ]G}8ta          |8&                    d          th                    r|8d         I                                |8d<   H|.D ]}8|8&                    d          }9|9sg }:|9D ]Ր8ta          8tb                    rd18v r	 t          jS        8d1         d2                   };i 8d1i 8d1         d2t          jT        |;d3d4          ii8nR# tP          $ rE t          8d1         d2         8d1         &                    d5d6                    8d1         d2<   Y nw xY w|:6                    8           |:|8d<   t          |.           t          d7 |.D                       }<t          |.          }=t          |. jZ        pd8          }>t           |>          }?|?rl|?}d}d9}|	6                    d|d/            \                    d:           |dz  }| _        	  j        ]                                 n# tP          $ r Y nw xY wgn>d9 j        s ^                    d! j_         d;| d j         d<            ^                     j_         d=tO          |.           d>|=d?d@|<d?dA            ^                     j_         dB jZ        rtO           jZ                  nd            nt          ja        t          jc                              }@t          ja        t          jd                              }A je        r e                    |@ dC|A d<           nq f                                s] g                                rIt          ja        g dD          }Bt          |@ dC|A d<|B jh        E          99i                                  jj        rts          j*        dF jG         dGtO          |	           dH jZ        rtO           jZ                  nd            ts          j*        dI|	r|	d         d         ndJ            ts          j*        dK|=d?dL           t          jk                    }Cd}D jl        }Et                      }FdM}GdN}Hd}Id}J| dO| }K|K _n        |D|Ek     FrƉ jo        dPk    r	 ddQlpmq}Lmr}M  |L            }N|N|Ndk    rdR |M|N           dS}O s                    dT|O dU            t                    dT|O             u                                rd}Dd}d|F_v         w                                  x                    |	|           dT|O dV|	|dd|OdWS n# t          $ r Y ntP          $ r Y nw xY w	  z                                  {                    |.            |                    |.          }J j}        rt          |J            j        dXk    r)                                                     |JdY          }J	 ddZlm}P  |P|J|||K j=        pd j        pd jG         jo         j         j        |[          }Q|Qj        }J|Qj        }R|Qj        }Sn!# tP          $ r tc          |J          }Rg }SY nw xY w	 dd\lm}Tm}U  |Td]          r8|J&                    d^          }Vta          |Vtj                    s|J&                    d_          }Vta          |Vtj                    s|.}V                     |J          }W |U	 di d`|da|db|Kdc j=        pddd|detk          |	          df j        pddg jG        dh jo        di j        dj j        dk|dlta          |Vtj                    rtk          |V          ng dmtO          |.          dntO           jZ        pg           do|=dp|<dq j        dr|Cdstk          |S          dt|W n# tP          $ r Y nw xY wt          du          r                     |Jdvw            9fdx4d5to           dyd          rd5n jo        dzk    svti           j        pd                                                              d{          s;ti           j        pd                                                              d|          rd5n< f                                s(dd}lm}X ta          to           d~d          |X          rd545 fd}Yddlm}Z  |Z|J|Y|R|||K j=        pd j        pd jG         jo         j         j        |tk          |S                    }It          jk                    |Cz
  }[9r9                    d           d9 je        r e                    d            j        s! ^                     j_         d|[dd            jj        rG|Irto          |Idgd          nd}\ts          j*        d|\ dt+          |Id          r|Ij        nd            d}]g }^ j        dXk    r                                 }_|_                    |I          s|Id}]|^6                    d           n.ti          to          |Idd          pd          I                                                                }`|`dv rto          |Idd          }ata          |atb                    r|a&                    d          n|arti          |a          nd|` d}btR                              d|`|b                                            d}]|^6                    d|` d|b            nFto          |Idd          }cta          |cth                    r|cI                                nd}d|dr*tR          *                    dtO          |d                     nto          |Idd          }eto          |Idd          }ftR                              d|e|fto          |Idgd          d j         d jo                    d}]|^6                    d           nf j        dk    r[                                 }g|g                    |I          s0d}]|I|^6                    d           n|^6                    d           n  j        dk    rY                                 }h|h                    |I          s/d}]|I|^6                    d           n|^6                    d           n                                 }i|i                    |I          ssd}]|I|^6                    d           nYt+          |Id          s|^6                    d           n2|Ij        |^6                    d           n|^6                    d           |]rډ                     |||K||C|JddB                    |^          pdto          to          |Idd          dd          |D|Edd           9r9                    d           d9 je        r e                    d           |Ddz  }D j        tO           j                  k     r t                    d            u                                rd}Dd}d|F_v        	d6d}j|Irpt+          |Id          r_|Ij        rXti          |Ij                  6t+          |Ij        d          r,|Ij        j        r |Ij        j        &                    dd          }jn/|Ir-t+          |Id          r|Ij        rti          |Ij                  6|jdk    r$|Ir"t+          |Idg          r|IjG        r
d|IjG         }j|jdk    rL|IrJd tC          |I                                          D             }k jj        rts          j*        d|k            d}l|Irt+          |Id          r|Ij        ryto          |Ij        dd          }m|m4ta          |Ij        tb                    r|Ij        &                    d          }m|m+	 tG          |m          }ln# tH          tJ          f$ r Y nw xY w|ldk    rd|[dd}nna|ldk    rd|[dd}nnS|ldk    rd}nnJ|ldv rd|l d|[dd}nn;|ldv rd|l d}nn0|ld|l d|[dd}nn#|[dk     rd|[dd}nn|[dk    rd|[ddÝ}nnd|[dd}n s                    d|D d|E ddB                    |^                       s                    d|j                                 6          }o s                    d|o             s                    d|n            |D|Ek    rĉ                                 r t                    d|E d˝            u                                rd}Dd}d|F_v        ԉ w                                  \                    d|E d͝           tR                               j_         d|E dϝ            x                    |	|           |	d|d|E d|n ddќS tQ          |DddӬԦ          }p s                    d|pdd|n dם           tR                              d|D d|E ddB                    |^           d|j            t          jk                    |pz   }qd}rt          jk                    |qk     r܉ j        r[ ^                     j_         dڝdۦ            x                    |	|                                             d|n d|D d|E dޝ|	|dddߜS t          j        d           |rdz  }r|rdz  dk    rA                     d|D d|E dtG          |qt          jk                    z
             d           t          jk                    |qk     ܐ j        dXk    rpto          |Idd          }sto          |Idd          }td}uta          |ttb                    r|t&                    d          }unto          |tdd          }u|sdk    r|udv rd}HndN}Hn j        dk    r/                                 }v|v                    |Ij                  }Hn j        dk    r1                                 }w|w                    |I          }x|xj        }Hnj                                 }y|y                    |I          }z|zj        }H|z}{                     |H|{|	          r! ^                     j_         ddۦ           d}H|Hdk    rto          |Idd          t`          k    r  ^                     j_         ddۦ           n ^                     j_         ddۦ           d}|                                 }} j        dk    r|}                    |I j                  }~n|}                    |I          }~|~}|||rto          ||dd          nd}||rte          to          ||dd                    nd}te          |o!tg          j        d|tf          j                            }| o|o|dur                     |           p|du }|rWd} ^                     j_         ddۦ           d}                     |            x                    |	|           ||	|dd|dS  j        dv r||}{|{|s|dz  }                     |{|H          }|	6                    |           |{j        r|6                    |{j                   |dMk     rto          |Idd          t`          k    }to          |Idd          }|rC|rAdB                    |ddM                   } ^                     j_         d| d| d           nC|r! ^                     j_         d| d           n  ^                     j_         d| d           tu          ||          }d(|d/}|	6                    |           |	 _        d|F_        3n                     dB                    |                    I                                }                     |            x                    |	|           |pd|	|ddddS  j        dv r^||}{|{Y|rVto          |Idd          t`          k    }|dMk     r|dz  }|r s                    d| d           n s                    d| d            j        r j        nd}||dz   z  }                     |J          }|t          ||          }t          d|pd          }t          ||           _        W w                                 |r  ^                     j_         ddۦ           n  ^                     j_         d dۦ                                |            x                    |	|           d|	|dd|rdnddS tO          |	          dk    rh ^                     j_         d                                |	          }                     |            x                    |	|           d||ddddS  w                                  ^                     j_         ddۦ            x                    |	|           d|	|ddddWS t+          |Id          r*|Ij        r"t          |Ij         jo         j                  }|j        }|j        }|j        }||||j        |j        |j        |j        |j        d} j                            |           to           j        dd          r j        j        }to           j        d	d          rFt           jG         j        |                                 j_         d
|d?d jG                    d j        _        d j        _         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}tR          >                    d j         jG         jo        pd||||[|	  	         t           jG        | jo         j        to           dd                    }|j        # xj        t          |j                  z  c_        |j         _        |j         _         j        r j=        r	  j        s                                   j                             j=        |j        |j        |j        |j        |j        |j        t          |j                  nd|j        |j         jo         j        |j        dk    rdnd jG        d           n:# tP          $ r-}tR          *                    d j=        ||           Y d}~nd}~ww xY w jj        r8ts          j*        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|F_         jo        dPk    r#	 dd!lpm}  |             n# tP          $ r Y nw xY w                     d"| d#           ,n# t          $ r 9r9                    d           d9 je        r e                    d           t          jk                    |Cz
  } ^                     j_         d$dۦ            x                    |	|           d}t           |dd%}Y +ntP          $ +r}9r9                    d           d9 je        r e                    d           ta          |t                    r.to           d&d          d'k     rti          |                                          }d(|v pd)|v }d*|v pd+|v o| }t          |	          }ta          |.tj                    rt          |.          rd}ta          |Jtb                    rt          |J          rd}ta          to           d,d          tj                    rt           jJ                  rd}|s|rE xj        dz  c_        |r s                    d-           n s                    d.           Y d}~p|rd _}        t          |	          }ta          |.tj                    rt          |.           ta          |Jtb                    rt          |J           d}ta          to           d,d          tj                    rt           jJ                  }d}ta          to           d/d          tj                    rt           jZ                  }d}ta          |
th                    r!t          |
          }||
k    r|}
| _        d}ta          to           d0d          th                    r)t           jH                  }| jH        k    r	| _H        d}d}ta          to           d1d          tb                    r j        &                    d2          nd}ta          |tb                    rt          |          }d}to           dd          pd}|rta          |th                    rt          |          }||k    r| _        ta          to           d1d          tb                    r| j        d<   to           d~d          #t+           j        d          r| j        _        d} ^                     j_         d3dۦ            xj        dz  c_        |p	|p|p|p|p|}|r! ^                     j_         d4dۦ           n  ^                     j_         d5dۦ           Y d}~nd}	 ti          to          |d6d          pto          |dd          pti          |                    }n# tP          $ r Y nw xY wto          |d7d          }d8}|                                2t          2fd9|D                       }|du pd:tG          |          cxk    od;k     nc }to           d<d          rn|rl|rjd _        t          |	          }ta          |.tj                    rt          |.            ^                     j_         d=|rd>ndSz   dۦ           Y d}~ to          |d7d          }                     |          }to           d?d          }|rto          |d@dA          ndA}t          |to           dhd          pdto           dgd          pd|=||.rtO          |.          ndB          }tR          *                    dC|j        j        |j        |j        |j        |j        |j                                        |||K||C|Jt          |          j;        ti          |          ||D|E|j        |j        j                   |j        t          j        k    ryt          to           dhd          pdto           did          pd          rF|Fj        s>d|F_        t                     r& ^                     j_         dDdۦ           Y d}~"m                     ||Fj        |j        |E          \  }|F_        |rY d}~"|j        t          j        k    rg|Fj        s_d|F_         	                    |.          r& ^                     j_         dFdۦ           Y d}~#tR          >                    dG           |j        t          j
        k    rg|Fj        s_d|F_                             |.          r& ^                     j_         dHdۦ           Y d}~#tR          >                    dI           |j        t          j        k    r j        dk    r j        r|Fj        sd|F_        to           dJd          spd _        	  j                                         n# tP          $ r Y nw xY w                                   ^                     j_         dKdۦ           Y d}~$Y j        dXk    rk jo        dLv ra|dMk    rZ|Fj        sRd|F_                             dۦ          r3 jo        dNk    rdOndP} s                    dQ| dR           Y d}~$ω j        dSk    r jo        dPk    r|dMk    r|Fj        sd|F_                             dۦ          rt/           j_         dT           Y d}~%7ddUlm}  |            }d}	 to          |d6d          pto          |dVd          }|ti          |¦          ddW         }n# tP          $ r Y nw xY wt/           j_         dX           |rt/           j_         dY|            t5           dZ          st/           j_         d[           t/           j_         d\           t/           j_         d]           t/           j_         d^           t/           j_         d_| d`           t/           j_         da            jo        dbk    rH|dMk    rA|Fj        s9d|F_                                         r s                    dc           Y d}~&҉ j        dk    r9|dMk    r1t+           dd          r|Fj        sd|F_        ddelm} ddfl m!}  "                                rt/           j_         dg           Y d}~'P j#        }Őt/           j_         dh            ||Ŧ          rLt/           j_         di           t/           j_         dj           t/           j_         dk           n ||Ŧ          rdlndm}Ɛt/           j_         dn|ƛ            t/          ta          |th                    r+tO          |Ŧ          dok    r j_         dp|ddo          d<n
 j_         dq           t/           j_         d\           ddUlm}  |            }t/           j_         dr| ds           t/           j_         dt| du           t/           j_         dv           t/           j_         dw           t/           j_         dx           t/           j_         dy           |j        t          j$        k    r|Fj%        sd|F_%        d}|.D ]8}ta          |tb                    r!dz|v r|D                    dzd           |dz  }ǌ9 ^                     j_         d{dۦ           tR                              d| j_        |Ǧ           Y d}~)|j        t          j&        k    r|Fj'        sω j        dXk    rĐte          to           d}d                    rt          d~ |	D                       rd|F_'         (                    |	          }ȉ ^                     j_         d|Ȑd          d|d^          ddۦ           tR                              d j_        |Ȑd         |d^                    Y d}~*|j        t          j)        k    r|Fj*        sd|F_*        	 ddl+m,}  |ɉ jZ                  \  }}n;# tP          $ r.}tR                              d j_        |̦           d}Y d}~nd}~ww xY w|rL ^                     j_         d|˛ ddۦ           tR                              d j_        |˦           Y d}~+tR                              d j_                   |Ddz  }Dt          jk                    |Cz
  }͉                     d|D d|E d           t          |          j;        }ti          |                                          6 -                    |          }tR                              d|D|E|Ή                                 |Ϧ           to           dhd          }to           did          }4to           dgd          }|rd| dnd}҉ s                    d|D d|E d|Λ |қ             s                    d|Л d|ћ             s                    d|4             s                    d|ϛ            |rP|d;k     rIto          |d6d          }|rti          |          dd         nd}|r s                    d|ӛ             s                    d|ddtO          |.           d|=d?dL            .                                rnd6v rh s                    d|ћ d            j/        r, s                    d            s                    d            s                    d|ћ             j        r ^                     j_         ddۦ            x                    |	|                                             d|Λ d                     ti          |                     dޝ|	|dddߜcY d}~S to          |d7d          }t          j0        t          j1        t          j2        h}|j        |v rto           dd          s w                                  ^                     j_         ddۦ            ^                     j_         ddۦ           tR                               j_         d|j        j         d            x                    |	|           |	d|dddddcY d}~S |j        t          j0        k    r/dA}Չ j        }|j        }||k    r|֐3                     jG        |Չ j        to           dd           jo         j                   t+          |֐d          rd|_        d|_         s                    d|d?d|d?dL           |dz  }||Gk    rtO          |	          }؉ 4                    |	||=|          \  }	}
d}tO          |	          |k     s||k    rD t                    d|d?d|d?d           t          j        d'           d|F_5        Y d}~n|j        t          j6        t          j        hv }|rω j        tO           j                  k     rt                      7                     j8         jo        to           did                    }|sp|j        t          j        k    r t                    d           n t                    d            u                    |j        w          rd}Dd}d|F_v        Y d}~1|r jo        dPk    r|j        t          j6        k    r|sd}	 ddlpm9}ܐm:} to          |dVd          }|rto          |ސdd          nd} ||߉ j;                  }|r |||           ntR          >                    d           n# tP          $ r Y nw xY w|r|E}DY d}~2|j        t          j1        k    }|dk    rta           j        th                    rd j        v r ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ           |r|dz  }||Gk    r w                                  ^                     j_         d|G ddۦ            ^                     j_         ddۦ           tR                               j_         d|G d            x                    |	|           |	d|d|G dÝddddĜcY d}~S  t                    d| d|G d<           tO          |	          }؉ 4                    |	||=|          \  }	}
d}tO          |	          |k     rO t                    d|؛ dtO          |	           dǝ           t          j        d'           d|F_5        Y d}~n w                                  ^                     j_         dȝdۦ            ^                     j_         ddۦ           tR                               j_         dɝ            x                    |	|           |	d|dddddĜcY d}~S |j        t          j2        k    }|rʉ j        }|j        }אty          6          }|t          d|dz
            }| _         s                    d|d?d|d?d|d?d           |dz  }||Gk    r w                                  ^                     j_         d|G dÝdۦ            ^                     j_         ddۦ           tR                               j_         d|G d            x                    |	|           |	d|d|G dÝddddĜcY d}~S d|F_5        Y d}~nt{          6|צ          }to           dhd          pd                                }to           did          pd>                    d                                          }|dv p|栐                    dҦ          }|o	|du odӐ6v }|䁢 s                    d|d?d|d?d           |֐3                     jG        | j        to           dd           jo         j                   t+          |֐d          rd|_        d|_         s                    d|d?d|d?dL           n;|r s                    d|d?dם           n s                    d|d?dם           |dz  }||Gk    r w                                  ^                     j_         d|G dÝdۦ            ^                     j_         ddۦ           tR                               j_         d|G d            x                    |	|           |	d|d|G dÝddddĜcY d}~S  t                    d|=d?d| d|G dם           tO          |	          }؉ 4                    |	||=|          \  }	}
d}tO          |	          |k     s|rh||k     rbtO          |	          |k     r, t                    d|؛ dtO          |	           dǝ           t          j        d'           d|F_5        Y d}~n% w                                  ^                     j_         d۝dۦ            ^                     j_         dܝdۦ           tR                               j_         d|=d?dޝ            x                    |	|           |	d|d|=d?dddddĜcY d}~S ta          |tJ          tH          f          ota          |t          t          j?        f           o{ta          |t          jA                   o^ta          |tH                    oGdti          |                                          v o#dti          |                                          v  }|pf|j         o^|j         oV|j        t          j6        t          jB        t          j2        t          j1        t          j0        t          j$        hvo| }|r9                                 rI|j        t          jC        k    r t                    d           n t                    d| d            u                                rd}Dd}d|F_v        Y d}~< |J                     |Jd|            w                                 |j        t          jC        k    r. \                    d -                    |                      n0 \                    d| dƉ -                    |                       ^                     j_         d| ddۦ            ^                     j_         d|Л d|ћ dۦ            ^                     j_         d|4 dۦ           |jD        s|j        t          j        k    r|j        t          j        k    r&t           d|ti          |4          |ѐ          rn|dPk    rt5           dZ          rn|Аdv r|dMk    r|Аdk    r ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ           n!|АdNk    rB ^                     j_         ddۦ            ^                     j_         ddۦ           n؉ ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ           ta          |th                    r|ѐF                    d          rh ^                     j_         d|ћ ddۦ            ^                     j_         ddۦ            ^                     j_         d|ћ ddۦ           nÉ ^                     j_         d dۦ            ^                     j_         ddۦ            ^                     j_         d|ћ d6dۦ           t          ti          |4          d          r  ^                     j_         ddۦ           n  ^                     j_         ddۦ           |j        t          jC        k    r ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         ddۦ            ^                     j_         d	dۦ           tR                               j_         d
|            |d:k    r<|=dk    stO          |.          dk    r! ^                     j_         ddۦ           n x                    |	|           |j        t          jC        k    r0 -                    |          }d| d}||	|ddd| dWcY d}~S d|	|ddti          |          dWcY d}~S |D|Ek    r|Fjv        s) H                    ||D|E          rd|F_v        d}DY d}~A                                 r t                    d|E d            u                                rd}Dd}d|F_v        Y d}~BA w                                  -                    |          }d}|j        t          j        k    ra \                    d|            t          d|ti          |4          |ѐ          }t           d|ti          |4          |ѐ           n=|r \                    d|E d|            n \                    d|E d|             ^                     j_         d| dۦ           to          |d7d           ot          6fddD                       }|r@ ^                     j_         ddۦ            ^                     j_         ddۦ           tR                              d j_        |E|||tO          |.          |=d?           |J                     |Jd|            x                    |	|           |j        t          j        k    rd| }|r|d)| z  }n	d|E d| }|r|d z  }||	|dd||j        j        d!cY d}~S d}|rto          to          |dVd          dd          }|r{t+          |d"          ri|&                    d#          p|&                    d$          }|r;	 t          t          |          d%          }n# tH          tJ          f$ r Y nw xY w|r|ntQ          |Dd&d'Ԧ          }p|r& t                    d(|pdd)|Ddz    d|E dם           n! t                    d|pdd)|D d|E dם           tR                              d*|p|D|E                                 |           t          jk                    |pz   }qd}rt          jk                    |qk     r j        r^ ^                     j_         dڝdۦ            x                    |	|                                             d+|D d|E dޝ|	|dddߜcY d}~S t          j        d           |rdz  }r|rdz  dk    rB                     d,|D d|E dtG          |qt          jk                    z
             d           t          jk                    |qk     Y d}~nd}~ww xY w|D|Ek     F|rd-}n|Fj5        r-|dz  } j        ]                                 |Ddz  }Dd|F_5        RF|Fj        rk j        r j        nd}||dz   z  }                     |J          }|t          ||          }t          d|pd          }t          ||           _        R|I4d.}t/           j_         d/            x                    |	|           n;	                                  }i } j        dk    r j        |d0<    |j        |Ifi |}|}{|j        }H|{j        ta          |{j        th                    ss|{j        }ta          |tb                    rG|&                    dd          p)|&                    dd          pt          jT        |          |{_        nta          |tj                    rg }|D ]}ta          |th                    r|6                    |           -ta          |tb                    rD|&                    d1          dk    r*|6                    |&                    dd                     ta          |tb                    r,d|v r(|6                    ti          |d                              d!B                    |          |{_        nti          |          |{_        	 dd\lm}Tm}U  |Td2          rto          |{dd          pg }|{j        pd}|C|[z   }  |U	 di d`|da|db|Kdc j=        pddf j        pddg jG        dh jo        di j        dj j        dk|d3|[dr|Cd4| d+|HdmtO          |.          d5to          |Idgd          dV J                    |I|{|H6          d K                    |I          d7|{d8tO          |          d9tO          |           n# tP          $ r Y nw xY w|{j        r j        sx jj        r& ^                     j_         d:|{j                    nK ^                     j_         d:|{j        dd          tO          |{j                  dk    rd<nd            |{j        r jL        r|{j        I                                }tg          jM        d;d|          I                                }|r&|N                    d!          d         dd         nd}|rAto           d<d          dk    r+	  L                    d=|           nJ# tP          $ r Y n>w xY w|r7	  L                    d>d=|dd;         d           n# tP          $ r Y nw xY wt          |{j        pd          rމ xjP        dz  c_P         s                    d?            jP        d'k    r# s                    d@ jP         dA           W؉ w                                  ^                     j_         dBdۦ           d _P                             |	          }                     |            x                    |	|           d||dddCdS d _P         j        dXk    r|Hdk    r
 xjQ        dz  c_Q                             |{|H          }te          |&                    d          pdI                                          }ta          |&                    d*          th                    r6te          |&                    d*d          I                                          nd}te          |&                    dD                    }te          |&                    dE                    }|s
|s|s|r|	r|	d         nd}ta          |tb                    r|&                    dD          nd}|&                    dD          }	ta          |tb                    r|&                    dE          nd}
|&                    dE          }ta          |tb                    o|&                    d          dk    o|&                    d+          dk    oq|&                    d          pd|&                    d          pdk    o@|&                    d*          pd|&                    d*          pdk    o||	k    o|
|k    }|s+|	6                    |            R                    |            jQ        dMk     r8 j        s( ^                     j_         dF jQ         dG           |	 _        [[d _Q         x                    |	|           d|	|dddHdS t+           dI          rd _Q        |{jS        
r j        s5 ^                     j_         dJtO          |{jS                   dK            jj        rL|{jS        D ]C8ts          j*        dL8jT        jU         dM8jT        jV        ddW          d<           D|{jS        D ]~88jT        jU         j,        vre W                    8jT        jU                  }|r>t/           j_         dN8jT        jU         dO| d           |8jT        _U         fdP|{jS        D             }|r xjX        dz  c_X        dB                    t           j,                            }|d         }tO          |          dk    r|dd         d<z   n|} s                    dQ| dR jX         dG            jX        dMk    r` w                                  ^                     j_         dSdۦ           d _X         x                    |	|           d|	|dddT| dS                      |{|H          }|	6                    |           |{jS        D ]g88jT        jU         j,        vrdU8jT        jU         dV| }ndW}|	6                    d8jT        jU        8jZ        |dX           h^td _X        g 7|{jS        D ](88jT        jV        }ta          |tb          tj          f          r#t          jT        |          8jT        _V        T|Cta          |th                    s-ti          |          8jT        _V        8jT        jV        }|r|I                                sdY8jT        _V        	 t          jS        |           # t          j?        $ r=}76                    8jT        jU        ti          |          f           Y d}~"d}~ww xY w7rϐt          7fdZ|{jS        D                       }|ra ^                     j_         d[|Hd\dۦ           d _[                             |            x                    |	|           d|	|ddddS  xj[        dz  c_[        7d         \  }6 s                    d]| d^6             j[        dMk     r" s                    d@ j[         d           ` s                    d_           d _[                             |{|H          }|	6                    |           d` 7D             }|{jS        D ]t88jT        jU        |v r+t          8fda7D                       }db| dc}ndd}|	6                    d8jT        jU        8jZ        |dX           uad _[         ]                    |{jS                  |{_S         ^                    |{jS                  |{_S                             |{|H          }|{j        pd}|r܉                     |          rƐ| __        t          h de          1t          1fdf|{jS        D                       }| _b        |r f                                r	d _c        n[ d                                rF                     |          I                                }|r ^                    dg|            d}|	rta          |	d         tb                    rj|	d         &                    d,          rO|	D                                 d}|	r6ta          |	d         tb                    r|	d         &                    d,          O|rd _e        d _f        d _g        |	6                    |            R                    |            jh        r(	  h                    d           n# tP          $ r Y nw xY w i                    |{|	||            jj        ȉ jj        }dh} k                    |          } \                    di|jl         d|jm                    |	6                    d|d/           |r_                     d!| d!            jh        r>	  h                    |            h                    d           n# tP          $ r Y nw xY wnnd}d _n        dj |{jS        D             } | dkhk    r j        ]                                  j        }|jo        dk    r
|jo        }!n)|jo        dk    rd}!nt          |	 jZ        pd8          }! jp        rW|                    |!          rA                     dl            4                    |	| j        jo        |          \  }	}
d}|	 _        e|{j        pd}d _c                             |          sto           dmd          pd}"                     |"          rydn}                     |"          I                                }#tR          >                    dotO          |#                      \                    dp           |#}d _q        	nto           dqd          }$|$rto           drd          r~ds}tR          >                    dt            \                    du           d __        d _b        d _f                             |$          I                                }d _q        	nt          dv |	dwd         D                       }%te          tg          j        dx|pdtf          j                            }&|%rto           dyd          s|&sd _g        d __        d _b        tR          >                    dz            t                    d{                                |{|H          }'d||'d<   d|'d}<   |	6                    |'           |	6                    d(d~dd           h,te          to          |{d*d          p&to          |{dd          pto          |{dzd          p|&          }(|(r je        d'k     r xje        dz  c_e        tR          >                    d je                    t                    d je         d                                |{d          }d|d,<   |	6                    |           |	 _        i                     |          I                                 })|(o je        d'k    }*|)ro|(r|*ri jf        dMk     r] xjf        dz  c_f        tR                              d jf         jG                    t                    d jf         dG           i|)r j        rtR                              d jf         jG         jo                    t                    d            u                                rYd _f         t                    d jG         d jo         d           tR          >                    d jG         jo                   jx w                                 d} r                    |{          }+ s                    |	                                |{|H          }d||d<   d|d<   |	6                    |           |+r\tO          |+          d;k    r|+dd;         d<z   n|+},tR                              d|,            \                    d           nRtR                              d jf         jG         jo                    \                    d j        rdndz              d|}n|d _f        d _e         t                                  j        dXk    r j,        r|d'k     r u                    |||	          rj|dz  }                     |{d          }|	6                    |            R                    |           d(dd/}|	6                    |           |	 _        lod}|rdB                    |          |z   }g }d}                     |          I                                }                     |{|H          }-|	rta          |	d         tb                    r|	d         &                    d,          s8|	d         &                    d}          s|	d         &                    d          r|	D                                 |	rnta          |	d         tb                    rS|	d         &                    d,          L|	d         &                    d}          h|	d         &                    d          |	6                    |-           d|H d} j        s                     d| d           n'# tP          $ r}d| dti          |           6	 t/          d6            n4# t          tJ          f$ r tR                              6           Y nw xY wtR          w                    d|           t_          tO          |	          dz
  dd          D ]}/|	|/         }0ta          |0tb                    s n|0&                    d          dk    r<|0&                    d          dk    r|0&                    d          rd |	|/dz   d         D             }.|0d         D ]{88rta          8tb                    s8d         |.vrRdt                      jx        y                    8          8d         d6 dX}/|	6                    |/           | | j        dz
  k    r5d6dd          d}d6 }|	6                    d|d/           Y d}~n1Y d}~nd}~ww xY w| j        k     r j        j        dk    o j        pddlzm{}0  |0 |||||	|||||||          S (  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
    )restore_or_build_system_promptinstall_safe_stdiosanitize_surrogatessummarize_user_message_for_logr&   r'   rar   NFr7   codex_app_server)r   original_user_messagemessageseffective_task_idshould_review_memoryTinterrupted_by_useru2   
⚡ Breaking out of tool loop due to interrupt...   zstarting API call #budget_exhaustedu%   
⚠️  Iteration budget exhausted (/z iterations used)role	assistant
tool_callstooltool_call_idcontentr3   c                    g | ]h}t          |t                    |d          d                             |                    d                    |d                              d          diS )functionnameid	arguments)r   resultr   r<   dictr   ).0tc_results_by_ids     rB   
<listcomp>z$run_conversation.<locals>.<listcomp>  s~     & & & !#)"d33&(*:v(>*8*<*<RVVD\\*J*J-/
^-?-?-L-L & & &rD   z&step_callback error (iteration %s): %sskill_manage)format_steer_markertext)typer   z<Pre-API-call steer drain: injected into tool msg at index %d_pending_steer_lockrh   _pending_steerr>   )r>   r8   zFSanitized %s corrupted tool_call arguments before request (session=%s)-zFRepaired %s message-alternation violations before request (session=%s)userz

	reasoningfinish_reason_thinking_prefill)r2   system)r   r   )	cache_ttlnative_anthropicr   r   )r:   :)
separators	sort_keysr   ?c              3  N   K   | ] }t          t          |                    V  !d S N)r=   rJ   )r   msgs     rB   	<genexpr>z#run_conversation.<locals>.<genexpr>  s.      @@C#c#hh--@@@@@@rD   )r0    ollama_runtime_context_too_smallu;   ❌ Ollama runtime context is too small for Hermes tool useu   🔄 Making API call #z...u      📊 Request size: z messages, ~r:   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: r9   zTotal message size: ~z tokensr   stopz:api:r`   )nous_rate_limit_remainingformat_remainingu,   Nous Portal rate limit active — resets in rf   u   ⏳ z Trying fallback...zg

No fallback provider available. Try again after the reset, or add a fallback provider in config.yaml.)final_responser   	api_calls	completedfailederrorcodex_responses)allow_stream)apply_llm_request_middleware)
r   turn_idapi_request_idr8   r~   r2   r6   r5   api_modeapi_call_count)has_hookr|   pre_api_requestr   inputr   r   r   r8   r   r   r~   r2   r6   r5   r   r   request_messagesmessage_countrA   approx_input_tokensrequest_char_count
max_tokens
started_atmiddleware_tracerequestHERMES_DUMP_REQUESTS	preflight)reasonc                 v    r                     d           d  j        r                     d           d S d S )Nr3   )r   thinking_callback)r*   thinking_spinners   rB   _stop_spinnerz'run_conversation.<locals>._stop_spinner  sT    ' 0(--b111+/(. 4//333334 4rD   _disable_streamingzcopilot-acpzacp://copilotz
acp+tcp://)Mockclientc                `    r                     |           S                     |           S )N)on_first_delta)!_interruptible_streaming_api_call_interruptible_api_call)next_api_kwargsr  _use_streamingr*   s    rB   _perform_api_callz+run_conversation.<locals>._perform_api_call  sD    % $FF+M  G      !88IIIrD   )run_llm_execution_middleware)original_requestr   r   r   r8   r~   r2   r6   r5   r   r   r   u   ⏱️  API call completed in z.2fszN/AzAPI Response received - Model: z	, Usage: usagezresponse is Nonestatus>   r   	cancelledr   rS   z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 emptyanthropic_messagesz/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 emptyInvalidAPIResponser   zInvalid API responsecodeinvalid_response)r   r   r   r   api_start_time
api_kwargs
error_typeerror_messagestatus_coderetry_countmax_retries	retryabler   u<   ⚠️ Empty/malformed response — switching to fallback...Unknownmetadataprovider_namezmodel=c                n    i | ]2\  }}|                     d           |t          |          dd         3S )_Nd   )
startswithrJ   )r   kvs      rB   
<dictcomp>z$run_conversation.<locals>.<dictcomp>  sA    %r%r%r$!Q`a`l`lmp`q`q%raQ%r%r%rrD   z*Response attributes for invalid response: i  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upstream provider overloaded ()zupstream error (code 
   zfast response (z.1fu   s) — likely rate limited<   z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: )r   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.rX   z$Operation interrupted during retry (z
, attempt z).)r   r   r   r   interruptedg?   zretry backoff (z), zs remainingr   
incomplete>   lengthmax_output_tokensr;  uA   ⚠️  Treating suspicious Ollama/GLM stop response as truncatedr   u[   ⚠️  Stream interrupted by network error (finish_reason='length' on partial-stream-stub)uQ   ⚠️  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   r   r   r   partialr   >   r  chat_completionsr  _dropped_tool_namesu&   ↻ Stream interrupted mid tool-call (u    ) — requesting chunked retry (z/3)...u4   ↻ Stream interrupted — requesting continuation (u   ↻ Requesting continuation (z9Response remained truncated after 3 continuation attemptsu7   ⚠️  Stream interrupted mid tool-call — retrying (u<   ⚠️  Truncated tool call detected — retrying API call (i   i   u[   ⚠️  Stream kept dropping mid tool-call after 3 retries — the action was not executed.uf   ⚠️  Truncated tool call response detected again — refusing to execute incomplete tool arguments.zLStream repeatedly dropped mid tool-call (network); the tool was not executedz-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)r6   r   )prompt_tokenscompletion_tokenstotal_tokensinput_tokensoutput_tokenscache_read_tokenscache_write_tokensreasoning_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)r6   r5   rK  includedsubscription_included)rD  rE  rF  rG  rH  estimated_cost_usdcost_statuscost_sourcebilling_providerbilling_base_urlbilling_moder2   r   z4Token persistence failed (session=%s, tokens=%d): %szToken usage: prompt=rA  z, completion=rB  z, total=rC  u      💾 Cache: z	 tokens (z% hit, z	 written))clear_nous_rate_limitz
API call #z
 completedu    ⚡ Interrupted during API call.zs elapsed)._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...r0   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...bodyr!  )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    )r   p
_err_lowers     rB   r   z#run_conversation.<locals>.<genexpr>  s8       2 2()AO2 2 2 2 2 2rD   i  r0  _vision_supporteduV   ⚠️  Server rejected image content — switching to text-only mode for this sessionz,. Stripped images from history and retrying.context_compressorcontext_lengthi@ )r6   r2   approx_tokensrd  num_messageszTError classified: reason=%s status=%s retryable=%s compress=%s rotate=%s fallback=%suX   🔐 Nous paid access verified — refreshed runtime credentials and retrying request...)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.u`   📐 Provider rejected list-type tool content — downgraded screenshots to text and retrying...znmultimodal-tool-content recovery: no list-type tool messages with image parts found; 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  rk  z	xAI OAuthCodexu   🔐 z. auth refreshed after 401. Retrying request...r?  u<   🔐 Nous agent key refreshed after 401. Retrying request...)display_hermes_homeresponse   u/   🔐 Nous 401 — Portal authentication failed.z   Response: zNous model accesszS   Most likely: Portal OAuth expired, account out of credits, or agent key revoked.z   Troubleshooting:u.        • Re-authenticate: hermes auth add 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_key)_is_oauth_token)is_token_provideruC   🔐 Anthropic credentials refreshed after 401. Retrying request...u-   🔐 Anthropic 401 — authentication failed.z5   Auth method: Microsoft Entra ID (httpx event hook)z;   Run `hermes doctor` for credential-chain diagnostics, orz0   `az login` if your developer session expired.zBearer (OAuth/setup-token)zx-api-key (API key)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_detailsuc   ⚠️  Thinking block signature invalid, stripped reasoning_details from api_messages for retry...zs%sThinking block signature recovery: stripped reasoning_details from %d api_messages (canonical messages unchanged)_codex_reasoning_replay_enabledc              3     K   | ]o}t          |t                    oU|                    d           dk    o<t          |                    d          t                    o|                    d          V  pdS )r   r   codex_reasoning_itemsN)r<   r   r   list)r   _ms     rB   r   z#run_conversation.<locals>.<genexpr>  s        
 	 #2t,, <FF6NNk9<&rvv.E'F'FMM< FF#:;;	     rD   ua   ⚠️  Encrypted reasoning replay was rejected by the provider — disabled replay and stripped itemsz item(s) from z message(s), retrying...z^%sInvalid encrypted reasoning recovery: disabled replay and stripped %d items from %d messages)strip_pattern_and_formatz5%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 (compression_enableduS   ❌ Context overflow, but auto-compaction is disabled (compression.enabled: false).ux      💡 Run /compress to compact manually, /new to start fresh, switch to a larger-context model, or reduce attachments.zContext overflow (u4   ) with auto-compaction disabled — not compressing.zContext overflow and auto-compaction is disabled (compression.enabled: false). Run /compress to compact manually, /new to start fresh, or switch to a larger-context model.)r   r   r   r   r>  r   compaction_disabled)r2   rd  r5   rK  r6   r   uO   ⚠️  Anthropic long-context tier requires extra usage — reducing context: u    → )re  r   u   🗜️ Context reduced to z tokens (was z), retrying...)r6   r5   uI   ⚠️ Billing or credits exhausted — switching to fallback provider...u9   ⚠️ Rate limited — switching to fallback provider...)is_genuine_nous_rate_limitrecord_nous_rate_limitheaders)r  last_known_state)r  ri  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.)r   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: u:   ⚠️  Context length exceeded — using provider limit: zBProvider reported overflow amount only; keeping context_length at z tokens and compressing.um   ⚠️  Context length exceeded, but provider did not report a max context length; keeping context_length at 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.nonetypeznot iterableuI   ⚠️ Provider safety filter blocked this request — trying fallback...u!   ⚠️ Non-retryable error (HTTP u   ) — trying fallback...non_retryable_client_error)r   r   u1   ❌ Provider safety filter blocked this request: u   ❌ Non-retryable error (HTTP u%   ❌ Non-retryable client error (HTTP z). Aborting.zmodel accessrp   >   r`   rk  rl  rl  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:zU      re-authenticate with xAI Grok OAuth (SuperGrok / Premium+) from `hermes model`.uJ      💡 Nous Portal OAuth token was rejected (HTTP 401). Your token may bezF      expired, revoked, or your account may be out of credits. To fix:z'      1. Re-authenticate: hermes portalzC      2. Check your portal account: https://portal.nousresearch.comz:freeu         ⚠️  Note: `z1` looks like an OpenRouter slug (`:free` suffix).zH         Nous Portal won't recognize that model name. Either switch to az7         Nous catalog model, or run `/model openrouter:z` to use OpenRouter.u9      💡 Your API key was rejected by the provider. Check:u-         • Is the key valid? Run: hermes setupu+         • Does your account have access to rg   u?         • Check credits: https://openrouter.ai/settings/creditsu6      💡 This type of error won't be fixed by retrying.uC      💡 The provider's safety filter rejected this specific prompt.u]         • Try rephrasing the request, narrowing the context, or splitting into smaller steps.uM         • Configure a fallback provider so future blocks route automatically:uM           hermes fallback add   (interactive picker — same as `hermes model`)zNon-retryable client error: iP  P   uU   ⚠️  Skipping session persistence for large failed session to prevent growth loop.us   ⚠️  The model provider's safety filter blocked this request (not a Hermes/gateway failure).

Provider message: zn

Try rephrasing the request, narrowing the context, or adding a fallback provider with `hermes fallback add`.zcontent_policy_blocked: )r"  r#  u"   ) exhausted — trying fallback...u%   ❌ Billing or credits exhausted — u   ❌ Rate limited after u    retries — u   ❌ API failed after u      💀 Final error: c              3      K   | ]}|v V  	d S r   r_  )r   r`  	error_msgs     rB   r   z#run_conversation.<locals>.<genexpr>Q  s7          1Y            rD   )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Billing or credits exhausted: z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.)r   r   r   r   r   r   failure_reasonr   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_call!all_retries_exhausted_no_responseu:   ❌ All API retries exhausted with no successful response.r=  r   post_api_requestapi_durationended_atresponse_model)r   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 retriesry  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)r   r   r*   s     rB   r   z$run_conversation.<locals>.<listcomp>  s;     & & &)+{'u/EEE K$EEErD   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.)r   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_  )r   nr)  s      rB   	<setcomp>z-run_conversation.<locals>.<genexpr>.<setcomp>  s    /P/P/Pda/P/P/PrD   r3   )}r~  N)r   r   r   rstripendswith)r   r   invalid_json_argss     rB   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% %rD   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_  )r   r   r)  s      rB   r  z#run_conversation.<locals>.<setcomp>/  s    (O(O(O'$(O(O(OrD   c              3  B   K   | ]\  }}|j         j        k    |V  d S r   r   r   )r   r  er   s      rB   r   z#run_conversation.<locals>.<genexpr>2  s8      *d*dAaSUS^ScNcNc1NcNcNcNc*d*drD   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.>   todomemoryr   session_searchc              3  4   K   | ]}|j         j        v V  d S r   r  )r   r   _HOUSEKEEPING_TOOLSs     rB   r   z#run_conversation.<locals>.<genexpr>^  sB       , , (,??, , , , , ,rD   u     ┊ 💬 guardrail_haltu   ⚠️ Tool guardrail halted c                &    h | ]}|j         j        S r_  r  )r   r   s     rB   r  z#run_conversation.<locals>.<setcomp>  s    UUU"R[-UUUrD   execute_codeu     ⟳ 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 )r   r   N)r   r   ms     rB   r   z#run_conversation.<locals>.<genexpr>B  sE       * * f/* * * * * *rD   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.)r   r   r  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_contentr   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 #%dc                z    h | ]8}t          |t                    r!|                    d           dk    0|d         9S )r   r   r   r   r  s     rB   r  z#run_conversation.<locals>.<setcomp>_  sP     $ $ $%a..$ 4555==F3J3J .)3J3J3JrD   zError executing tool: zerror_near_max_iterations(z0I apologize, but I encountered repeated errors: )finalize_turn)r   r   r8  r   r   r   r   r   r   r   _should_review_memory_turn_exit_reason)r   )r  (|  r   r   r   r   r   r&   r'   rH   r   r   r   r   active_system_promptr   r   current_turn_user_idxr   plugin_user_contextext_prefetch_cacher   _run_codex_app_server_turnmax_iterationsiteration_budget	remaining_budget_grace_call_checkpoint_mgrnew_turn_interrupt_requested
quiet_mode_safe_print_api_call_count_touch_activityconsumeused	max_totalstep_callback	enumeratereversedr   r=   rQ   r>   r   _skill_nudge_intervalr  _iters_since_skill_drain_pending_steerranger<   r   agent.prompt_builderr   rJ   rz  ri   r;   r   logging	getLogger__name___sanitize_tool_call_argumentsr8   info_repair_message_sequencecopyr   rj   _copy_reasoning_content_for_apipop_should_sanitize_tool_calls#_sanitize_tool_calls_for_strict_apir2   rZ  ra   rY  insert_use_prompt_cachingr    
_cache_ttl_use_native_cache_layout_sanitize_api_messages#_drop_thinking_only_and_merge_usersjsonloadsdumpsr   r   sumr   r   r0   rC   _emit_statusrefundr[   r\   randomchoicer	   get_thinking_facesget_thinking_verbsr  _has_stream_consumers_should_start_quiet_spinner	_print_fnstartverbose_loggingtime_api_max_retriesr   _current_api_request_idr6   agent.nous_rate_guardr   r   _buffer_vprint_buffer_status_try_activate_fallbackprimary_recovery_attempted_flush_status_buffer_persist_sessionImportError_reset_stream_delivery_tracking$_reapply_reasoning_echo_for_provider_build_api_kwargs_force_ascii_payloadr   _get_transportpreflight_kwargshermes_cli.middlewarer   r~   r5   payloadoriginal_payloadtracer   r   r|   _api_request_payload_for_hookr   r)   _dump_api_request_debugrb   r+  unittest.mockr  r  r   hasattrr  validate_responser?   _client_log_contextr  _invoke_api_request_error_hook_fallback_index_fallback_chainr   r&  rS   varsr|  r,   	TypeError
ValueError_clean_error_message_has_pending_fallbackr!   clear_interruptsleepmap_finish_reasonstop_reasonnormalize_responser   _should_treat_stop_as_truncatedr%   _is_anthropic_oauthrU   research
IGNORECASE_has_content_after_think_block_cleanup_task_resources_build_assistant_messager   r   _session_messages restart_with_length_continuation_strip_think_blocks%_requested_output_cap_from_api_kwargsmaxmin_ephemeral_max_output_tokens"_get_messages_up_to_last_assistantr$   rA  rE  rC  rD  rF  rG  rH  rc  update_from_responserd  r   rI  rJ  session_prompt_tokenssession_completion_tokenssession_total_tokenssession_api_callssession_input_tokenssession_output_tokenssession_cache_read_tokenssession_cache_write_tokenssession_reasoning_tokensr#   
amount_usdsession_estimated_cost_usdfloatr  session_cost_statussourcesession_cost_sourcer   _session_db_created_ensure_db_sessionupdate_token_countsrg  rT  InterruptedError"INTERRUPT_WAITING_FOR_MODEL_PREFIXUnicodeEncodeErrorr   rU  r   r   r   r   r[  rK  r  anyrb  r   _extract_api_error_contextr   r   valuer!  r$  should_compressshould_rotate_credentialshould_fallbackr   r
   billingrd   'nous_paid_entitlement_refresh_attemptedru   _recover_with_credential_poolimage_too_largeimage_shrink_retry_attempted#_try_shrink_image_parts_in_messages#multimodal_tool_content_unsupported'multimodal_tool_content_retry_attempted)_try_strip_image_parts_from_tool_messages!oauth_long_context_beta_forbiddenoauth_1m_beta_retry_attemptedrj  _anthropic_clientclose_rebuild_anthropic_clientcodex_auth_retry_attempted%_try_refresh_codex_client_credentialsnous_auth_retry_attemptedrt   printhermes_constantsrn  r^   copilot_auth_retry_attempted'_try_refresh_copilot_client_credentialsanthropic_auth_retry_attemptedagent.anthropic_adapterrs  agent.azure_identity_adapterrt  )_try_refresh_anthropic_client_credentialsrr  thinking_signaturethinking_sig_retry_attemptedinvalid_encrypted_content)invalid_encrypted_content_retry_attempted_disable_codex_reasoning_replayllama_cpp_grammar_pattern!llama_cpp_grammar_retry_attemptedtools.schema_sanitizerr}  _summarize_api_error_is_openrouter_urlproviders_allowedlong_context_tierpayload_too_largecontext_overflowupdate_model_compress_context restart_with_compressed_messages
rate_limit!_pool_may_recover_from_rate_limit_credential_poolr  r  _rate_limit_stater   r   r  JSONDecodeErrorsslSSLError
overloadedcontent_policy_blockedis_authrq   r  r(   _try_recover_primary_transportrn   _api_response_payload_for_hook#_usage_summary_for_api_request_hooktool_progress_callbacksubsplitr"   _incomplete_scratchpad_retriesr  _emit_interim_assistant_messager   r   r   r   _repair_tool_call_invalid_tool_retriessortedr   _invalid_json_retriesnext_cap_delegate_task_calls_deduplicate_tool_callsr  	frozensetallr  _mute_post_response _should_emit_quiet_tool_messages_thinking_prefill_retries_empty_content_retriesr  stream_delta_callback_execute_tool_calls_tool_guardrail_halt_decision#_toolguard_controlled_halt_response	tool_namer  _stream_needs_breaklast_prompt_tokensr  _response_was_previewed_extract_reasoning)_drop_trailing_empty_response_scaffolding_clear_status_buffer"_looks_like_codex_intermediate_ackOSError	exceptionAIAgent_get_tool_call_name_staticagent.turn_finalizerr  (:  r*   r   r   r   r   r   r   _ctxr   r   r  r   r   r  r  _plugin_user_context_ext_prefetch_cacher   r   r8  r   codex_ack_continuationslength_continue_retriestruncated_tool_call_retriestruncated_response_partscompression_attemptsr  
prev_tools_idxr{  
_fwd_start_tm_tcid	_step_err_pre_api_steer	_injected_si_smr   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_charsre  approx_request_tokens_runtime_context_errorfaceverbr   r  r"  r#  _retrymax_compression_attemptsr   ro  r  r   r   _fmt_nous_remaining_nous_remaining	_nous_msgr   _llm_request_mw_original_api_kwargs_llm_middleware_tracer   r   r   _request_payloadr  r  r  r  
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_resultr  
_trunc_msg_trunc_transport_trunc_result_trunc_content_trunc_has_tool_calls_has_think_tags_thinking_exhausted_exhaust_error_exhaust_responseinterim_msg_is_partial_stream_stub_dropped_tools
_tool_list_continue_contentcontinue_msgpartial_response_is_stub_stall_tc_boost_base	_tc_boost_tc_requested_cap_tc_boost_caprolled_back_messagescanonical_usagerA  rB  rC  
usage_dictctx
_cache_pctcost_resultr  cachedwrittenprompthit_pctrT  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!  ri  _compressor_ctx_len
classifiedrecovered_with_pool_label_dhh_fn_dhh
_body_text_bodyrs  rt  keyauth_method_api_strippedreplay_statsr}  r)  	_stripped
_strip_excelapsed_timer  _error_summary	_provider_model_status_code_str_err_body_str_overflow_reasons_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new_ctx_provider_lower_base_loweris_minimax_providerminimax_delta_only_overflowis_local_validation_erroris_client_error_summary_policy_response_final_summary_billing_guidance_is_stream_drop_final_response_retry_after_resp_headers_ra_raw_boost_base_boost_requested_cap
_boost_cap
_transport_normalize_kwargs
normalizedrawpartspart_assistant_tool_calls_assistant_text_api_ended_at_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
_truncatedr  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_msgr  r  ra  r   r  r  r  r  r   r  s:  `                                                                                                                                                                                                                                                                                                                @@@@@@@@@rB   run_conversationr  s  s-   H 'F.0'F/!9  D  $L 6}H44.lG 6 531 NNKF"#*,! ~+++//%"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HHHHHH00@@F"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 V99'9UUU ((((" 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 = 3t!
 !
 !
 "=("
 "
 " 	3NF BOO[^LLMMM\]]]aN$2E!&--////      	)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,!!#$ 
#::.::(6%K'' ~''(        '@&?&A&AO&27J7JQ)<)<_)M)MQ Q Q " ,,A9AAA   ,,-?I-?-?@@@ 7799 %*+K340@EF=$ 22444..x9MNNN!Dy !D !D !D
 )1)7).&*%.     #   D    Dc%55777 ::<HHH"44\BB
- >1*===>%666!&!5!5!7!7!H!Hbg!H!h!hJ/RRRRRR&B&B" 1 ''5#(#3#9r!&!52#k!&!&!&'5' ' 'O "1!8J+:+K(,;,A))  / / /+/
+;+;(,.)))/7         x 122 0+5>>*+E+E()*:DAA G/9~~g/F/F,)*:DAA </;," ,1+N+Nz+Z+Z($-  $5$5 %,G ,:>	
 (-'7'=2 *?)> 26h &+^%9r #(++ &+^^ &+^^ &+^^ ,:>  **:DAA.$T2B-C-C-C!#!" +.l*;*;*;#$ (+5;+<"'='='=%& 1>'( 0;{)* (-'7'7+, (6~-. .22G-H-H-H/0 %5$41 4 !   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 /).J J J J J J J ONNNNN77%%9-##1$/52"^1r+"^"^"^#1%)*?%@%@  "  $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# W88 1 ''5'5'5#-#7&*ii&>&>&XBX$+GHgt,L,LfVZ$[$[$/$/"&1 9   " ( 0(--b111+/(. 4//333  1$K
 ,s53H/I/III,,-klll3355 !&'/0,<A9  !*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((  *KR]  *K  *K`k  *K  *Kptpypy  {H  qI  qI  *K  *K  L  L  L(()Mm)M)MNNN-2-G-G	-R-R*(()^F\)^)^___(()F})F)FGGG"k11 6688 E!00  2D  2D  2D  2D  E  E  E 7799 %*+K340@EF=$22444**+x{+x+x+xyyy(8%k%kU`%k%k%klll..x9MNNN(0).)7%i;%i%iZg%i%i&*     !1X] ^ ^ ^I(()aI)a)a)am)a)a)abbbNN  $W+  $W  $WP[  $W  $W`d`i`ijw`x`x  $W  $W  HU  $W  $W  X  X  X !%	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,,xr226LLL$/ O O O"& &     $/ 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::$+HdB$?$?CY$Y !8 29$,.CT2" 2" $; !&~ !&15>"1";M1N1NJ$)MM+0+; )L )L6@)L )L -D)L )L )L%& %& %& %& &= 
!&$)MM+0+; )L )L,C)L )L )L%& %& %& %& %*MM+0+; )L )L,C)L )L )L%& %& %&
 5M$;^5" 5" 1 -3/@0" 0" !) = = =:B 7JN G %/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 '$ ; ;?U U +  ;Q>> ;q @ ;#1 !& %*$8$8)Y5P)Y )Y )Y%& %& %& %&
 %*$8$8)P,G)P )P )P%& %& %& FKEU1_1A1A[_,:>Y\]>],^	494_4_`j4k4k 1#4#@03I?P0Q0QI03E;L;QPQ0R0REHTaEbEb B !)!66888- 	" %','7  %U  %U  %U*. !. !" !" !" !"
 !&','7  %`  %`  %`*. !. !" !" !" "99:KLLL!228=QRRR26,4-;-2+/ (6%Y %@ %@ *Y$ $  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     22444)9&h&h&hptuuu..x9MNNN.2(0)7).&*%Z     8W-- H(. H&5 !&!&' ' 'O
 %4$AM(7(E%#2#?L *7->(4(7(D)8)F-<-N.=.P,;,L	" 	"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"$F!d!d!d!d!d w w w $ ,$))"---'+$* 0++B/// i);<< Y!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?::, !00 k    "00 s   !& j!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
 $ "
8S(A(A ")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	   44-##1#1#1)#I7"%i.. + + +(2%,2 5   " %)???0z266<"z266<"  @
 #J @ FJFBEeLL !$/ T T T"& &   
 !>C>a>a +$*$:&0&7"/	 ?b ? ?;#V%; ' HHHH %)GGG"? H ;?F7@@NN $/ 6 6 6"& &   
 !V   %)[[["J \ FJFBFF|TT $/ N N N"& &   
 !Y   %)YYY*>>>1 ?"@ ? <@F8"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**"= + 9=F5BBBNN !05+0M0MSZ,,-kV-k-k-klll N&888&00#s**"< + 8<F4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;ECVWW H!1  G  G  G  H  H  HU-BBBCCCU-]]]^^^U-pppqqqU-ccSWcccdddU-zzz{{{Ni//#s**"? + ;?F7DDFF !,,-qrrr N&:::#s**';<< +"A + =AF9GGGGGGNNNNNNFFHH !!1vvvwww 2CU-\\\]]]((-- r !1hhhiii!1nnnooo!1cccddddFUoVYFZFZ&u&B&B`u!1PP;PPQQQU_`cehUiUi  qnqrunvnvy{n{n{!1QQCHQQQQ  EJ  EU  Bq  Bq  Bq  r  r  r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"? K ;?F7$%M* / /%b$// /4G24M4MFF#6===)Q.MMM + U U U" "   
 NN9 (-	   HHHH" %)QQQ"L R*;;;WU,MtTTUU <  
 #+     < HLFD#(#H#H#R#RLMM + N N8DW8MN N'
3N N N #	 "    NNx($W-$Z0	   HHHH %)QQQ"D R @DF<&SSSSSS'?'?'L'L99$ & & &S!,j   %&						& ! !$/ [ [(1[ [ ["& &   
 J!,i  
 ! NN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 $$  &F  &F  &FWb  &F  &Fgq  &F  tD  &F  &F  G  G  G$$%V)%V%Vf%V%VWWW$$%A%%A%ABBB$$%G~%G%GHHH R;#4#4 '	64 @ @I<E$OC	NN4C4$8$84M$ R,,-P-P-PQQQ$$  &NL  &N  &N  &NZ]^jZkZk  &N  &N  vC  &N  &N  &N  &N  O  O  O ,,..*i77((xvxxx   . ,,t   ,,x   ((kcikk  
 - 
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& #4"4"3%! %):::#E+@$GG ; ..000MM + 9 9 9" "   
 MM + T T T" "   
 LL + I Iz?P?V I I I   **85IJJJ$,%*%3X $("&/3       * $(HHH#)L!&!9J(7G--"//"'++7%*^$+E9b$A$A%*^%*^ 0    #:/@AA J9=J6
 EJJA,,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!00!Bl V !B !B(/ A!B !B !B   !JqMMMFJFC!EEEE #-"3"-"*8 # # %u'<s5CX?Y?Y'Y'Y
 (+uu'N'N.!&!(
D!A!A (O ( ($
 , %%,0FFF!00 k    "001lmmm 77z?P7QQ %*+K340@EF=$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.;    
 #KK!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" "   
 ( 3(A-(+.FFF22444)9  'Z  'ZYq  'Z  'Z  'Z  bf  g  g  g)9  'N  'N  'N  VZ  [  [  [(8%{%{Wo%{%{%{|||..x9MNNN(0).)7 &B]u  &B  &B  &B'+&*59          ((  *a  mA  *a  *a  D\  *a  *a  *a  b  b  b#&x==L5:5L5L . 1 6M 6 62H2 ,0(8}}|33,,-{<-{-{VYZbVcVc-{-{-{|||
1BF? 22444)9&m&m&muyzzz)9  'N  'N  'N  VZ  [  [  [(8%i%i%ijjj..x9MNNN(0).)7%`'+&*59          %)HH ( + R!&!9J(7G %MY$W$WM$0 $'q-"*<#=#==E:,,m8@Em m1>lm m`glm m m   -1,/2JJJ!66888!MMU-=  +B  +B]u  +B  +B  +B  JNM  O  O  O!MMU-=  +R  +R  +R  Z^M  _  _  _"LLE,<  *D  *D_w  *D  *D  *D  E  E  E!228=QRRR,4-2-; *D_w  *D  *D  *D+/*.9=$ $       CG? EYPWXXG'.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#tOJ<	I 0 *,,-uQX-u-u-uip-u-u-u-uvvv"//"'++2%*^$+E9b$A$A%*^%*^ 0    #:/@AA I9=J6DHJA,,  .Mjq  .M  .M  .M  {B  .M  .M  .M  .M  N  N  N  N4 	,,]9@\] ] ]   
 ,,]9@\] ] ]  
 )A-(+.FFF22444)9&}&}Yq&}&}&}  FJ  K  K  K)9  'N  'N  'N  VZ  [  [  [(8%%[s%%%  A  A  A..x9MNNN(0).)7%[s%%%'+&*59          ((  *i  *i  *i  *i  tH  *i  *i  Kc  *i  *i  *i  j  j  j#&x==L5:5L5L . 1 6M 6 62H2 ,0(8}}|33w37WCTCTx==<77!001|11Z]^fZgZg111  A  A  A
1BF? 22444)9&s&s&s{  A  A  A)9  '}  '}  '}  EI  J  J  J(8  &F  &FS`  &F  &F  &F  &F  G  G  G..x9MNNN(0).)7%t%t%t%t%t'+&*59         , y:y*ABB &!$68L#M   'y#,???. #9i88 E&#i..*>*>*@*@@E*c)nn.B.B.D.DD/ *Z . &00 	 * ::	&-*5*5*;*<*<*=6 #2 21    # L 2244 |%,0UUU!001|}}}}!001zU`1z1z1z{{{3355 !&'/0,<A9 !-55&/KS\ 6   
 ..000!(N,QQQ**G$99)DDG G   
 **G[ G G$99)DDG G   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%,0FFFKq!'5%.%(ZZ"(L L LF !&&005U!/6 60 !&*OOOT_cfTfTf(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!*k!9!9 %1A.{.{.{  DH  !I  !I  !I %1A  /Y  /Y  /Y  ae  !f  !f  !f  !f %1A  /N  /N  /N  VZ  ![  ![  ![ %1A  /J  /J  /J  RV  !W  !W  !W %1A.j.j.jrv w w w %1A  /G  /G  /G  OS  !T  !T  !T $.fc#:#: !hvw?W?W !h$)MMU5E  3V  3V\b  3V  3V  3V  ^bM  %c  %c  %c$)MMU5E  3P  3P  3P  X\M  %]  %]  %]$)MMU5E  3[  3[  E  3[  3[  3[  cgM  %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}~~~ "(N,QQQ$/ttt"& &    $/  O  O  O"& &    $/~~~"& &    $/~~~"& &    LLE$4!]!]R[!]!]^^^ #c))}u/D/DLHYHY\^H^H^$/ P P P"& &     ..x9MNNN!(N,QQQ#(#=#=i#H#HV19V V V ) /?(0)7).&*%J%J%J          +/$,%3%*"&!$Y        +--
 "< !AeAe!{ Bf B B ! =A9&' 2244 u,,-sK-s-s-sttt3355 !&'/0,<A9 ..000%*%?%?	%J%JN(*%!(N,BBB**+cSa+c+cddd,K'5%.%(ZZ"(	- - -) ?!'5%.%(ZZ"(     ) 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         $ ' $/ ; ; ; #' &    $/ ) ) ) #' &    LLj(+~!63|+<+<>R>R  
 "-55&/Fi 6    **85IJJJ!(N,BBB*[>*[*[, J+/I6G/I/IIO*j;*j*jZh*j*j& 'F +:$,%3%*"&!/ +5*;*A          $" %$+GIz4,P,PR[]a$b$bM$ %)F)F %"/"3"3M"B"B"fmFWFWXeFfFf" %%/25>>3/G/G$-z#: % % % $%,8{LL>N{gjvz>{>{>{	" w((  *G  *G  *G  *Gcnqrcr  *G  *G  vA  *G  *G  *G  H  H  H  H(()uI)u)u)uVa)u)udo)u)u)uvvv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/w{ K''nL  	 =2 	aN"))+++ 1K6;F32 	 /4.>H%**DK $;a$?@F"HHTTN)V^44UN$7a88J14VZ1H1HE.
  CU%aaabbb""8-ABBBT	--//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%-(        8.// ! 1<FFL" * '8&?&E2O$2\$AM L*   1 1 !( (6~	
 $)#3#9r "'!52 $kk "' "' "' (6~ &2\ $2> "/ '4m  '*,&7&7&7!" (/x$'G'G'G#$ "'!E!E$-*7 "F " " "%. $GGQQQ/0 +<*;12 14O0D0D0D34 366K2L2L2L5 8     !( 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$$%tuuu71<<(()pEDh)p)p)pqqq ..000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+23/&&x1EFFF&* (!/!&#_    ;<< 423/ !+ Y
' |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((  *g/  *g  *g  GL  Gb  *g  *g  *g  h  h  h2a7722444)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(()v]f)v)vkt)v)vwww2Q66,,-kHc-k-k-klll  ,,-klll67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 & %))*A~*A*A*ABBB 6 %% % ; ;N K K K % ; ;D A A A A#, % % % $%
 /0+ -1)
 VU8I8TUUU	 000*11333  $61A55 $/#ALL 3r99 $%LL $A (;t$ $ $L , 
01L1L\1Z1Z 
0%%&CDDD5:5L5L .&+&>&Q 1 6M 6 62H2 ,0( +3'  "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:/  (-'@'@&( (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!00!6U[ !6 !6$)N!6 !6 !6   #KK!5 %U^  
 % ..000(B%%*%=%=>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+*+'+ 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 7	 7	 7	^N^^VYZ[V\V\^^I((Y(())))Z( ( ( (Y'''''( ?PPP
 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9c7	ss E000U5K5UXY5Y5Y^c^v5Yju 322222=%%1+!33+   s  C-J= =
K-K((K-0O==
P
	P
"Q22Q69Q6;Ab		Accf3 3
g ?g *A9s $6s 
s4(	s43s48BBY Aw BY w30BY 2w33BY 7E} BY 
}BY }ZBY W"FBY ]/A^  ]?BY ^ A^^BY ^A^^EBY c+A5BY e!C9BY iA:BY kK6BY wEBY |&A/BY ~CBY A.BBY C>A:BY E9ABY GJ7BY RB&BT, T+BY T,
BU#T6#BUUBY UBU#U#B8BY XBX. X-BY X.
BX;X8BY X:BX;X;BY YB EK[>
EK\E9EKbK8EKnEKn?BooEKo
BooEKoBooC)EKsF:EKz/EKz9AEK|A8EK~A.EK@	C@%@$EK@%
C@2@/EK@1C@2@28EKA0A0EKC&A"EKEEKE$>CF#F"EKF#
CF0F-EKF/CF0F0D3EKK)A8EKM'I-EKWC(EK['EK[0C\\EK\
C]\$C] \;EK] C]]AEK^LEKj#EKj)C<EKn%EKn+EEKs2C.EKw&(EKxA3CzzEKz
CzzEKzCzzEKzFEK@2EK@8B(EKC&BEKE>EKFD-EKJ1EKJ7EKKH&EKS+EKS1CEKV?B#EKY"EKY(F)EK`VEKv-EKv3EKwEKw1EKxAEKyH,EKBEKB
A(EKC3 EDDEKDED*D'EKD)ED*D*D%EKIEKIA;EKKEKO	GF{ V#D	EZ- Z,F{ Z-
EZ:Z7F{ Z9EZ:Z:D$F{ _E_9 _8F{ _9
E``F{ `E``F{ `%E`3 `2F{ `3
Ea `=F{ `?Ea a A0F{ b2BF{ d8K;F{ p5'F{ qIF{ z/BF{ }CF{ @%F@;@:F{ @;FBA2FBA=F{ BFBBBF{ DA+F{ FCF{ IH&F{ RFR RF{ R
FR)R&F{ R(FR)R)B,F{ U,FV VF{ V
FVVF{ VFVVF{ VC,F{ ZC	F{ ]B$F{ _4DF{ dC#F{ g+B*F{ jB9F{ mD3F{ rC F{ u	FF{ {GC{'GC{?F||GC|.F}}GC}F}}FGCCGCr  )r*   r   r+   r,   r-   r.   )rI   rJ   r-   rJ   )rI   rJ   r-   rU   )r6   rJ   r5   rJ   r-   rU   )
rI   rJ   r6   rJ   r5   rJ   r2   rJ   r-   rJ   )
rI   rJ   r6   rJ   r5   rJ   r2   rJ   r-   rU   )r-   rU   r   )r   rU   r   r   r-   rJ   )NNNNN)r   rJ   r   rJ   r   r   r   rJ   r   r   r   r.   r-   r   )U__doc__
__future__r   r  r  osr  r-  r  	threadingr  uuidtypingr   r   r   r   agent.codex_responses_adapterr   agent.displayr	   agent.error_classifierr
   r   agent.iteration_budgetr   agent.turn_contextr   agent.turn_retry_stater   agent.memory_managerr   agent.message_sanitizationr   r   r   r   r   r   r   r   r   agent.model_metadatar   r   r   r   r   r   agent.process_bootstrapr   agent.prompt_cachingr    agent.retry_utilsr!   agent.trajectoryr"   agent.usage_pricingr#   r$   ri  r%   hermes_loggingr&   tools.skill_provenancer'   utilsr(   r)   r  r  r>   rO  rC   rH   rT   r^   rd   rn   rq   ru   r   r   r  __all__r_  rD   rB   <module>r     s     # " " " " "   				  				 



       , , , , , , , , , , , , I I I I I I ' ' ' ' ' ' E E E E E E E E 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 ; ; ; ; ; ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                8 7 7 7 7 7 > > > > > > . . . . . . 6 6 6 6 6 6 D D D D D D D D 3 3 3 3 3 3 . . . . . . ; ; ; ; ; ; 8 8 8 8 8 8 8 8		8	$	$
 &[ ") ) ) )X     "         2   *   p p pf
 
 
 
 
D 15*.*.^< ^< ^< ^< ^<Dy 
rD   