diff --git a/source/extensions/filters/http/transformation/ai_transformer.cc b/source/extensions/filters/http/transformation/ai_transformer.cc index 70ac8a0d4..3ecde6099 100755 --- a/source/extensions/filters/http/transformation/ai_transformer.cc +++ b/source/extensions/filters/http/transformation/ai_transformer.cc @@ -529,7 +529,19 @@ std::tuple AiTransformer::transformHeaders( } else { absl::StrAppend(&path, AiTransformerConstants::get().GEMINI_GENERATE_CONTENT); - } + } + } else if (provider == AiTransformerConstants::get().PROVIDER_BEDROCK) { + ASSERT(!model.empty(), "Bedrock: required model setting is missing!"); + path = replaceModelInPath( + lookupEndpointMetadata(endpoint_metadata, "base_path"), model); + if (enable_chat_streaming_) { + absl::StrAppend( + &path, AiTransformerConstants::get().BEDROCK_CONVERSE_STREAM + } else { + absl::StrAppend(&path, + AiTransformerConstants::get().BEDROCK_CONVERSE); + } + } // Gemini doc is still using the `key` qs param but the Google GenAI sdk has // switched to use the `x-goog-api-key` header. Here is the reason we also diff --git a/source/extensions/filters/http/transformation/ai_transformer.h b/source/extensions/filters/http/transformation/ai_transformer.h index 76c8bb6b4..a628a1708 100755 --- a/source/extensions/filters/http/transformation/ai_transformer.h +++ b/source/extensions/filters/http/transformation/ai_transformer.h @@ -25,15 +25,20 @@ struct AiTransformerValues { const std::string PROVIDER_GEMINI{"gemini"}; const std::string PROVIDER_OPENAI{"openai"}; const std::string PROVIDER_VERTEXAI{"vertexai"}; + const std::string PROVIDER_BEDROCK{"bedrock"}; const std::string SCHEMA_ANTHROPIC{"anthropic"}; const std::string SCHEMA_GEMINI{"gemini"}; const std::string SCHEMA_OPENAI{"openai"}; + const std::string SCHEMA_BEDROCK{"bedrock"}; const std::string GEMINI_GENERATE_CONTENT{"generateContent"}; const std::string GEMINI_STREAM_GENERATE_CONTENT{"streamGenerateContent"}; const std::string GEMINI_STREAM_QS_PARAM{"alt=sse"}; + const std::string BEDROCK_CONVERSE{"converse"}; + const std::string BEDROCK_CONVERSE_STREAM{"converse-stream"}; + const Http::LowerCaseString AnthropicApiKeyHeader{"x-api-key"}; const Http::LowerCaseString AnthropicVersionHeader{"anthropic-version"}; const Http::LowerCaseString AzureApiKeyHeader{"api-key"};