xtekky/gpt4free · error · ImportError

Syntax error in workspace module '{name}' ({source_path}):\n

Error message

Syntax error in workspace module '{name}' ({source_path}):\n{traceback.format_exc()}

What it means

Thrown by g4f's .pa.py sandbox loader (pa_provider.py) when Python's compile() raises SyntaxError on a workspace module's source. The original syntax error and full traceback are embedded in the ImportError message so the offending line is visible. It fires before any execution of the module.

Source

Thrown at g4f/mcp/pa_provider.py:356

    module.__file__ = str(source_path.resolve())
    module.__name__ = name
    if pkg_init.is_file():
        module.__path__ = [str((workspace / name).resolve())]
        module.__package__ = name
    else:
        module.__package__ = ""

    # Build sandbox globals for the module
    module_globals = _make_safe_globals(SAFE_MODULES)
    module_globals["__file__"] = str(source_path.resolve())
    module_globals["__name__"] = name
    module_globals["__package__"] = module.__package__
    module.__dict__.update(module_globals)

    try:
        compiled = compile(code, str(source_path), "exec")
    except SyntaxError:
        raise ImportError(
            f"Syntax error in workspace module '{name}' "
            f"({source_path}):\n{traceback.format_exc()}"
        )

    # Execute in the current thread (no timeout — module loading is expected
    # to be fast and we need the module object synchronously).
    prev_depth = sys.getrecursionlimit()
    sys.setrecursionlimit(MAX_RECURSION_DEPTH)
    try:
        exec(compiled, module.__dict__, module.__dict__)  # noqa: S102
    except Exception:
        raise ImportError(
            f"Failed to load workspace module '{name}' "
            f"({source_path}):\n{traceback.format_exc()}"
        )
    finally:
        sys.setrecursionlimit(prev_depth)

View on GitHub (pinned to 973504e177)

Solutions

  1. Read the embedded traceback in the ImportError message — it names the line and column of the syntax error; fix that line.
  2. Validate locally first: python -m py_compile module.pa.py before uploading.
  3. Re-upload the complete file if truncation is suspected (check the file end).
  4. Replace smart quotes/dashes with ASCII equivalents if the source was pasted from a rich-text source.

Example fix

// before (module.pa.py)
def run(x)
    return x * 2

// after
def run(x):
    return x * 2
Defensive patterns

Strategy: validation

Validate before calling

import py_compile, tempfile, os

def module_compiles(source: str) -> bool:
    with tempfile.NamedTemporaryFile('w', suffix='.py', delete=False) as f:
        f.write(source)
        path = f.name
    try:
        py_compile.compile(path, doraise=True)
        return True
    except py_compile.PyCompileError:
        return False
    finally:
        os.unlink(path)

Try / catch

try:
    load_workspace_module(name, source_path)
except ImportError as e:
    if "Syntax error in workspace module" in str(e):
        surface_to_user(str(e))  # traceback is embedded, show it
    raise

Prevention

When it happens

Trigger: Uploading a .pa.py workspace module containing invalid Python — unbalanced brackets, bad indentation, Python-2-style print, f-string typos, or a file saved mid-edit / truncated by an upload limit.

Common situations: AI-generated tool code edited into a workspace with a missing colon or paren; copy-paste losing leading spaces (IndentationError is a SyntaxError subclass); encoding issues (smart quotes pasted from chat clients); partial file writes during concurrent edits.

Related errors


AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14). Data as JSON: /api/errors/0163b9d6f217d281. Report an issue: GitHub.