code: def streaming(
      self,
      logging_obj,
      timeout: float,
      data: dict,
      model: str,
      api_key: Optional[str] = None,
      api_base: Optional[str] = None,
      client=None,
      max_retries=None,
      headers=None,
  ):
      if client is None:
          openai_client = OpenAI(
              api_key=api_key,
              base_url=api_base,
              http_client=litellm.client_session,
              timeout=timeout,
              max_retries=max_retries,
          )
      else:
          openai_client = client
      ## LOGGING
      logging_obj.pre_call(
          input=data["messages"],
          api_key=api_key,
          additional_args={
              "headers": headers,
              "api_base": api_base,
              "acompletion": False,
              "complete_input_dict": data,
          },
      )
      response = openai_client.chat.completions.create(
          **data, timeout=timeout
      )
      streamwrapper = CustomStreamWrapper(
          completion_stream=response,
          model=model,
          custom_llm_provider="openai",
          logging_obj=logging_obj,
      )
      return streamwrapper
  
imports: from typing import Optional, Union, Any
  import types, time, json
  import httpx
  from .base import BaseLLM
  from litellm.utils import ModelResponse, Choices, Message, CustomStreamWrapper, convert_to_model_response_object, Usage
  from typing import Callable, Optional
  import aiohttp, requests
  import litellm
  from .prompt_templates.factory import prompt_factory, custom_prompt
  from openai import OpenAI, AsyncOpenAI
label_desc: Use image node_id 3 for calling the OpenAIChatCompletion obj's underlying member method code with example usage: obj.streaming(logging_obj, timeout, data, model, api_key, api_base, client, max_retries, headers) and returns: streamwrapper