
    *ni7                    N   U d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlmZmZmZmZ ddlmZmZ  eddd	
           eddd
          dZded<    G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          ZdS )z!Tests for the meeting event loop.    )annotationsN)Path)run_meetingrun_meeting_interactivesave_reportsave_transcript)AgentConfigMeetingResult	architectzSoftware ArchitectzYou are an architect.)namerolesystem_promptdevopszDevOps EngineerzYou are DevOps.)r   r   zdict[str, AgentConfig]SAMPLE_AGENTSc                  "    e Zd ZdZddZddZdS )SequentialMockClientz9Mock client that returns different responses in sequence.	responses	list[str]returnNonec                "    || _         d| _        d S Nr   )r   
call_indexselfr   s     9/root/projects/multi-agents-meeting/tests/test_meeting.py__init__zSequentialMockClient.__init__   s    "    systemstrmessageslist[dict[str, str]]c                    | j         t          | j                  k     r$| j        | j                  }| xj         dz  c_         |S t          j        dddd          S )N   zForced finish.FINISHz# Fallback Reportanalysisnext_actionfinal_reportr   lenr   jsondumps)r   r   r!   responses       r   chatzSequentialMockClient.chat   sc    ?S0000~do6HOOq OOOz(#/
 
   	r   N)r   r   r   r   r   r    r!   r"   r   r    __name__
__module____qualname____doc__r   r/    r   r   r   r      sB        CC   	 	 	 	 	 	r   r   c                  2    e Zd ZdZd	dZd	dZd	dZd	dZdS )
TestRunMeetingzTests for run_meeting function.r   r   c                	   t          j        ddddd          dt          j        ddd	d
          g}t          |          }t          dt          |d          }t          |t                    }|sddt          j                    v st          j
        t
                    rt          j        t
                    nddt          j                    v st          j
        |          rt          j        |          nddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}d}|j        }||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }	dd|	iz  }
t          t          j        |
                    dx}x}}d}|j        }||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }	dd|	iz  }
t          t          j        |
                    dx}x}}|j        }d}||k    }|st          j        d|fd||f          dt          j                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    dx}x}}|j        }t%          |          }d}||k    }|st          j        d|fd ||f          d!t          j                    v st          j
        t$                    rt          j        t$                    nd!dt          j                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          d"z  }d#d$|iz  }t          t          j        |                    dx}x}x}}dS )%z=Meeting calls one agent then finishes, returns MeetingResult.zNeed architect input.
CALL_AGENTr   zWhat architecture?r'   r(   target_agentprompt_for_agentz"Use microservices for scalability.zGot architect input.r%   z5# Meeting Report

Architect recommends microservices.r&   zDatabase migration   topicagent_configsclient
max_rounds5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr
   py0py1py2py4NzMeeting Reportinz4%(py1)s in %(py5)s
{%(py5)s = %(py3)s.final_report
}rI   py3py5assert %(py7)spy7microservices==z-%(py2)s
{%(py2)s = %(py0)s.topic
} == %(py5)srH   rJ   rQ   r   )>)zO%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.transcript
})
} > %(py8)sr+   )rH   rI   rP   rQ   py8assert %(py10)spy10)r,   r-   r   r   r   rE   r
   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationr)   _call_reprcomparer@   
transcriptr+   )r   r   mock_clientrF   @py_assert3@py_format5@py_assert0@py_assert4@py_assert2@py_format6@py_format8@py_assert1@py_assert7@py_assert6@py_format9@py_format11s                   r   test_simple_meeting_flowz'TestRunMeeting.test_simple_meeting_flow'   sl    J3+ +$8	    1J2' Y   
	 +955#7}]huvwww&-000000000000000z00000z0000000000000&00000&0000000000000-00000-00000000000000000000000066#66#66666666666#666666666666666666666666666666#66666666666666666666666666665&"55"55555555555"55555555555555555&55555&555555"5555555555555555555555555555|333|33333333333|3333333333333v33333v333333|33333333333333333333333333333333$)s$%%))%))))))))))%))))))))))))s)))))s)))))))))))))6)))))6))))))$))))%)))))))))))))))))))))))))))))))))))r   c                   t          j        dddd          g}t          |          }t          dt          |d          }t          |t                    }|sdd	t          j                    v st          j
        t
                    rt          j        t
                    nd	d
