Update langgraph_agent.py
Browse files- langgraph_agent.py +18 -10
langgraph_agent.py
CHANGED
|
@@ -92,34 +92,42 @@ if HF_API_TOKEN:
|
|
| 92 |
else:
|
| 93 |
print("WARNING: HF_API_TOKEN not set. If any other HF tools are used, they might not function.")
|
| 94 |
|
| 95 |
-
@
|
| 96 |
def read_file_content(file_path: str) -> Dict[str, str]:
|
| 97 |
-
"""Reads the content of a file and returns its primary information. For text/code/excel, returns content. For media,
|
| 98 |
try:
|
| 99 |
_, file_extension = os.path.splitext(file_path)
|
| 100 |
file_extension = file_extension.lower()
|
| 101 |
|
| 102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
with open(file_path, "r", encoding="utf-8") as f:
|
| 104 |
content = f.read()
|
| 105 |
return {"file_type": "text/code", "file_name": file_path, "file_content": content}
|
|
|
|
|
|
|
| 106 |
elif file_extension == ".xlsx":
|
| 107 |
df = pd.read_excel(file_path)
|
| 108 |
content = df.to_string()
|
| 109 |
return {"file_type": "excel", "file_name": file_path, "file_content": content}
|
| 110 |
-
|
| 111 |
-
# For images, we indicate it's an image file and expect the LLM to handle the blob directly.
|
| 112 |
-
return {"file_type": "image", "file_name": file_path, "file_content": f"Image file '{file_path}' detected. The LLM (Gemini 2.5 Pro) can process this image content directly."}
|
| 113 |
-
elif file_extension == ".mp3":
|
| 114 |
-
# For MP3, we indicate it's an audio file and expect the LLM to handle the blob directly.
|
| 115 |
-
return {"file_type": "audio", "file_name": file_path, "file_content": f"Audio file '{file_path}' detected. The LLM (Gemini 2.5 Pro) can process this audio content directly."}
|
| 116 |
else:
|
| 117 |
-
return {"file_type": "unsupported", "file_name": file_path, "file_content": f"Unsupported file type: {file_extension}. Only .txt, .py, .xlsx, .jpeg, .jpg, .png, .mp3 files are recognized."}
|
|
|
|
| 118 |
except FileNotFoundError:
|
| 119 |
return {"file_error": f"File not found: {file_path}. Please ensure the file exists in the environment."}
|
| 120 |
except Exception as e:
|
| 121 |
return {"file_error": f"Error reading file {file_path}: {e}"}
|
| 122 |
|
|
|
|
| 123 |
@tool
|
| 124 |
def python_interpreter(code: str) -> Dict[str, str]:
|
| 125 |
"""Executes Python code and returns its standard output. If there's an error during execution, it returns the error message."""
|
|
|
|
| 92 |
else:
|
| 93 |
print("WARNING: HF_API_TOKEN not set. If any other HF tools are used, they might not function.")
|
| 94 |
|
| 95 |
+
@tooldef
|
| 96 |
def read_file_content(file_path: str) -> Dict[str, str]:
|
| 97 |
+
"""Reads the content of a file and returns its primary information. For text/code/excel, returns content. For media, indicates it's a blob for LLM processing."""
|
| 98 |
try:
|
| 99 |
_, file_extension = os.path.splitext(file_path)
|
| 100 |
file_extension = file_extension.lower()
|
| 101 |
|
| 102 |
+
# Prioritize handling of video, audio, and image files for direct LLM processing
|
| 103 |
+
if file_extension in (".mp4", ".avi", ".mov", ".mkv", ".webm"):
|
| 104 |
+
return {"file_type": "video", "file_name": file_path, "file_content": f"Video file '{file_path}' detected. The LLM (Gemini 2.5 Pro) can process this video content directly as a blob."}
|
| 105 |
+
elif file_extension == ".mp3":
|
| 106 |
+
return {"file_type": "audio", "file_name": file_path, "file_content": f"Audio file '{file_path}' detected. The LLM (Gemini 2.5 Pro) can process this audio content directly as a blob."}
|
| 107 |
+
elif file_extension in (".jpeg", ".jpg", ".png"):
|
| 108 |
+
return {"file_type": "image", "file_name": file_path, "file_content": f"Image file '{file_path}' detected. The LLM (Gemini 2.5 Pro) can process this image content directly as a blob."}
|
| 109 |
+
|
| 110 |
+
# Handle text and code files
|
| 111 |
+
elif file_extension in (".txt", ".py"):
|
| 112 |
with open(file_path, "r", encoding="utf-8") as f:
|
| 113 |
content = f.read()
|
| 114 |
return {"file_type": "text/code", "file_name": file_path, "file_content": content}
|
| 115 |
+
|
| 116 |
+
# Handle Excel files
|
| 117 |
elif file_extension == ".xlsx":
|
| 118 |
df = pd.read_excel(file_path)
|
| 119 |
content = df.to_string()
|
| 120 |
return {"file_type": "excel", "file_name": file_path, "file_content": content}
|
| 121 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
else:
|
| 123 |
+
return {"file_type": "unsupported", "file_name": file_path, "file_content": f"Unsupported file type: {file_extension}. Only .txt, .py, .xlsx, .jpeg, .jpg, .png, .mp3, .mp4, .avi, .mov, .mkv, .webm files are recognized."}
|
| 124 |
+
|
| 125 |
except FileNotFoundError:
|
| 126 |
return {"file_error": f"File not found: {file_path}. Please ensure the file exists in the environment."}
|
| 127 |
except Exception as e:
|
| 128 |
return {"file_error": f"Error reading file {file_path}: {e}"}
|
| 129 |
|
| 130 |
+
|
| 131 |
@tool
|
| 132 |
def python_interpreter(code: str) -> Dict[str, str]:
|
| 133 |
"""Executes Python code and returns its standard output. If there's an error during execution, it returns the error message."""
|