Repository: instructor-ai/instructor
Issue category: Bug Report

prompt_tokens_details not being populated correctly in response model
- [ - ] This is actually a bug report.
- [ ] I am not getting good LLM Results
- [ - ] I have tried asking for help in the community on discord or discussions and have not received a response.
- [ - ] I have tried searching the documentation and have not found an answer.

**What Model are you using?**

- [ -] gpt-3.5-turbo
- [ -] gpt-4-turbo
- [- ] gpt-4
- [ ] Other (please specify)

**Describe the bug**
I'm unable to see how many tokens were cached when I try to use client.chat.completions.create_with_completion. completion.usage.prompt_token_details is always completion.usage.prompt_token_details

**To Reproduce**
```python
import instructor
from time import sleep
from pydantic import BaseModel, field_validator
from openai import OpenAI
class FakeClass(BaseModel):
    insight: str
client = instructor.from_openai(OpenAI(api_key=OPENAI_API_KEY))
fake_str = "This is a Test string" * 1000

for x in range(0, 3):
    sleep(1)
    insight, completion = client.chat.completions.create_with_completion(
        model="gpt-4o",
        messages=[
            {
                "role": "system",
                "content": fake_str,
            },
            {"role": "user", "content": "Test User Prompt"},
        ],
        max_retries=1,
        response_model=FakeClass,
    )
 
    print(completion.usage.prompt_token_details.model_dump())
```

I get this:
```python 
{'audio_tokens': 0, 'cached_tokens': 0}
```

**Expected behavior**
I expect to see how many token have been cached. I know OpenAI is caching it since I tried it without wrapping it around Instructor
```python

open_ai_client = OpenAI(api_key=OPENAI_API_KEY)
open_ai_client.chat.completions.create

for x in range(0, 3):
    sleep(1)
    chat_completion = open_ai_client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {
                "role": "system",
                "content": fake_str,
            },
            {"role": "user", "content": "Test User Prompt"},
        ],
    )

    cached_tokens = chat_completion.usage.prompt_tokens_details.cached_tokens
    if cached_tokens == 0:
        print("No cached tokens")
    else:
        print(f"Tokens used: {cached_tokens}")
        print(chat_completion.usage.prompt_tokens_details.model_dump())
```
I get this output
```
Tokens used: 4864
{'audio_tokens': 0, 'cached_tokens': 4864}
````


**Screenshots**
If applicable, add screenshots to help explain your problem.



Functions to edit:
instructor/retry.py:initialize_usage

Patch:
diff --git a/instructor/retry.py b/instructor/retry.py
index 205c7843f..853a73a54 100644
--- a/instructor/retry.py
+++ b/instructor/retry.py
@@ -73,7 +73,7 @@ def initialize_usage(mode: Mode) -> CompletionUsage | Any:
     """
     total_usage = CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0,
         completion_tokens_details = CompletionTokensDetails(audio_tokens=0, reasoning_tokens=0),
-        prompt_token_details = PromptTokensDetails(audio_tokens=0, cached_tokens=0)
+        prompt_tokens_details = PromptTokensDetails(audio_tokens=0, cached_tokens=0)
     )
     if mode in {Mode.ANTHROPIC_TOOLS, Mode.ANTHROPIC_JSON}:
         from anthropic.types import Usage as AnthropicUsage