UNPKG

anylang

Version:

A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs

96 lines (94 loc) 9.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeminiLLMResponseSchema = exports.GeminiLLMFetcher = void 0; var _zod = require("zod"); var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; const GeminiLLMResponseSchema = exports.GeminiLLMResponseSchema = _zod.z.object({ candidates: _zod.z.object({ content: _zod.z.object({ parts: _zod.z.object({ text: _zod.z.string() }).array() }) }).array().min(1) }); class GeminiLLMFetcher { constructor({ apiKey, model, apiOrigin }) { this.config = { apiKey: apiKey, model: model !== null && model !== void 0 ? model : 'gemini-2.0-flash', apiOrigin: apiOrigin !== null && apiOrigin !== void 0 ? apiOrigin : `https://generativelanguage.googleapis.com` }; this.url = new URL(`/v1beta/models/${this.config.model}:generateContent?key=${this.config.apiKey}`, this.config.apiOrigin).toString(); } getLengthLimit() { return 5000; } getRequestsTimeout() { return 500; } fetch(prompt) { return __awaiter(this, void 0, void 0, function* () { const response = yield fetch(this.url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contents: [{ role: 'user', parts: [{ text: prompt }] }] }) }); if (!response.ok) { throw new Error(`Request failed with status ${response.status}: ${response.statusText}`); } // validate response structure const parseResult = GeminiLLMResponseSchema.parse(yield response.json()); // content.parts contains ordered segments that together may form a complete response from the LLM // each segment may contain different types of data (e.g., text, functions, etc.), we join all text parts to get the complete response // documentation source: https://ai.google.dev/api/caching#Content // join all parts in one string const text = parseResult.candidates[0].content.parts.map(part => part.text).join(''); // for large, poorly structured code, the gemini add extraneous characters return text.replace(/^```json\s*?|\s*?```$/g, '').trim(); }); } } exports.GeminiLLMFetcher = GeminiLLMFetcher; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvcnMvTExNVHJhbnNsYXRvcnMvR2VtaW5pTExNVHJhbnNsYXRvci9HZW1pbmlMTE1GZXRjaGVyLmpzIiwibmFtZXMiOlsiX3pvZCIsInJlcXVpcmUiLCJHZW1pbmlMTE1SZXNwb25zZVNjaGVtYSIsImV4cG9ydHMiLCJ6Iiwib2JqZWN0IiwiY2FuZGlkYXRlcyIsImNvbnRlbnQiLCJwYXJ0cyIsInRleHQiLCJzdHJpbmciLCJhcnJheSIsIm1pbiIsIkdlbWluaUxMTUZldGNoZXIiLCJjb25zdHJ1Y3RvciIsImFwaUtleSIsIm1vZGVsIiwiYXBpT3JpZ2luIiwiY29uZmlnIiwidXJsIiwiVVJMIiwidG9TdHJpbmciLCJnZXRMZW5ndGhMaW1pdCIsImdldFJlcXVlc3RzVGltZW91dCIsImZldGNoIiwicHJvbXB0IiwicmVzcG9uc2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb250ZW50cyIsInJvbGUiLCJvayIsIkVycm9yIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInBhcnNlUmVzdWx0IiwicGFyc2UiLCJqc29uIiwibWFwIiwicGFydCIsImpvaW4iLCJyZXBsYWNlIiwidHJpbSJdLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL0xMTVRyYW5zbGF0b3JzL0dlbWluaUxMTVRyYW5zbGF0b3IvR2VtaW5pTExNRmV0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuaW1wb3J0IHsgTExNRmV0Y2hlciB9IGZyb20gJy4uJztcblxuZXhwb3J0IGNvbnN0IEdlbWluaUxMTVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuXHRjYW5kaWRhdGVzOiB6XG5cdFx0Lm9iamVjdCh7XG5cdFx0XHRjb250ZW50OiB6Lm9iamVjdCh7XG5cdFx0XHRcdHBhcnRzOiB6Lm9iamVjdCh7IHRleHQ6IHouc3RyaW5nKCkgfSkuYXJyYXkoKSxcblx0XHRcdH0pLFxuXHRcdH0pXG5cdFx0LmFycmF5KClcblx0XHQubWluKDEpLFxufSk7XG5cbmV4cG9ydCBjbGFzcyBHZW1pbmlMTE1GZXRjaGVyIGltcGxlbWVudHMgTExNRmV0Y2hlciB7XG5cdHByaXZhdGUgcmVhZG9ubHkgdXJsO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZztcblxuXHRjb25zdHJ1Y3Rvcih7XG5cdFx0YXBpS2V5LFxuXHRcdG1vZGVsLFxuXHRcdGFwaU9yaWdpbixcblx0fToge1xuXHRcdGFwaUtleTogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHRcdGFwaU9yaWdpbj86IHN0cmluZztcblx0fSkge1xuXHRcdHRoaXMuY29uZmlnID0ge1xuXHRcdFx0YXBpS2V5OiBhcGlLZXksXG5cdFx0XHRtb2RlbDogbW9kZWwgPz8gJ2dlbWluaS0yLjAtZmxhc2gnLFxuXHRcdFx0YXBpT3JpZ2luOiBhcGlPcmlnaW4gPz8gYGh0dHBzOi8vZ2VuZXJhdGl2ZWxhbmd1YWdlLmdvb2dsZWFwaXMuY29tYCxcblx0XHR9O1xuXG5cdFx0dGhpcy51cmwgPSBuZXcgVVJMKFxuXHRcdFx0YC92MWJldGEvbW9kZWxzLyR7dGhpcy5jb25maWcubW9kZWx9OmdlbmVyYXRlQ29udGVudD9rZXk9JHt0aGlzLmNvbmZpZy5hcGlLZXl9YCxcblx0XHRcdHRoaXMuY29uZmlnLmFwaU9yaWdpbixcblx0XHQpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TGVuZ3RoTGltaXQoKSB7XG5cdFx0cmV0dXJuIDUwMDA7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVxdWVzdHNUaW1lb3V0KCkge1xuXHRcdHJldHVybiA1MDA7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZmV0Y2gocHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy51cmwsIHtcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0fSxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0Y29udGVudHM6IFt7IHJvbGU6ICd1c2VyJywgcGFydHM6IFt7IHRleHQ6IHByb21wdCB9XSB9XSxcblx0XHRcdH0pLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFyZXNwb25zZS5vaykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsaWRhdGUgcmVzcG9uc2Ugc3RydWN0dXJlXG5cdFx0Y29uc3QgcGFyc2VSZXN1bHQgPSBHZW1pbmlMTE1SZXNwb25zZVNjaGVtYS5wYXJzZShhd2FpdCByZXNwb25zZS5qc29uKCkpO1xuXG5cdFx0Ly8gY29udGVudC5wYXJ0cyBjb250YWlucyBvcmRlcmVkIHNlZ21lbnRzIHRoYXQgdG9nZXRoZXIgbWF5IGZvcm0gYSBjb21wbGV0ZSByZXNwb25zZSBmcm9tIHRoZSBMTE1cblx0XHQvLyBlYWNoIHNlZ21lbnQgbWF5IGNvbnRhaW4gZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEgKGUuZy4sIHRleHQsIGZ1bmN0aW9ucywgZXRjLiksIHdlIGpvaW4gYWxsIHRleHQgcGFydHMgdG8gZ2V0IHRoZSBjb21wbGV0ZSByZXNwb25zZVxuXHRcdC8vIGRvY3VtZW50YXRpb24gc291cmNlOiBodHRwczovL2FpLmdvb2dsZS5kZXYvYXBpL2NhY2hpbmcjQ29udGVudFxuXG5cdFx0Ly8gam9pbiBhbGwgcGFydHMgaW4gb25lIHN0cmluZ1xuXHRcdGNvbnN0IHRleHQgPSBwYXJzZVJlc3VsdC5jYW5kaWRhdGVzWzBdLmNvbnRlbnQucGFydHNcblx0XHRcdC5tYXAoKHBhcnQpID0+IHBhcnQudGV4dClcblx0XHRcdC5qb2luKCcnKTtcblxuXHRcdC8vIGZvciBsYXJnZSwgcG9vcmx5IHN0cnVjdHVyZWQgY29kZSwgdGhlIGdlbWluaSBhZGQgZXh0cmFuZW91cyBjaGFyYWN0ZXJzXG5cdFx0cmV0dXJuIHRleHQucmVwbGFjZSgvXmBgYGpzb25cXHMqP3xcXHMqP2BgYCQvZywgJycpLnRyaW0oKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLE9BQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJTyxNQUFNQyx1QkFBdUIsR0FBQUMsT0FBQSxDQUFBRCx1QkFBQSxHQUFHRSxNQUFDLENBQUNDLE1BQU0sQ0FBQztFQUMvQ0MsVUFBVSxFQUFFRixNQUFDLENBQ1hDLE1BQU0sQ0FBQztJQUNQRSxPQUFPLEVBQUVILE1BQUMsQ0FBQ0MsTUFBTSxDQUFDO01BQ2pCRyxLQUFLLEVBQUVKLE1BQUMsQ0FBQ0MsTUFBTSxDQUFDO1FBQUVJLElBQUksRUFBRUwsTUFBQyxDQUFDTSxNQUFNO01BQUUsQ0FBRSxDQUFDLENBQUNDLEtBQUs7S0FDM0M7R0FDRCxDQUFDLENBQ0RBLEtBQUssRUFBRSxDQUNQQyxHQUFHLENBQUMsQ0FBQztDQUNQLENBQUM7QUFFSSxNQUFPQyxnQkFBZ0I7RUFJNUJDLFlBQVk7SUFDWEMsTUFBTTtJQUNOQyxLQUFLO0lBQ0xDO0VBQVMsQ0FLVDtJQUNBLElBQUksQ0FBQ0MsTUFBTSxHQUFHO01BQ2JILE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxLQUFLLEVBQUVBLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUksa0JBQWtCO01BQ2xDQyxTQUFTLEVBQUVBLFNBQVMsYUFBVEEsU0FBUyxjQUFUQSxTQUFTLEdBQUk7S0FDeEI7SUFFRCxJQUFJLENBQUNFLEdBQUcsR0FBRyxJQUFJQyxHQUFHLENBQ2pCLGtCQUFrQixJQUFJLENBQUNGLE1BQU0sQ0FBQ0YsS0FBSyx3QkFBd0IsSUFBSSxDQUFDRSxNQUFNLENBQUNILE1BQU0sRUFBRSxFQUMvRSxJQUFJLENBQUNHLE1BQU0sQ0FBQ0QsU0FBUyxDQUNyQixDQUFDSSxRQUFRLEVBQUU7RUFDYjtFQUVPQyxjQUFjQSxDQUFBO0lBQ3BCLE9BQU8sSUFBSTtFQUNaO0VBRU9DLGtCQUFrQkEsQ0FBQTtJQUN4QixPQUFPLEdBQUc7RUFDWDtFQUVhQyxLQUFLQSxDQUFDQyxNQUFjOztNQUNoQyxNQUFNQyxRQUFRLEdBQUcsTUFBTUYsS0FBSyxDQUFDLElBQUksQ0FBQ0wsR0FBRyxFQUFFO1FBQ3RDUSxNQUFNLEVBQUUsTUFBTTtRQUNkQyxPQUFPLEVBQUU7VUFDUixjQUFjLEVBQUU7U0FDaEI7UUFDREMsSUFBSSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztVQUNwQkMsUUFBUSxFQUFFLENBQUM7WUFBRUMsSUFBSSxFQUFFLE1BQU07WUFBRXpCLEtBQUssRUFBRSxDQUFDO2NBQUVDLElBQUksRUFBRWdCO1lBQU0sQ0FBRTtVQUFDLENBQUU7U0FDdEQ7T0FDRCxDQUFDO01BRUYsSUFBSSxDQUFDQyxRQUFRLENBQUNRLEVBQUUsRUFBRTtRQUNqQixNQUFNLElBQUlDLEtBQUssQ0FDZCw4QkFBOEJULFFBQVEsQ0FBQ1UsTUFBTSxLQUFLVixRQUFRLENBQUNXLFVBQVUsRUFBRSxDQUN2RTtNQUNGO01BRUE7TUFDQSxNQUFNQyxXQUFXLEdBQUdwQyx1QkFBdUIsQ0FBQ3FDLEtBQUssQ0FBQyxNQUFNYixRQUFRLENBQUNjLElBQUksRUFBRSxDQUFDO01BRXhFO01BQ0E7TUFDQTtNQUVBO01BQ0EsTUFBTS9CLElBQUksR0FBRzZCLFdBQVcsQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxLQUFLLENBQ2xEaUMsR0FBRyxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ2pDLElBQUksQ0FBQyxDQUN4QmtDLElBQUksQ0FBQyxFQUFFLENBQUM7TUFFVjtNQUNBLE9BQU9sQyxJQUFJLENBQUNtQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUNDLElBQUksRUFBRTtJQUN6RCxDQUFDOzs7QUFDRDFDLE9BQUEsQ0FBQVUsZ0JBQUEsR0FBQUEsZ0JBQUEiLCJpZ25vcmVMaXN0IjpbXX0=