in server.ts [29:105]
export function app(): express.Express {
const server = express();
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
const browserDistFolder = resolve(serverDistFolder, '../browser');
const indexHtml = join(serverDistFolder, 'index.server.html');
// Update this line to add your API_KEY if you are not using env variables
const GEMINI_API_KEY = process.env['API_KEY'] || '';
const commonEngine = new CommonEngine();
const genAI = new GoogleGenerativeAI(GEMINI_API_KEY);
const model = genAI.getGenerativeModel({ model: 'gemini-1.5-pro-latest' });
model.generationConfig.responseMimeType = 'application/json';
const DEFAULT_LANG = 'spanish';
server.set('view engine', 'html');
server.set('views', browserDistFolder);
// Define Express Rest API endpoints
server.get('/api/ask-gemini', async (req, res) => {
if (!GEMINI_API_KEY) {
return res.status(500).send({
message: `Please provide an API key for Gemini, using default ${DEFAULT_LANG} translations.`,
});
}
let language = req.query['lang'] ? req.query['lang'] as string : DEFAULT_LANG;
try {
const prompt = `Your task is to generate 25 vocabulary words for learning ${language}.
Provide the ${language} translation, with 1 correct english translation and 2 incorrect english translations.
input: generate 25 vocaulary words for learning spanish
output: [{"phrase": "hola", "options"=["goodbye", "wait", "hello"], "answer": "hello"}, {"phrase": "adios", "options":["good morning", "see you later", "car"], "answer": "see you later"}, {"phrase": "gracias", "options":["shoes", "thank you", "comb"], "answer": "thank you"}]
`;
const request: GenerateContentRequest = {
contents: [{ role: 'user', parts: [{ text: prompt }] }],
tools: [],
};
const results = await model.generateContent(request);
return res
.status(200)
.send({ response: results.response.text(), usingDefault: false });
} catch (e) {
return res.status(500).send({
message: `Unable to generate the practice questions for ${language}, using default ${DEFAULT_LANG} translations.`,
});
}
});
// Serve static files from /browser
server.get(
'*.*',
express.static(browserDistFolder, {
maxAge: '1y',
})
);
// All regular routes use the Angular engine
server.get('*', (req, res, next) => {
const { protocol, originalUrl, baseUrl, headers } = req;
commonEngine
.render({
bootstrap,
documentFilePath: indexHtml,
url: `${protocol}://${headers.host}${originalUrl}`,
publicPath: browserDistFolder,
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
})
.then((html) => res.send(html))
.catch((err) => next(err));
});
return server;
}