lybic-guiagents 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of lybic-guiagents might be problematic. Click here for more details.
- gui_agents/__init__.py +1 -5
- gui_agents/agents/Action.py +3 -3
- gui_agents/agents/Backend/LybicBackend.py +1 -2
- gui_agents/agents/Backend/PyAutoGUIBackend.py +1 -4
- gui_agents/agents/Backend/PyAutoGUIVMwareBackend.py +1 -1
- gui_agents/agents/agent_s.py +0 -2
- gui_agents/agents/grounding.py +1 -6
- gui_agents/agents/hardware_interface.py +20 -5
- gui_agents/agents/manager.py +0 -3
- gui_agents/agents/translator.py +1 -1
- gui_agents/agents/worker.py +1 -2
- gui_agents/cli_app.py +143 -8
- gui_agents/core/engine.py +0 -2
- gui_agents/core/knowledge.py +0 -2
- gui_agents/tools/tools.py +0 -4
- gui_agents/unit_test/test_manager.py +0 -2
- gui_agents/unit_test/test_worker.py +0 -2
- gui_agents/utils/analyze_display.py +1 -1
- gui_agents/utils/common_utils.py +0 -2
- {lybic_guiagents-0.2.0.dist-info → lybic_guiagents-0.2.2.dist-info}/METADATA +138 -75
- {lybic_guiagents-0.2.0.dist-info → lybic_guiagents-0.2.2.dist-info}/RECORD +24 -24
- {lybic_guiagents-0.2.0.dist-info → lybic_guiagents-0.2.2.dist-info}/WHEEL +0 -0
- {lybic_guiagents-0.2.0.dist-info → lybic_guiagents-0.2.2.dist-info}/licenses/LICENSE +0 -0
- {lybic_guiagents-0.2.0.dist-info → lybic_guiagents-0.2.2.dist-info}/top_level.txt +0 -0
gui_agents/__init__.py
CHANGED
|
@@ -37,11 +37,7 @@ from .agents.hardware_interface import HardwareInterface
|
|
|
37
37
|
from .store.registry import Registry
|
|
38
38
|
from .agents.global_state import GlobalState
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
from importlib.metadata import version
|
|
42
|
-
__version__ = version("lybic-guiagents")
|
|
43
|
-
except Exception: # during editable installs or missing meta
|
|
44
|
-
__version__ = "0.0.0+dev"
|
|
40
|
+
__version__ = "0.2.2"
|
|
45
41
|
|
|
46
42
|
# Primary exports (what users should typically use)
|
|
47
43
|
__all__ = [
|
gui_agents/agents/Action.py
CHANGED
|
@@ -27,9 +27,9 @@ The registry makes the last line work without an if‑else chain.
|
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
29
|
from abc import ABC
|
|
30
|
-
from dataclasses import dataclass, field, fields
|
|
31
|
-
from enum import Enum
|
|
32
|
-
from typing import Any, Dict, List,
|
|
30
|
+
from dataclasses import dataclass, field, fields
|
|
31
|
+
from enum import Enum
|
|
32
|
+
from typing import Any, Dict, List, Type, TypeVar, ClassVar
|
|
33
33
|
|
|
34
34
|
__all__ = [
|
|
35
35
|
"Action",
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# ---------------------------------------------------------------------------
|
|
2
2
|
# 1) Desktop automation backend (PyAutoGUI)
|
|
3
3
|
# ---------------------------------------------------------------------------
|
|
4
|
-
import
|
|
5
|
-
import subprocess, difflib
|
|
4
|
+
import subprocess
|
|
6
5
|
import sys
|
|
7
6
|
import pyperclip
|
|
8
|
-
from PIL import Image
|
|
9
|
-
from numpy import imag
|
|
10
7
|
from gui_agents.agents.Action import (
|
|
11
8
|
Action,
|
|
12
9
|
Click,
|
|
@@ -77,7 +77,7 @@ class PyAutoGUIVMwareBackend(Backend):
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
# ------------------------------------------------------------------
|
|
80
|
-
def execute(self, action: Action) -> str:
|
|
80
|
+
def execute(self, action: Action) -> str | None:
|
|
81
81
|
if not self.supports(type(action)):
|
|
82
82
|
raise NotImplementedError(f"{type(action).__name__} not supported by PyAutoGUIBackend")
|
|
83
83
|
|
gui_agents/agents/agent_s.py
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
-
from math import log
|
|
4
3
|
import os
|
|
5
4
|
import platform
|
|
6
5
|
import textwrap
|
|
7
6
|
from typing import Dict, List, Optional, Tuple
|
|
8
7
|
|
|
9
|
-
from gui_agents.agents.grounding import ACI
|
|
10
8
|
from gui_agents.agents.worker import Worker
|
|
11
9
|
from gui_agents.agents.manager import Manager
|
|
12
10
|
from gui_agents.agents.grounding import Grounding, FastGrounding
|
gui_agents/agents/grounding.py
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import ast
|
|
2
2
|
import re
|
|
3
3
|
import logging
|
|
4
|
-
from
|
|
5
|
-
from io import BytesIO
|
|
6
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
4
|
+
from typing import Dict, List
|
|
7
5
|
import time
|
|
8
|
-
import pytesseract
|
|
9
|
-
from PIL import Image
|
|
10
|
-
from pytesseract import Output
|
|
11
6
|
|
|
12
7
|
from gui_agents.tools.tools import Tools
|
|
13
8
|
from gui_agents.utils.common_utils import parse_single_code_from_string
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import pyautogui
|
|
4
3
|
from gui_agents.agents.Backend.Backend import Backend
|
|
5
4
|
from gui_agents.agents.Backend.ADBBackend import ADBBackend
|
|
6
5
|
from gui_agents.agents.Backend.LybicBackend import LybicBackend
|
|
7
|
-
|
|
8
|
-
from gui_agents.agents.Backend.
|
|
6
|
+
try:
|
|
7
|
+
from gui_agents.agents.Backend.PyAutoGUIBackend import PyAutoGUIBackend
|
|
8
|
+
except ImportError:
|
|
9
|
+
PyAutoGUIBackend = None
|
|
10
|
+
pass
|
|
11
|
+
# from gui_agents.agents.Backend.PyAutoGUIVMwareBackend import PyAutoGUIVMwareBackend
|
|
9
12
|
"""hardware_interface.py ▸ Execute Action objects on real devices / emulators
|
|
10
13
|
===============================================================================
|
|
11
14
|
This module is the *single entry point* that upper‑layer planners / executors
|
|
@@ -57,7 +60,7 @@ __all__ = [
|
|
|
57
60
|
"PyAutoGUIBackend",
|
|
58
61
|
"ADBBackend",
|
|
59
62
|
"LybicBackend",
|
|
60
|
-
|
|
63
|
+
# "PyAutoGUIVMwareBackend",
|
|
61
64
|
]
|
|
62
65
|
|
|
63
66
|
|
|
@@ -72,8 +75,9 @@ class HardwareInterface:
|
|
|
72
75
|
"pyautogui": PyAutoGUIBackend,
|
|
73
76
|
"adb": ADBBackend,
|
|
74
77
|
"lybic": LybicBackend,
|
|
75
|
-
"pyautogui_vmware": PyAutoGUIVMwareBackend,
|
|
76
78
|
}
|
|
79
|
+
if PyAutoGUIBackend is not None:
|
|
80
|
+
BACKEND_MAP["pyautogui_vmware"] = PyAutoGUIBackend
|
|
77
81
|
|
|
78
82
|
# ------------------------------------------------------------------
|
|
79
83
|
def __init__(self, backend: str | Backend = "pyautogui", **backend_kwargs):
|
|
@@ -83,6 +87,17 @@ class HardwareInterface:
|
|
|
83
87
|
key = backend.lower()
|
|
84
88
|
if key not in self.BACKEND_MAP:
|
|
85
89
|
raise ValueError(f"Unsupported backend '{backend}'. Available: {list(self.BACKEND_MAP)}")
|
|
90
|
+
|
|
91
|
+
# For GUI backends, provide helpful error message in headless environments
|
|
92
|
+
if key in ["pyautogui", "pyautogui_vmware"]:
|
|
93
|
+
import os
|
|
94
|
+
if os.name == 'posix' and not os.environ.get('DISPLAY'):
|
|
95
|
+
raise RuntimeError(
|
|
96
|
+
f"Cannot create '{backend}' backend: No DISPLAY environment variable found. "
|
|
97
|
+
f"This typically occurs in headless/containerized environments. "
|
|
98
|
+
f"Consider using 'lybic' or 'adb' backend instead."
|
|
99
|
+
)
|
|
100
|
+
|
|
86
101
|
self.backend = self.BACKEND_MAP[key](**backend_kwargs)
|
|
87
102
|
|
|
88
103
|
# ------------------------------------------------------------------
|
gui_agents/agents/manager.py
CHANGED
|
@@ -4,7 +4,6 @@ from collections import defaultdict
|
|
|
4
4
|
from typing import Dict, List, Optional, Tuple
|
|
5
5
|
import platform
|
|
6
6
|
|
|
7
|
-
from gui_agents.agents.grounding import ACI
|
|
8
7
|
from gui_agents.core.knowledge import KnowledgeBase
|
|
9
8
|
from gui_agents.agents.global_state import GlobalState
|
|
10
9
|
from gui_agents.store.registry import Registry
|
|
@@ -15,8 +14,6 @@ from gui_agents.utils.common_utils import (
|
|
|
15
14
|
agent_log_to_string,
|
|
16
15
|
)
|
|
17
16
|
from gui_agents.tools.tools import Tools
|
|
18
|
-
from PIL import Image
|
|
19
|
-
import io
|
|
20
17
|
|
|
21
18
|
logger = logging.getLogger("desktopenv.agent")
|
|
22
19
|
|
gui_agents/agents/translator.py
CHANGED
gui_agents/agents/worker.py
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
3
|
import textwrap
|
|
4
|
-
from typing import Dict, List
|
|
4
|
+
from typing import Dict, List
|
|
5
5
|
import platform
|
|
6
6
|
import os
|
|
7
7
|
import json
|
|
8
8
|
|
|
9
|
-
from gui_agents.agents.grounding import ACI
|
|
10
9
|
from gui_agents.core.knowledge import KnowledgeBase
|
|
11
10
|
from gui_agents.utils.common_utils import (
|
|
12
11
|
Node,
|
gui_agents/cli_app.py
CHANGED
|
@@ -4,13 +4,11 @@ import io
|
|
|
4
4
|
import logging
|
|
5
5
|
import os
|
|
6
6
|
import platform
|
|
7
|
-
import pyautogui
|
|
8
7
|
import sys
|
|
9
8
|
import time
|
|
10
9
|
import datetime
|
|
11
10
|
from pathlib import Path
|
|
12
11
|
from dotenv import load_dotenv
|
|
13
|
-
from gui_agents.agents.Backend.PyAutoGUIBackend import PyAutoGUIBackend
|
|
14
12
|
|
|
15
13
|
env_path = Path(os.path.dirname(os.path.abspath(__file__))) / '.env'
|
|
16
14
|
if env_path.exists():
|
|
@@ -35,6 +33,80 @@ from gui_agents.utils.analyze_display import analyze_display_json, aggregate_res
|
|
|
35
33
|
|
|
36
34
|
current_platform = platform.system().lower()
|
|
37
35
|
|
|
36
|
+
# Display environment detection and backend compatibility validation
|
|
37
|
+
def check_display_environment():
|
|
38
|
+
"""
|
|
39
|
+
Check if the current environment supports GUI operations.
|
|
40
|
+
Returns (has_display, pyautogui_available, error_message)
|
|
41
|
+
"""
|
|
42
|
+
has_display = False
|
|
43
|
+
pyautogui_available = False
|
|
44
|
+
error_message = None
|
|
45
|
+
|
|
46
|
+
# Check DISPLAY environment variable (Linux/Unix)
|
|
47
|
+
if current_platform == "linux":
|
|
48
|
+
display_env = os.environ.get('DISPLAY')
|
|
49
|
+
if display_env:
|
|
50
|
+
has_display = True
|
|
51
|
+
else:
|
|
52
|
+
error_message = "No DISPLAY environment variable found. Running in headless/containerized environment."
|
|
53
|
+
elif current_platform == "darwin":
|
|
54
|
+
# macOS typically has display available unless running in special contexts
|
|
55
|
+
has_display = True
|
|
56
|
+
elif current_platform == "windows":
|
|
57
|
+
# Windows typically has display available
|
|
58
|
+
has_display = True
|
|
59
|
+
|
|
60
|
+
# Try to import and initialize pyautogui if display is available
|
|
61
|
+
if has_display:
|
|
62
|
+
try:
|
|
63
|
+
import pyautogui
|
|
64
|
+
# Test if pyautogui can actually work
|
|
65
|
+
pyautogui.size() # This will fail if no display is available
|
|
66
|
+
pyautogui_available = True
|
|
67
|
+
except Exception as e:
|
|
68
|
+
pyautogui_available = False
|
|
69
|
+
error_message = f"PyAutoGUI not available: {str(e)}"
|
|
70
|
+
|
|
71
|
+
return has_display, pyautogui_available, error_message
|
|
72
|
+
|
|
73
|
+
def get_compatible_backends(has_display, pyautogui_available):
|
|
74
|
+
"""
|
|
75
|
+
Get list of backends compatible with current environment.
|
|
76
|
+
"""
|
|
77
|
+
compatible_backends = []
|
|
78
|
+
incompatible_backends = []
|
|
79
|
+
|
|
80
|
+
# Lybic backend works in headless environments (cloud-based)
|
|
81
|
+
compatible_backends.append("lybic")
|
|
82
|
+
|
|
83
|
+
# ADB backend works without display (for Android devices)
|
|
84
|
+
compatible_backends.append("adb")
|
|
85
|
+
|
|
86
|
+
# PyAutoGUI-based backends require display
|
|
87
|
+
if has_display and pyautogui_available:
|
|
88
|
+
compatible_backends.extend(["pyautogui", "pyautogui_vmware"])
|
|
89
|
+
else:
|
|
90
|
+
incompatible_backends.extend(["pyautogui", "pyautogui_vmware"])
|
|
91
|
+
|
|
92
|
+
return compatible_backends, incompatible_backends
|
|
93
|
+
|
|
94
|
+
def validate_backend_compatibility(backend, compatible_backends, incompatible_backends):
|
|
95
|
+
"""
|
|
96
|
+
Validate if the requested backend is compatible with current environment.
|
|
97
|
+
Returns (is_compatible, recommended_backend, warning_message)
|
|
98
|
+
"""
|
|
99
|
+
if backend in compatible_backends:
|
|
100
|
+
return True, backend, None
|
|
101
|
+
elif backend in incompatible_backends:
|
|
102
|
+
# Recommend lybic as the primary fallback for headless environments
|
|
103
|
+
recommended = "lybic"
|
|
104
|
+
warning = f"Backend '{backend}' is not compatible with current environment (no display/GUI). Recommending '{recommended}' backend instead."
|
|
105
|
+
return False, recommended, warning
|
|
106
|
+
else:
|
|
107
|
+
# Unknown backend, let it fail naturally
|
|
108
|
+
return True, backend, f"Unknown backend '{backend}', compatibility cannot be determined."
|
|
109
|
+
|
|
38
110
|
logger = logging.getLogger()
|
|
39
111
|
logger.setLevel(logging.DEBUG)
|
|
40
112
|
|
|
@@ -172,10 +244,18 @@ def show_permission_dialog(code: str, action_description: str):
|
|
|
172
244
|
def scale_screenshot_dimensions(screenshot: Image.Image, hwi_para: HardwareInterface):
|
|
173
245
|
screenshot_high = screenshot.height
|
|
174
246
|
screenshot_width = screenshot.width
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
247
|
+
|
|
248
|
+
# Only try to scale if we have a PyAutoGUI backend and pyautogui is available
|
|
249
|
+
try:
|
|
250
|
+
from gui_agents.agents.Backend.PyAutoGUIBackend import PyAutoGUIBackend
|
|
251
|
+
if isinstance(hwi_para.backend, PyAutoGUIBackend):
|
|
252
|
+
import pyautogui
|
|
253
|
+
screen_width, screen_height = pyautogui.size()
|
|
254
|
+
if screen_width != screenshot_width or screen_height != screenshot_high:
|
|
255
|
+
screenshot = screenshot.resize((screen_width, screen_height), Image.Resampling.LANCZOS)
|
|
256
|
+
except Exception as e:
|
|
257
|
+
# Any error (e.g., no display, import error), skip scaling
|
|
258
|
+
logger.warning(f"Could not scale screenshot dimensions: {e}")
|
|
179
259
|
|
|
180
260
|
return screenshot
|
|
181
261
|
|
|
@@ -453,8 +533,37 @@ def main():
|
|
|
453
533
|
type=str,
|
|
454
534
|
default=None,
|
|
455
535
|
help='Lybic precreated sandbox ID (if not provided, will use LYBIC_PRECREATE_SID environment variable)')
|
|
536
|
+
parser.add_argument(
|
|
537
|
+
'--force-backend',
|
|
538
|
+
action='store_true',
|
|
539
|
+
help='Force the use of specified backend even if incompatible with current environment')
|
|
456
540
|
args = parser.parse_args()
|
|
457
541
|
|
|
542
|
+
# Check environment compatibility
|
|
543
|
+
has_display, pyautogui_available, env_error = check_display_environment()
|
|
544
|
+
compatible_backends, incompatible_backends = get_compatible_backends(has_display, pyautogui_available)
|
|
545
|
+
|
|
546
|
+
# Log environment status
|
|
547
|
+
logger.info(f"Environment check: Display available={has_display}, PyAutoGUI available={pyautogui_available}")
|
|
548
|
+
if env_error:
|
|
549
|
+
logger.info(f"Environment note: {env_error}")
|
|
550
|
+
logger.info(f"Compatible backends: {compatible_backends}")
|
|
551
|
+
if incompatible_backends:
|
|
552
|
+
logger.info(f"Incompatible backends: {incompatible_backends}")
|
|
553
|
+
|
|
554
|
+
# Validate backend compatibility
|
|
555
|
+
is_compatible, recommended_backend, warning = validate_backend_compatibility(
|
|
556
|
+
args.backend, compatible_backends, incompatible_backends)
|
|
557
|
+
|
|
558
|
+
if not is_compatible and not args.force_backend:
|
|
559
|
+
logger.warning(warning)
|
|
560
|
+
logger.info(f"Switching from '{args.backend}' to '{recommended_backend}' backend")
|
|
561
|
+
args.backend = recommended_backend
|
|
562
|
+
elif not is_compatible and args.force_backend:
|
|
563
|
+
logger.warning(f"Forcing incompatible backend '{args.backend}' - this may cause errors")
|
|
564
|
+
elif warning:
|
|
565
|
+
logger.info(warning)
|
|
566
|
+
|
|
458
567
|
# Ensure necessary directory structure exists
|
|
459
568
|
timestamp_dir = os.path.join(log_dir, datetime_str)
|
|
460
569
|
cache_dir = os.path.join(timestamp_dir, "cache", "screens")
|
|
@@ -515,7 +624,7 @@ def main():
|
|
|
515
624
|
else:
|
|
516
625
|
logger.info("Web search functionality is ENABLED")
|
|
517
626
|
|
|
518
|
-
# Initialize hardware interface
|
|
627
|
+
# Initialize hardware interface with error handling
|
|
519
628
|
backend_kwargs = {"platform": platform_os}
|
|
520
629
|
if args.lybic_sid is not None:
|
|
521
630
|
backend_kwargs["precreate_sid"] = args.lybic_sid
|
|
@@ -523,7 +632,25 @@ def main():
|
|
|
523
632
|
else:
|
|
524
633
|
logger.info("Using Lybic SID from environment variable LYBIC_PRECREATE_SID")
|
|
525
634
|
|
|
526
|
-
|
|
635
|
+
try:
|
|
636
|
+
hwi = HardwareInterface(backend=args.backend, **backend_kwargs)
|
|
637
|
+
logger.info(f"Successfully initialized hardware interface with backend: {args.backend}")
|
|
638
|
+
except Exception as e:
|
|
639
|
+
logger.error(f"Failed to initialize hardware interface with backend '{args.backend}': {e}")
|
|
640
|
+
|
|
641
|
+
# If the backend failed and it's a GUI-dependent backend, suggest alternatives
|
|
642
|
+
if args.backend in incompatible_backends and not args.force_backend:
|
|
643
|
+
logger.info("Attempting to initialize with lybic backend as fallback...")
|
|
644
|
+
try:
|
|
645
|
+
hwi = HardwareInterface(backend="lybic", **backend_kwargs)
|
|
646
|
+
logger.info("Successfully initialized with lybic backend")
|
|
647
|
+
args.backend = "lybic"
|
|
648
|
+
except Exception as fallback_error:
|
|
649
|
+
logger.error(f"Fallback to lybic backend also failed: {fallback_error}")
|
|
650
|
+
sys.exit(1)
|
|
651
|
+
else:
|
|
652
|
+
logger.error("Hardware interface initialization failed. Please check your environment and backend configuration.")
|
|
653
|
+
sys.exit(1)
|
|
527
654
|
|
|
528
655
|
# if query is provided, run the agent on the query
|
|
529
656
|
if args.query:
|
|
@@ -547,6 +674,13 @@ def main():
|
|
|
547
674
|
|
|
548
675
|
if __name__ == "__main__":
|
|
549
676
|
"""
|
|
677
|
+
GUI Agent CLI Application with environment compatibility checking.
|
|
678
|
+
|
|
679
|
+
The application automatically detects the current environment and recommends compatible backends:
|
|
680
|
+
- In headless/containerized environments: uses 'lybic' or 'adb' backends
|
|
681
|
+
- In GUI environments: supports all backends including 'pyautogui' and 'pyautogui_vmware'
|
|
682
|
+
|
|
683
|
+
Examples:
|
|
550
684
|
python gui_agents/cli_app.py --backend lybic
|
|
551
685
|
python gui_agents/cli_app.py --backend pyautogui --mode fast
|
|
552
686
|
python gui_agents/cli_app.py --backend pyautogui_vmware
|
|
@@ -556,5 +690,6 @@ if __name__ == "__main__":
|
|
|
556
690
|
python gui_agents/cli_app.py --backend pyautogui --mode fast --disable-search
|
|
557
691
|
python gui_agents/cli_app.py --backend lybic --lybic-sid SBX-01K1X6ZKAERXAN73KTJ1XXJXAF
|
|
558
692
|
python gui_agents/cli_app.py --backend lybic --mode fast --lybic-sid SBX-01K1X6ZKAERXAN73KTJ1XXJXAF
|
|
693
|
+
python gui_agents/cli_app.py --backend pyautogui --force-backend # Force incompatible backend
|
|
559
694
|
"""
|
|
560
695
|
main()
|
gui_agents/core/engine.py
CHANGED
|
@@ -2,7 +2,6 @@ import os
|
|
|
2
2
|
import json
|
|
3
3
|
import backoff
|
|
4
4
|
import requests
|
|
5
|
-
from typing import List, Dict, Any, Optional, Union
|
|
6
5
|
import numpy as np
|
|
7
6
|
from anthropic import Anthropic
|
|
8
7
|
from openai import (
|
|
@@ -18,7 +17,6 @@ from google.genai import types
|
|
|
18
17
|
from zhipuai import ZhipuAI
|
|
19
18
|
from groq import Groq
|
|
20
19
|
import boto3
|
|
21
|
-
import exa_py
|
|
22
20
|
from typing import List, Dict, Any, Optional, Union, Tuple
|
|
23
21
|
|
|
24
22
|
class ModelPricing:
|
gui_agents/core/knowledge.py
CHANGED
|
@@ -9,8 +9,6 @@ from gui_agents.utils.common_utils import (
|
|
|
9
9
|
save_embeddings,
|
|
10
10
|
)
|
|
11
11
|
from gui_agents.tools.tools import Tools
|
|
12
|
-
from gui_agents.agents.global_state import GlobalState
|
|
13
|
-
from gui_agents.store.registry import Registry
|
|
14
12
|
from gui_agents.core.mllm import CostManager
|
|
15
13
|
|
|
16
14
|
def get_embedding_dim(model_name):
|
gui_agents/tools/tools.py
CHANGED
|
@@ -6,10 +6,6 @@ context fusion, subtask planning, trajectory reflection, memory retrieval, groun
|
|
|
6
6
|
evaluation, and action generation.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
import os
|
|
10
|
-
import json
|
|
11
|
-
import base64
|
|
12
|
-
import requests
|
|
13
9
|
import time
|
|
14
10
|
from typing import Dict, Any, Optional, List, Union, Tuple
|
|
15
11
|
from abc import ABC, abstractmethod
|
gui_agents/utils/common_utils.py
CHANGED
|
@@ -1,99 +1,153 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lybic-guiagents
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: An open-source agentic framework that enables AI to use computers like humans and can provide a multi-agent runtime environment as an infrastructure capability
|
|
5
5
|
Author: Lybic Development Team
|
|
6
6
|
Author-email: Lybic Development Team <lybic@tingyutech.com>
|
|
7
7
|
License-Expression: Apache-2.0
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.12, <3.14
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Requires-Dist:
|
|
12
|
+
Requires-Dist: dotenv
|
|
13
|
+
Requires-Dist: pyperclip
|
|
14
|
+
Requires-Dist: Pillow>=11.3.0
|
|
13
15
|
Requires-Dist: backoff
|
|
14
|
-
Requires-Dist:
|
|
15
|
-
Requires-Dist: openai
|
|
16
|
+
Requires-Dist: numpy
|
|
16
17
|
Requires-Dist: anthropic
|
|
17
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: openai
|
|
19
|
+
Requires-Dist: google-genai
|
|
18
20
|
Requires-Dist: zhipuai
|
|
19
21
|
Requires-Dist: groq
|
|
20
22
|
Requires-Dist: boto3
|
|
21
|
-
Requires-Dist: uvicorn
|
|
22
|
-
Requires-Dist: paddleocr
|
|
23
|
-
Requires-Dist: paddlepaddle
|
|
24
|
-
Requires-Dist: together
|
|
25
23
|
Requires-Dist: scikit-learn
|
|
26
|
-
Requires-Dist: websockets
|
|
27
24
|
Requires-Dist: tiktoken
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist: exa_py
|
|
31
|
-
Requires-Dist: black
|
|
32
|
-
Requires-Dist: certifi
|
|
33
|
-
Requires-Dist: pytesseract
|
|
34
|
-
Requires-Dist: google-genai
|
|
35
|
-
Requires-Dist: python-dotenv
|
|
36
|
-
Requires-Dist: Pillow>=11.3.0
|
|
37
|
-
Requires-Dist: fabric
|
|
38
|
-
Requires-Dist: gymnasium~=0.28.1
|
|
39
|
-
Requires-Dist: requests~=2.31.0
|
|
40
|
-
Requires-Dist: pytz~=2024.1
|
|
41
|
-
Requires-Dist: transformers~=4.35.2
|
|
42
|
-
Requires-Dist: torch~=2.5.0
|
|
43
|
-
Requires-Dist: accelerate
|
|
44
|
-
Requires-Dist: opencv-python~=4.8.1.78
|
|
45
|
-
Requires-Dist: matplotlib~=3.7.4
|
|
46
|
-
Requires-Dist: pynput~=1.7.6
|
|
47
|
-
Requires-Dist: psutil~=5.9.6
|
|
48
|
-
Requires-Dist: tqdm~=4.65.0
|
|
49
|
-
Requires-Dist: flask~=3.0.0
|
|
50
|
-
Requires-Dist: requests-toolbelt~=1.0.0
|
|
51
|
-
Requires-Dist: lxml
|
|
52
|
-
Requires-Dist: cssselect
|
|
53
|
-
Requires-Dist: xmltodict
|
|
54
|
-
Requires-Dist: openpyxl
|
|
55
|
-
Requires-Dist: python-docx
|
|
56
|
-
Requires-Dist: python-pptx
|
|
57
|
-
Requires-Dist: pypdf
|
|
58
|
-
Requires-Dist: PyGetWindow
|
|
59
|
-
Requires-Dist: rapidfuzz
|
|
60
|
-
Requires-Dist: pyacoustid
|
|
61
|
-
Requires-Dist: pygame
|
|
62
|
-
Requires-Dist: ImageHash
|
|
63
|
-
Requires-Dist: scikit-image
|
|
64
|
-
Requires-Dist: librosa
|
|
65
|
-
Requires-Dist: pymupdf
|
|
66
|
-
Requires-Dist: chardet
|
|
67
|
-
Requires-Dist: playwright
|
|
68
|
-
Requires-Dist: formulas
|
|
69
|
-
Requires-Dist: pydrive
|
|
70
|
-
Requires-Dist: fastdtw
|
|
71
|
-
Requires-Dist: odfpy
|
|
72
|
-
Requires-Dist: func-timeout
|
|
73
|
-
Requires-Dist: beautifulsoup4
|
|
74
|
-
Requires-Dist: dashscope
|
|
75
|
-
Requires-Dist: google-generativeai
|
|
76
|
-
Requires-Dist: PyYaml
|
|
77
|
-
Requires-Dist: mutagen
|
|
78
|
-
Requires-Dist: easyocr
|
|
79
|
-
Requires-Dist: borb
|
|
80
|
-
Requires-Dist: pypdf2
|
|
81
|
-
Requires-Dist: pdfplumber
|
|
82
|
-
Requires-Dist: wandb
|
|
83
|
-
Requires-Dist: wrapt_timeout_decorator
|
|
84
|
-
Requires-Dist: gdown
|
|
85
|
-
Requires-Dist: azure-identity
|
|
86
|
-
Requires-Dist: azure-mgmt-compute
|
|
87
|
-
Requires-Dist: azure-mgmt-network
|
|
88
|
-
Requires-Dist: docker
|
|
89
|
-
Requires-Dist: loguru
|
|
90
|
-
Requires-Dist: dotenv
|
|
91
|
-
Requires-Dist: lybic>=0.7.0
|
|
25
|
+
Requires-Dist: pydantic
|
|
26
|
+
Requires-Dist: lybic>=0.7.3
|
|
92
27
|
Requires-Dist: pyobjc; platform_system == "Darwin"
|
|
28
|
+
Requires-Dist: oa_atomacos; platform_system == "Darwin"
|
|
93
29
|
Requires-Dist: pywinauto; platform_system == "Windows"
|
|
94
30
|
Requires-Dist: pywin32; platform_system == "Windows"
|
|
95
31
|
Provides-Extra: dev
|
|
96
32
|
Requires-Dist: pytest; extra == "dev"
|
|
33
|
+
Provides-Extra: vmware-and-evaluation
|
|
34
|
+
Requires-Dist: python-pptx; extra == "vmware-and-evaluation"
|
|
35
|
+
Requires-Dist: odfpy; extra == "vmware-and-evaluation"
|
|
36
|
+
Requires-Dist: openpyxl; extra == "vmware-and-evaluation"
|
|
37
|
+
Requires-Dist: pandas; extra == "vmware-and-evaluation"
|
|
38
|
+
Requires-Dist: lxml; extra == "vmware-and-evaluation"
|
|
39
|
+
Requires-Dist: filelock; extra == "vmware-and-evaluation"
|
|
40
|
+
Requires-Dist: xmltodict; extra == "vmware-and-evaluation"
|
|
41
|
+
Requires-Dist: opencv-python-headless; extra == "vmware-and-evaluation"
|
|
42
|
+
Requires-Dist: rapidfuzz; extra == "vmware-and-evaluation"
|
|
43
|
+
Requires-Dist: imagehash; extra == "vmware-and-evaluation"
|
|
44
|
+
Requires-Dist: odfpy; extra == "vmware-and-evaluation"
|
|
45
|
+
Requires-Dist: pdfplumber; extra == "vmware-and-evaluation"
|
|
46
|
+
Requires-Dist: PyYAML; extra == "vmware-and-evaluation"
|
|
47
|
+
Requires-Dist: mutagen; extra == "vmware-and-evaluation"
|
|
48
|
+
Requires-Dist: pypdf; extra == "vmware-and-evaluation"
|
|
49
|
+
Requires-Dist: PyMuPDF; extra == "vmware-and-evaluation"
|
|
50
|
+
Requires-Dist: formulas; extra == "vmware-and-evaluation"
|
|
51
|
+
Requires-Dist: pyacoustid; extra == "vmware-and-evaluation"
|
|
52
|
+
Requires-Dist: opencv-python~=4.8.1.78; extra == "vmware-and-evaluation"
|
|
53
|
+
Requires-Dist: PyPDF2; extra == "vmware-and-evaluation"
|
|
54
|
+
Requires-Dist: librosa; extra == "vmware-and-evaluation"
|
|
55
|
+
Requires-Dist: fastdtw; extra == "vmware-and-evaluation"
|
|
56
|
+
Requires-Dist: scikit-learn; extra == "vmware-and-evaluation"
|
|
57
|
+
Requires-Dist: scikit-image; extra == "vmware-and-evaluation"
|
|
58
|
+
Requires-Dist: bs4; extra == "vmware-and-evaluation"
|
|
59
|
+
Requires-Dist: azure-identity; extra == "vmware-and-evaluation"
|
|
60
|
+
Requires-Dist: azure-mgmt-compute; extra == "vmware-and-evaluation"
|
|
61
|
+
Requires-Dist: azure-mgmt-network; extra == "vmware-and-evaluation"
|
|
62
|
+
Requires-Dist: toml; extra == "vmware-and-evaluation"
|
|
63
|
+
Requires-Dist: easyocr; extra == "vmware-and-evaluation"
|
|
64
|
+
Provides-Extra: pyautogui
|
|
65
|
+
Requires-Dist: pyautogui; extra == "pyautogui"
|
|
66
|
+
Provides-Extra: all
|
|
67
|
+
Requires-Dist: toml; extra == "all"
|
|
68
|
+
Requires-Dist: numpy; extra == "all"
|
|
69
|
+
Requires-Dist: backoff; extra == "all"
|
|
70
|
+
Requires-Dist: pandas; extra == "all"
|
|
71
|
+
Requires-Dist: openai; extra == "all"
|
|
72
|
+
Requires-Dist: anthropic; extra == "all"
|
|
73
|
+
Requires-Dist: zhipuai; extra == "all"
|
|
74
|
+
Requires-Dist: groq; extra == "all"
|
|
75
|
+
Requires-Dist: boto3; extra == "all"
|
|
76
|
+
Requires-Dist: paddlepaddle; extra == "all"
|
|
77
|
+
Requires-Dist: tiktoken; extra == "all"
|
|
78
|
+
Requires-Dist: toml; extra == "all"
|
|
79
|
+
Requires-Dist: exa_py; extra == "all"
|
|
80
|
+
Requires-Dist: google-genai; extra == "all"
|
|
81
|
+
Requires-Dist: python-dotenv; extra == "all"
|
|
82
|
+
Requires-Dist: Pillow>=11.3.0; extra == "all"
|
|
83
|
+
Requires-Dist: gymnasium~=0.28.1; extra == "all"
|
|
84
|
+
Requires-Dist: requests~=2.31.0; extra == "all"
|
|
85
|
+
Requires-Dist: pytz~=2024.1; extra == "all"
|
|
86
|
+
Requires-Dist: psutil~=5.9.6; extra == "all"
|
|
87
|
+
Requires-Dist: tqdm~=4.65.0; extra == "all"
|
|
88
|
+
Requires-Dist: flask~=3.0.0; extra == "all"
|
|
89
|
+
Requires-Dist: requests-toolbelt~=1.0.0; extra == "all"
|
|
90
|
+
Requires-Dist: lxml; extra == "all"
|
|
91
|
+
Requires-Dist: xmltodict; extra == "all"
|
|
92
|
+
Requires-Dist: PyGetWindow; extra == "all"
|
|
93
|
+
Requires-Dist: ImageHash; extra == "all"
|
|
94
|
+
Requires-Dist: scikit-image; extra == "all"
|
|
95
|
+
Requires-Dist: formulas; extra == "all"
|
|
96
|
+
Requires-Dist: pydrive; extra == "all"
|
|
97
|
+
Requires-Dist: fastdtw; extra == "all"
|
|
98
|
+
Requires-Dist: odfpy; extra == "all"
|
|
99
|
+
Requires-Dist: func-timeout; extra == "all"
|
|
100
|
+
Requires-Dist: beautifulsoup4; extra == "all"
|
|
101
|
+
Requires-Dist: dashscope; extra == "all"
|
|
102
|
+
Requires-Dist: google-generativeai; extra == "all"
|
|
103
|
+
Requires-Dist: PyYaml; extra == "all"
|
|
104
|
+
Requires-Dist: mutagen; extra == "all"
|
|
105
|
+
Requires-Dist: easyocr; extra == "all"
|
|
106
|
+
Requires-Dist: borb; extra == "all"
|
|
107
|
+
Requires-Dist: pypdf2; extra == "all"
|
|
108
|
+
Requires-Dist: lybic>=0.7.3; extra == "all"
|
|
109
|
+
Requires-Dist: pdfplumber; extra == "all"
|
|
110
|
+
Requires-Dist: azure-identity; extra == "all"
|
|
111
|
+
Requires-Dist: azure-mgmt-compute; extra == "all"
|
|
112
|
+
Requires-Dist: azure-mgmt-network; extra == "all"
|
|
113
|
+
Requires-Dist: docker; extra == "all"
|
|
114
|
+
Requires-Dist: dotenv; extra == "all"
|
|
115
|
+
Requires-Dist: python-pptx; extra == "all"
|
|
116
|
+
Requires-Dist: odfpy; extra == "all"
|
|
117
|
+
Requires-Dist: openpyxl; extra == "all"
|
|
118
|
+
Requires-Dist: pandas; extra == "all"
|
|
119
|
+
Requires-Dist: lxml; extra == "all"
|
|
120
|
+
Requires-Dist: filelock; extra == "all"
|
|
121
|
+
Requires-Dist: xmltodict; extra == "all"
|
|
122
|
+
Requires-Dist: opencv-python-headless; extra == "all"
|
|
123
|
+
Requires-Dist: Pillow; extra == "all"
|
|
124
|
+
Requires-Dist: imagehash; extra == "all"
|
|
125
|
+
Requires-Dist: rapidfuzz; extra == "all"
|
|
126
|
+
Requires-Dist: fitz; extra == "all"
|
|
127
|
+
Requires-Dist: imagehash; extra == "all"
|
|
128
|
+
Requires-Dist: odfpy; extra == "all"
|
|
129
|
+
Requires-Dist: pdfplumber; extra == "all"
|
|
130
|
+
Requires-Dist: PyYaml; extra == "all"
|
|
131
|
+
Requires-Dist: mutagen; extra == "all"
|
|
132
|
+
Requires-Dist: pypdf; extra == "all"
|
|
133
|
+
Requires-Dist: PyMuPDF; extra == "all"
|
|
134
|
+
Requires-Dist: formulas; extra == "all"
|
|
135
|
+
Requires-Dist: pyacoustid; extra == "all"
|
|
136
|
+
Requires-Dist: opencv-python~=4.8.1.78; extra == "all"
|
|
137
|
+
Requires-Dist: PyPDF2; extra == "all"
|
|
138
|
+
Requires-Dist: librosa; extra == "all"
|
|
139
|
+
Requires-Dist: fastdtw; extra == "all"
|
|
140
|
+
Requires-Dist: scikit-learn; extra == "all"
|
|
141
|
+
Requires-Dist: scikit-image; extra == "all"
|
|
142
|
+
Requires-Dist: bs4; extra == "all"
|
|
143
|
+
Requires-Dist: azure-identity; extra == "all"
|
|
144
|
+
Requires-Dist: azure-mgmt-compute; extra == "all"
|
|
145
|
+
Requires-Dist: azure-mgmt-network; extra == "all"
|
|
146
|
+
Requires-Dist: easyocr; extra == "all"
|
|
147
|
+
Requires-Dist: pyobjc; platform_system == "Darwin" and extra == "all"
|
|
148
|
+
Requires-Dist: oa_atomacos; platform_system == "Darwin" and extra == "all"
|
|
149
|
+
Requires-Dist: pywinauto; platform_system == "Windows" and extra == "all"
|
|
150
|
+
Requires-Dist: pywin32; platform_system == "Windows" and extra == "all"
|
|
97
151
|
Dynamic: author
|
|
98
152
|
Dynamic: license-file
|
|
99
153
|
Dynamic: requires-python
|
|
@@ -470,6 +524,15 @@ If you find this codebase useful, please cite:
|
|
|
470
524
|
}
|
|
471
525
|
```
|
|
472
526
|
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## ❤️ Touch us:
|
|
530
|
+
|
|
531
|
+
<div align="center" style="display: flex; justify-content: center; gap: 20px; flex-wrap: wrap;">
|
|
532
|
+
<img src="assets/feishu.png" alt="Lark Group" style="width: 200px; height: auto;"/>
|
|
533
|
+
<img src="assets/wechat.jpg" alt="WeChat Group" style="width: 200px; height: auto;"/>
|
|
534
|
+
<img src="assets/qq.png" alt="QQ Group" style="width: 200px; height: auto;"/>
|
|
535
|
+
</div>
|
|
473
536
|
|
|
474
537
|
## Stargazers over time
|
|
475
538
|
|
|
@@ -51,26 +51,26 @@ desktop_env/providers/virtualbox/provider.py,sha256=kSWLSddLpn8IfeyAPyMEy_p5SOap
|
|
|
51
51
|
desktop_env/providers/vmware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
52
|
desktop_env/providers/vmware/manager.py,sha256=pFqJwF6BAijmD-LbSei68-DU7ILCTONRj7e0At5iKIg,18893
|
|
53
53
|
desktop_env/providers/vmware/provider.py,sha256=88ERND67KQIxG74b10sAXJ04o5FhNpx0d9pRTi8bHrA,4080
|
|
54
|
-
gui_agents/__init__.py,sha256=
|
|
55
|
-
gui_agents/cli_app.py,sha256=
|
|
56
|
-
gui_agents/agents/Action.py,sha256=
|
|
54
|
+
gui_agents/__init__.py,sha256=lbM57x5ZeJ51oDtCLVie760uT3UUJAInHdeKksYQZ4c,1603
|
|
55
|
+
gui_agents/cli_app.py,sha256=M8zO24xPTD4WDuLgnSqSjJ6VA3SFq0-qyLncizh6D04,29046
|
|
56
|
+
gui_agents/agents/Action.py,sha256=aEqkrNtb5TWn5i5nkMBWTN56_9tbfRPEGw2SgkFYKeY,6197
|
|
57
57
|
gui_agents/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
gui_agents/agents/agent_s.py,sha256=
|
|
58
|
+
gui_agents/agents/agent_s.py,sha256=LUxLENjuHRrgycfzKjYmyZXmd5Xv3XHPAWy6g9_BvoE,34322
|
|
59
59
|
gui_agents/agents/global_state.py,sha256=BS6tUeK9Z3CdUIeU0gcEjzVnc_s7naeKQsCoIQLp23g,22314
|
|
60
|
-
gui_agents/agents/grounding.py,sha256=
|
|
61
|
-
gui_agents/agents/hardware_interface.py,sha256=
|
|
62
|
-
gui_agents/agents/manager.py,sha256=
|
|
63
|
-
gui_agents/agents/translator.py,sha256=
|
|
64
|
-
gui_agents/agents/worker.py,sha256=
|
|
60
|
+
gui_agents/agents/grounding.py,sha256=9BGp_emVAODZgberH2IqgjVCCNDx-eUNbe1mdnUt7ZA,22764
|
|
61
|
+
gui_agents/agents/hardware_interface.py,sha256=32auvpVwJ-DimTTCDguM49DEBR4JeFCeHx41Bgv3Svg,5332
|
|
62
|
+
gui_agents/agents/manager.py,sha256=I00ycDd8cBwXm6tJAzkTEccDE0P_R04ZAjn0uXGySY0,24030
|
|
63
|
+
gui_agents/agents/translator.py,sha256=WwWY1ffs2OQuh65DSVjWpfpettJVdmmCI-w92K0JeHg,5171
|
|
64
|
+
gui_agents/agents/worker.py,sha256=QO8pPh7YtGYZc8E5I1ACGHXzRELNnchpusK6tVNAxWA,15297
|
|
65
65
|
gui_agents/agents/Backend/ADBBackend.py,sha256=J8WeFFLEPh05FmFKuGz72wgcKdKQT9kLUCHyEb8mRkk,2151
|
|
66
66
|
gui_agents/agents/Backend/Backend.py,sha256=Aou3gBfur0AqL_bMn9FFeLTBM4CfL5aiIRivjqaB6zk,978
|
|
67
|
-
gui_agents/agents/Backend/LybicBackend.py,sha256=
|
|
68
|
-
gui_agents/agents/Backend/PyAutoGUIBackend.py,sha256=
|
|
69
|
-
gui_agents/agents/Backend/PyAutoGUIVMwareBackend.py,sha256=
|
|
67
|
+
gui_agents/agents/Backend/LybicBackend.py,sha256=A5QG4P3QAcAQO-MM7jmKU4zr5s98KReysCuQIHUU7Ec,13166
|
|
68
|
+
gui_agents/agents/Backend/PyAutoGUIBackend.py,sha256=KX6_cB0sW_sNAcqYhnzQ6ksMJ1cDPK1OWRXet26qg_8,6064
|
|
69
|
+
gui_agents/agents/Backend/PyAutoGUIVMwareBackend.py,sha256=_AEKf4qU5EiKIDOD64bicEwiGnjp-wsX5Q14v9e79M4,9910
|
|
70
70
|
gui_agents/agents/Backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
71
|
gui_agents/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
gui_agents/core/engine.py,sha256=
|
|
73
|
-
gui_agents/core/knowledge.py,sha256=
|
|
72
|
+
gui_agents/core/engine.py,sha256=_KbY4BkJ_CsAaIDSUkGK8JQ7hLG3GZ2Cn-pT5xzIPj0,54561
|
|
73
|
+
gui_agents/core/knowledge.py,sha256=vAyp3JZz2bWKCN6leWDO5FjF1pdLHgXp5EDxuUSjVro,18181
|
|
74
74
|
gui_agents/core/mllm.py,sha256=k3BIILmb7eaNBu_pXQaD5cRpVBGkrLVQqkxQzzseZdo,21191
|
|
75
75
|
gui_agents/lybic_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
76
|
gui_agents/lybic_client/lybic_client.py,sha256=E9_TRtQChEkFGe74J4HrkapVaFCG0TkjxeW9z0Je--s,2994
|
|
@@ -84,19 +84,19 @@ gui_agents/service/exceptions.py,sha256=Tk3U4eycX-wuAqR0B-TthBESKyu8KuwH5Ksng0v4
|
|
|
84
84
|
gui_agents/store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
85
|
gui_agents/store/registry.py,sha256=KWySYUlRA5SGubqqCgOu5Lk7PvBIQQ4cEZmHoNwKzVQ,615
|
|
86
86
|
gui_agents/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
-
gui_agents/tools/tools.py,sha256=
|
|
87
|
+
gui_agents/tools/tools.py,sha256=vv6jlgUUXyop86GwiVzQYxccTCaH7ErQcjDXX3-l5yM,27555
|
|
88
88
|
gui_agents/unit_test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
89
|
gui_agents/unit_test/run_tests.py,sha256=HuByLtSZ1TXbn_QWduA51L4BYcv_oM6ctGcyWcoqPq8,1773
|
|
90
|
-
gui_agents/unit_test/test_manager.py,sha256=
|
|
91
|
-
gui_agents/unit_test/test_worker.py,sha256=
|
|
90
|
+
gui_agents/unit_test/test_manager.py,sha256=Tj_jPtjL4xtEA37Cjn-48qBPqdj0K2Gup0tW17kdGeY,13539
|
|
91
|
+
gui_agents/unit_test/test_worker.py,sha256=wgcJ1jrq4jW90iH1gpw1PUGW5yj2FK1VtpDsgtvatXA,10258
|
|
92
92
|
gui_agents/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
-
gui_agents/utils/analyze_display.py,sha256=
|
|
94
|
-
gui_agents/utils/common_utils.py,sha256=
|
|
93
|
+
gui_agents/utils/analyze_display.py,sha256=PTFvGi0qYsd7bI7nKJajSLXpH_GiVRk7y47UZZ2S5y4,10558
|
|
94
|
+
gui_agents/utils/common_utils.py,sha256=lfWg7SrGfEnu9ZS9AWP3GKhbeTbaSZ6F9oh6U_qCsFw,8752
|
|
95
95
|
gui_agents/utils/display_viewer.py,sha256=hL6Pf-wpoQrrYeOi6eaGnCorkAvGWNzkLIuM9yIudnk,8731
|
|
96
96
|
gui_agents/utils/embedding_manager.py,sha256=7QFITe9l0z8OKHT-yqx-BGwVMj4BRL2iJ13PgJ2-Yak,2117
|
|
97
97
|
gui_agents/utils/image_axis_utils.py,sha256=z21cVAE2ZOK1DR7wK10JHg8aZapkX2oGI6D93pKZEao,878
|
|
98
|
-
lybic_guiagents-0.2.
|
|
99
|
-
lybic_guiagents-0.2.
|
|
100
|
-
lybic_guiagents-0.2.
|
|
101
|
-
lybic_guiagents-0.2.
|
|
102
|
-
lybic_guiagents-0.2.
|
|
98
|
+
lybic_guiagents-0.2.2.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
99
|
+
lybic_guiagents-0.2.2.dist-info/METADATA,sha256=ZVhQC9zXiTIR0rNRRoz2Gr8RyPcvs8fDjvyFYiEA2HU,20655
|
|
100
|
+
lybic_guiagents-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
101
|
+
lybic_guiagents-0.2.2.dist-info/top_level.txt,sha256=NFP1jNNbbEGUexavwh7g0z_23hahrdgEV_9AjdynSw0,23
|
|
102
|
+
lybic_guiagents-0.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|