Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 19 additions & 14 deletions src/oagi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,16 @@
# package_to_check is None if no optional dependency is required
_LAZY_IMPORTS_DATA: dict[str, tuple[str, str | None, str | None]] = {
# Action converters (no optional dependencies)
"OagiActionConverter": ("oagi.converters.oagi", None, None),
"ConverterConfig": ("oagi.converters.base", None, None),
"PyautoguiActionConvertor": (
"oagi.converters.pyautogui_action_converter",
None,
None,
),
"OagiActionConverter": (
"oagi.converters.pyautogui_action_converter",
None,
None,
),
"BaseActionConverter": ("oagi.converters.base", None, None),
# Desktop handlers (require pyautogui/PIL)
"AsyncPyautoguiActionHandler": (
Expand All @@ -55,11 +63,7 @@
"pyautogui",
"desktop",
),
"PyautoguiConfig": (
"oagi.handler.pyautogui_action_handler",
"pyautogui",
"desktop",
),
"PyautoguiConfig": ("oagi.handler.utils", None, None),
"ScreenshotMaker": ("oagi.handler.screenshot_maker", "PIL", "desktop"),
# Agent modules (lazy to avoid circular imports)
"AsyncDefaultAgent": ("oagi.agent.default", None, None),
Expand Down Expand Up @@ -92,18 +96,19 @@
from oagi.agent.default import AsyncDefaultAgent
from oagi.agent.observer.agent_observer import AsyncAgentObserver
from oagi.agent.tasker import TaskerAgent
from oagi.converters.base import BaseActionConverter, ConverterConfig
from oagi.converters.oagi import OagiActionConverter
from oagi.converters.base import BaseActionConverter
from oagi.converters.pyautogui_action_converter import (
OagiActionConverter,
PyautoguiActionConvertor,
)
from oagi.handler.async_pyautogui_action_handler import AsyncPyautoguiActionHandler
from oagi.handler.async_screenshot_maker import AsyncScreenshotMaker
from oagi.handler.async_ydotool_action_handler import AsyncYdotoolActionHandler
from oagi.handler.pil_image import PILImage
from oagi.handler.pyautogui_action_handler import (
PyautoguiActionHandler,
PyautoguiConfig,
)
from oagi.handler.pyautogui_action_handler import PyautoguiActionHandler
from oagi.handler.screen_manager import ScreenManager
from oagi.handler.screenshot_maker import ScreenshotMaker
from oagi.handler.utils import PyautoguiConfig
from oagi.handler.ydotool_action_handler import YdotoolActionHandler, YdotoolConfig
from oagi.server.config import ServerConfig
from oagi.server.main import create_app
Expand Down Expand Up @@ -181,7 +186,7 @@ def __dir__() -> list[str]:
# Lazy imports - Screen manager
"ScreenManager",
# Lazy imports - Action converters
"PyautoguiActionConvertor",
"OagiActionConverter",
"ConverterConfig",
"BaseActionConverter",
]
24 changes: 12 additions & 12 deletions src/oagi/converters/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@
# -----------------------------------------------------------------------------
"""Action converters for VLM support.

This module provides the base class and OAGI implementation for action converters.
Third parties can inherit from BaseActionConverter to create custom converters.
This module provides PyautoguiActionConvertor for converting OAGI actions
to pyautogui command strings, and BaseActionConverter for custom converters.

Example usage:
from oagi.converters import OagiActionConverter, ConverterConfig
from oagi.converters import PyautoguiActionConvertor

# Configure for 1920x1080 sandbox
config = ConverterConfig(sandbox_width=1920, sandbox_height=1080)
converter = OagiActionConverter(config=config)
import logging
converter = PyautoguiActionConvertor(logger=logging.getLogger(__name__))

# Convert OAGI actions to pyautogui strings
result = converter(actions) # list[str]
result = converter(actions) # list[tuple[str, bool]]

# Convert to runtime API steps
for cmd in result:
for cmd, is_last in result:
step = converter.action_string_to_step(cmd)
# Execute step via runtime API...

Creating custom converters:
from oagi.converters import BaseActionConverter, ConverterConfig
from oagi.converters import BaseActionConverter
from oagi.handler.utils import PyautoguiConfig

class MyActionConverter(BaseActionConverter[MyAction]):
@property
Expand All @@ -46,11 +46,11 @@ def serialize_actions(self, actions: list[MyAction]) -> list[dict]:
...
"""

from .base import BaseActionConverter, ConverterConfig
from .oagi import OagiActionConverter
from .base import BaseActionConverter
from .pyautogui_action_converter import OagiActionConverter, PyautoguiActionConvertor

__all__ = [
"BaseActionConverter",
"ConverterConfig",
"PyautoguiActionConvertor",
"OagiActionConverter",
]
25 changes: 3 additions & 22 deletions src/oagi/converters/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@

import re
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any, Generic, TypeVar

from ..handler.capslock_manager import CapsLockManager
from ..handler.utils import (
CoordinateScaler,
PyautoguiConfig,
normalize_key,
parse_hotkey,
validate_keys,
Expand All @@ -27,25 +27,6 @@
T = TypeVar("T")


@dataclass
class ConverterConfig:
"""Configuration for action converters.

Matches the configuration options in PyautoguiConfig for consistency.
"""

sandbox_width: int = 1920
sandbox_height: int = 1080
drag_duration: float = 0.5
scroll_amount: int = 2
wait_duration: float = 1.0
hotkey_interval: float = 0.1
capslock_mode: str = "session"
strict_coordinate_validation: bool = False
"""If True, raise ValueError when coordinates are outside valid range.
If False (default), clamp coordinates to valid range (original behavior)."""


class BaseActionConverter(ABC, Generic[T]):
"""Abstract base class for action converters.

Expand All @@ -64,7 +45,7 @@ class BaseActionConverter(ABC, Generic[T]):
def __init__(
self,
*,
config: ConverterConfig | None = None,
config: PyautoguiConfig | None = None,
logger: Any | None = None,
):
"""Initialize the converter.
Expand All @@ -73,7 +54,7 @@ def __init__(
config: Converter configuration. Uses defaults if not provided.
logger: Optional logger instance for debug/error logging.
"""
self.config = config or ConverterConfig()
self.config = config or PyautoguiConfig()
self.logger = logger

# Initialize coordinate scaler
Expand Down
198 changes: 0 additions & 198 deletions src/oagi/converters/oagi.py

This file was deleted.

Loading