#2654·instructor

Handle non-openai conform List[contentitem] responses

Author: tonkolviktorCreated Sep 16, 2026Updated Sep 16, 2026
  • 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): databricks-gemini-3-5-flash

Describe the bug A clear and concise description of what the bug is. If I use databricks-gemini-2-5-flash I get a structure like this as an answer and instructor works:

choices: [{"finish_reason":"stop","index":0,"logprobs":null,"message":{"content": "{ "content": [ { "doc_id":

If I use databricks-gemini-3-5-flash I get a structure like this as an answer and instructor does not work:

Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=[{'type': 'text', 'text': '```json\n{\n  "content": [\n    {\n      "doc_id":

To Reproduce Steps to reproduce the behavior, including code snippets of the model and the input data and openai response.

import instructor
from pydantic import BaseModel
import os
from typing import List
os.environ["DATABRICKS_TOKEN"] = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()
os.environ["DATABRICKS_HOST"] = "https://" + spark.conf.get("spark.databricks.workspaceUrl")

# Initialize the client; host and token are read from the environment
client = instructor.from_provider(
    "databricks/databricks-gemini-3-5-flash",     # works with 2-5
    mode=instructor.Mode.MD_JSON,
)

# Define your data structure
class UserExtract(BaseModel):
    name: str
    age: int

# Extract structured data
user = client.create(
    response_model=List[UserExtract],
    messages=[
        {"role": "user", "content": "Extract jason is 25 years old, extract viktor 30 years old"},
    ],
)

print(user)
InstructorRetryException: <failed_attempts>

<generation number="1">
<exception>
    'list' object has no attribute 'find'
</exception>
<completion>
    ChatCompletion(id=None, choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=[{'type': 'text', 'text': '```json\n{\n  "tasks": [\n    {\n      "name": "jason",\n      "age": 25\n    },\n    {\n      "name": "viktor",\n      "age": 30\n    }\n  ]\n}\n```', 'thoughtSignature': 'AY89a18CYI2BZ9GQDNmHLR/BN2CfL2eaFCUfWgpIf+cXRrePnV2nlbrgBd7W6WhvUB+XaK5lRyorXf6S82cA1YXFGqFm0FKWfIgSOrWV18LlnEwt+Bx0M1WVK7mE8pga+6lU4c0f/AgrjudlnNVAH6CHq8Zcrd22KzEb3Kdpb8/dVgL7mt9WhBqd/8LUZioQGguEsHQMY8/eVs9PVsaBBO6nEntLdsVOHKROTkjy/mP191oWFzwKUO6ls5oXLYS0o3KSEpNNuVNuFUsdD40i1boKTv8SZOXGHer8570ZGMk3nqY1T1NhT4nHHL0t8FksOTypTNmQicQJ0hv9dIyDrnmgYtQozAH06Krc3M9MBUS2Ke8tzmc+FWfY+n+UchiamAIwLG0ABiJIcMFNp0hqqK9XXE/7lv5VbngGwrj1fy6YMXd/4NdJOlElgwn0oscsvFrfybuW+1GxoGuV84WtdI9gJ5bObY0hW8a0135YcQ6vinuToi1HHaXFjK+ggyw3sVluticWMnSwlaSU5olyMF0b5R5fRD6G7SvwvA+pi5tBN0AuNlv9xwENF3ZIcSITSjYXQi1+2+hsrR3qEGzXEZw59/wzYzHii0WmpUi7184zEm1wEjs70a8INilg5Q6Mkne8L83UbBkWNn7ISjcJdwNcWb8kbb9wcWN9N4DBY8eTXDyUBHIq6mWhyOJT4T7GDgRob8RJ20BAzk2CSqslI+kaAyC11T16iET+MAbE6EEitmXmsRx1DDrw5Zw/zGSS7JwGrea6sH/ZDajxkjBt9H5gS7sc5iYuphQTChA0jfV3xJ0ODkLgBhk0ZRBfRTbNNNXIofnZMD65aTJ1ORGlSdoF8almmGFeSNfI76V+27Wvu77yvWRNNb2DGnonyqF6qwiptCUOWrlzYKnYnkDUE16ALtqT+xy+gwwThtbuGnQNSztPhkk9pjADUWiMkqkWL5mA8GCMgSwZL6KM/39PUlvUasu8kDYu5QSZE+5w4PkgCy/GdqnsevY5kLa+YhCPko61b6FN1COhiJ6Z4u0MKygWrrNHMk/g6cgzlnKDPCF9rsRR1eQ4urJZA1of2rIi2rdnovNasGj3QQ=='}], refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1789553217, model='gemini-3.5-flash', object='chat.completion', moderation=None, service_tier='default', system_fingerprint=None, usage=CompletionUsage(completion_tokens=63, prompt_tokens=286, total_tokens=591, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cache_write_tokens=None, cached_tokens=0), reasoning_tokens=242))
</completion>
</generation>

<generation number="2">
<exception>
    'list' object has no attribute 'find'
</exception>
<completion>
    ChatCompletion(id=None, choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=[{'type': 'text', 'text': '```json\n{\n  "tasks": [\n    {\n      "name": "jason",\n      "age": 25\n    },\n    {\n      "name": "viktor",\n      "age": 30\n    }\n  ]\n}\n```', 'thoughtSignature': 'AY89a1+iT80N45oSgce62I+03Fngb5LzbAUcUzzl19BxFNN3JeFTa4Jur8OicslQc6ld5rBw4rVrqfQqVLZMbyHQDgvpO0bR+aZaL1mOA1/AAeHjtkIlXuXUHJYpgJ+NqqHB33yD5t11GWcgZbvPl7ebBO+fNobecsZU2NBZvjerkDcUV/AbXOemoazl5kPMeW+QncLMp7Wu/0dLe2nDZLIpHHDCqij4hF8R9aWkuuu9/30koVAb95heo5arnrwGNwNOPvxKlXGvMlnCo4KJ2x9KjfG+EuUi5evzESWeLA+gSLtD0B2e2IQGcOq9DotdsliJ3c+NH+n598XvbCGgnZVCxmbYG5B1CVCJH0nQgW1yqQiz/Rdz940Y6AeKqKf8vHJqwLp1nR0OR1wcLYM4gwrljMN6o5IYzWb7DHoBHILZtCgbYQuXHvaOVi9Fus48Pb5EANYHUfsk0z6LLeut3HzkoRu0VQSiiGDW2RkcQ5qPdIHgSLqDbr03toNqSrRHfFbNzTjES1M86ltGOIqD4nJamwr+yMZIhCaNN3o1eAabV1ER1I5XZqHd7OhqCtMU0kSZuDslqtqwHOYgtBuhlGoajUIk6/GIJrIbUxBvFPDz0j+a3nEZsiFexcDusygz/mpJTP2eYl0UqHljMPsuY8ZKARBGF2FAPpTp1n5osu4lZjwTzpeCPGvxRLNIr0X0IwxdBi4K8NBHOe+MC4V9RG4XALDBmitvCfcjvo++xSEtRhE5zc2SL+uOGuCPQKGc0xjt/R/4DG4dzQ8zqYJ2/jg7lmK8ig+xjt/HxlNUa2nsdMuAGyN7D5C6Hnib4N0jkgXE48qkqEt03eh0BupZyIZoxD60pZbBS0zZTzCMS3ok5xTLQzm0HqGq0LdRxZGWz9WvdXTtuebBr8MLRqE2DAOw7Xa+AqDtUlK9JqpFc5B2yaZt5mWO2yinaP10qdRTcl5hl+5RFGDn9y7tGlxOGlUZmMPOcSlKZLfItytz55cyPo0WYEsWpbEq6IYPE70oPsUL5lCNzbEef5J2mVeFeDlxIuAsKyCem6F5B9hEiFy11MMFdFqIjP+oI6z5VGpjNAVajtZcd9YW6ZAJJBA297JkCK+IXbFWIitxELSqe5kbbklrZt0fld8PuNu+0ILwCsnjZE7vjuPtWLDVNqQ4OGaAVPBXTsIb1pPARf9od0ORTkrAzOGiYcek2h32UW5N8Dn8hj5L84JfKZea0bYVttbWJMFdYAxDMz9DbBMe9Tvu9weNLPk3sfKoiyVHrAvbB0i4/OUg1OcnJIvYag1Vc0A62uSCk8CjGq2LNY1MXuBiC7J6u89BKd5TdE5cm1XdXdVqahzbBUtRODOT1ciEA2KIlFWiSiZl/NO3ApqgQOQi8w9rV9q/utXzNMWSaftuTIF46ON+IsagJfDh75RGN092sHyEO7SrSdtnzZQJeHpDnN63J7eXxf2i+GZWZF+6nCwgq1/ScQjou0M820z8'}], refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1789553220, model='gemini-3.5-flash', object='chat.completion', moderation=None, service_tier='default', system_fingerprint=None, usage=CompletionUsage(completion_tokens=126, prompt_tokens=572, total_tokens=1278, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cache_write_tokens=None, cached_tokens=0), reasoning_tokens=338))
</completion>
</generation>

<generation number="3">
<exception>
    'list' object has no attribute 'find'
</exception>
<completion>
    ChatCompletion(id=None, choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=[{'type': 'text', 'text': '```json\n{\n  "tasks": [\n    {\n      "name": "jason",\n      "age": 25\n    },\n    {\n      "name": "viktor",\n      "age": 30\n    }\n  ]\n}\n```', 'thoughtSignature': 'AY89a18jCQPVPPc0c5gjAU8R7Cf1UA+nt/g+qMFVK1rwVYPUxxcT8TrsvwOJGxmtyK0uLa2kMgVPMzy/dKAKCyI/5d+Qmn3B8d8ogGgoJnaVJkrjuqboXhRDNXYRGcuxizqGVKmuw6gLyhcC/wWm7MT7XWdTFs7GE6i62Bzv0eo4UpFqiUD6zrE7hRpq1o6lZXLIu5bgZtBKKeXzufWOUoTBzire+nncnAE0LP489eSvDTTRMXgmeqL7SZV6EvljoHe1dO/uBvw6ZwH1u5KbQCCYbV0SAriYwP7mkHGyMxRCd+XrJe5UCwpLDuScDfTTBH2bAhJc2ZTkbcb9lgm/se+nHMk5gWZZ1aAhVfGk4kG25Gu6oJ8fI+MKGTkLLxdi+TpB/vlEVX1VS/Wq7rpkkwSsrJbiTVzRsbd9qfBI+z7kc726uA9yQZu0/AaenWUflx95ReX4DhBa+drEbYV/CXcSlvmffiDvwKT1lRDLTJk4FAf4p/mtqKKK72oMnmdhBRsNRNMie8Ya5+u8VaSXwuusDmE+85ryQvZr4KnDnKUZjWhI8sCOGWjF0/jABVOmoy6rtgZUxMomtxlkRVtKnULK7r9snyrQxy4vTekONAr2Q6vjEnJD4BKySt/Y167q2/H+EsI0E84wc8lbVfMHTsedOFJi5zODDRFl02tqpglGMAkdR45CK/r2MwvoAELkMX1Nzq11AMZN+4E71VAMDBzzoOjzKTrcRP3LWsspfTiHatew5ZZtAQMnecR+wH1vsRYPZXeqq4oCT3y33P/joSdHHOahPRTjJ2jdaTLGqR6SVFDAwHyVPji0npqZ9lhh9eLJbJWlRr5ljgJKRwJtUaeBLbKkAtlJ+4Hp3guRELDC6oRVzaZ7mG/LVqh20n4oGTw+6gTOh5/jS7zxcODyUUAmJOJAy+Zp8mLvCxw8q4ynfRkgUUQyk7UFbYRmO8qwuwlWvEIsSNsXf01xoNYUMolGjgK1TBFwZnz93CbLI3jcp7wkMEoPugbYCMtGBEvMo+E6gKV7JW5gPCUeYt7Wfhm97Vl4OtYjxXzxoqAZdQ3bae0Iu4l0TMzg+2mPybU4fS07RigzacceubzVkGyglA/gt1s00K2WV/F2FShmnUFurH3tjxNwbzOHJr7jhupTd0vridwM9L6G1c092XtLf8WvNlAcCpV/CuhLlgQAX7lnGJXuoPgOZ5sbFcWrIkfCpwkInkFt4Kebs11itNKdKF72mJC6VRcC85WjTM1dDuG0OazQMDyCsLHLcMRzy2Jeb3y7J2b0k3yx9Ug='}], refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1789553223, model='gemini-3.5-flash', object='chat.completion', moderation=None, service_tier='default', system_fingerprint=None, usage=CompletionUsage(completion_tokens=189, prompt_tokens=858, total_tokens=1923, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cache_write_tokens=None, cached_tokens=0), reasoning_tokens=296))
</completion>
</generation>

</failed_attempts>

<last_exception>
    'list' object has no attribute 'find'
</last_exception>
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/instructor/core/retry.py:309, in retry_sync(func, response_model, args, kwargs, context, max_retries, strict, mode, hooks)
    303                     hooks.emit_completion_last_attempt(
    304                         e,
    305                         attempt_number=attempt_number,
    306                         max_attempts=max_attempt_number,
    307                         is_last_attempt=True,
    308                     )
--> 309                 raise e
    310 except RetryError as e:
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.12/site-packages/instructor/core/retry.py:312, in retry_sync(func, response_model, args, kwargs, context, max_retries, strict, mode, hooks)
    310 except RetryError as e:
    311     logger.debug(f"Retry error: {e}")
--> 312     raise InstructorRetryException(
    313         e.last_attempt._exception,
    314         last_completion=response,
    315         n_attempts=attempt.retry_state.attempt_number,
    316         #! deprecate messages soon
    317         messages=extract_messages(
    318             kwargs
    319         ),  # Use the optimized function instead of nested lookups
    320         create_kwargs=kwargs,
    321         total_usage=total_usage,
    322         failed_attempts=failed_attempts,
    323     ) from e

Expected behavior Code returns 2 users in a list.

Screenshots If applicable, add screenshots to help explain your problem.