2727use Psr \Http \Message \StreamFactoryInterface ;
2828use RuntimeException ;
2929
30- use function array_map ;
3130use function curl_close ;
3231use function curl_exec ;
3332use function curl_getinfo ;
@@ -43,7 +42,7 @@ class Client implements GeminiClientInterface
4342 private string $ baseUrl = 'https://generativelanguage.googleapis.com ' ;
4443
4544 /**
46- * @var array<string, string>
45+ * @var array<string, string|string[] >
4746 */
4847 private array $ requestHeaders = [];
4948
@@ -137,13 +136,11 @@ public function generateContentStream(
137136 throw new RuntimeException ('Gemini API cannot initialize streaming content request ' );
138137 }
139138
140- $ headers = $ this ->requestHeaders + [
141- 'content-type ' => 'application/json ' ,
142- self ::API_KEY_HEADER_NAME => $ this ->apiKey ,
143- ];
144139 $ headerLines = [];
145- foreach ($ headers as $ name => $ value ) {
146- $ headerLines [] = "{$ name }: {$ value }" ;
140+ foreach ($ this ->getRequestHeaders () as $ name => $ values ) {
141+ foreach ((array ) $ values as $ value ) {
142+ $ headerLines [] = "{$ name }: {$ value }" ;
143+ }
147144 }
148145
149146 curl_setopt ($ ch , CURLOPT_URL , "{$ this ->baseUrl }/v1/ {$ request ->getOperation ()}" );
@@ -198,17 +195,32 @@ public function withBaseUrl(string $baseUrl): self
198195 }
199196
200197 /**
201- * @param array<string, string> $headers
198+ * @param array<string, string|string[] > $headers
202199 * @return self
203200 */
204201 public function withRequestHeaders (array $ headers ): self
205202 {
206203 $ clone = clone $ this ;
207- $ clone ->requestHeaders = array_map (strtolower (...), $ headers );
204+ $ clone ->requestHeaders = [];
205+
206+ foreach ($ headers as $ name => $ value ) {
207+ $ clone ->requestHeaders [strtolower ($ name )] = $ value ;
208+ }
208209
209210 return $ clone ;
210211 }
211212
213+ /**
214+ * @return array<string, string|string[]>
215+ */
216+ private function getRequestHeaders (): array
217+ {
218+ return $ this ->requestHeaders + [
219+ 'content-type ' => 'application/json ' ,
220+ self ::API_KEY_HEADER_NAME => $ this ->apiKey ,
221+ ];
222+ }
223+
212224 /**
213225 * @throws ClientExceptionInterface
214226 */
@@ -220,10 +232,9 @@ private function doRequest(RequestInterface $request): string
220232
221233 $ uri = "{$ this ->baseUrl }/v1/ {$ request ->getOperation ()}" ;
222234 $ httpRequest = $ this ->requestFactory
223- ->createRequest ($ request ->getHttpMethod (), $ uri )
224- ->withAddedHeader (self ::API_KEY_HEADER_NAME , $ this ->apiKey );
235+ ->createRequest ($ request ->getHttpMethod (), $ uri );
225236
226- foreach ($ this ->requestHeaders as $ name => $ value ) {
237+ foreach ($ this ->getRequestHeaders () as $ name => $ value ) {
227238 $ httpRequest = $ httpRequest ->withAddedHeader ($ name , $ value );
228239 }
229240
0 commit comments