lwant commited on
Commit
7e0251d
Β·
1 Parent(s): e777bbb

Add tools

Browse files
Files changed (3) hide show
  1. pyproject.toml +1 -0
  2. src/gaia_solving_agent/tools.py +41 -1
  3. uv.lock +29 -0
pyproject.toml CHANGED
@@ -12,6 +12,7 @@ dependencies = [
12
  "llama-index-llms-nebius>=0.1.2",
13
  "llama-index-multi-modal-llms-mistralai>=0.4.0",
14
  "llama-index-multi-modal-llms-nebius>=0.4.0",
 
15
  "llama-index-readers-web>=0.4.2",
16
  "llama-index-readers-youtube-transcript>=0.3.0",
17
  "llama-index-tools-duckduckgo>=0.3.0",
 
12
  "llama-index-llms-nebius>=0.1.2",
13
  "llama-index-multi-modal-llms-mistralai>=0.4.0",
14
  "llama-index-multi-modal-llms-nebius>=0.4.0",
15
+ "llama-index-readers-papers>=0.3.2",
16
  "llama-index-readers-web>=0.4.2",
17
  "llama-index-readers-youtube-transcript>=0.3.0",
18
  "llama-index-tools-duckduckgo>=0.3.0",
src/gaia_solving_agent/tools.py CHANGED
@@ -1,4 +1,4 @@
1
- from llama_index.core.schema import ImageDocument
2
  from llama_index.core.tools import FunctionTool
3
  from llama_index.core.tools.ondemand_loader_tool import OnDemandLoaderTool
4
  from llama_index.core.tools.tool_spec.base import BaseToolSpec
@@ -7,6 +7,7 @@ from llama_index.multi_modal_llms.mistralai import MistralAIMultiModal
7
  from llama_index.multi_modal_llms.nebius import NebiusMultiModal
8
  from llama_index.readers.web import SimpleWebPageReader
9
  from llama_index.readers.youtube_transcript import YoutubeTranscriptReader
 
10
  from tavily import AsyncTavilyClient
11
  from workflows import Context
12
 
@@ -28,6 +29,35 @@ async def tavily_search_web(query: str) -> str:
28
  return str(await client.search(query))
29
 
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  async def vllm_ask_image_tool(ctx: Context, query: str) -> str:
32
  """
33
  Asynchronously processes a visual-linguistic query paired with image data
@@ -119,3 +149,13 @@ If you are provided with a youtube link in the wrong format, make it fit one the
119
  """,
120
  )
121
  youtube_transcript_reader_toolspec = LoadAndSearchToolSpec.from_defaults(youtube_transcript_reader_tool)
 
 
 
 
 
 
 
 
 
 
 
1
+ from llama_index.core.schema import ImageDocument, Document
2
  from llama_index.core.tools import FunctionTool
3
  from llama_index.core.tools.ondemand_loader_tool import OnDemandLoaderTool
4
  from llama_index.core.tools.tool_spec.base import BaseToolSpec
 
7
  from llama_index.multi_modal_llms.nebius import NebiusMultiModal
8
  from llama_index.readers.web import SimpleWebPageReader
9
  from llama_index.readers.youtube_transcript import YoutubeTranscriptReader
10
+ from llama_index.readers.papers import ArxivReader
11
  from tavily import AsyncTavilyClient
12
  from workflows import Context
13
 
 
29
  return str(await client.search(query))
30
 
31
 
32
+ async def get_text_representation_of_additional_file(ctx: Context) -> str :
33
+ """
34
+ Retrieves the text representation of an additional file stored in the llamaindex context.
35
+
36
+ If the retrieved file is not a valid `Document` instance, it produces a
37
+ message indicating the mismatched type. Otherwise, it retrieves the text content
38
+ from the `Document`.
39
+
40
+ Parameters
41
+ ----------
42
+ ctx : Context
43
+ The llamaindex context object which contains the additional file.
44
+
45
+ Returns
46
+ -------
47
+ str
48
+ The text representation of the additional file if it is a `Document` instance;
49
+ otherwise, a descriptive message indicating the mismatched type.
50
+ """
51
+ additional_file = await ctx.store.get("additional_file")
52
+ if not isinstance(additional_file, Document):
53
+ return f"The additional file is not a LlamaIndex Document but a {type(additional_file)} object. I cannot get text representation, you should try other tool."
54
+
55
+ text_representation = additional_file.get_text_content()
56
+ if not text_representation:
57
+ return f"The additional {additional_file.__class__.__name__} file does not have any text content. I cannot get text representation, you should try other tool."
58
+ return text_representation
59
+
60
+
61
  async def vllm_ask_image_tool(ctx: Context, query: str) -> str:
