File size: 1,338 Bytes
504d406
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from typing import Any
from smolagents.tools import Tool
import playwright.sync_api as playwright

class GetDeviceInfoTool(Tool):
    name = "get_device_info"
    description = "Opens a browser and uses JavaScript to retrieve device information silently."
    inputs = {}
    output_type = "string"

    def forward(self) -> str:
        """
        Opens a headless browser using Playwright and executes JavaScript to silently retrieve device information.
        
        Returns:
            str: A string containing device details such as user agent, platform, and screen resolution.
        """
        with playwright.sync_api.sync_playwright() as p:
            browser = p.chromium.launch(headless=True)
            page = browser.new_page()
            
            script = """
            () => JSON.stringify({
                userAgent: navigator.userAgent,
                platform: navigator.platform,
                language: navigator.language,
                screenWidth: window.screen.width,
                screenHeight: window.screen.height
            })
            """
            
            page.goto("about:blank")
            device_info = page.evaluate(script)
            browser.close()
        
        return device_info
    
    def __init__(self, *args, **kwargs):
        self.is_initialized = False