瀏覽代碼

Fix: local files in the browser (at least for Windows) (#839)

* Fix: local files in the browser (at least for Windows)

The Browser works for screenshoting websites, but when the LLM tries to display a local file that he created, it can't access the full directory on Windows.

* Update browse.py

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
Redrum624 1 年之前
父節點
當前提交
9fd95cc35f
共有 1 個文件被更改,包括 11 次插入3 次删除
  1. 11 3
      opendevin/action/browse.py

+ 11 - 3
opendevin/action/browse.py

@@ -1,3 +1,4 @@
+import os
 import base64
 from dataclasses import dataclass
 from opendevin.observation import BrowserOutputObservation
@@ -17,11 +18,14 @@ class BrowseURLAction(ExecutableAction):
     action: str = ActionType.BROWSE
 
     async def run(self, controller: "AgentController") -> BrowserOutputObservation:  # type: ignore
+        asked_url = self.url
+        if not asked_url.startswith("http"):
+            asked_url = os.path.abspath(os.curdir) + self.url
         try:
             async with async_playwright() as p:
                 browser = await p.chromium.launch()
                 page = await browser.new_page()
-                response = await page.goto(self.url)
+                response = await page.goto(asked_url)
                 # content = await page.content()
                 inner_text = await page.evaluate("() => document.body.innerText")
                 screenshot_bytes = await page.screenshot(full_page=True)
@@ -31,14 +35,18 @@ class BrowseURLAction(ExecutableAction):
                 return BrowserOutputObservation(
                     content=inner_text,  # HTML content of the page
                     screenshot=screenshot_base64,  # Base64-encoded screenshot
-                    url=self.url,
+                    url=asked_url,
                     status_code=response.status if response else 0,  # HTTP status code
                 )
         except Exception as e:
             return BrowserOutputObservation(
-                content=str(e), screenshot="", error=True, url=self.url
+                content=str(e),
+                screenshot="", 
+                error=True,
+                url=asked_url
             )
 
+
     @property
     def message(self) -> str:
         return f"Browsing URL: {self.url}"