t          j                    v st          j
        |          rt          j        |          nd
dt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}|j        }d}||k    }|st          j        d|fd||f          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    dx}x}}|j        }d}||k    }|st          j        d|fd||f          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    dx}x}}|j        }d}||u}|st          j        d|fd||f          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    dx}x}}|j        }d}||u}|st          j        d|fd||f          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    dx}x}}|j        }|j        }
||
k    }|st          j        d|fd||
f          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          d
t          j                    v st          j
        |          rt          j        |          nd
t          j        |
          dz  }dd|iz  }t          t          j        |                    dx}x}}
|j        }t)          |          }t          j        } |            }t)          |          }||k    }|st          j        d|fd||f          dt          j                    v st          j
        t(                    rt          j        t(                    ndd
t          j                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dt          j                    v st          j
        t(                    rt          j        t(                    nddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          d	z  }d d!|iz  }t          t          j        |                    dx}x}x}x}x}}dS )"z7run_meeting returns a MeetingResult with full metadata.Done.r%   z# Quick Reportr&   z
Quick testr>   r?   rD   rE   rF   r
   rG   NrU   rW   rX   rR   rS   z4%(py2)s
{%(py2)s = %(py0)s.final_report
} == %(py5)s)is not)z6%(py2)s
{%(py2)s = %(py0)s.started_at
} is not %(py5)s)z7%(py2)s
{%(py2)s = %(py0)s.finished_at
} is not %(py5)s)<=)zS%(py2)s
{%(py2)s = %(py0)s.started_at
} <= %(py6)s
{%(py6)s = %(py4)s.finished_at
})rH   rJ   rK   py6assert %(py8)srZ   )z%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.participants
})
} == %(py14)s
{%(py14)s = %(py7)s(%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s.keys
}()
})
}setr   )	rH   rI   rP   rQ   rS   rZ   r\   py12py14zassert %(py16)spy16)r,   r-   r   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   r@   rd   r)   
started_atfinished_atparticipantsr{   keys)r   r   rf   rF   rg   rh   rn   rj   rl   rm   @py_assert5@py_format7rq   rk   @py_assert9@py_assert11@py_assert13rp   @py_format15@py_format17s                       r   'test_run_meeting_returns_meeting_resultz6TestRunMeeting.test_run_meeting_returns_meeting_result?   s    J#' 0   
	 +955<}U`mnooo&-000000000000000z00000z0000000000000&00000&0000000000000-00000-000000000000000000000000|+|+||++++++++++||++++++++++++v+++++v++++++|++++|+++++++++++++++++++++++++++"6&66"&66666666666"&6666666666666v66666v666666"6666&6666666666666666666666666666 ,, ,,,,,,,,,, ,,,,,,,,,,,,v,,,,,v,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!--!----------!------------v-----v------!------------------------------- 6F$66 $66666666666 $6666666666666v66666v666666 66666666666F66666F666666$6666666666666666666666666666&Ds&''D}/AD/A/A/C/CD3/C+D+DD'+DDDDDDDDDDD'+DDDDDDDDDDDDDsDDDDDsDDDDDDDDDDDDD6DDDDD6DDDDDD&DDDD'DDDDDDDDDDD3DDDDD3DDDDDDDDDDDDD}DDDDD}DDDDDD/ADDDD/CDDDD+DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDr   c           
        g }t          d          D ]G}|                    t          j        d| ddddd                     |                    d           H|                    t          j        d	d
dd                     t	          |          }t          dt          |d          }t          |t                    }|sddt          j
                    v st          j        t                    rt          j        t                    nddt          j
                    v st          j        |          rt          j        |          nddt          j
                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}g }d}|j        }	||	v }
|
}|
sd}|j        }||v }|}|s~t          j        d|
fd||	f          t          j        |          dt          j
                    v st          j        |          rt          j        |          ndt          j        |	          dz  }dd|iz  }|                    |           |
st          j        d|fd||f          t          j        |          dt          j
                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd |iz  }|                    |           t          j        |d!          i z  }d"d#|iz  }t          t          j        |                    dx}x}x}x}
x}	x}x}}dS )$z1Meeting forces finish when max_rounds is reached.
   zRound .r:   r   z	Thoughts?r;   zSome response.zForced to finish.r%   z$# Forced Report

Max rounds reached.r&   Test   r?   rD   rE   rF   r
   rG   NzForced ReportReportrL   )z4%(py3)s in %(py7)s
{%(py7)s = %(py5)s.final_report
})rP   rQ   rS   z%(py9)spy9)z8%(py12)s in %(py16)s
{%(py16)s = %(py14)s.final_report
})r|   r}   r~   z%(py18)spy18r$   zassert %(py21)spy21)rangeappendr,   r-   r   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   r)   rd   _format_boolop)r   r   irf   rF   rg   rh   rn   rk   rp   rj   ri   r   @py_assert15r   rm   @py_format10r   @py_format19@py_format20@py_format22s                        r   test_max_rounds_forces_finishz,TestRunMeeting.test_max_rounds_forces_finishR   s   	r 	/ 	/ATZ)QMMM+ +$/	) )      -....+#D%
 %
   	 	 	
 +9556{ghiii&-000000000000000z00000z0000000000000&00000&0000000000000-00000-000000000000000000000000XXX&"5X"55XXXXXXVEXXEX9XXXXXXXXXXXX"5XXXXXXXXXXXXXXXX&XXXXX&XXXXXX"5XXXXXXXXXXXXXXXXXXXXXXXXXXXEXXXXXXXXXXXXXXXXXVXXXXXVXXXXXXEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   c           
        t          j        ddddd          dt          j        dddd	d          d
t          j        dddd          g}t          |          }t          dt          |d          }t          |t                    }|sddt          j                    v st          j
        t
                    rt          j        t
                    nddt          j                    v st          j
        |          rt          j        |          nddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}d}|j        }||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }	dd|	iz  }
t          t          j        |
                    dx}x}}dS )z/Meeting calls multiple agents before finishing.zStart with architect.r:   r   zArchitecture thoughts?r;   zUse event-driven architecture.zNow DevOps.r   zDeployment concerns?zNeed Kubernetes.zAll covered.r%   z/# Full Report

Arch: event-driven. DevOps: K8s.r&   z
New systemr>   r?   rD   rE   rF   r
   rG   NzFull ReportrL   rN   rO   rR   rS   )r,   r-   r   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   r)   rd   )r   r   rf   rF   rg   rh   ri   rj   rk   rl   rm   s              r   !test_meeting_with_multiple_agentsz0TestRunMeeting.test_meeting_with_multiple_agentsg   s    J3+ +$<	    -J)+ ($:	    J*' S   
	* +955<}U`mnooo&-000000000000000z00000z0000000000000&00000&0000000000000-00000-0000000000000000000000003 33} 33333333333} 333333}3333333333333333333333 333333333333333333333333333333r   Nr   r   )r2   r3   r4   r5   rs   r   r   r   r6   r   r   r8   r8   $   sr        ))* * * *0E E E E&Y Y Y Y*4 4 4 4 4 4r   r8   c                      e Zd ZdZddZdS )	TestSaveReportzTests for save_report function.tmp_pathr   r   r   c                   d}t          |d|          }|j        } |            }|sddt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          dz  }t          t	          j        |                    d x}}|j	        }d}||k    }|st	          j
        d|fd	||f          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          d
