Skip to content

fix(files): fall back to text/plain for unsupported text mime types (…#2600

Open
sk-reddy17 wants to merge 2 commits into
googleapis:mainfrom
sk-reddy17:fix/upload-mime-type-fallback
Open

fix(files): fall back to text/plain for unsupported text mime types (…#2600
sk-reddy17 wants to merge 2 commits into
googleapis:mainfrom
sk-reddy17:fix/upload-mime-type-fallback

Conversation

@sk-reddy17

Copy link
Copy Markdown

Summary

Fixes #744.

When you upload a file without a mime_type, the SDK uses mimetypes.guess_type() and sends the result as-is. For lots of text/code files the guess is something the API rejects, so the upload 400s
even though it's plain text — e.g. .cu → application/cu-seeme, .ts → text/vnd.trolltech.linguist, .py → text/x-python.

client.files.upload(file="example.cu")

-> 400 INVALID_ARGUMENT: Unsupported MIME type: application/cu-seeme

Change

Added _resolve_upload_mime_type() in google/genai/_extra_utils.py, used only when the type is auto-detected (an explicit mime_type still wins). If the guess is one the API rejects but the file is
actually UTF-8 text, it falls back to text/plain. Standard text/*, image/audio/video, and application/json|xml|rtf are kept as-is; binary files are never relabeled (a file counts as text only if its
first 8 KB have no NUL bytes and decode as UTF-8).

Tests

Added google/genai/tests/files/test_upload_mime_type.py — 10 cases, no API key needed (fallbacks, type preservation, binary safety, upload header, explicit-mime_type precedence).

$ python -m pytest google/genai/tests/files/test_upload_mime_type.py -q
10 passed

Open question

Which application/* types should be kept vs. downgraded? Currently keeping json, xml, rtf — happy to adjust.

@google-cla

google-cla Bot commented Jun 13, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@Venkaiahbabuneelam Venkaiahbabuneelam self-assigned this Jun 15, 2026
@Venkaiahbabuneelam Venkaiahbabuneelam added the size:XL Code changes > 100 lines label Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL Code changes > 100 lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Getting INVALID_ARGUMENT for some mime types

2 participants