diff --git a/ai/compute.py b/ai/compute.py index b4ff312..808389c 100644 --- a/ai/compute.py +++ b/ai/compute.py @@ -52,7 +52,6 @@ def reprompt(nextsteps: str, processor) -> None: scr = screenshot_to_base64(take_screenshot()) return processor.process(nextsteps, img_data=scr) - def _execute(name, args, processor): if name == "click_button": press_mouse(MouseInput(**args)) diff --git a/ai/processor.py b/ai/processor.py index 5fd105e..1c55a87 100644 --- a/ai/processor.py +++ b/ai/processor.py @@ -4,6 +4,10 @@ import openai from flask import jsonify from objects import aic import ai.compute +from objects import logger as logger_module +import logging + +logger: logging.Logger = logger_module.get_logger(__name__) class AIProcessor: def __init__(self, api_key: str, model: str = "gpt-4.1"): @@ -62,6 +66,12 @@ class AIProcessor: processor=self, ) outputs.append(r) if r else None + # Make sure the two last messages from user has an image, but set disable_image to True for the others + for msg in self.session.messages[-2:]: + msg.disable_image = True + logger.debug( + self.session.messages + ) if reexec: img = ai.compute.screenshot_to_base64( ai.compute.take_screenshot() @@ -86,15 +96,6 @@ class AIProcessor: aic.Message(role="assistant", content=output_text) ) - # re-execute if needed - if reexec: - img = ai.compute.screenshot_to_base64( - ai.compute.take_screenshot() - ) - - outputs.append( - *self.process(nextsteps, img) - ) return outputs except Exception as e: traceback.print_exc() diff --git a/objects/logger.py b/objects/logger.py new file mode 100644 index 0000000..cda9e1e --- /dev/null +++ b/objects/logger.py @@ -0,0 +1,42 @@ +import logging +import os +from logging.handlers import RotatingFileHandler + +# Configuration values +LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() +LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" +LOG_DIR = os.getenv("LOG_DIR", os.path.join(os.getcwd(), "logs")) + +# Ensure log directory exists +os.makedirs(LOG_DIR, exist_ok=True) + +# Log file path +LOG_FILE = os.path.join(LOG_DIR, "app.log") + +# Create root logger +logger = logging.getLogger("gpt-agent") +logger.setLevel(LOG_LEVEL) + +# Formatter +formatter = logging.Formatter(LOG_FORMAT) + +# Console handler +console_handler = logging.StreamHandler() +console_handler.setLevel(LOG_LEVEL) +console_handler.setFormatter(formatter) +logger.addHandler(console_handler) + +# Rotating file handler +file_handler = RotatingFileHandler(LOG_FILE, maxBytes=5*1024*1024, backupCount=5) +file_handler.setLevel(LOG_LEVEL) +file_handler.setFormatter(formatter) +logger.addHandler(file_handler) + +def get_logger(name: str | None = None) -> logging.Logger: + """ + Retrieve a configured logger instance. If name is provided, + returns a child logger of the configured root logger. + """ + if name: + return logger.getChild(name) + return logger