z  }dd|iz  }	t          t	          j        |	                    d x}x}}d}
|j        }|
|v }|st	          j
        d|fd|
|f          t	          j        |
          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          dz  }dd|iz  }	t          t	          j        |	                    d x}
x}}|j        }d} ||          }||k    }|st	          j
        d|fd||f          dt          j                    v st	          j        |          rt	          j        |          ndt	          j        |          t	          j        |          t	          j        |          dt          j                    v st	          j        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}x}x}}d S )Nz# Test Report

Content here.z
test-topic)r@   
output_dirAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}pathrH   rJ   rK   z.mdrU   )z.%(py2)s
{%(py2)s = %(py0)s.suffix
} == %(py5)srX   rR   rS   rL   )z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.name
}rO   utf-8encoding)zX%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}(encoding=%(py4)s)
} == %(py8)sreportrH   rJ   rK   ry   rZ   r[   r\   )r   existsr]   r^   r_   r`   ra   rb   rc   suffixrd   r   	read_text)r   r   r   r   rn   rg   rh   rj   rl   rm   ri   rk   r   ro   rq   rr   s                   r   test_save_report_creates_filez,TestSaveReport.test_save_report_creates_file   s   16(KKK{{{}}}tt{}{#e#{e##########{e############t#####t######{####e###########################(ty(|y((((((((((|y(((((|(((((((((((t(((((t((((((y(((((((((((((((((((((((((((~9w9~~w///9/69999999999/6999999999999t99999t999999~9999w9999/999999999996999996999999999999999999999999999999999r   Nr   r   r   r   )r2   r3   r4   r5   r   r6   r   r   r   r      s.        )): : : : : :r   r   c                      e Zd ZdZddZdS )	TestSaveTranscriptz#Tests for save_transcript function.r   r   r   r   c                   ddl m } ddlm}  |dd |dddd	d          
          g}t          dddg|d |dddd	d           |dddd	d                    }t	          ||          }|j        } |            }|sddt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          t          j
        |          dz  }	t          t          j        |	                    dx}}|j        }|j        }d}
 ||
          }|sddt          j                    v st          j	        |          rt          j
        |          ndt          j
        |          t          j
        |          t          j
        |
          t          j
        |          dz  }t          t          j        |                    dx}x}x}
}|                    d          }d}||v }|st          j        d|fd||f          t          j
        |          dt          j                    v st          j	        |          rt          j
        |          nddz  }dd|iz  }t          t          j        |                    dx}}d}||v }|st          j        d|fd||f          t          j
        |          dt          j                    v st          j	        |          rt          j
        |          nddz  }dd|iz  }t          t          j        |                    dx}}d}||v }|st          j        d|fd||f          t          j
        |          dt          j                    v st          j	        |          rt          j
        |          nddz  }dd|iz  }t          t          j        |                    dx}}dS )zIsave_transcript writes a .transcript.md file with round-by-round content.r   )datetime)ScratchpadEntryr   Use microservices.i        r   )
agent_namecontent	timestampz
Test topicSome backgroundz# Report)r@   contextr   re   r)   r   r   )r   r   r   r   Nz.transcript.mdzdassert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.name
}.endswith
}(%(py6)s)
}r   r   r   rL   )z%(py1)s in %(py3)sr   )rI   rP   zassert %(py5)srQ   )r   
src.modelsr   r
   r   r   r]   r^   r_   r`   ra   rb   rc   r   endswithr   rd   )r   r   r   r   re   rF   r   rn   rg   rh   r   ro   rq   r   ri   rk   @py_format4rl   s                     r   $test_save_transcript_creates_md_filez7TestSaveTranscript.test_save_transcript_creates_md_file   s   %%%%%%...... O{<P\d\deiklnprtvw\x\xyyy

 %%!#xaR33 q"b"55
 
 
 v(;;;{{{}}}tt{}y3y!3"23!!"2333333333333333t33333t333333y3333!3333"23333333333333333333333333333..'.22&|w&&&&&&&&&&|w&&&&&|&&&&&&&&&&&w&&&&&w&&&&&&&&&&&&&&&&&&&&&&&&&&&%{g%%%%%%%%%%{g%%%%%{%%%%%%%%%%%g%%%%%g%%%%%%%%%%%%%%%%%%%%%%%%%%%#.#w..........#w.....#...........w.....w.............................r   Nr   )r2   r3   r4   r5   r   r6   r   r   r   r      s.        --/ / / / / /r   r   c                  *    e Zd ZdZd
dZd
dZd
dZd	S )TestRunMeetingInteractivez+Tests for run_meeting_interactive function.r   r   r   r   c           	     T   t          j        dddd          g}t          |          }t          ddt          |d|d 	          }t          |t                    }|sd
dt          j                    v st          j
        t
                    rt          j        t
                    nddt          j                    v st          j
        |          rt          j        |          nddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}|j        }d}||k    }|st          j        d|fd||f          dt          j                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j        |
                    dx}x}}dS )zFEmpty input from user ends the interactive loop after one meeting run.ru   r%   # Report V1r&   r    r>   c                    dS )Nr   r6   )_s    r   <lambda>z]TestRunMeetingInteractive.test_interactive_empty_input_finishes_immediately.<locals>.<lambda>   s    r r   r@   r   rA   rB   rC   r   input_fnrD   rE   rF   r
   rG   NrU   rv   rX   rR   rS   r,   r-   r   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   r)   rd   )r   r   r   rf   rF   rg   rh   rn   rj   rl   rm   s              r   1test_interactive_empty_input_finishes_immediatelyzKTestRunMeetingInteractive.test_interactive_empty_input_finishes_immediately   sS    J#' -   
	 +955('!\
 
 
 &-000000000000000z00000z0000000000000&00000&0000000000000-00000-000000000000000000000000"3m3"m3333333333"m333333333333v33333v333333"3333m33333333333333333333333333333r   c           	        dd"fd}t          j        dddd	          t          j        d
dddd          dt          j        dddd	          g}t          |          }t          ddt          |d||          }t          |t                    }|sddt          j                    v st          j
        t
                    rt          j        t
                    nddt          j                    v st          j
        |          rt          j        |          nddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}d}|j        }	||	v }
