def on_event_start(
self,
event_type: CBEventType,
payload: Any = None,
event_id: str = "",
parent_id: str = "",
**kwargs: Any,
) -> str:
"""Run when an event starts and return id of event."""
event = CBEvent(event_type, payload=payload, id_=event_id)
self._event_pairs_by_id[event.id_].append(event)
if event_type is CBEventType.QUERY:
self.schema.question = payload["query_str"]
if event_type is CBEventType.TEMPLATING and "template_vars" in payload:
template_vars = payload["template_vars"]
self.schema.context = template_vars.get("context_str", "")
elif event_type is CBEventType.RERANKING and "nodes" in payload:
self.schema.eval_types.add("reranking")
# Store old context data
self.schema.old_context = [node.text for node in payload["nodes"]]
elif event_type is CBEventType.SUB_QUESTION:
# For the first sub question, store parent question and parent id
if "sub_question" not in self.schema.eval_types:
self.schema.parent_question = self.schema.question
self.schema.eval_types.add("sub_question")
# Store sub question data - question and parent id
self.schema.sub_question_parent_id = parent_id
return event_id
@dosu So, if the event_id is returned at the end, how to retrieve it in my custom_query method to get the event_id for the current request. Please provide code for that
7条答案
按热度按时间8qgya5xd1#
在分层代理设置中,要获取最底层代理的
event_id
方法中的当前请求的custom_query
,可以使用UpTrainCallbackHandler
类中的on_event_start
方法。此方法处理事件的开始并返回event_id
。以下是来自
on_event_start
方法的相关代码片段:在此方法中,最后返回
event_id
,您可以在custom_query
方法中使用它来获取当前请求的event_id
。此外,您还可以创建自定义事件处理程序来捕获和处理这些事件,包括
event_id
。以下是如何创建自定义事件处理程序的示例:然后将此事件处理程序附加到调度器以监视事件和跨度的到来:
通过使用这些工具,您可以有效地管理并检索分层代理设置中的
event_id
。dzhpxtsq2#
@dosu So, if the event_id is returned at the end, how to retrieve it in my custom_query method to get the event_id for the current request. Please provide code for that
zpf6vheq3#
要获取当前请求的
event_id
,您可以使用CallbackManager
来管理和访问事件堆栈。以下是如何实现这一点的示例:event_id
的自定义回调处理程序。custom_query
方法中检索event_id
:event_id
。在此设置中,
CustomCallbackHandler
在事件开始时捕获event_id
并提供一种检索当前event_id
的方法。然后,您可以在custom_query
方法中使用此处理程序获取当前请求的event_id
。mbjcgjjk4#
当我们在Web API中使用代理时,多个请求会并行进行,这个方法是否有效?
gg0vcinb5#
要确保
event_id
检索是线程安全的,并且正确地与Web API中的当前请求相对应,其中多个请求正在并行处理,您可以使用上下文本地存储。在Python中,可以使用contextvars
模块实现这一点。以下是一个示例:custom_query
方法中检索event_id
:通过使用
ContextVar
,每个请求的event_id
被正确地隔离和线程安全地处理,确保即使在并行处理多个请求时,event_id
检索也能正常工作。vaqhlq816#
在子代理的自定义查询工具方法中,如何获取最顶层父代理的event_id?
dfty9e197#
要获取子代理的
custom_query
方法中顶层父代理的event_id
,您可以使用一个ContextVar
来跟踪事件层次结构并存储根事件ID。以下是如何实现这一点的方法:custom_query
方法中检索根event_id
:event_id
。通过使用
ContextVar
存储根事件ID,您可以确保在您的custom_query
方法中正确跟踪和访问根event_id
,即使在处理分层代理和并行请求 1(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/callbacks/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/callbacks/base.py) 时也是如此。