Skip to content

Guided tour

FabrCore 2.0 · Release and package availability

These guides track the current 2.0 source. Stable 2.0.0 publication is pending; package commands show the release target. Until it is published, follow the source quick start or use a matching available prerelease set. Release migration · Runtime modes

MODULE 05 · LESSON 5.11

Work with files and audio

Accept files and turn an audio recording into a normal agent request.

Lesson 31 of 86 · FabrCore 2.0

Overview

File storage and transcription are separate services. A temporary upload is not durable knowledge and should have an explicit lifetime. Transcription turns audio into text that the existing Operations Desk pipeline can process; it does not require a second conversational architecture.

An upload is a resource with a lifetime

The file service stores content according to its configured provider and expiry policy. A returned file reference is not the same thing as text the agent has read, and it does not automatically ingest the content into GraphRAG. Decide which code downloads, parses or transcribes the content and what bounded result becomes part of the request.

Transcription joins the existing message flow

A transcription service consumes audio and returns text. That text can be shown for review and sent through the same assistant pipeline as typed input. For large recordings, stream/process chunks through the supported interface rather than allocating the entire recording in a UI component. Preserve the association between the transcript, user and source recording.

Turn an attachment into useful input

Download the Operations Desk source. The README lists project setup, package prerequisites and local ports.

  1. Use the Host file API with principal ownership and configure FabrCore:FileStorage path, TTL and cleanup. Use an appropriate persistent/shared store when deployed across hosts.
  2. Add an optional Azure OpenAI audio client in a plugin/service, stream the upload and pass the transcript as the next request. Keep endpoints and keys outside model arguments.
  3. Bound file sizes, split long recordings according to the currently supported model limits, propagate cancellation and keep source provenance where needed.
From a stream (recommended for chunked processing) · reference snippet
using var audioStream = File.OpenRead("/path/to/audio.mp3");

var options = new AudioTranscriptionOptions
{
    Filename = "audio.mp3",
    ResponseFormat = AudioTranscriptionFormat.Verbose,
    Temperature = 0f,
    Language = "en"
};

AudioTranscription transcription = await audioClient.TranscribeAudioAsync(
    audioStream, "audio.mp3", options);

Console.WriteLine(transcription.Text);
Console.WriteLine($"Duration: {transcription.Duration}");
Console.WriteLine($"Language: {transcription.Language}");

Compare the source and transcript

  1. Upload a short development audio clip saying “The printer in Bay 7 is jammed.” Run the transcription example with the configured provider and inspect the returned text before sending it to the assistant.
  2. Correct or confirm the text in your client, then submit it as a normal message. The assistant's response should reflect the transcript rather than assume access to the original waveform.
  3. Test an expired/missing file reference and an unsupported audio input. Explain which stage failed: file retrieval, transcription or agent processing.

The useful output is reviewed text entering the existing request flow. Persistent knowledge ingestion is a separate decision covered in module 9.

If the result is different

A workstation path is not shared cluster storage. Verify current audio model limits and supported response formats rather than copying historical limits into deployment policy.

Go deeper

Explore the related documentation.