|
st          j        d|
fd||	f          t          j        |          dt          j                    v st          j
        |          rt          j        |          ndt          j        |	          dz  }d d!|iz  }t          t          j        |                    dx}x}
}	dS )#z1User feedback triggers additional meeting rounds.r   promptr    r   c                "    dz  dk    rdS dS )Nr$   zWhat about security?r   r6   )r   feedback_counts    r   
mock_inputz]TestRunMeetingInteractive.test_interactive_with_feedback_runs_more_rounds.<locals>.mock_input   s#    aN""--2r   zDone round 1.r%   r   r&   zHuman asked about security.r:   r   zAddress security concerns.r;   z%Security is handled via TLS and auth.zSecurity addressed.z # Report V2

Security addressed.r   r   r>   r   rD   rE   rF   r
   rG   Nz	Report V2rL   rN   rO   rR   rS   r   r    r   r    r   )r   r   r   r   rf   rF   rg   rh   ri   rj   rk   rl   rm   r   s                @r   /test_interactive_with_feedback_runs_more_roundszITestRunMeetingInteractive.test_interactive_with_feedback_runs_more_rounds   s   	 	 	 	 	 	 J+' -    J9+ +$@	    4J1' D   
	( +955('
 
 
 &-000000000000000z00000z0000000000000&00000&0000000000000-00000-0000000000000000000000001f11{11111111111{111111{11111111111f11111f111111111111111111111111111111111111r   c           	     L   ddfd}t          j        dddd	          t          j        d
ddd	          g}t          |          }t          ddt          |d||          }d |j        D             }t          |          }d}||k    }	|	st          j        d|	fd||f          dt          j
                    v st          j        t                    rt          j        t                    nddt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    dx}x}	}d}|d         }|j        }||v }|st          j        d|fd||f          t          j        |          t          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    dx}x}x}}dS ) z:Human feedback appears in the final transcript as [HUMAN].Fr   r    r   c                    sddS dS )NTConsider cost implicationsr   r6   )r   feedback_givens    r   r   zTTestRunMeetingInteractive.test_human_entry_appears_in_transcript.<locals>.mock_input   s    ! 4!%332r   zFirst pass done.r%   z# V1r&   zAddressing cost.z# V2 with costr   r   r>   r   c                (    g | ]}|j         d k    |S )HUMAN)r   ).0es     r   
