-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Support for extra_body parameter for embeddings API #906
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for extra_body parameter for embeddings API #906
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #906 +/- ##
==========================================
+ Coverage 98.46% 98.71% +0.25%
==========================================
Files 24 26 +2
Lines 1364 1789 +425
==========================================
+ Hits 1343 1766 +423
- Misses 15 16 +1
- Partials 6 7 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
@sashabaranov Can you please look into this? |
|
@sashabaranov Can you please look into this PR? thanks |
|
@sashabaranov Would require your assistance in getting these changes in. Thank you |
|
@sashabaranov can you please check this? Thanks! |
|
@AyushSawant18588 Thank you for updating the PR! I'm re-reading it for the fifth time, and there's something odd about it—and I can't pinpoint what it is exactly. It feels like we're adding a lot of counterintuitive logic for a tiny use case. If the goal is to add |
|
@sashabaranov So the official OpenAI Python client offers an extra_body field for all inference APIs. For example, in the embedding API implementation, you can see this feature being used here: Embeddings API. Their implementation and behaviour is same as done in this PR.
There is an issue created that ExtraBody parameter support is required for Completions API as well for vLLM engine. #898 |
Can you please look into this? |
|
@sashabaranov Help! |
|
The Qwen3 LLM now supports switching between reasoning and non-reasoning modes, which can be controlled using this parameter. Would it be possible to merge this change? |
sashabaranov
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR extends the Embeddings API client to allow arbitrary key-value parameters via a new ExtraBody field, enabling greater flexibility for nonstandard or experimental embedding engines.
- Introduce
ExtraBodyinEmbeddingRequest,EmbeddingRequestStrings, andEmbeddingRequestTokens. - Update
CreateEmbeddingsto mergeExtraBodyentries into the JSON request payload. - Add
withExtraBodyrequest option and corresponding unit tests.
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| embeddings.go | Added ExtraBody field and merged it into the request payload. |
| client.go | Implemented withExtraBody to inject extra parameters. |
| embeddings_test.go | Added tests for marshaling and CreateEmbeddings with ExtraBody. |
Comments suppressed due to low confidence (2)
embeddings_test.go:68
- This test only verifies the
modelfield. You should also assert that the marshaled JSON includes theExtraBodykeys (e.g.,"input_type"and"truncate") to ensureExtraBodyis serialized correctly.
if !bytes.Contains(marshaled, []byte(`"model":"`+model+`"`)) {
embeddings_test.go:161
- [nitpick] This comment is incomplete and unclear. Consider rewriting it to describe the test intent, for example:
// test CreateEmbeddings returns an error for requests with non-serializable fields.
// test create embeddings with strings (ExtraBody in request and )
|
|
||
| // Deserialize JSON to map[string]any | ||
| var body map[string]any | ||
| _ = json.Unmarshal(jsonData, &body) |
Copilot
AI
Jul 11, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid ignoring the error returned by json.Unmarshal. Capture and handle the error (e.g., if err := json.Unmarshal(...); err != nil { return res, err }) to prevent silent failures.
| _ = json.Unmarshal(jsonData, &body) | |
| if err := json.Unmarshal(jsonData, &body); err != nil { | |
| return res, err | |
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@AyushSawant18588 just some tech debt :)
* support for extra_body parameter for embeddings API * done linting * added unit tests * improved code coverage and removed unnecessary checks * test cleanup * updated body map creation code * code coverage * minor change * updated testcase comment
Describe the change
This change adds support for an ExtraBody parameter in the EmbeddingRequest struct, allowing developers to include additional, arbitrary key-value pairs in the API request payload. This ensures extensibility and flexibility when working with the OpenAI Embeddings API, especially for experimental features, future API updates, or custom parameters that are not explicitly defined in the current request structure. The addition of ExtraBody is particularly valuable for supporting LLM engines like vLLM, Nvidia NIM, etc, which may require additional fields beyond the standard parameters. Refrence
There is an issue created that ExtraBody parameter support is required for vLLM engine also. #898
In this PR ExtraBody parameter support is added only for embedding API but it can be extended for other APIs as well like chat completions
Provide OpenAI documentation link
OpenAI's official python client also supports this extra_body field which this go client could also support. Refrence
Describe your solution
The solution involves:
Introducing the ExtraBody field in the EmbeddingRequest struct. This is a map of string keys to arbitrary values (map[string]any) that allows developers to pass additional fields to the API dynamically.
Updating the CreateEmbeddings method to merge the ExtraBody values into the main request payload (body) before sending it to the API. This is done through the withExtraBody request option, which ensures the fields in ExtraBody are included without overwriting existing mandatory parameters.
Tests
Added unit tests and done sanity check of embeddings api with extra_body param for Nvidia NIM embedding model