Ë
    áß²j
  ã            	       ó¾   — d Z ddlZddlZddlZddlmZ ddlmZmZmZ  ej                  e
«      Zdedefd„Zdedefd„Zd	eddfd
„Zddeeeef      dededefd„Zy)u€   Trajectory saving + scratchpad helpers (``_convert_to_trajectory_format`` stays an AIAgent method â€” batch_runner.py calls it).é    N)Údatetime)ÚAnyÚDictÚListÚcontentÚreturnc                 óV   — | rd| vr| S | j                  dd«      j                  dd«      S )z4Convert <REASONING_SCRATCHPAD> tags to <think> tags.ú<REASONING_SCRATCHPAD>z<think>ú</REASONING_SCRATCHPAD>z</think>)Úreplace©r   s    ú5/home/ubuntu/.hermes/hermes-agent/agent/trajectory.pyÚconvert_scratchpad_to_thinkr      s3   € áÐ.°gÑ=ØˆØ�?‰?Ð3°YÓ?×GÑGÐHaÐcmÓnÐnó    c                 ó0   — t        | «      xr
 d| v xr d| vS )zLWhether content has an opening <REASONING_SCRATCHPAD> without a closing tag.r
   r   )Úboolr   s    r   Úhas_incomplete_scratchpadr      s#   € ä�‹=ÒmÐ5¸Ð@ÒmÐE^ÐfmÐEmÐmr   Úacquirec                 ó€  — t         j                  dk(  roddl}| j                  d«       |j	                  | j                  «       |r|j                  n|j                  d«       | j                  dt         j                  «       yddl	}|j                  | j                  «       |r|j                  n|j                  «       y)z¨Exclusive whole-file lock on an append handle: ``flock`` on POSIX, a 1-byte
    ``msvcrt.locking`` range at offset 0 on Windows (append position is restored by the OS).Úntr   Né   )ÚosÚnameÚmsvcrtÚseekÚlockingÚfilenoÚLK_LOCKÚLK_UNLCKÚSEEK_ENDÚfcntlÚflockÚLOCK_EXÚLOCK_UN)Úfr   r   r!   s       r   Ú_lock_append_handler&      su   € ô 
‡w�w�$‚ÛØ	�‰ˆqŒ	Ø�‰�q—x‘x“z±W 6§>¢>À&Ç/Á/ÐSTÔUØ	�‰ˆq”"—+‘+ÕãØ�‰�A—H‘H“J± §¢¸e¿m¹mÕLr   Ú
trajectoryÚmodelÚ	completedÚfilenamec                 óú  — |€|rdnd}| t        j                  «       j                  «       ||dœ}	 t        j                  |d¬«      dz   }t        |dd	¬
«      5 }t        |d«       	 |j                  |«       |j                  «        t        |d«       	 ddd«       t        j                  d|«       y# t        |d«       w xY w# 1 sw Y   Œ1xY w# t        $ r }t        j                  d|«       Y d}~yd}~ww xY w)zAppend a ShareGPT-format entry to a JSONL file (default trajectory_samples.jsonl / failed_trajectories.jsonl by ``completed``).Nztrajectory_samples.jsonlzfailed_trajectories.jsonl)ÚconversationsÚ	timestampr(   r)   F)Úensure_asciiÚ
Úazutf-8)ÚencodingTzTrajectory saved to %szFailed to save trajectory: %s)r   ÚnowÚ	isoformatÚjsonÚdumpsÚopenr&   ÚwriteÚflushÚloggerÚinfoÚ	ExceptionÚwarning)r'   r(   r)   r*   ÚentryÚliner%   Úes           r   Úsave_trajectoryr@   %   sà   € àÐÙ1:Ñ-Ð@[ˆØ(´x·|±|³~×7OÑ7OÓ7QÐ\aÐpyÑz€Eð;Ü�z‰z˜%¨eÔ4°tÑ;ˆÜ�(˜C¨'Ô2ð 		.°aô    4Ô(ð.Ø—‘˜”Ø—‘”	ä# A uÕ-÷		.ô 	�‰Ð,¨hÕ7øô $ A uÕ-ú÷		.ð 		.ûô ò ;Ü�‰Ð6¸×:Ñ:ûð;úsG   ±(C ÁCÁ'!B4ÂCÂC Â4CÃCÃCÃ
C Ã	C:ÃC5Ã5C:)N)Ú__doc__r4   Úloggingr   r   Útypingr   r   r   Ú	getLoggerÚ__name__r9   Ústrr   r   r   r&   r@   © r   r   ú<module>rH      s    ðñ Gã Û Û 	Ý ß "Ñ "à	ˆ×	Ñ	˜8Ó	$€ðo¨ð o°ó oðn sð n¨tó nð

M Dð 
M¨Tó 
Mñ;  T¨#¨s¨(¡^Ñ 4ð ;¸Sð ;ÈTð ;Ð]`ô ;r   