<listcomp>zTTestRunMeetingInteractive.test_human_entry_appears_in_transcript.<locals>.<listcomp>  s$    QQQq9P9P9P9P9Pr   r$   rU   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr+   human_entries)rH   rI   rP   ry   rz   rZ   Nr   r   rL   )z/%(py1)s in %(py6)s
{%(py6)s = %(py4)s.content
})rI   rK   ry   r   )r,   r-   r   r   r   re   r+   r_   rd   r]   r^   r`   ra   rb   rc   r   )r   r   r   r   rf   rF   r   rk   r   rj   r   rq   ri   rg   r   s                 @r   &test_human_entry_appears_in_transcriptz@TestRunMeetingInteractive.test_human_entry_appears_in_transcript   s   	 	 	 	 	 	 J.' &   
 J.' 0   
	 +955('
 
 
 RQF$5QQQ=!!&Q&!Q&&&&&&&&&&!Q&&&&&&&&&&&&s&&&&&s&&&&&&&&&&&&&=&&&&&=&&&&&&!&&&&Q&&&&&&&&&&&&&&&&&&&&&&&&&&&+G}Q/?G/?/GG+/GGGGGGGGGGG+/GGGGGG+GGGG/?GGGG/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGr   Nr   )r2   r3   r4   r5   r   r   r   r6   r   r   r   r      s]        554 4 4 4,+2 +2 +2 +2Z#H #H #H #H #H #Hr   r   c                  *    e Zd ZdZddZddZddZdS )	TestMeetingWithContextManagerz0Tests for meeting loop with context compression.r   r   c                   ddl m} t          j        ddddd          dt          j        d	d
dd          g}t	          |          } |d          }t          dt          |dd|          }t          |t                    }|sddt          j
                    v st          j        t                    rt          j        t                    nddt          j
                    v st          j        |          rt          j        |          nddt          j
                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}d}|j        }	||	v }
|
st          j        d|
fd||	f          t          j        |          dt          j
                    v st          j        |          rt          j        |          ndt          j        |	          dz  }dd|iz  }t          t          j        |                    dx}x}
}	dS )z/Meeting works with context_manager integration.r   ContextManagerzNeed architect.r:   r   zArchitecture?r;   r   ru   r%   z# Report with compressionr&   p  budget_tokenszCompression testr>   r   r@   rA   rB   rC   r   context_managerrD   rE   rF   r
   rG   NzReport with compressionrL   rN   rO   rR   rS   )src.context_managerr   r,   r-   r   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   r)   rd   )r   r   r   rf   cmrF   rg   rh   ri   rj   rk   rl   rm   s                r   !test_meeting_with_context_managerz?TestMeetingWithContextManager.test_meeting_with_context_manager  s   666666 J-+ +$3	    !J#' ;   
	 +955^$///$'%
 
 
 &-000000000000000z00000z0000000000000&00000&0000000000000-00000-000000000000000000000000(?F,??(,???????????(,??????(???????????F?????F??????,??????????????????????????????r   c                   t          j        dddd          g}t          |          }t          dt          |d          }|j        }d}||k    }|st          j        d|fd	||f          d
t          j	                    v st          j
        |          rt          j        |          nd
t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}}dS )z<Meeting works without context_manager (backward compatible).ru   r%   z# No compression reportr&   zNo compress testr>   r?   rU   rv   rF   rX   rR   rS   N)r,   r-   r   r   r   r)   r_   rd   r]   r^   r`   ra   rb   rc   )	r   r   rf   rF   rn   rj   rg   rl   rm   s	            r   8test_meeting_without_context_manager_backward_compatiblezVTestMeetingWithContextManager.test_meeting_without_context_manager_backward_compatible;  sI    J#' 9   
	 +955$'	
 
 
 "?&??"&???????????"&?????????????v?????v??????"????&??????????????????????????????r   c                  	 ddl m} ddz  }t          j        dddd          g	 G 	fd	d
          } |            } |d          }t	          dt
          |d||          }t          |t                    }|sddt          j	                    v st          j        t                    rt          j        t                    nddt          j	                    v st          j        |          rt          j        |          nddt          j	                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}dS )zIWhen context is long and context_manager present, context_summary is set.r   r   Di N  ru   r%   z# Summary testr&   c                  (    e Zd ZdZd fdZdd	Zd
