Skip to main content
Glama
generate-content-with-file-search.ts2.7 kB
import { googleGeminiAuth } from '../../index'; import { Property, createAction } from '@activepieces/pieces-framework'; import { defaultLLM, getGeminiModelOptions } from '../common/common'; import { GoogleGenAI } from '@google/genai'; import { promises as fs } from 'fs'; import { tmpdir } from 'os'; import { join } from 'path'; import { nanoid } from 'nanoid'; export const generateContentWithFileSearchAction = createAction({ description: 'Generate content with file search functionality.', displayName: 'Generate Content with File Search', name: 'generate_content_with_filesearch', auth: googleGeminiAuth, props: { prompt: Property.LongText({ displayName: 'Prompt', required: true, description: 'The prompt to generate content from.', }), model: Property.Dropdown({ displayName: 'Model', required: true, description: 'The model which will generate the completion', refreshers: [], defaultValue: defaultLLM, options: async ({ auth }) => getGeminiModelOptions({ auth }), }), fileStoreName: Property.ShortText({ displayName: 'File Store Name', required: true, }), file: Property.File({ displayName: 'File', required: true, }), }, async run({ auth, propsValue }) { const { file, fileStoreName, model, prompt } = propsValue; const tempFilePath = join( tmpdir(), `gemini-file-${nanoid()}.${file.extension}` ); try { const fileBuffer = Buffer.from(file.base64, 'base64'); await fs.writeFile(tempFilePath, fileBuffer); const genAI = new GoogleGenAI({ apiKey: auth }); const fileSearchStore = await genAI.fileSearchStores.create({ config: { displayName: fileStoreName }, }); let operation = await genAI.fileSearchStores.uploadToFileSearchStore({ file: tempFilePath, fileSearchStoreName: fileSearchStore.name!, config: { displayName: file.filename, }, }); while (!operation.done) { await new Promise((resolve) => setTimeout(resolve, 5000)); operation = await genAI.operations.get({ operation }); } const response = await genAI.models.generateContent({ model: model, contents: prompt, config: { tools: [ { fileSearch: { fileSearchStoreNames: [fileSearchStore.name!], }, }, ], }, }); return response.text; } catch (error) { console.error('Error in generate content:', error); throw error; } finally { await fs.unlink(tempFilePath).catch(() => void 0); } }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server