Skip to content

feat: ContainerCodeExecutor should support input_files and output_files #5302

Closed

Description

@ttnyt8701

Summary

ContainerCodeExecutor currently ignores CodeExecutionInput.input_files and always returns an empty output_files list. This makes it impossible to pass files into the container or retrieve generated files from it.

Current Behavior

In container_code_executor.py, execute_code():

exec_result = self._container.exec_run(
    ['python3', '-c', code_execution_input.code],
    demux=True,
)
return CodeExecutionResult(
    stdout=output,
    stderr=error,
    output_files=[],  # Always empty
)
  • code_execution_input.input_files is completely ignored
  • output_files is always an empty list
  • No Docker volume mounts are configured
  • optimize_data_file is forced to False (frozen)

Expected Behavior

ContainerCodeExecutor should support file I/O through the existing File / CodeExecutionInput / CodeExecutionResult data structures, which already support binary content (content: str | bytes).

Suggested approach

  1. Input files: Use container.put_archive() to copy input_files into the container (e.g., to /tmp/inputs/) before code execution
  2. Output files: Use container.get_archive() to retrieve files from a designated output directory (e.g., /tmp/outputs/) after code execution
  3. Alternatively, support a volumes parameter for Docker bind mounts

Use Case

We use an LLM agent system where a supervisor agent downloads files (e.g., Excel, CSV) to /tmp/ and needs to pass them to a code execution agent for processing (e.g., data transformation with openpyxl/pandas).

  • BuiltInCodeExecutor runs on the Gemini server, so it cannot access local files
  • UnsafeLocalCodeExecutor can access local files but is not safe for production (unrestricted exec() with access to credentials, env vars, etc.)
  • ContainerCodeExecutor would be the ideal middle ground — isolated execution with file access — but file I/O is not implemented

Impact

Without file I/O support, ContainerCodeExecutor is limited to pure computation tasks (math, data generation). File processing workflows must either:

  • Use BuiltInCodeExecutor (no local file access) and pass all data through LLM context (slow for large data)
  • Use UnsafeLocalCodeExecutor (security risk in production)

Environment

  • ADK version: google-cloud-aiplatform[adk] 1.100.0
  • Python: 3.12+

Activity

  1. added
    tools[Component] This issue is related to tools
    on Apr 13, 2026
  2. added theissue type on Apr 13, 2026
  3. klateefa commented on Apr 14, 2026

    @klateefa

    @ttnyt8701 Thanks for the update. The request is currently being reviewed, and I will let you know if anything further is needed. Thank you for understanding.

  4. added
    needs review[Status] The PR/issue is awaiting review from the maintainer
    on Apr 14, 2026
  5. hamdi-sakly commented on Apr 16, 2026

    @hamdi-sakly
    Contributor

    @klateefa #5321 is my pr to this problem

  6. added a commit that references this issue on Oct 29, 2026
    effd641
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

needs review[Status] The PR/issue is awaiting review from the maintainertools[Component] This issue is related to tools

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions