@ -153,6 +153,28 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin):
user_id = user_id ,
user_id = user_id ,
llm_generic_fields = extracted_entities . get ( " generic_memory " , { } ) ,
llm_generic_fields = extracted_entities . get ( " generic_memory " , { } ) ,
)
)
sales_search_context = await self . _extract_missing_sales_search_context_with_llm (
message = routing_message ,
user_id = user_id ,
turn_decision = turn_decision ,
extracted_entities = extracted_entities ,
)
if sales_search_context :
extracted_entities = self . _merge_extracted_entities (
extracted_entities ,
{
" generic_memory " : sales_search_context ,
" review_fields " : { } ,
" review_management_fields " : { } ,
" order_fields " : { } ,
" cancel_order_fields " : { } ,
" intents " : { } ,
} ,
)
self . _capture_generic_memory (
user_id = user_id ,
llm_generic_fields = sales_search_context ,
)
domain_hint = self . _domain_from_turn_decision ( turn_decision )
domain_hint = self . _domain_from_turn_decision ( turn_decision )
if domain_hint == " general " :
if domain_hint == " general " :
@ -806,6 +828,29 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin):
async def _extract_entities_with_llm ( self , message : str , user_id : int | None ) - > dict :
async def _extract_entities_with_llm ( self , message : str , user_id : int | None ) - > dict :
return await self . planner . extract_entities ( message = message , user_id = user_id )
return await self . planner . extract_entities ( message = message , user_id = user_id )
async def _extract_sales_search_context_with_llm ( self , message : str , user_id : int | None ) - > dict :
return await self . planner . extract_sales_search_context ( message = message , user_id = user_id )
async def _extract_missing_sales_search_context_with_llm (
self ,
message : str ,
user_id : int | None ,
turn_decision : dict | None ,
extracted_entities : dict | None ,
) - > dict :
decision = turn_decision or { }
decision_intent = str ( decision . get ( " intent " ) or " " ) . strip ( ) . lower ( )
decision_domain = str ( decision . get ( " domain " ) or " " ) . strip ( ) . lower ( )
if decision_domain != " sales " and decision_intent not in { " order_create " , " inventory_search " } :
return { }
generic_memory = ( extracted_entities or { } ) . get ( " generic_memory " )
if not isinstance ( generic_memory , dict ) :
generic_memory = { }
if generic_memory . get ( " orcamento_max " ) or generic_memory . get ( " perfil_veiculo " ) :
return { }
return await self . _extract_sales_search_context_with_llm ( message = message , user_id = user_id )
async def _extract_turn_decision_with_llm ( self , message : str , user_id : int | None ) - > dict :
async def _extract_turn_decision_with_llm ( self , message : str , user_id : int | None ) - > dict :
return await self . planner . extract_turn_decision ( message = message , user_id = user_id )
return await self . planner . extract_turn_decision ( message = message , user_id = user_id )