llama_index [Bug]: GitHub阅读器快速入门抛出错误

o3imoua4  于 2个月前  发布在  Git
关注(0)|答案(8)|浏览(44)

Bug描述

在运行GithubReader MVP时,出现了一个关键错误。此外,demo需要更新以利用github客户端。

版本

0.10.20

重现步骤

# Example gihub repo reader
# %pip install llama-index-readers-github llama-index nest_asyncio httpx
# %env OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# %env GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

import nest_asyncio
nest_asyncio.apply() 

from llama_index.core import VectorStoreIndex
from llama_index.readers.github import GithubRepositoryReader
from llama_index.readers.github.repository.github_client import GithubClient
import os

owner = "jerryjliu"
repo = "llama_index"
branch = "main"

github_client = GithubClient(github_token=os.environ["GITHUB_TOKEN"], verbose=True)
reader = GithubRepositoryReader(github_client=github_client, repo="repo",owner="owner")
reader.load_data(branch="branch") # throws

相关日志/回溯

Traceback (most recent call last):
  File "/Users/michael.berk/dev/mlflow/llama_index/testing/github_reader.py", line 123, in <module>
    load_data_from_branch()
  File "/Users/michael.berk/dev/mlflow/llama_index/testing/github_reader.py", line 72, in wrapper
    func(*args, **kwargs)
  File "/Users/michael.berk/dev/mlflow/llama_index/testing/github_reader.py", line 117, in load_data_from_branch
    documents = reader1.load_data(branch="main")
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/llama_index/readers/github/repository/base.py", line 299, in load_data
    return self._load_data_from_branch(branch)
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/llama_index/readers/github/repository/base.py", line 259, in _load_data_from_branch
    branch_data: GitBranchResponseModel = self._loop.run_until_complete(
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/nest_asyncio.py", line 98, in run_until_complete
    return f.result()
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/asyncio/futures.py", line 201, in result
    raise self._exception.with_traceback(self._exception_tb)
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/asyncio/tasks.py", line 232, in __step
    result = coro.send(None)
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/llama_index/readers/github/repository/github_client.py", line 361, in get_branch
    return GitBranchResponseModel.from_json(
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/dataclasses_json/api.py", line 63, in from_json
    return cls.from_dict(kvs, infer_missing=infer_missing)
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/dataclasses_json/api.py", line 70, in from_dict
    return _decode_dataclass(cls, kvs, infer_missing)
  File "/Users/michael.berk/opt/anaconda3/envs/1-dev/lib/python3.10/site-packages/dataclasses_json/core.py", line 172, in _decode_dataclass
    field_value = kvs[field.name]
KeyError: 'commit'

详情

  • dataclasses-json版本:0.6.4
  • 这也会失败:

llama_index/llama-index-integrations/readers/llama-index-readers-github/llama_index/readers/github/repository/base.py
第537行 5c53f41
| | importtime |

kxkpmulp

kxkpmulp1#

嘿 @michael-berk,很高兴再次看到你深入研究LlamaIndex!希望你已经准备好迎接另一个编程冒险 🚀
感谢你报告这个问题。看起来这个错误与一个KeyError有关,键为'commit'。这种错误通常发生在程序尝试访问一个不存在的字典键时。在这种情况下,程序似乎试图从GitHub API的JSON响应中访问'commit'键,但它不存在。
根据你提供的回溯信息,错误是在 GitBranchResponseModel 类的 from_json 方法中引发的。这个方法试图从GitHub API的JSON响应中创建一个 GitBranchResponseModel 示例,但由于响应中没有'commit'键而失败。
这个问题可能是由于GitHub API响应结构的变化或用于身份验证的Personal Access Token(PAT)的问题导致的。在LlamaIndex仓库之前报告过类似的问题( KeyError: 'commit' when loading data from GitHub repository using branch name )。在那起问题中,用户发现通过创建具有适当授权的新PAT来解决问题。
至于更新演示以利用GitHub客户端,你可以将硬编码的字符串 "repo"、"owner" 和 "branch" 分别替换为变量 repoownerbranch。以下是如何做到这一点的方法:

reader = GithubRepositoryReader(github_client=github_client, repo=repo, owner=owner)
reader.load_data(branch=branch)

这将确保 GithubRepositoryReader 使用正确的仓库所有者和名称初始化,并使用正确的分支名调用 load_data 方法。
我希望这有所帮助!如果你有任何其他问题或需要进一步澄清,请随时提问。

来源

关于Dosu

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

zpjtge22

zpjtge222#

如果你将repo更改为run-llama而不是jerryliu,它可以正常工作,否则你会得到一个301 response, moved

zvms9eto

zvms9eto3#

我遇到了相同的错误。我将所有者更改为run-llama,更新了llama-index到版本0.10.22,尝试读取langchain仓库,那个可以正常工作。我在两个仓库中使用了相同的设置。我尝试了一些其他仓库,结果参差不齐。对于一些仓库,它可以正常工作,而对于其他仓库,我会遇到这个错误。

2nbm6dog

2nbm6dog4#

在这里也是一样。我得到了KeyError: 'commit'KeyError: 'url',它们来自不同的仓库。

xggvc2p6

xggvc2p65#

同样的错误在这里
KeyError: 'url'

mutmk8jj

mutmk8jj6#

对我来说也是同样的错误。KeyError: 'url'。函数在这个点失败了(在llama_index/readers/github/repository/github_client.py):

response = (
            await self.request(
                "getTree",
                "GET",
                owner=owner,
                repo=repo,
                tree_sha=tree_sha,
                timeout=timeout,
                retries=retries,
            )
        ).text
        return GitTreeResponseModel.from_json(response)

错误是在GitTreeResponseModel.from_json(response)抛出的。看起来原因是我试图摄取的仓库中有子模块,这会创建没有url属性的树项。
我通过使用以下实现来绕过这个问题:

root = (
            await self._github_client.request(
                "getTree",
                "GET",
                owner=owner,
                repo=repo,
                tree_sha=tree_sha,
                timeout=timeout,
                retries=retries,
            )
        ).json()
        root["tree"] = [path for path in root["tree"] if path.get("url") is not None]
        return GitTreeResponseModel.from_json(json.dumps(root))

如果有人想要修复这个函数,那就太好了!

ulmd4ohb

ulmd4ohb7#

@david1542 这个方法对我有效,但完整的修复需要使用 import json 并改用 self.request 而不是 self._github_client.request
修复发生在 github_client.py 文件的大约第 404 行。
感谢你的努力!

jdzmm42g

jdzmm42g8#

在github_client.py的第364行附近,出现了一个类似的问题。它只影响了我尝试拉取的部分仓库。
经过一番调试后,我最终选择克隆仓库并使用简单的目录读取器。我不知道这是否是GitHub API的稳定性导致的问题,还是其他原因,但我会继续前进。

相关问题