[Bug]: LiteLLM streaming legacy function call erroring

### Bug Description

I'm reviewing the LiteLLM code and coverage, and noticed that there's code related to getting the delta from the deprecated "functions" that has been superseded by "tools". If I attempt to construct code that follows this path, I get an error: `AttributeError: 'FunctionCall' object has no attribute 'get'`. Looking at the LiteLLM code here: https://github.com/BerriAI/litellm/blob/17ad8a04175402b71bbb3f67c9d8e5ff248c5228/litellm/types/utils.py#L681, it looks thankfully looks like they normalize to a `FunctionCall` type, rather than a union of dict and function call.

The code in question is capturing the iterative deltas for the function call, so that the complete function call so far can be yielded, (rather than just the delta)

I don't think llama index should support accumulating the full function call within streaming. I see that openAI integration does not, (It does support accumulated tool calls). Given that it is erroring out, I would assume this is unused. If a someone really did want to use it, they could instead accumulate the delta themselves. 

I somewhat question the need to accumulate the tool call at all, what is the use case for that? It doesn't make much sense to try to execute a tool before the full arguments have been provided. Like, I could see it as useful to preview a stream of a tool call, but not much beyond that. That seems rather low level for a higher level framework like llama-index, and if that functionality is really needed, it could be implemented by accumulating the delta in user code.

My thoughts would be to remove this support. If necessary, more complete support for streaming tool calls could be added later (would love some feedback on what real use cases for this are)

### Version

0.12.26

### Steps to Reproduce

Script:

```python
from llama_index.core.llms import ChatMessage
from llama_index.llms.litellm import LiteLLM
from llama_index.core.tools import FunctionTool

tool = FunctionTool.from_defaults(fn=lambda x: f"ok {x}", name="ok", description="returns an ok message, as requested by the user")

message = ChatMessage(role="user", content="What is the weather in San Francisco?")
llm = LiteLLM("gpt-4o-mini")
chat_response = await llm.astream_chat([message], functions=[
      {
        "name": "get_weather",
        "description": "Get the current weather in a given location",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "The city and state, e.g. San Francisco, CA"
            },
            "unit": {
              "type": "string",
              "enum": ["celsius", "fahrenheit"],
              "description": "The temperature unit to use"
            }
          },
          "required": ["location"]
        }
      }
    ],
    function_call="auto",)
async for chunk in chat_response:
    print(chunk.model_dump_json())
```


### Relevant Logs/Tracbacks

```shell
Results in 


AttributeError                            Traceback (most recent call last)
Cell In[3], [line 31](vscode-notebook-cell:?execution_count=3&line=31)
      [8](vscode-notebook-cell:?execution_count=3&line=8) llm = LiteLLM("gpt-4o-mini")
      [9](vscode-notebook-cell:?execution_count=3&line=9) chat_response = await llm.astream_chat([message], functions=[
     [10](vscode-notebook-cell:?execution_count=3&line=10)       {
     [11](vscode-notebook-cell:?execution_count=3&line=11)         "name": "get_weather",
   (...)
     [29](vscode-notebook-cell:?execution_count=3&line=29)     ],
     [30](vscode-notebook-cell:?execution_count=3&line=30)     function_call="auto",)
---> [31](vscode-notebook-cell:?execution_count=3&line=31) async for chunk in chat_response:
     [32](vscode-notebook-cell:?execution_count=3&line=32)     print(chunk.model_dump_json())

File ~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:88, in llm_chat_callback.<locals>.wrap.<locals>.wrapped_async_llm_chat.<locals>.wrapped_gen()
     [86](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:86) last_response = None
     [87](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:87) try:
---> [88](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:88)     async for x in f_return_val:
     [89](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:89)         dispatcher.event(
     [90](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:90)             LLMChatInProgressEvent(
     [91](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:91)                 messages=messages,
   (...)
     [94](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:94)             )
     [95](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:95)         )
     [96](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/llama_index/core/llms/callbacks.py:96)         yield cast(ChatResponse, x)

File ~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:558, in LiteLLM._astream_chat.<locals>.gen()
    [555](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:555)     function_call = function_call_delta
    [557](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:557)     ## ensure we do not add a blank function call
--> [558](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:558)     if function_call.get("function_name", "") is None:
    [559](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:559)         del function_call["function_name"]
    [560](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py:560) else:

File ~/dev/llama_index/.venv/lib/python3.12/site-packages/pydantic/main.py:891, in BaseModel.__getattr__(self, item)
    [888](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/pydantic/main.py:888)     return super().__getattribute__(item)  # Raises AttributeError if appropriate
    [889](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/pydantic/main.py:889) else:
    [890](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/pydantic/main.py:890)     # this is the current error
--> [891](https://file+.vscode-resource.vscode-cdn.net/Users/adrianlyjak/dev/llama_index/llama-index-integrations/llms/llama-index-llms-litellm/~/dev/llama_index/.venv/lib/python3.12/site-packages/pydantic/main.py:891)     raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')

AttributeError: 'FunctionCall' object has no attribute 'get'
```

Labels: bug, triage
State: closed