Skip to main content

azure-dynamic-sessions-code-interpreter

Standalone Python client for Azure Container Apps dynamic (code interpreter) sessions. Use it to run sandboxed Python against your session pool from your own apps or LLM tooling, without pulling in LangChain.

Repository: github.com/Akindu23/azure-dynamic-sessions-code-interpreter-tool

Installation

pip install -U azure-dynamic-sessions-code-interpreter

Requires Python 3.10+.

Configuration

Create an Azure Container Apps session pool and copy its management endpoint. See Configure a pool in Azure Container Apps.

Authentication uses DefaultAzureCredential. If you use a user-assigned managed identity, set AZURE_CLIENT_ID to that identity’s client ID. Only Microsoft Entra ID tokens from a principal granted the Azure ContainerApps Session Executor role on the session pool may call the pool management API.

az role assignment create \
    --role "Azure ContainerApps Session Executor" \
    --assignee <PRINCIPAL_ID> \
    --scope <SESSION_POOL_RESOURCE_ID>

Usage

Import CodeInterpreterTool from the installed package (sources live under src/ in this repo):

from io import BytesIO

from azure_dynamic_sessions_code_interpreter import CodeInterpreterTool

POOL_MANAGEMENT_ENDPOINT = "https://<your-pool-management-endpoint>/"

tool = CodeInterpreterTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)

# Run Python in the session (returns JSON with result / stdout / stderr)
result = tool.execute("print('Hello, world!')")

# Upload a file into the session
tool.upload_file(data=BytesIO(b"Hello, world!"), remote_file_path="hello.txt")

# List files visible to the session
files = tool.list_files()

# Download a file from the session
tool.download_file(remote_file_path="hello.txt")

Optional arguments include session_id (reuse a session), timeout_connect, timeout_read, max_retries, and sanitize_input. See the docstring on CodeInterpreterTool in core.py for details.

Azure OpenAI: tool definition, arguments, and tool results

CodeInterpreterTool includes helpers aligned with function calling for Chat Completions and the Responses API. They expect tool_call to be the object returned by the model (with .function / .arguments or .call_id, etc.), matching how the Azure OpenAI Python SDK structures tool calls—not a plain dict.

1. Tool definition (what you send to the model)

Chat Completions — wrap the function under type / function:

code_interpreter = CodeInterpreterTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)

tools = [
    code_interpreter.get_tool_definition(is_chat_completions_api=True),
]
# Pass `tools` into your chat completion request.

Responses API — flatter tool shape:

code_interpreter = CodeInterpreterTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)

available_tools = [
    code_interpreter.get_tool_definition(is_chat_completions_api=False),
]
# Pass `available_tools` into your responses request.

2. Extract Python code from the model’s tool call

After the model emits a tool call, parse the python_code argument:

is_chat_completions_api = True  # or False for Responses API

python_code = code_interpreter.get_tool_call_arguments(
    tool_call=tool_call_object_from_model,
    is_chat_completions_api=is_chat_completions_api,
)

3. Run the sandbox and format the result for the next model turn

Execute the code and get a message-shaped payload to append to the conversation (role tool for Chat Completions, or function_call_output for Responses):

tool_call_result = code_interpreter.execute_tool_call(
    tool_call=tool_call_object_from_model,
    python_code=python_code,
    is_chat_completions_api=is_chat_completions_api,
)
# Append `tool_call_result` to your messages / response inputs and call the model again.

4. Typical branch when the model picks code_interpreter

This mirrors a common orchestration pattern (names like output / logger are only illustrative):

if output_name == "code_interpreter":
    python_code = code_interpreter.get_tool_call_arguments(
        tool_call=output,
        is_chat_completions_api=is_chat_completions_api,
    )
    # e.g. log a short preview: python_code[:200]

    tool_call_result = code_interpreter.execute_tool_call(
        tool_call=output,
        python_code=python_code,
        is_chat_completions_api=is_chat_completions_api,
    )
    # feed `tool_call_result` back to Azure OpenAI

This library is aimed at Azure OpenAI (Chat Completions or Responses API) workflows; support for other providers is work in progress.

Third-party notices

Parts of this project are derived from langchain-azure (MIT). Full attribution and license text are in THIRD_PARTY_NOTICES.TXT.

License

This project is licensed under the MIT License — see LICENSE.

Release files for azure-dynamic-sessions-code-interpreter 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for azure-dynamic-sessions-code-interpreter 1.0.0
File Size Uploaded
azure_dynamic_sessions_code_interpreter-1.0.0.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for azure-dynamic-sessions-code-interpreter 1.0.0
File Interpreter ABI Platform
azure_dynamic_sessions_code_interpreter-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.1 kB

Release files / azure_dynamic_sessions_code_interpreter-1.0.0.tar.gz

Download URL azure_dynamic_sessions_code_interpreter-1.0.0.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2f8586ee9f9abff5b29f56e3494b6570594e6d28518a16651f0f2d3b1a887b28
BLAKE2b-256 checksum
How to use checksums
2cf4ec4396d76b68a2c6027c5a9cdded7377228f7422e8a0651117183ddc9590
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / azure_dynamic_sessions_code_interpreter-1.0.0-py3-none-any.whl

Download URL azure_dynamic_sessions_code_interpreter-1.0.0-py3-none-any.whl
Size 10.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70941aebad6ed842bdc12d91aedaa8a9bb2f95f11d66037f3f48c6fad99561e6
BLAKE2b-256 checksum
How to use checksums
f87ea95456f09a1723857e5470635379cc41d5a9f35346009f2ef8e5307b2196
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page