Files
chetantoshniwal 52303a8d07 .NET: Add Code Interpreter container file download samples (#5014)
* Add Code Interpreter container file download samples (#3081)

- Add Agent_OpenAI_Step06_CodeInterpreterFileDownload (Public OpenAI)
- Add Agent_Step24_CodeInterpreterFileDownload (Microsoft Foundry)
- Both samples demonstrate downloading cfile_/cntr_ container files
  via ContainerClient instead of the standard Files API
- Update solution file and parent READMEs

* Address review feedback: flatten nested foreach loops using SelectMany

Addresses https://github.com/microsoft/agent-framework/pull/5014#discussion_r3046908449 and https://github.com/microsoft/agent-framework/pull/5014#discussion_r3046920209

---------

Co-authored-by: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com>
Co-authored-by: rogerbarreto <rogerbarreto@users.noreply.github.com>
52303a8d07 · 2026-04-17 16:55:03 +00:00
History
..

Code Interpreter File Download (OpenAI)

This sample demonstrates how to download files generated by Code Interpreter when using the OpenAI Responses API.

What this sample demonstrates

  • Creating an agent with Code Interpreter tool using ResponsesClient.AsAIAgent()
  • Generating files through Code Interpreter (e.g., CSV, Excel, images)
  • Extracting container file citations from agent response annotations
  • Downloading container files using the ContainerClient API

Container files vs regular files

When Code Interpreter generates a file, the file is stored inside a container with a cntr_ prefixed ID. The file itself gets a cfile_ prefixed ID.

These container files cannot be downloaded using the standard Files API (GetOpenAIFileClient), which returns 404 for cfile_ IDs. Instead, you must use the Containers API (GetContainerClient) to download them:

// ❌ This does NOT work for container files
var filesClient = openAIClient.GetOpenAIFileClient();
await filesClient.DownloadFileAsync("cfile_...");  // Returns 404

// ✅ Use ContainerClient instead
var containerClient = openAIClient.GetContainerClient();
await containerClient.DownloadContainerFileAsync("cntr_...", "cfile_...");

The container ID and file ID are available from the ContainerFileCitationMessageAnnotation annotation in the response, accessible via CitationAnnotation.RawRepresentation.

Prerequisites

  • .NET 10 SDK or later
  • OpenAI API key with access to a model that supports Code Interpreter

Set the following environment variables:

$env:OPENAI_API_KEY="sk-..."
$env:OPENAI_CHAT_MODEL_NAME="gpt-4o-mini"  # Optional, defaults to gpt-4o-mini

Run the sample

dotnet run

See also