1717from langchain_core .messages import HumanMessage , SystemMessage
1818
1919from . import Dialog , Turn
20- from .personas import Persona
20+ from .personas import Persona , PersonaAgent
2121
2222
2323class LLMDialogOutput (BaseModel ):
@@ -152,10 +152,13 @@ class PersonaDialogGenerator(DialogGenerator):
152152 :ivar persona_b: The second persona.
153153 :vartype persona_b: Persona
154154 """
155+ _agent_a = None
156+ _agent_b = None
157+
155158 def __init__ (self ,
156159 model : Union [ChatOllama , str ],
157- persona_a : Persona ,
158- persona_b : Persona ,
160+ persona_a : Union [ Persona , PersonaAgent ] ,
161+ persona_b : Union [ Persona , PersonaAgent ] ,
159162 dialogue_details : str = "" ,
160163 response_details : str = "responses SHOULD NOT be too long and wordy, should be "
161164 "approximately one utterance long" ,
@@ -166,9 +169,9 @@ def __init__(self,
166169 :param model: The LLM or model name to use.
167170 :type model: Union[ChatOllama, str]
168171 :param persona_a: The first persona.
169- :type persona_a: Persona
172+ :type persona_a: Persona (or PersonaAgent)
170173 :param persona_b: The second persona.
171- :type persona_b: Persona
174+ :type persona_b: Persona (or PersonaAgent)
172175 :param dialogue_details: Additional dialogue instructions.
173176 :type dialogue_details: str
174177 :param response_details: Instructions for response style.
@@ -177,6 +180,10 @@ def __init__(self,
177180 :type scenario: dict
178181 """
179182
183+ if isinstance (persona_a , PersonaAgent ) and isinstance (persona_b , PersonaAgent ):
184+ self ._agent_a = persona_a
185+ self ._agent_b = persona_b
186+
180187 dialogue_details = f"""Role play as the following two characters having a conversations. The characters are defined by the personas in the following lines. You always stay in character.
181188[[ ## BEGING FIRST PERSONA ## ]]
182189{ persona_a }
@@ -194,3 +201,12 @@ def __init__(self,
194201 super ().__init__ (model = model ,
195202 dialogue_details = dialogue_details ,
196203 scenario = scenario )
204+
205+ def generate (self , seed : int = None , id : int = None , max_iterations : int = 20 ):
206+ if self ._agent_a and self ._agent_b :
207+ return self ._agent_a .dialog_with (self ._agent_b ,
208+ max_iterations = max_iterations ,
209+ id = id ,
210+ seed = seed )
211+ else :
212+ return super ().generate (seed = seed , id = id )
0 commit comments