llama_index [Bug]: 调试时event_pairs为空

vbopmzt1  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(27)

错误描述

当我启用调试 per the docs 时,我无法访问任何调试信息。 get_event_time_info 抛出一个除以零的错误,而 get_llm_inputs_outputs 返回一个空列表。

版本

0.10.19

重现步骤

以下是我的脚本:

❯ cat ingest.py
import os

from llama_index.core import VectorStoreIndex, StorageContext, load_index_from_storage
from llama_index.core.storage.docstore import SimpleDocumentStore
from llama_index.core.vector_stores import SimpleVectorStore
from llama_index.readers.github import GithubRepositoryReader, GithubClient
from llama_index.core.callbacks import (
    CallbackManager,
    LlamaDebugHandler,
    CBEventType,
)

persistence_dir = "index"

github_token = os.getenv("GITHUB_TOKEN")
owner = "kubernetes"
repo = "kubernetes"
branch = "master"

llama_debug = LlamaDebugHandler(print_trace_on_end=True)
callback_manager = CallbackManager([llama_debug])

if os.getenv("RELOAD_INDEX") == "true":
    github_client = GithubClient(os.getenv("GITHUB_TOKEN"))

    print("getting docs")
    documents = GithubRepositoryReader(
        github_client,
        owner=owner,
        repo=repo,
        use_parser=False,
        verbose=False,
    ).load_data(branch=branch)

    print("creating vector store")
    index = VectorStoreIndex.from_documents(documents, callback_manager=callback_manager)

    print("persisting index")
    index.storage_context.persist(persist_dir=persistence_dir)
else:
    print("loading index")
    storage_context = StorageContext.from_defaults(persist_dir=persistence_dir)
    print("building index")
    index = load_index_from_storage(storage_context, callback_manager=callback_manager)

print("building engine")
query_engine = index.as_query_engine()

print("sending query")
response = query_engine.query(
    "what podcast fields does it parse?"
)
llama_debug.flush_event_logs()

print(response)

print("\n\n=======\nDEBUG\n=======\n\n")
print(llama_debug.get_event_time_info(CBEventType.LLM))

print()
event_pairs = llama_debug.get_llm_inputs_outputs()
print("event pairs", event_pairs)
print()
print(event_pairs[0][0])
print()
print(event_pairs[0][1].payload.keys())
print()
print(event_pairs[0][1].payload["response"])
print()

输出是

❯ python ingest.py
loading index
building index
**********
Trace: index_construction
**********
building engine
sending query
The podcast fields that are parsed include title, link, description, pubDate, guid, itunes:subtitle, itunes:summary, itunes:author, itunes:explicit, itunes:duration, itunes:keywords, itunes:image, media:content, and enclosure.

=======
DEBUG
=======

Traceback (most recent call last):
  File "/home/git/llama-index/ingest.py", line 59, in <module>
    print(llama_debug.get_event_time_info(CBEventType.LLM))
  File "/home/miniforge/lib/python3.9/site-packages/llama_index/core/callbacks/llama_debug.py", line 149, in get_event_time_info
    return self._get_time_stats_from_event_pairs(event_pairs)
  File "/home/miniforge/lib/python3.9/site-packages/llama_index/core/callbacks/llama_debug.py", line 128, in _get_time_stats_from_event_pairs
    average_secs=total_secs / len(event_pairs),
ZeroDivisionError: float division by zero

相关日志/回溯

Traceback (most recent call last):
  File "/home/git/llama-index/ingest.py", line 59, in <module>
    print(llama_debug.get_event_time_info(CBEventType.LLM))
  File "/home/miniforge/lib/python3.9/site-packages/llama_index/core/callbacks/llama_debug.py", line 149, in get_event_time_info
    return self._get_time_stats_from_event_pairs(event_pairs)
  File "/home/miniforge/lib/python3.9/site-packages/llama_index/core/callbacks/llama_debug.py", line 128, in _get_time_stats_from_event_pairs
    average_secs=total_secs / len(event_pairs),
ZeroDivisionError: float division by zero
ndh0cuux

ndh0cuux1#

嘿,@superb-owl,很高兴看到你再次回到调试的数字荒野!希望你在代码和更远的地方一切顺利。
感谢你提供详细的信息。你在 get_event_time_info 方法中遇到的除以零错误是由于没有 CBEventType.LLM 类型的事件对。这个方法通过将总时间除以事件对的数量来计算平均时间。如果没有事件对,这将导致除以零错误。
为了防止这种错误,你可以在执行除法之前添加一个检查,以确保有事件对。以下是你可以在代码中进行的一个简单的修改:

if len(event_pairs) > 0:
    average_secs = total_secs / len(event_pairs)
else:
    average_secs = 0  # or another placeholder value

至于 get_llm_inputs_outputs 方法返回一个空列表,这可能是由于没有记录类型为 CBEventType.LLM 的事件。这个方法专门过滤 CBEventType.LLM 类型的事件。如果没有开始或结束这种类型的事件,该方法将返回一个空列表。
这种情况可能发生在感兴趣的事件没有被正确分类为 CBEventType.LLM ,或者这些事件没有按照预期在系统操作中发生。你可能需要检查你的事件记录和分类逻辑,以确保它按预期工作。
有关更多详细信息,请参阅 LlamaDebugHandler class 的源代码。
请告诉我是否需要进一步的帮助。

来源

关于 Dosu

此响应旨在节省您的时间并提供帮助。它不是精确的解决方案,而是您自己研究的一个起点。
帮助我变得更有用!如果你觉得这有帮助,请留下一个👍,如果不相关就留下一个👎。
如果你想继续对话,请用 @dosu-bot 开始回复。

sgtfey8w

sgtfey8w2#

你好,
我尝试使用我的OpenAI密钥在Llama Debug Handler Notebook上进行操作。那里的实现也是有问题的。

相关问题