62
  """
63
  Asynchronously processes a visual-linguistic query paired with image data
 
149
  """,
150
  )
151
  youtube_transcript_reader_toolspec = LoadAndSearchToolSpec.from_defaults(youtube_transcript_reader_tool)
152
+
153
+
154
+ research_paper_reader_tool = OnDemandLoaderTool.from_defaults(
155
+ ArxivReader(),
156
+ name="research_paper_reader_tool",
157
+ description=r"""
158
+ Gets a search query, return a list of Documents of the top corresponding scientific papers on Arxiv.
159
+ """,
160
+ )
161
+ research_paper_reader_toolspec = LoadAndSearchToolSpec.from_defaults(research_paper_reader_tool)
uv.lock CHANGED
@@ -18,6 +18,7 @@ dependencies = [
18
  { name = "llama-index-llms-nebius" },
19
  { name = "llama-index-multi-modal-llms-mistralai" },
20
  { name = "llama-index-multi-modal-llms-nebius" },
 
21
  { name = "llama-index-readers-web" },
22
  { name = "llama-index-readers-youtube-transcript" },
23
  { name = "llama-index-tools-duckduckgo" },
@@ -46,6 +47,7 @@ requires-dist = [
46
  { name = "llama-index-llms-nebius", specifier = ">=0.1.2" },
47
  { name = "llama-index-multi-modal-llms-mistralai", specifier = ">=0.4.0" },
48
  { name = "llama-index-multi-modal-llms-nebius", specifier = ">=0.4.0" },
 
49
  { name = "llama-index-readers-web", specifier = ">=0.4.2" },
50
  { name = "llama-index-readers-youtube-transcript", specifier = ">=0.3.0" },
51
  { name = "llama-index-tools-duckduckgo", specifier = ">=0.3.0" },
@@ -298,6 +300,19 @@ wheels = [
298
  { url = "https://files.pythonhosted.org/packages/46/27/be2ead7273ecf3be0c5b3ebf9e4bccedcd49ab45a7909e82588f56189cd2/arize_phoenix_otel-0.12.1-py3-none-any.whl", hash = "sha256:85167dd061d7d4e14c98edd5733afe151da8027d69f2ecfe29a6aa2484906fa3", size = 13871, upload-time = "2025-06-24T15:58:33.702Z" },
299
  ]
300
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  [[package]]
302
  name = "asttokens"
303
  version = "3.0.0"
@@ -1666,6 +1681,20 @@ wheels = [
1666
  { url = "https://files.pythonhosted.org/packages/68/4f/e30d4257fe9e4224f5612b77fe99aaceddae411b2e74ca30534491de3e6f/llama_index_readers_llama_parse-0.4.0-py3-none-any.whl", hash = "sha256:574e48386f28d2c86c3f961ca4a4906910312f3400dd0c53014465bfbc6b32bf", size = 2472, upload-time = "2024-11-18T00:00:07.293Z" },
1667
  ]
1668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1669
  [[package]]
1670
  name = "llama-index-readers-web"
1671
  version = "0.4.2"
 
18
  { name = "llama-index-llms-nebius" },
19
  { name = "llama-index-multi-modal-llms-mistralai" },
20
  { name = "llama-index-multi-modal-llms-nebius" },
21
+ { name = "llama-index-readers-papers" },
22
  { name = "llama-index-readers-web" },
23
  { name = "llama-index-readers-youtube-transcript" },
24
  { name = "llama-index-tools-duckduckgo" },
 
47
  { name = "llama-index-llms-nebius", specifier = ">=0.1.2" },
48
  { name = "llama-index-multi-modal-llms-mistralai", specifier = ">=0.4.0" },
49
  { name = "llama-index-multi-modal-llms-nebius", specifier = ">=0.4.0" },
50
+ { name = "llama-index-readers-papers", specifier = ">=0.3.2" },
51
  { name = "llama-index-readers-web", specifier = ">=0.4.2" },
52
  { name = "llama-index-readers-youtube-transcript", specifier = ">=0.3.0" },
53
  { name = "llama-index-tools-duckduckgo", specifier = ">=0.3.0" },
 
300
  { url = "https://files.pythonhosted.org/packages/46/27/be2ead7273ecf3be0c5b3ebf9e4bccedcd49ab45a7909e82588f56189cd2/arize_phoenix_otel-0.12.1-py3-none-any.whl", hash = "sha256:85167dd061d7d4e14c98edd5733afe151da8027d69f2ecfe29a6aa2484906fa3", size = 13871, upload-time = "2025-06-24T15:58:33.702Z" },
301
  ]
302
 
303
+ [[package]]
304
+ name = "arxiv"
305
+ version = "2.2.0"
306
+ source = { registry = "https://pypi.org/simple" }
307
+ dependencies = [
308
+ { name = "feedparser" },
309
+ { name = "requests" },
310
+ ]
311
+ sdist = { url = "https://files.pythonhosted.org/packages/0b/16/3d72446400a59d1fbda24fed2289661398994164e07d72cfa85e43ce5e36/arxiv-2.2.0.tar.gz", hash = "sha256:6072a2211e95697092ef32acde0144d7de2cfa71208e2751724316c9df322cc0", size = 16910, upload-time = "2025-04-08T06:16:09.824Z" }
312
+ wheels = [
313
+ { url = "https://files.pythonhosted.org/packages/71/1e/e7f0393e836b5347605fc356c24d9f9ae9b26e0f7e52573b80e3d28335eb/arxiv-2.2.0-py3-none-any.whl", hash = "sha256:545b8af5ab301efff7697cd112b5189e631b80521ccbc33fbc1e1f9cff63ca4d", size = 11696, upload-time = "2025-04-08T06:16:08.844Z" },
314
+ ]
315
+
316
  [[package]]
317
  name = "asttokens"
318
  version = "3.0.0"
 
1681
  { url = "https://files.pythonhosted.org/packages/68/4f/e30d4257fe9e4224f5612b77fe99aaceddae411b2e74ca30534491de3e6f/llama_index_readers_llama_parse-0.4.0-py3-none-any.whl", hash = "sha256:574e48386f28d2c86c3f961ca4a4906910312f3400dd0c53014465bfbc6b32bf", size = 2472, upload-time = "2024-11-18T00:00:07.293Z" },
1682
  ]
