docstr: Retrieves a message file.
  
  Args:
    extra_headers: Send extra headers
  
    extra_query: Add additional query parameters to the request
  
    extra_body: Add additional JSON properties to the request
  
    timeout: Override the client-level default timeout for this request, in seconds
docstr_tok: ["Retrieves","a","message","file",".","Args",":","extra_headers",":","Send","extra","headers","extra_query",":","Add","additional","query","parameters","to","the","request","extra_body",":","Add","additional","JSON","properties","to","the","request","timeout",":","Override","the","client-level","default","timeout","for","this","request",",","in","seconds"]
code: def retrieve(
      self,
      file_id: str,
      *,
      thread_id: str,
      message_id: str,
      # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
      # The extra values given here take precedence over values defined on the client or passed to this method.
      extra_headers: Headers | None = None,
      extra_query: Query | None = None,
      extra_body: Body | None = None,
      timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
  ) -> MessageFile:
      """
      Retrieves a message file.
  
      Args:
        extra_headers: Send extra headers
  
        extra_query: Add additional query parameters to the request
  
        extra_body: Add additional JSON properties to the request
  
        timeout: Override the client-level default timeout for this request, in seconds
      """
      if not thread_id:
          raise ValueError(
              f"Expected a non-empty value for `thread_id` but received {thread_id!r}"
          )
      if not message_id:
          raise ValueError(
              f"Expected a non-empty value for `message_id` but received {message_id!r}"
          )
      if not file_id:
          raise ValueError(
              f"Expected a non-empty value for `file_id` but received {file_id!r}"
          )
      extra_headers = {
          "OpenAI-Beta": "assistants=v1",
          **(extra_headers or {}),
      }
      return self._get(
          f"/threads/{thread_id}/messages/{message_id}/files/{file_id}",
          options=make_request_options(
              extra_headers=extra_headers,
              extra_query=extra_query,
              extra_body=extra_body,
              timeout=timeout,
          ),
          cast_to=MessageFile,
      )
  
imports: from __future__ import annotations
  from typing_extensions import Literal
  import httpx
  from .....None import _legacy_response
  from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven
  from ....._utils import maybe_transform
  from ....._compat import cached_property
  from ....._resource import SyncAPIResource, AsyncAPIResource
  from ....._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
  from .....pagination import SyncCursorPage, AsyncCursorPage
  from ....._base_client import AsyncPaginator, make_request_options
  from .....types.beta.threads.messages import MessageFile, file_list_params
label_desc: Use image node_id 3 for calling the Files obj's underlying member method code with example usage: obj.retrieve(file_id) and returns: self