Skip to content

Bug on files upload with expires_after #563

@amaneshi

Description

@amaneshi

I tried to upload file with this code (without expires_after work fine)

	params := openai.FileNewParams{
		File:    file,
		Purpose: openai.FilePurposeUserData,
		ExpiresAfter: openai.FileNewParamsExpiresAfter{
			Seconds: 30 * 24 * 60 * 60,
		},
	}
	resp, err := c.client.Files.New(ctx, params)
	if err != nil {
		return "", fmt.Errorf("failed to upload file: %w", err)
	}

and get response error

POST "https://api.openai.com/v1/files": 400 Bad Request {
    "message": "Additional properties are not allowed ('expires_after.anchor', 'expires_after.seconds' were unexpected)",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }

when I checked request details - it generate incorrect filed names (with "dot" separator), in this case

--01449e9d2956d26392006c36e9125275b6586a22f7b1526a0938c250049f
Content-Disposition: form-data; name="expires_after.anchor"


--01449e9d2956d26392006c36e9125275b6586a22f7b1526a0938c250049f
Content-Disposition: form-data; name="expires_after.seconds"

2592000
--01449e9d2956d26392006c36e9125275b6586a22f7b1526a0938c250049f

Then I checked examples, and with CURL mentioned a bit different syntax of this fields definition, so as a workaround I defined them with additional props which is worked out

	params := openai.FileNewParams{
		File:    file,
		Purpose: openai.FilePurposeUserData,
	}
	params.SetExtraFields(
		map[string]any{
			"expires_after[anchor]":  "created_at",
			"expires_after[seconds]": "2592000",  // as string, IMPORTANT!
		},
	)

and now request contain it like this and request worked as expected

--96d8b9f94995f530482d1e8884f5b46ac8dd93dbd8588fc76eeefd8c51cb
Content-Disposition: form-data; name="expires_after[anchor]"

created_at
--96d8b9f94995f530482d1e8884f5b46ac8dd93dbd8588fc76eeefd8c51cb
Content-Disposition: form-data; name="expires_after[seconds]"

2592000
--96d8b9f94995f530482d1e8884f5b46ac8dd93dbd8588fc76eeefd8c51cb--

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions