EtienneB commited on
Commit
8ca5d55
·
1 Parent(s): 9a1c353

updated tools and agent

Browse files
Files changed (3) hide show
  1. __pycache__/tools.cpython-313.pyc +0 -0
  2. agent.py +5 -3
  3. tools.py +86 -1
__pycache__/tools.cpython-313.pyc CHANGED
Binary files a/__pycache__/tools.cpython-313.pyc and b/__pycache__/tools.cpython-313.pyc differ
 
agent.py CHANGED
@@ -7,13 +7,14 @@ from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint
7
  from langgraph.graph import START, MessagesState, StateGraph
8
  from langgraph.prebuilt import ToolNode, tools_condition
9
 
10
- from tools import (absolute, add, compound_interest, convert_temperature,
 
11
  divide, exponential, factorial, floor_divide,
12
  get_current_time_in_timezone, greatest_common_divisor,
13
  is_prime, least_common_multiple, logarithm, modulus,
14
  multiply, percentage_calculator, power,
15
  roman_calculator_converter, square_root, subtract,
16
- web_search)
17
 
18
  # Load Constants
19
  load_dotenv()
@@ -26,7 +27,8 @@ tools = [
26
  exponential, web_search, roman_calculator_converter,
27
  get_current_time_in_timezone, compound_interest,
28
  convert_temperature, factorial, greatest_common_divisor,
29
- is_prime, least_common_multiple, percentage_calculator
 
30
  ]
31
 
32
  def build_graph():
 
7
  from langgraph.graph import START, MessagesState, StateGraph
8
  from langgraph.prebuilt import ToolNode, tools_condition
9
 
10
+ from tools import (absolute, add, analyze_excel_file, arvix_search,
11
+ audio_transcription, compound_interest, convert_temperature,
12
  divide, exponential, factorial, floor_divide,
13
  get_current_time_in_timezone, greatest_common_divisor,
14
  is_prime, least_common_multiple, logarithm, modulus,
15
  multiply, percentage_calculator, power,
16
  roman_calculator_converter, square_root, subtract,
17
+ web_search, wiki_search)
18
 
19
  # Load Constants
20
  load_dotenv()
 
27
  exponential, web_search, roman_calculator_converter,
28
  get_current_time_in_timezone, compound_interest,
29
  convert_temperature, factorial, greatest_common_divisor,
30
+ is_prime, least_common_multiple, percentage_calculator,
31
+ wiki_search, analyze_excel_file, arvix_search, audio_transcription
32
  ]
33
 
34
  def build_graph():
tools.py CHANGED
@@ -1,9 +1,14 @@
1
  import datetime
2
  import math
 
3
  from typing import Union
4
 
 
5
  import pytz
6
- from langchain_community.document_loaders import ArxivLoader, WikipediaLoader
 
 
 
7
  from langchain_community.tools import DuckDuckGoSearchRun
8
  from langchain_core.tools import tool
9
 
@@ -581,3 +586,83 @@ def arvix_search(query: str) -> str:
581
  for doc in search_docs
582
  ])
583
  return {"arvix_results": formatted_search_docs}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import datetime
2
  import math
3
+ import os
4
  from typing import Union
5
 
6
+ import pandas
7
  import pytz
8
+ from langchain_community.document_loaders import (
9
+ ArxivLoader, AssemblyAIAudioTranscriptLoader, WikipediaLoader)
10
+ from langchain_community.document_loaders.generic import GenericLoader
11
+ from langchain_community.document_loaders.parsers import LanguageParser
12
  from langchain_community.tools import DuckDuckGoSearchRun
13
  from langchain_core.tools import tool
14
 
 
586
  for doc in search_docs
587
  ])
588
  return {"arvix_results": formatted_search_docs}
589
+
590
+
591
+ @tool
592
+ def analyze_excel_file(file_path: str, query: str) -> str:
593
+ """
594
+ Analyze an Excel file using pandas and answer a question about it.
595
+ Args:
596
+ file_path (str): the path to the Excel file.
597
+ query (str): Question about the data
598
+ """
599
+ try:
600
+ file = pandas.read_excel(file_path)
601
+
602
+ result = (
603
+ f"Excel file loaded with {len(file)} rows and {len(file.columns)} columns.\n"
604
+ )
605
+ result += f"Columns: {', '.join(file.columns)}\n\n"
606
+
607
+ result += "Summary statistics:\n"
608
+ result += str(file.describe())
609
+
610
+ return result
611
+
612
+ except Exception as e:
613
+ return f"Error analyzing Excel file: {str(e)}"
614
+
615
+
616
+ @tool
617
+ def python_code_parser(file_path: str) -> str:
618
+ """
619
+ Parse Python code to extract function names and their docstrings.
620
+
621
+ Args:
622
+ file_path: The path to the Python file to parse.
623
+
624
+ Returns:
625
+ Interpreted Python code as a string.
626
+ """
627
+ if not os.path.exists(file_path):
628
+ return "0"
629
+
630
+
631
+ loader = GenericLoader.from_filesystem(
632
+ file_path,
633
+ glob="**/*",
634
+ suffixes=[".py"],
635
+ parser=LanguageParser()
636
+ )
637
+ search_docs = loader.load()
638
+
639
+ formatted_search_docs = "\n\n---\n\n".join(
640
+ [
641
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
642
+ for doc in search_docs
643
+ ])
644
+
645
+ return {"audio_results": formatted_search_docs}
646
+
647
+
648
+ @tool
649
+ def audio_transcription(file_path: str) -> str:
650
+ """
651
+ Transcribe an audio file to text using AssemblyAI.
652
+
653
+ Args:
654
+ file_path: The path to the audio file.
655
+
656
+ Returns:
657
+ The transcribed text from the audio file.
658
+ """
659
+ search_docs = AssemblyAIAudioTranscriptLoader(file_path=file_path).load()
660
+
661
+ formatted_search_docs = "\n\n---\n\n".join(
662
+ [
663
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
664
+ for doc in search_docs
665
+ ])
666
+
667
+ return {"audio_results": formatted_search_docs}
668
+