Skip to content

Commit 9e2dbc5

Browse files
feat: Add mixedbread ai support (#122)
* feat: add mixedbread ai support * Update embedding_service.hpp * Update embedding_service.hpp --------- Co-authored-by: richard-epsilla <[email protected]>
1 parent 8e54857 commit 9e2dbc5

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-4
lines changed

engine/server/web_server/web_controller.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ class WebController : public oatpp::web::server::api::ApiController {
9898
if (headerValue != nullptr) {
9999
headers[VOYAGEAI_KEY_HEADER] = headerValue->c_str();
100100
}
101+
headerValue = request->getHeader(MIXEDBREADAI_KEY_HEADER);
102+
if (headerValue != nullptr) {
103+
headers[MIXEDBREADAI_KEY_HEADER] = headerValue->c_str();
104+
}
101105

102106
std::string db_path = parsedBody.GetString("path");
103107
std::string db_name = parsedBody.GetString("name");
@@ -408,6 +412,10 @@ class WebController : public oatpp::web::server::api::ApiController {
408412
if (headerValue != nullptr) {
409413
headers[VOYAGEAI_KEY_HEADER] = headerValue->c_str();
410414
}
415+
headerValue = request->getHeader(MIXEDBREADAI_KEY_HEADER);
416+
if (headerValue != nullptr) {
417+
headers[MIXEDBREADAI_KEY_HEADER] = headerValue->c_str();
418+
}
411419

412420
auto data = parsedBody.GetArray("data");
413421
vectordb::Status insert_status = db_server->Insert(db_name, table_name, data, headers, upsert);
@@ -638,6 +646,10 @@ class WebController : public oatpp::web::server::api::ApiController {
638646
if (headerValue != nullptr) {
639647
headers[VOYAGEAI_KEY_HEADER] = headerValue->c_str();
640648
}
649+
headerValue = request->getHeader(MIXEDBREADAI_KEY_HEADER);
650+
if (headerValue != nullptr) {
651+
headers[MIXEDBREADAI_KEY_HEADER] = headerValue->c_str();
652+
}
641653

642654
vectordb::Json result;
643655
vectordb::Status search_status;

engine/services/embedding_service.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Status EmbeddingService::denseEmbedDocuments(
6161
std::string openai_key = "";
6262
std::string jinaai_key = "";
6363
std::string voyageai_key = "";
64+
std::string mixedbreadai_key = "";
6465
// Inject 3rd party service key based on their model name.
6566
if (server::CommonUtil::StartsWith(model_name, "openai/")) {
6667
if (headers.find(OPENAI_KEY_HEADER) == headers.end()) {
@@ -77,6 +78,11 @@ Status EmbeddingService::denseEmbedDocuments(
7778
return Status(INVALID_PAYLOAD, "Missing VoyageAI API key.");
7879
}
7980
voyageai_key = headers[VOYAGEAI_KEY_HEADER];
81+
} else if (server::CommonUtil::StartsWith(model_name, "mixedbreadai/")) {
82+
if (headers.find(MIXEDBREADAI_KEY_HEADER) == headers.end()) {
83+
return Status(INVALID_PAYLOAD, "Missing mixedbread ai API key.");
84+
}
85+
mixedbreadai_key = headers[MIXEDBREADAI_KEY_HEADER];
8086
}
8187

8288
// Constructing documents list from attr_column_container
@@ -85,7 +91,7 @@ Status EmbeddingService::denseEmbedDocuments(
8591
// Assuming attr_column_container[idx] returns a string or can be converted to string
8692
requestBody->documents->push_back(oatpp::String(std::get<std::string>(attr_column_container[idx]).c_str()));
8793
}
88-
auto response = m_client->denseEmbedDocuments("/v1/embeddings", openai_key, jinaai_key, voyageai_key, requestBody);
94+
auto response = m_client->denseEmbedDocuments("/v1/embeddings", openai_key, jinaai_key, voyageai_key, mixedbreadai_key, requestBody);
8995
auto responseBody = response->readBodyToString();
9096
// std::cout << "Embedding response: " << responseBody->c_str() << std::endl;
9197
vectordb::Json json;
@@ -136,6 +142,7 @@ Status EmbeddingService::denseEmbedQuery(
136142
std::string openai_key = "";
137143
std::string jinaai_key = "";
138144
std::string voyageai_key = "";
145+
std::string mixedbreadai_key = "";
139146
// Inject 3rd party service key based on their model name.
140147
if (server::CommonUtil::StartsWith(model_name, "openai/")) {
141148
if (headers.find(OPENAI_KEY_HEADER) == headers.end()) {
@@ -152,9 +159,14 @@ Status EmbeddingService::denseEmbedQuery(
152159
return Status(INVALID_PAYLOAD, "Missing VoyageAI API key.");
153160
}
154161
voyageai_key = headers[VOYAGEAI_KEY_HEADER];
162+
} else if (server::CommonUtil::StartsWith(model_name, "mixedbreadai/")) {
163+
if (headers.find(MIXEDBREADAI_KEY_HEADER) == headers.end()) {
164+
return Status(INVALID_PAYLOAD, "Missing mixedbread ai API key.");
165+
}
166+
mixedbreadai_key = headers[MIXEDBREADAI_KEY_HEADER];
155167
}
156168

157-
auto response = m_client->denseEmbedDocuments("/v1/embeddings", openai_key, jinaai_key, voyageai_key, requestBody);
169+
auto response = m_client->denseEmbedDocuments("/v1/embeddings", openai_key, jinaai_key, voyageai_key, mixedbreadai_key, requestBody);
158170
auto responseBody = response->readBodyToString();
159171
// std::cout << "Embedding response: " << responseBody->c_str() << std::endl;
160172
vectordb::Json json;

engine/services/embedding_service.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class MyApiClient : public oatpp::web::client::ApiClient {
4444
API_CLIENT_INIT(MyApiClient)
4545

4646
API_CALL("GET", "{path}", getEmbeddings, PATH(String, path))
47-
API_CALL("POST", "{path}", denseEmbedDocuments, PATH(String, path), HEADER(String, openaiHeader, OPENAI_KEY_HEADER), HEADER(String, jinaaiHeader, JINAAI_KEY_HEADER), HEADER(String, voyageaiHeader, VOYAGEAI_KEY_HEADER), BODY_DTO(Object<EmbeddingRequestBody>, body))
47+
API_CALL("POST", "{path}", denseEmbedDocuments, PATH(String, path), HEADER(String, openaiHeader, OPENAI_KEY_HEADER), HEADER(String, jinaaiHeader, JINAAI_KEY_HEADER), HEADER(String, voyageaiHeader, VOYAGEAI_KEY_HEADER), HEADER(String, mixedbreadaiHeader, MIXEDBREADAI_KEY_HEADER), BODY_DTO(Object<EmbeddingRequestBody>, body))
4848

4949

5050
#include OATPP_CODEGEN_END(ApiClient) //<- End codegen
@@ -85,4 +85,4 @@ class EmbeddingService {
8585
};
8686

8787
} // namespace engine
88-
} // namespace vectordb
88+
} // namespace vectordb

engine/utils/constants.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ namespace vectordb {
44
constexpr const char* OPENAI_KEY_HEADER = "X-OpenAI-API-Key";
55
constexpr const char* JINAAI_KEY_HEADER = "X-JinaAI-API-Key";
66
constexpr const char* VOYAGEAI_KEY_HEADER = "X-VoyageAI-API-Key";
7+
constexpr const char* MIXEDBREADAI_KEY_HEADER = "X-MixedbreadAI-API-Key";
78
} // namespace vectordb

0 commit comments

Comments
 (0)