1
- import { Google } from './google-facade' ;
1
+ import {
2
+ generateId ,
3
+ loadApiKey ,
4
+ withoutTrailingSlash ,
5
+ } from '@ai-sdk/provider-utils' ;
2
6
import { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model' ;
3
7
import {
4
8
GoogleGenerativeAIModelId ,
@@ -48,6 +52,12 @@ Custom headers to include in the requests.
48
52
*/
49
53
headers ?: Record < string , string > ;
50
54
55
+ /**
56
+ Custom fetch implementation. You can use it as a middleware to intercept requests,
57
+ or to provide a custom fetch implementation for e.g. testing.
58
+ */
59
+ fetch ?: typeof fetch ;
60
+
51
61
generateId ?: ( ) => string ;
52
62
}
53
63
@@ -57,7 +67,30 @@ Create a Google Generative AI provider instance.
57
67
export function createGoogleGenerativeAI (
58
68
options : GoogleGenerativeAIProviderSettings = { } ,
59
69
) : GoogleGenerativeAIProvider {
60
- const google = new Google ( options ) ;
70
+ const baseURL =
71
+ withoutTrailingSlash ( options . baseURL ?? options . baseUrl ) ??
72
+ 'https://generativelanguage.googleapis.com/v1beta' ;
73
+
74
+ const getHeaders = ( ) => ( {
75
+ 'x-goog-api-key' : loadApiKey ( {
76
+ apiKey : options . apiKey ,
77
+ environmentVariableName : 'GOOGLE_GENERATIVE_AI_API_KEY' ,
78
+ description : 'Google Generative AI' ,
79
+ } ) ,
80
+ ...options . headers ,
81
+ } ) ;
82
+
83
+ const createChatModel = (
84
+ modelId : GoogleGenerativeAIModelId ,
85
+ settings : GoogleGenerativeAISettings = { } ,
86
+ ) =>
87
+ new GoogleGenerativeAILanguageModel ( modelId , settings , {
88
+ provider : 'google.generative-ai' ,
89
+ baseURL,
90
+ headers : getHeaders ,
91
+ generateId : options . generateId ?? generateId ,
92
+ fetch : options . fetch ,
93
+ } ) ;
61
94
62
95
const provider = function (
63
96
modelId : GoogleGenerativeAIModelId ,
@@ -69,11 +102,11 @@ export function createGoogleGenerativeAI(
69
102
) ;
70
103
}
71
104
72
- return google . chat ( modelId , settings ) ;
105
+ return createChatModel ( modelId , settings ) ;
73
106
} ;
74
107
75
- provider . chat = google . chat . bind ( google ) ;
76
- provider . generativeAI = google . generativeAI . bind ( google ) ;
108
+ provider . chat = createChatModel ;
109
+ provider . generativeAI = createChatModel ;
77
110
78
111
return provider as GoogleGenerativeAIProvider ;
79
112
}
0 commit comments