1683
 
1684
+ [[package]]
1685
+ name = "llama-index-readers-papers"
1686
+ version = "0.3.2"
1687
+ source = { registry = "https://pypi.org/simple" }
1688
+ dependencies = [
1689
+ { name = "arxiv" },
1690
+ { name = "defusedxml" },
1691
+ { name = "llama-index-core" },
1692
+ ]
1693
+ sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/9340fd0ac123508cbcdd9673f153aa47d5ab39c66b7af192fdd13d1c5b02/llama_index_readers_papers-0.3.2.tar.gz", hash = "sha256:825bbc1875744a7e3e84ed8d2776eaba848c57357af1ec84984325a83a742ac1", size = 5238, upload-time = "2025-04-03T20:00:24.86Z" }
1694
+ wheels = [
1695
+ { url = "https://files.pythonhosted.org/packages/79/2e/6a5dea06fb2d19b499f8db92e29855d32fa4c529bce5360b8e689b866781/llama_index_readers_papers-0.3.2-py3-none-any.whl", hash = "sha256:9166790e26f968db010f1f87c31ef335d0e78e583348ac749a632cd0c8540bea", size = 6774, upload-time = "2025-04-03T20:00:24.05Z" },
1696
+ ]
1697
+
1698
  [[package]]
1699
  name = "llama-index-readers-web"
1700
  version = "0.4.2"