S )hTestMeetingWithContextManager.test_context_summary_generated_for_long_context.<locals>.SummaryMockClientz:Returns different responses for summarization vs PM calls.r   r   c                $    d| _         | _        d S r   )r   r   r   s    r   r   zqTestMeetingWithContextManager.test_context_summary_generated_for_long_context.<locals>.SummaryMockClient.__init__]  s    "#!*r   r   r    r!   r"   c                    d|v rdS | j         t          | j                  k     r$| j        | j                  }| xj         dz  c_         |S t          j        dddd          S )N	SummarizezContext summary generated.r$   zForced.r%   z
# Fallbackr&   r*   )r   r   r!   rs       r   r/   zmTestMeetingWithContextManager.test_context_summary_generated_for_long_context.<locals>.SummaryMockClient.chata  st    &((77?S%8%888t7AOOq(OOHz )#+$0# #   r   Nr   r0   r1   )r   s   r   SummaryMockClientr   Z  sM        LL+ + + + + +     r   r   r   r   zSummary testr>   r   rD   rE   rF   r
   rG   N)r   r   r,   r-   r   r   rE   r
   r]   r^   r_   r`   ra   rb   rc   )
r   r   long_contextr   rf   r   rF   rg   rh   r   s
            @r   /test_context_summary_generated_for_long_contextzMTestMeetingWithContextManager.test_context_summary_generated_for_long_contextM  s   666666U{J#' 0   
		 	 	 	 	 	 	 	 	 	( ('))^$/// ' 
 
 
 &-000000000000000z00000z0000000000000&00000&0000000000000-00000-00000000000000000000000000r   Nr   )r2   r3   r4   r5   r   r   r   r6   r   r   r   r     s^        ::@ @ @ @>@ @ @ @$+1 +1 +1 +1 +1 +1r   r   )r5   
__future__r   builtinsr]   _pytest.assertion.rewrite	assertionrewriter_   r,   pathlibr   src.meetingr   r   r   r   r   r	   r
   r   __annotations__r   r8   r   r   r   r   r6   r   r   <module>r     s   ' ' ' " " " " " "                     Z Z Z Z Z Z Z Z Z Z Z Z 1 1 1 1 1 1 1 1 +4HXopppkx.?O`aaa) )           &]4 ]4 ]4 ]4 ]4 ]4 ]4 ]4@	: 	: 	: 	: 	: 	: 	: 	:/ / / / / / / /:iH iH iH iH iH iH iH iHX_1 _1 _1 _1 _1 _1 _1 _1 _1 _1r   