debuggenie / ui /remote_client.py
Nihal2000's picture
Initial deployment
5ada319
import requests
import json
from typing import Dict, Any
from core.models import DebugResult
from ui.backend import DebugBackend
from loguru import logger
class RemoteBackend(DebugBackend):
def __init__(self, api_url: str, token: str = None):
self.api_url = api_url
self.token = token
async def analyze(self, context: Dict[str, Any]) -> DebugResult:
"""
Call the remote Modal endpoint.
"""
try:
# Prepare payload
# The Modal endpoint expects a dict with "error_text" and optional "context"
# Our context already has 'error_text', 'image', 'code_context'
# We might need to adapt if the endpoint signature is strict,
# but modal_app.py takes `error_info: dict`.
# Note: Image handling might need base64 encoding if not already done.
# In gradio_interface.py, 'image' is passed as PIL image or None.
# We need to serialize it if it's a PIL image.
payload = context.copy()
if payload.get('image'):
# If it's a PIL image, convert to base64
import base64
from io import BytesIO
img = payload['image']
if not isinstance(img, str):
buffered = BytesIO()
img.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
payload['image'] = img_str
headers = {"Content-Type": "application/json"}
if self.token:
headers["Authorization"] = f"Bearer {self.token}"
logger.info(f"Sending request to {self.api_url}")
response = requests.post(self.api_url, json=payload, headers=headers, timeout=600)
response.raise_for_status()
data = response.json()
return DebugResult(**data)
except Exception as e:
logger.error(f"Remote analysis failed: {e}")
raise e