@drone1/alt
Version:
An AI-powered localization tool
81 lines (67 loc) • 1.73 kB
JavaScript
export function name() {
return 'Google'
}
export async function listModels(apiKey) {
let allModels = []
let pageToken = null
let hasMore = true
while (hasMore) {
const url = new URL('https://generativelanguage.googleapis.com/v1/models')
// Add API key as query parameter
url.searchParams.append('key', apiKey)
// Add page token if we have one
if (pageToken) {
url.searchParams.append('pageToken', pageToken)
}
const response = await fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
const result = await response.json()
if (result.models && result.models.length > 0) {
allModels = [
...allModels,
...result.models
]
// Check if there's another page
if (result.nextPageToken) {
pageToken = result.nextPageToken
} else {
hasMore = false
}
} else {
hasMore = false
}
}
return { models: allModels }
}
export function getTranslationRequestDetails({ model, messages, apiKey, log }) {
return {
url: `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,
params: {
contents: messages.map(m => ({
role: 'user',
parts: [ { text: m } ]
}))
},
config: {
headers: {
'Content-Type': 'application/json'
}
}
}
}
export function getResult(response, log) {
return response.data.candidates?.[0]?.content?.parts?.[0]?.text?.trim?.() || ''
}
function getHeader(headers, name) {
return headers[name] || headers.get?.(name)
}
export function getSleepInterval(headers, log) {
log.T(headers)
const retryAfter = parseInt(getHeader(headers, 'retry-after'))
log.D('retryAfter', retryAfter)
return isNaN(retryAfter) ? 0 : 1000 * retryAfter + 200
}