Bonsai-27B-GGUF
lmstudio-community · Kit
A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…
An n8n workflow that recommends movies from a chat window. It loads your movie CSV into Qdrant with OpenAI embeddings, and an AI Agent asks for three picks close to what you like and far from what you do not.
Movie recommendation chatbot on Qdrant and OpenAI is an n8n workflow in the Developer category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Chat window
You load the movies once by hand, then it answers whenever you send a message in the n8n chat:
Three movie recommendations in the n8n chat, each with its year and a line about it, close to what you liked and far from what you did not
What you need before you start.
Language model and embeddings
Makes the embeddings for the movies and for each request, and runs the agent on gpt-5.6-terra.
NeedsAn OpenAI API key
Vector database
Stores the embedded descriptions and returns the movies closest to a liked example and furthest from a disliked one.
NeedsA Qdrant address and an API key
Checked by Mindket on 13 Nov 2026
This n8n workflow is a movie recommendation chatbot. One part loads a CSV of movies into a Qdrant collection, with an OpenAI embedding for each description. The other part is a chat window, where an AI Agent turns a request into a liked and a disliked example and calls a tool. The tool asks Qdrant for the three closest movies and returns their names, years and descriptions. Twenty-five nodes do the work, beside two sticky notes.
Developers and data teams who want to see recommendation by example in n8n, and anyone who wants to adapt it to products, articles or other items with a short description. Skip it if you want picks based on viewing history. It compares descriptions only.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Media | Product managers | Prototype a recommender before building one | A manager loads a film list and tests whether the picks feel right. |
| Retail | E-commerce teams | Swap movies for products that have short descriptions | A team loads its catalog and asks for gifts like one item but not like another. |
| Education | Data course teachers | Teach vector search and recommendation with a small file | A teacher runs the load in class, then tries three requests. |
| Software | Developers | Study how an agent calls a tool that is another workflow | A developer reads the tool node and reuses the pattern for a different lookup. |
You need a little n8n: import a file, add two credentials, set two addresses and prepare a CSV of movies.
Any n8n that can reach OpenAI, your Qdrant and the CSV’s address will run it. The chat opens inside n8n, so the picks stay in your editor.
Qdrant Vector Store and in the two Qdrant addressesDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Qdrant can be a cloud cluster or a server of your own.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key, for an OpenAI credential |
| Qdrant | An address and an API key, for a Qdrant credential |
| A movie CSV | A file at a web address, with the columns Movie Name, Year of Release and Description |
workflow.json.Embeddings OpenAI, OpenAI Chat Model, Embedding Recommendation Request with Open AI and Embedding Anti-Recommendation Request with Open AI.Qdrant Vector Store, Calling Qdrant Recommendation API and Retrieving Recommended Movies Meta Data.<YOUR_QDRANT_URL> with your Qdrant address, such as https://your-cluster.cloud.qdrant.io:6333.Download movies CSV, replace <YOUR_CSV_URL> with the address of your CSV.Open the chat and say what you want and what you do not, for example a light romantic comedy but nothing gory. The agent hands the tool a liked and a disliked description, then lists three movies, best first, without their scores. It keeps the last few messages as memory.
| To change | Where |
|---|---|
| The CSV | The address in Download movies CSV, and the column names in Default Data Loader |
| The collection name | Qdrant Vector Store and the two Qdrant addresses |
| How many movies come back | limit in Calling Qdrant Recommendation API, and the system message |
| The agent’s manner | System Message in AI Agent |
| What the tool is told | Description and input schema in Call n8n Workflow Tool |
| The model | Model in OpenAI Chat Model |
A product manager types that she wants something like a warm romantic comedy, but not a gory horror film. The agent passes the first phrase as the liked example and the second as the disliked one.
The tool embeds both and asks Qdrant for the three movies that sit closest to the liked example and furthest from the disliked one. The agent replies with three films, their years and a line about each.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This file holds two flows. The first loads the movies once. The second is a chat whose agent calls a tool, and that tool is the lower group of boxes in this same workflow.
For experts. Call n8n Workflow Tool finds its own workflow with $workflow.id, so no id needs editing, and Execute Workflow Trigger receives the agent’s two strings under query. The Qdrant calls are plain HTTP Request nodes, since the recommend query is not a mode of the Qdrant node.
| Node | What it does | What to know |
|---|---|---|
Download movies CSV | HTTP Request 4.2, with a file response | It hands the CSV to Extract from File as binary data |
Extract from File | Extract From File 1, CSV | Each row becomes one item, with the column names as keys |
Default Data Loader and Token Splitter | One document per description | The metadata keeps movie_name, movie_release_date and movie_description |
Qdrant Vector Store | Insert into the movies collection, with Embeddings OpenAI | It creates the collection when it is missing, sized to the embeddings and with Cosine distance |
AI Agent | Agent 1.6 with a system message, a window memory and one tool | It runs as a Tools Agent |
Call n8n Workflow Tool | Tool Workflow 1.2 with an input schema of two strings | The sub-workflow gets them as query.positive_example and query.negative_example |
Calling Qdrant Recommendation API | HTTP Request, POST to /points/query with recommend | Average vector strategy, limit 3, and only ids and scores come back |
Retrieving Recommended Movies Meta Data | HTTP Request, POST to /points | It fetches each id’s payload so that Merge1 can join on the id |
The original needed fixes before it could work for anyone else, and it still needs your own CSV and Qdrant address.
gpt-6-luna, supports function calling in Chat Completions only with reasoning effort off, so Mindket’s copy uses gpt-5.6-terra for the agent. The page does not list the embedding model text-embedding-3-small<YOUR_CSV_URL> and <YOUR_QDRANT_URL>imdb but searched imdb_1000_open_ai, so a fresh setup searched an empty or missing collection. Mindket’s copy uses movies for bothrelease_year that the loader never wrote, so the year came back empty. Mindket’s copy reads movie_release_dateJSON.stringify, so a vector cannot be joined into the text the wrong way, and the id list follows the number of resultsAn n8n workflow that is a movie recommendation chatbot. One part loads a CSV of movies into a Qdrant collection, with an OpenAI
embedding for each description. The other part is a chat window. Its AI Agent turns a request into a liked and a disliked example,
then asks a tool for the three closest movies.
workflow.json: the workflow as n8n exports it, twenty-five working nodes and two sticky notes. It holds no credential.README.md: these notes., with <YOUR_CSV_URL>` for you to fill in.<YOUR_QDRANT_URL>.imdb but searched imdb_1000_open_ai. Both now use movies.Selecting Fields Relevant for Agentmovie_release_date.JSON.stringify, so a vector can never be joined into the text the wrong way.Call n8n Workflow Tool now finds its own workflow with $workflow.id, so there is no id to edit.gpt-5.6-terra in place of gpt-4o-mini. See Good to know.Movie Name, Year of Release and Description.workflow.json.Embeddings OpenAI, OpenAI Chat Model, `Embedding Recommendation Request with Open and Embedding Anti-Recommendation Request with Open AI`.Qdrant Vector Store, Calling Qdrant Recommendation API and `Retrieving Recommended<YOUR_QDRANT_URL> with your Qdrant address, such ashttps://your-cluster.cloud.qdrant.io:6333.Download movies CSV, replace <YOUR_CSV_URL> with the address of your CSV.movies collection is created onLoading, from the manual trigger:
Download movies CSV fetches the file and Extract from File turns each row into an item.Default Data Loader makes one document per description, with the name, year and description kept as metadata.Embeddings OpenAI turns each document into a vector, and Qdrant Vector Store saves it in the movies collection.Chatting, from the chat trigger:
When chat message received hands the message to AI Agent, which has a window memory and a system message.Call n8n Workflow Tool with a liked and a disliked description.Execute Workflow Trigger receives them and the two embedding requests turn them into vectors.Calling Qdrant Recommendation API asks for the three best matches, and Retrieving Recommended Movies Meta Data fetches theirMerge1 joins scores and details by id, Aggregate bundles them, and the agent writes the reply.Download movies CSV, and the column names in Default Data Loader.Qdrant Vector Store and the two Qdrant addresses.limit in Calling Qdrant Recommendation API, and the system message.AI Agent.Call n8n Workflow Tool.gpt-4o-mini as shutting down on 14 January 2027 with gpt-6-lunagpt-6-luna says Chat Completions supports function calling only with reasoning effortgpt-5.6-terra. The page does not list the embedding model text-embedding-3-small.NOTICE.md 696 B README.md 5 KB workflow.json 18 KB
lmstudio-community · Kit
A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…
LibertAIDAI · Kit
Runs DeepSeek-V4.1-Flash-1017 as a 2.9 bits-per-weight EXL3 quantization, a 196 GiB copy for people serving large models on their own hardware. Perplexity stay…
facebook · Kit
Generates short music clips from a text description or an audio prompt, in the small checkpoint of facebook's MusicGen. It suits developers and music hobbyists…
alpindale · Kit
Tags every character of C source code for syntax highlighting with a tiny neural network of about 984 weights, run through a small C program. For developers an…
prithivMLmods · Kit
Try a set of LoRAs for the FLUX.2 Klein image model in a Gradio app that runs in your browser or on your own computer. Made for people who make or test AI imag…
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…