You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: custom_client_audio.go
    path of file: ./repos/azure-sdk-for-go/sdk/ai/azopenai
    
    the code of the file until where you have to start completion: //go:build go1.18
// +build go1.18

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

package azopenai

import (
	"bytes"
	"context"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"strings"

	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
)

// GetAudioTranscriptionOptions contains the optional parameters for the [Client.GetAudioTranscription] method.
type GetAudioTranscriptionOptions struct {
	// placeholder for future optional parameters
}

// GetAudioTranscriptionResponse contains the response from method [Client.GetAudioTranscription].
type GetAudioTranscriptionResponse struct {
	AudioTran
    
func setMultipartFormData[T getAudioTranscriptionInternalOptions | getAudioTranslationInternalOptions](req *policy.Request, file io.ReadSeekCloser, options T) error {
	body := bytes.Buffer{}
	writer := multipart.NewWriter(&body)

	writeContent := func(fieldname, filename string, file io.ReadSeekCloser) error {
		fd, err := writer.CreateFormFile(fieldname, filename)

		if err != nil {
			return err
		}

		if _, err := io.Copy(fd, file); err != nil {
			return err
		}

		return err
	}

	var filename = "audio.mp3"

	switch opt := any(options).(type) {
	case getAudioTranscriptionInternalOptions:
		if opt.Filename != nil {
			filename = *opt.Filename
		}
	case getAudioTranslationInternalOptions:
		if opt.Filename != nil {
			filename = *opt.Filename
		}
	}

	if err := writeContent("file", filename, file); err != nil {
		return err
	}

	switch v := any(options).(type) {
	case getAudioTranslationInternalOptions:
		if err := writeField(writer, "model", v.DeploymentName); err != nil {
			return err
		}
		if err := writeField(writer, "prompt", v.Prompt); err != nil {
			return err
		}
		if err := writeField(writer, "response_format", v.ResponseFormat); err != nil {
			return err
		}
		if err := writeField(writer, "temperature", v.Temperature); err != nil {
			return err
		}
	case getAudioTranscriptionInternalOptions:
		if err := writeField(writer, "language", v.Language); err != nil {
			return err
		}
		if err := writeField(writer, "model", v.DeploymentName); err != nil {
			return err
		}
		if err := writeField(writer, "prompt", v.Prompt); err != nil {
			return err
		}
		if err := writeField(writer, "response_format", v.ResponseFormat); err != nil {
			return err
		}
		if err := writeField(writer, "temperature", v.Temperature); err != nil {
			return err
		}
	default:
		return fmt.Errorf("failed to serialize multipart for unhandled type %T", body)
	}

	if err := writer.Close(); err != nil {
		return err
	}

	return req.SetBody(streaming.NopCloser(bytes.NewReader(body.Bytes())), writer.FormDataContentType())
}