This repository demonstrates how to use n8n workflows with Orama Core to ingest and search meeting transcripts. The setup includes n8n for workflow automation and sample workflows, Orama Core for data search. There is also a simple sample dataset.
- Git for cloning the repository
- Docker and Docker Compose installed on your system
You'll need the following API keys:
- OpenAI API Key - For LLM operations and embeddings
- Hugging Face API Key - For model downloads (if using local models)
git clone <repository-url>
cd meetings-orama-n8n-exampleCreate a .env file in the root directory with your API keys:
# Copy the example file
cp example.env .envEdit the .env file and add your API keys:
OPENAI_API_KEY=
ORAMA_CORE_MASTER_API_KEY=my-master-api-key # used internally, can be anything
HF_TOKEN=Important: Replace the placeholder values with your actual API keys.
Run the following command to start all services:
docker-compose up -dThis will start:
- n8n (workflow automation) on port 5678
- Orama Core (vector search engine) on port 8080
- Python AI Server (embeddings and LLM) on port 50051
- Config Processor (environment variable processing)
Once the services are running, you can access the n8n interface at:
- Username:
test@example.com - Password:
Test1234
- In the n8n interface, find and open the "RUN THIS FIRST Initialize Collections" workflow
- Click "Execute Workflow" to run it
- This workflow will:
- Create the meetings collection in Orama Core
- Set up the necessary indexes
Note: Re-running the Initialize flow will wipe existing indexes and recreate them.
The "Basic Meetings" workflow handles the ingestion of meeting data through a web-based form interface:
- Access the Form: The workflow provides a web form accessible at the n8n webhook URL
- Upload CSV File: Use the form to upload a CSV file containing meeting data
- Automatic Processing: Once submitted, the workflow automatically:
- Extracts and parses the CSV data
- Processes meeting summaries and utterances
- Generates embeddings for semantic search
- Stores data in two specialized Orama Core indexes
The repository includes three sample CSV files in the sample_dataset directory for testing:
2_meetings.csv- Contains only 2 meetings for rapid testing and developmentmeetings.csv- Contains the complete sample dataset with many meetings
CSV File Structure: All sample files contain the following columns:
id- Unique identifierItem_UID- Item unique identifierMeeting_UID- Meeting unique identifierTranscript- Full meeting transcript textSummary- Meeting summaryDate- Meeting date
The "Basic Meetings" workflow includes a fully functional chat agent that handles information about meetings using two specialized indexes:
Two Indexes Architecture:
-
meetings-summariesindex: Contains meeting summaries with fields:id: Meeting unique identifiersummary: Meeting summary textdate: Meeting datemeeting_item: Item unique identifier
-
meetings-utterancesindex: Contains contextual meeting snippets with fields:id: Unique snippet identifier (Meeting_UID-start-end)meeting_id: Reference to the meetingsnippet: Contextual window of utterances (up to 4 utterances for context)start/end: Position markers within the transcript
Chat Agent Features:
- Dual Search Strategy: Uses two specialized tools:
meetings_search_tool: Searches the summaries index for high-level meeting informationmeeting_utterance_search_tool: Searches the utterances index for specific dialogue context
- Hybrid Search: Combines semantic meaning and keyword matching for optimal results
- Contextual Responses: Provides relevant meeting excerpts with proper citations
- Memory Buffer: Maintains conversation context using a sliding window memory
How to Use:
- The chat agent is automatically available when the "Basic Meetings" workflow is active
- Send natural language queries about meetings
- The agent will:
- First search meeting summaries to identify relevant meetings
- Then search specific utterances for detailed context
- Combine results to provide comprehensive answers
Example Queries:
- "What was discussed about fireworks in Long Beach city council?"
- "Find meetings where budget decisions were made"
- "Show me discussions about infrastructure projects"
- "What topics were covered in April 2014 meetings?"
Technical Implementation:
- Uses OpenAI GPT-4.1-mini for natural language processing
- Leverages Orama Core's hybrid search capabilities
- Processes utterances in contextual windows for better understanding
- Maintains conversation history for follow-up questions
The repository includes sample meeting data in the sample_dataset directory:
meetings.csv- Full dataset with meeting transcripts2_meetings.csv- Smaller subset for testing
The CSV files contain the following columns:
id- Unique identifierItem_UID- Item unique identifierMeeting_UID- Meeting unique identifierTranscript- Full meeting transcript textSummary- Meeting summaryDate- Meeting date
- GPU Not Available: Ensure NVIDIA drivers and Docker GPU support are properly installed
- API Key Errors: Verify your API keys are correctly set in the
.envfile - Port Conflicts: Make sure ports 5678, 8080, and 50051 are available
To restart all services:
docker-compose down
docker-compose up -d- Initialize: Set up collection and indexes in Orama Core
- Ingest: Process CSV files and create embeddings
- Chat: Query the indexed data using semantic search
- Retrieve: Get relevant meeting transcripts based on search queries
After running the Initialize and Basic Meetings flows:
- Explore the n8n interface to understand the workflow structure
- Modify workflows to suit your specific use case
- Add additional data sources or processing steps
- Customize the search and retrieval logic
For more information about Orama Core, visit the official documentation.