• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

TeraTech

The ColdFusion Experts: Develop | Secure | Optimize

  • Services
    • CF Coffee Call
    • Free Assessment
    • Consulting
    • Crash
    • Development
    • Maintenance
    • Modernization
    • Security
  • About Us
  • Clients Say
  • CF Alive
    • CF Alive Book
    • CF Alive Blog
    • CF Alive Podcast
    • Modern CF e-course
  • Let’s chat!

  • Services
    • CF Coffee Call
    • Free Assessment
    • Consulting
    • Crash
    • Development
    • Maintenance
    • Modernization
    • Security
  • About Us
  • Clients Say
  • CF Alive
    • CF Alive Book
    • CF Alive Blog
    • CF Alive Podcast
    • Modern CF e-course
  • Let’s chat!

143 Semantic CF code search with JARVIS (No Arc Reactor Budget required) with Monte Chan – Transcript

September 30, 2026 By Michaela Light Leave a Comment

Read the show notes and download the full episode here.

Semantic Cf Code Search With Jarvis No Arc Reactor Budget Required With Monte Chan Thumbnail

Michaela Light
So welcome back to the show. I'm here with Monte Chan and we're going to be talking about semantic ColdFusion code search with Jarvis. And you don't need an Arc Reactor budget to do this because it's all written in ColdFusion. So welcome, Monte.

Monte Chan
Oh, thank you.

Michaela Light
And it's been a few years since you've been on the show when you were talking about your AI coding experience. And I'll put that episode in the show notes at TeraTech.com. But let me introduce you to folks who haven't met you before. You're currently a senior web programmer at Shoes for Crews, and you've been programming ColdFusion since version 4.5 back in the late '90s. You used to be the co-manager of the Alamo Area ColdFusion User Group.

And in your free time, I don't know how you have free time because I've seen you presenting at CF Summit and I know you work hard. You enjoy learning any web development-related technologies or just programming languages that you can get your hands on. And also, you enjoy running marathons, though you don't have any world-record times there. You just enjoy it, do it for fun.

Currently, you're in San Antonio, Texas, and you have a beautiful wife and three rescue dogs. Two chiweenies and one purebred Chihuahua. What is a chiweenie? I've never heard of that. Chihuahua is the little dog, right?

Monte Chan
Yes, a chiweenie is kind of like a mutt between a Chihuahua and a weenie dog, like a dachshund. So that's why it's called a chiweenie. So, a mix of the two.

Michaela Light
Okay. Well, that sounds fun. I'll have to meet one one day. So let's talk about semantic ColdFusion code search. You've got a big code base, you want to search it, but you don't necessarily know what keywords to search for. You just want to search for particular things. What's an example of a search you might be wanting to do that motivated you to build this Jarvis tool?

Monte Chan
What happened is about a couple of years ago, I came across a thing called CodeQL, and that was a product by GitHub. And I believe CodeQL still exists to this day. It used to be paid. The last I checked, I believe you needed to pay in order to use that, unless you use that on a free open-source type of code base or educational project. Then you can do it for free.

Basically, CodeQL is using your code base as your database, if you will. And you can query your own code base to find vulnerabilities. Let's say, where are certain files? What are some things that you need to fix? So on and so forth.

And then with the AI features recently released in ColdFusion, I thought, well, in Iron Man, there's this bot, if you will, that Iron Man would talk to to get more information. It's like his personal AI assistant type of thing. So I thought, wouldn't it be nice if I could mix the two together? If I could create an AI bot and talk to my code base and get some information about my code.

Say, for example, where are the unscoped variables in ColdFusion? Or where are certain files? Let's say, for this demo, I have a Stripe application. So, for example, where are the files involved in the payment process? And so on and so forth. So I thought that would be nice.

Now, of course, we can get a lot deeper really quickly, but for the demo, it's rather simple. While I was at the ColdFusion Summit, I got a chance to talk to another fellow presenter, Matt Mercing, I believe that's his name. We were talking about that. He actually brought up onboarding a new employee.

You may not use some really up-and-coming, newest LLM models because those tokens can get rather expensive. So with this tool, kind of like an AI bot, if you will, that will give a jump-start on the onboarding process because you can use some smaller LLM models, which would be cheaper. So the new employees can use this bot to get familiarity with the code base. And that would help with learning the system.

Michaela Light
That would be great if a new developer on the team could, instead of having to spend hours looking through the code or having to take time from a senior developer, just ask the code questions through Jarvis.

Monte Chan
Yes. And what happened is, maybe a few days before my presentation, I actually got a chance to talk to Ben on the demo. And he was trying to change something to show something on his phone to make it look more the way he wanted it to be.

And I told him, well, actually there's another way to do that, but that's already built into one of the Adobe apps. And then he said, “With great ability comes great — with great power comes great self-indulgence.” Because he has the power, so he can make things just the way he wants them to be.

So, to be fair, in a sense, my Jarvis attempt is also kind of like a self-indulgence thing because, after all, Claude Code and a whole bunch of existing AI assistants can do basically the same thing I am doing. But now I'm just doing that in the ColdFusion way. So, just my way of doing things in ColdFusion.

Michaela Light
Well, I guess we're going to be very self-indulgent today with this Jarvis tool. And just for everyone listening, you put all the code for this on your GitHub, and I'll put the link to your GitHub in the show notes. So there's no cost for the code.

Obviously, you need to have ColdFusion 2025 Update 8, or as I like to call it, ColdFusion 2026. And I call it that because it has so many new features over the previous version, the originally released ColdFusion 2025. Really, it is a complete new update.

And you're going to show some of those cool AI and vector database and RAG features today because that's what you used. Also, for those who have no idea, which included me before I learned about this, Jarvis is the AI assistant of Mr. Iron Man, Tony Stark, from the movie. So I think it's a bit of an inside joke there that you'll have an AI assistant that can help you out.

Are you planning on doing a voice-activated version of Jarvis?

Monte Chan
Yes, I do plan on doing that. I actually alluded to that at the end of my presentation at the ColdFusion Summit.

Michaela Light
Yes. Will it have a snooty British accent like the movie character Jarvis?

Monte Chan
We can try, yes. And the LLM itself can work with any natural language. So it's not too far-fetched to have a British accent or any accent you want.

Michaela Light
And is Jarvis stuck to one particular LLM? Or can you use it with any of the major ones like ChatGPT and Claude and the open-source ones?

Monte Chan
You can. ColdFusion has released a list of supported LLMs. So as long as you use one of those, then that should be all right.

Michaela Light
Yeah, I think there's about half a dozen of them. It makes it model-independent. So if one LLM is not working for you because its token cost went up or it's having a bad day, you don't have to change the ColdFusion code. You change the parameter and off you go.

So it sounds like this is a handy tool. Have you been using it much, or had any of the audience using it yet?

Monte Chan
I'm just exploring it in general. There are lots of things that you can do with AI, especially with the new ColdFusion AI features. So I'm exploring not just the Jarvis thing, but also using AI to detect certain things. So it's quite exciting and quite interesting too.

Michaela Light
Well, I think it's very powerful. I did search for commercial tools that do this, and I found a few. One was Sourcegraph Cody, which you need to put down 16 grand for plus a per-user, per-month seat fee.

So I think free code on GitHub and your version of ColdFusion — and of course, the developer license for ColdFusion is free for those who want to try this out. Just spin up ColdFusion 2025 on CommandBox, and you could try this code out on your own code base.

Though you will need a vector database. We'll talk about that a bit later.

So I'm very impressed you were able to do this in ColdFusion. Was it hard to use the AI features?

Monte Chan
It's not too hard. You just need to try different things. And with ColdFusion documentation, a lot of it is quite helpful. So basically, just follow the documentation and you should be able to get it up and running rather quickly.

Except that a little caveat had to do with some of the supported vector database versions. It just so happened that I was using one version and then that database version got upgraded, and the new version was not one of the supported ones.

So that's why I was having a little trouble at the presentation at the ColdFusion Summit. But shortly after that, after I came home, I took a look and also reached out to Adobe support. They pointed out that the version I was using was not a supported one, and they sent me a PDF with all the supported versions of the vector databases.

And in hindsight, had I used a different vector database, that would have been better because they support all the latest ones. But it just so happened that the one I picked only supported one version and not an updated one.

Michaela Light
So for people listening who are not quite clear what a vector database is and how that's different from a regular SQL database, what is a vector database?

Monte Chan
A vector database basically stores different vectors, what they call different dimensions. So essentially, when you do a vector search, it's proximity you're searching for.

Let's say there are different data points. Looking at my screen right now, my background has a tree and has a blue sky, and I'm wearing a black T-shirt. So all these different data points form a dimension of different data points.

When you want to search for something like “blue sky,” then there may be different shades of blue. Different shades of blue have their own data points. So when you're searching for anything with blue, then it may have something with a blue sky, blue T-shirt, blue whatever.

So it's like a proximity search. Whereas regular SQL is not so much like that, although you can structure your regular SQL in certain ways to search for proximity. But vector search is more suitable for a proximity search.

Michaela Light
So, coming back to what you're using it for, you're putting the code base into a vector database. And in this case, it's looking for similar pieces of code that would match the semantic search that you're doing in the prompt.

And it does it very quickly because it's kind of pre-digested all of the text, and you can just come back with similar things. And it doesn't have to know what code is blue or black T-shirt or insecure code. It knows to figure things out that are similar because the vectors produced come out the same.

And for those of you who know how to use hashing in ColdFusion, it's a somewhat similar concept. You take a piece of data, you compress it down to a smaller set of numbers, and then you can compare the numbers to see if things are similar. So I think that's a fair analogy.

There are several vector databases supported by ColdFusion. Which one did you decide to use and why?

Monte Chan
The one that I used was Qdrant.

Michaela Light
And so that's sort of a short version of the word quadrant, right? Qdrant?

Monte Chan
Yes, something like that.

Michaela Light
How much does that cost?

Monte Chan
There's a free cloud-based version, and you can also run it locally as well. And the version that the new ColdFusion AI feature supports is version 1.16. Although, if you go to the cloud-based version, the newest one is 1.19, which is not supported either.

And 1.17 was actually released shortly after the ColdFusion AI features were released, which is the one that I was actually trying to use, and it gave me some weird errors.

Michaela Light
Oh, got it.

Monte Chan
So that's when I realized that I had to run 1.16. And since 1.16 is not available in the cloud version, if you use the online cloud version, to my understanding, they determine what version you will be using.

So in order to use the 1.16 version, you need to use the Docker container and run 1.16 locally, which is what I ended up doing.

Michaela Light
So you're able to run it locally as well, so you don't have cloud dependency. Or if you go to a more featured version, you don't have cloud fees going on.

And that runs on all the major cloud players: AWS, Google Cloud, and I think Azure.

So very cool. And there are several other vector stores out there. The code you're sharing on GitHub works with any vector store. It doesn't really matter which one, as far as I understand, because the ColdFusion code doesn't change.

You change the vector store, and your ColdFusion code remains the same. Just like if you've got SQL code and you change the database, assuming you have fairly vanilla SQL statements, you don't have to edit your ColdFusion code.

Monte Chan
Correct. The only thing is the version you need to watch out for because 1.16 is the only one, as far as Qdrant is concerned, that's supported with ColdFusion AI features.

So if you end up using anything higher than 1.16, then instead of using the ColdFusion AI features, you probably will need to use the Qdrant API to get your data instead of using the ColdFusion built-in native function.

And the rest will be the same. Once you use the API to fetch the data, after that, you just continue on with your ColdFusion code.

Michaela Light
Okay. And to connect to the vector database, you do some configuration in your ColdFusion Administrator, I assume?

Monte Chan
Yes, there are two ways to do that. One is you can go to the ColdFusion Administrator, and once you have Update 8, then you will see a new tab called AI or AI Services.

So you click on AI Services, and that's where you enter the AI vector store information. And in the vector store, that's where you specify what vector database you want to use.

Currently, there are four that the AI feature supports: Pinecone, Qdrant, Chroma, and Milvus.

Michaela Light
And when you want to ingest the code base into your vector store, how are you doing that? Is it one function call, or do you have to chunk the data into little pieces so it can digest it?

Monte Chan
What I ended up doing is creating a ColdFusion app because with the ColdFusion app, one of the new AI features is that you can insert the data in a way that ColdFusion understands.

Once you define the vector store client, one of the newer features is actually two new functions that come with the vector client. One is add, and the other one is addAll.

The difference is, with addAll, you're basically building an array of data points and adding everything in one shot, versus add, which is just one single data point at a time.

With add or addAll, I'm basically creating what we call the chunking logic.

When it comes to chunking logic, you can either chunk a whole file at a time, or you can chunk just the functions. Let's say you have a thousand lines or ten thousand lines of code in a file. If you chunk a whole file at a time, you have a big chunk. Versus if you chunk it by a logical unit, let's say a function at a time, then you may have smaller chunks and they may be more meaningful that way.

It's hard to say whether one way is better than the other. That, of course, depends on your code base. If your code base has lots of types of files that are relatively small, then if you chunk it by file, it may make sense.

But sometimes if you have some bigger files, then you may need to think about how you want to chunk your files. And also, when chunking the files, you want to chunk them into logical entities.

For example, you may not want to chunk half of an if statement in one chunk and half in another chunk. That does not usually work too well.

So you just need to play around and see which one works for you and see how the result works for you. But in my case, because a lot of my files are not too big, I actually tried chunking a file at a time and also tried chunking just a function at a time.

Michaela Light
So are the chunks what get stored as vectors and come back in the search? Is that why it's important how you chunk it? So you need to pick a fine enough granularity that what comes back makes sense.

And then are you storing any metadata with each chunk to help understand what came back?

Monte Chan
Oh yes. That actually depends on what you want to do with it. It comes with some kind of planning because ultimately, what metadata you store depends on what you want Jarvis to do.

So if I want the file name to be there, then one of the metadata fields would be the file name.

You can store the actual code relating to that chunk, but it actually works better to have a summary of what that code does and use that as your semantic search.

A lot of the time, I notice that when I do a semantic search on the code itself, it may not understand what the code actually is doing. Versus if you actually have a brief description or summary of the general idea or general purpose of the code, then you can do a semantic search on that text.

But then in the metadata, you store the code chunk relating to that summary. And I find that works better for me.

Michaela Light
And did you have to write something that handles the different files, JavaScript or CFCs, differently?

Monte Chan
Oh yes.

Michaela Light
Differently, or yeah.

Monte Chan
Yes. And ultimately, that also depends on what kind of information you want.

So, for example, if I want to capture some unscoped variables, the syntax of an unscoped variable basically works in a CFC or ColdFusion. In SQL or JavaScript, you don't exactly have anything called scope per se.

But, of course, SQL and JavaScript have their own syntax. So when you write the code to ingest certain things, you can use, say, regex to detect what kind of files you're reading in, and then use the regex to determine how you want to handle variables or different things.

Michaela Light
Did you find it took a long time to understand how to use a vector store, or was it pretty straightforward?

Monte Chan
It takes a little bit of playing around, but it's not too difficult.

Monte Chan
I must say that—

Michaela Light
Some people listening may have used the free-text search, cfsearch and cfindex tags in ColdFusion, using Solr search or some of the other search engines. And this is somewhat analogous.

You're indexing free text, in this case ColdFusion documents. But the difference is that in free-text search, you're not doing semantic search. It doesn't really understand the content. You're still doing a kind of grep-like search there.

Here, it actually understands the content to some extent — what the meaning is.

Monte Chan
Yes.

Michaela Light
Now, what happens if the code base changes? Do you have to re-index the whole thing, or can you just update the ones that have changed?

Monte Chan
Oh yes, absolutely. Because, like you said, the code changes.

So you have basically two ways of doing that. One is to re-index everything, but then that may take a while.

What you can do is maybe make an API call when you do the re-index. If you're using some kind of repository, say GitHub, you can maybe make an API call to do a diff so you know what actually got updated and only update the indexes of those files affected.

And you can also build that process into the CI deployment pipeline. I would assume that if the PR itself gets rejected, you probably don't want to re-index any rejected PR. But once the PR is actually approved and merged, that's when you update and re-index the files that are affected.

You can build that into the pipeline.

Michaela Light
And in your code, when you're taking a prompt and it's going to search, is that complicated code or does ColdFusion 2026 make that easy?

Monte Chan
Oh yes. ColdFusion 2025 Update 8 — ColdFusion 2026 — made it easy because there's a search function that comes with the vector client.

So you just need to specify, of course, the question and the proximity, and then it will do the rest for you. It's actually quite straightforward.

Michaela Light
So this is actually quite complicated if you weren't doing this in ColdFusion. If you were doing this in Java or some other language, it would probably be quite a lot of code to do a similar thing.

Monte Chan
Yes. I haven't done too much. I've done some using, say, Python or using JavaScript to do a similar thing. But ColdFusion does make those processes easier.

Michaela Light
Much easier, and it makes them model-independent as well. If you were calling an OpenAI API to do this, you're kind of stuck with OpenAI in your code, whereas ColdFusion isolates what model you're using and what vector store. And you keep the same code if you need to shift.

And did you put an MCP server in this?

Monte Chan
No, not in the demo. But depending on what you want to do — again, ultimately, it has a lot of planning, so that depends on what you want Jarvis to do.

Let's say you want to get when a particular file was last modified. Yes, you can probably use cfdirectory, cffile, or something to get that information.

But if you have an MCP that actually has access to your file system, then in addition to just when the file was last modified, you can get a lot of file-specific information that may not be available using just ColdFusion alone.

So you can use MCP to access certain things that ColdFusion does not usually have. Then you can incorporate the MCP for whatever reasons you want.

Michaela Light
And so I think for folks listening, first of all, Jarvis is a very interesting and useful tool. It may let you find stuff in your code quicker than you would by searching other ways.

And if you're interested in the new AI features in ColdFusion, this is a great way to get your hands dirty playing with these new features and understanding them, because you may be able to use those in your apps as well to do cool things for your users.

So I think that's two reasons to try out Jarvis.

Monte Chan
Yes. And there's actually a site called MCP Servers. Just look for MCP Servers when you do a Google search.

There's a site where you can actually find a lot of them. Of course, you're more than welcome to build your own MCP servers, but I believe it's in the PowerPoint that is uploaded to my GitHub account.

There's a site, I want to say it's called MCPServers.org or something like that. When you're there, it actually shows you all the MCP servers available for different purposes: file systems, databases, so on and so forth.

You just need to find one that actually meets what you're looking for. And it tells you how you can start that MCP server on your own.

There are a lot of them. There's no way for me to look at literally every single one of them. But for the ones that I have actually looked at, those are either done in JavaScript, so you would need Node in order to start that MCP server, or Python, so you need to download Python in order to compile or start the MCP server locally.

It has instructions on what to do.

Michaela Light
And an MCP server is what lets AIs communicate with other apps or SaaS products.

Monte Chan
Yes.

Michaela Light
It can intelligently figure out what's available and then query it, so you don't have to know all the API parameters. And ColdFusion 2026 can both consume from MCP servers, and you can publish your own MCP server that gives qualified access to data or functions in your app without letting people go crazy and do things they're not supposed to do.

So it's a very useful concept. I think the site you're referring to is MCP Servers with an S, dot org. And it seems to currently have 9,000 different MCPs listed on it. So you can find a lot of cool things there.

Which is another reason to be using these AI features because you can now easily add features into your ColdFusion app from those 9,000 different MCPs that other people have published.

Monte Chan
Yes. May I also add that one of the new features that comes with the ColdFusion AI support is that you can create your own MCP as well.

And one of the examples that Adobe showed in the keynotes, they actually created their own application using ColdFusion, of course, and then created an MCP to get the data generated from that app that they created.

So then that app can provide the data for the AI features that they are creating using ColdFusion as well.

Michaela Light
Wow. So, a powerful feature on its own.

The latest version of ColdFusion, which I call ColdFusion 2026, not only has this MCP feature, which to me is a really powerful addition. It's got all these vector stores, the RAG stuff, AI prompting, model independence, and a whole bunch of language features for other things in there, and some performance and security improvements.

So definitely a great version update.

Of course, ColdFusion is on a subscription model now, so you don't have to pay extra for the upgrade. And it was actually delivered, as you mentioned earlier, as Hotfix number eight. So it wasn't even a fresh install.

In fact, if anyone's already running ColdFusion 2025, you probably already have all these features there because you didn't have to do a total reinstall. You just apply the hotfix and you've got those updates.

So this is a whole new model where Adobe has continuous delivery of cool new features, and you're paying an annual subscription instead of having to pay for an update every couple of years.

It's an interesting way to go, and businesses like Microsoft do a similar thing. You're on a subscription.

So unless there's something else you want me to ask you, I suggest we do a quick demo of this. We'll walk through what you're doing for folks listening on the audio version of this podcast, and for the video version, you'll be able to see the screen.

So if you want to share your screen and show the code and give a demo of it and walk through some of the clever things you did, that would be very cool. You're looking for the little share button at the bottom, I think.

Monte Chan
Oh yes, there you go. Okay. Here we go.

Michaela Light
So this is the Jarvis app.

Monte Chan
Yes. It's actually rather simple.

Michaela Light
So basically, for those listening without video, you're running this on localhost and it's running a little AI chat. You've got a prompt. Go ahead and say what you're prompting.

Monte Chan
Yes. So I basically just used GitHub Copilot to generate a quick interface that would take input.

There's a little input box where I can put in my prompt, and I can send that to the back end. That would be ColdFusion, and ColdFusion would do a semantic search. Then it will return JSON, and it will display the result on the screen.

And I am running ColdFusion 2026. Right now, the latest update is Update 11, I believe, which is actually what I'm running right now.

And this is running Adobe ColdFusion, not CommandBox.

So let's say I were to put in, “What files are involved in the ColdBox module?” I can just click Send, and then it would return the results.

For example, one of the results is the path. One of the results is config/coldbox.cfc, and then it gives a general purpose of what that file does.

In this case, I'm using CFStripe, which is a quick demo that I did before on how to use Stripe payment.

Michaela Light
So this is the demo app that you use to do this?

Monte Chan
Yes. So, in my demo app, basically, I have an interface. The item is called “The Magnificent Autobiography of Monte Chan,” which is a fictional item. It's a book that you can buy for $19.95 USD.

You just select the quantity of books that you want, and then you click Submit, and it will send to the back end and calculate the payment. So basically, that's what it is.

And that is in this CFStripe project.

All together, the last I checked, there are about 5,000-ish files.

So basically, I created an ingestCFStripeCodebase.cfm to ingest all this code into a vector database.

It has certain files that I probably don't care for. Say, for example, .git, or node modules, or .env. Those are things you probably don't want to ingest into the vector database because the environment variables usually have things like API keys.

Those are probably not things that you want to store in a vector database where everybody can get hold of them. Or .git files are usually just Git-related files, so those are not necessarily things that you care for.

So you can add certain folders to be excluded from your ingestion.

Once I have defined all these folders that I don't want to include, then I have the chunking. Basically, I read in the file and split it into chunks.

And then there are also different kinds of files. If it's a CFM, that would be a ColdFusion page. If the extension is JS, it's a JavaScript page, and so on and so forth — HTML and so on.

In this case, in my code base, I don't believe I have any SQL or Markdown files, but you can add the different files there.

And then at the end, I return the general functionality of this code base that I am chunking.

After all that, I have the metadata, which is the source, the relative path to the file, the file name, the extension, the project — which in this case is CFStripe — and the code chunk.

Michaela Light
So the screen seems to be stuck on the form before the submit. I don't know if you're looking at a different piece of the screen.

Monte Chan
Okay, let me try sharing again. Maybe I did not share.

Michaela Light
No worries. You've been talking it through. Great.

Monte Chan
Let me stop and let me share again. Sorry about that. Oh, here you go. Okay.

Michaela Light
Here's some code. Can you bump up the font size a little bit? This is going to be teeny tiny for folks at home.

Monte Chan
Can you see it now?

Michaela Light
Yes. That's great. If you can get rid of those other areas so we can actually read some code, that would be great.

So, do you want to pick out anything important you just talked about so people can read this code?

Monte Chan
Okay. So this is called ingestCFStripeCodebase.cfm.

Michaela Light
So this is the vector database ingestion in chunks.

Monte Chan
Correct. Yes.

In this case, I'm getting the project folder. I'm running that on a Mac. And this is the name of the collection, which essentially in a vector database is almost similar to a database name, if you will.

It would be my localhost. Typically, it would be 6334 or 6333.

And then the chunk size would be how many characters. You just play around with that to see how big of a chunk you want to do.

These are the folders to be excluded. So say .git. In my case, I don't have SVN, but say .git. Usually, the files in that folder have something to do with Git settings, which you probably don't want to include in your vector database.

Node modules can be humongous, and you probably don't want any of that stuff either. Those are not exactly related to your code base per se.

And .env files have to do with the environment variables, which usually have API keys and different things. You probably don't want to store the API keys in a vector database so everybody can access them.

So once you have defined all the folders to be excluded, then I split them into chunks.

Essentially, I am reading in the files, defining the newline characters, so then I can get them line by line.

And then I have a function to get the general purpose of the chunk that I am storing in the vector database.

Based on the extension, say if it's a CFM, it will be a ColdFusion page. CFC will be a ColdFusion component, JS will be JavaScript, and so on and so forth.

At the end, I will have a general purpose. CFStripe is the name of my project, which is the name of the code base, and then the kind of files, the name of the files, and the path to that file.

Then I have the metadata.

The text is the summary text that I was saying earlier. This summary text would give a general summary of what this code actually does.

Source in the metadata would be the direct path to the file. File name would be the actual file name. The extension, the project — in this case CFStripe, which is the code base that I'm using — and the actual chunk of the code related.

And then this is the new function that comes with ColdFusion 2026, ColdFusion 2025 Update 8.

You can specify the provider. Provider is the vector store that you are using. I'm using Qdrant.

I specify the URL. In my case, because it's localhost, that would be localhost on port 6334. But if it's cloud-based, then of course you have a different cloud-based URL.

Then you specify the collection name, which is essentially kind of like a database name equivalent, somewhat like that.

And then the metric type. Usually I use cosine. I haven't really tried other metric types. Basically, this would determine how you want to retrieve the data.

Then there's dimension. This dimension has to do with how many data points relate to one piece of data.

This dimension has to match how you define the collection.

Michaela Light
So we're just trying to run this code, having a little tech issue with the URL. So just to summarize for people, this is the code that scans through all of your code base, chunks it into useful pieces, maybe functions or CFCs or whatever makes sense to you, and adds some metadata so that when the search results come back, it can display something intelligent.

And here is the list of Jarvis collections you made.

Monte Chan
Yes. So when I'm running Qdrant locally, if you go to the cloud-based version, it will have its own interface so you can see all your collections.

On my local, the Qdrant dashboard is run on 127.0.0.1, port 6333, /dashboard. And then after that, you can go to collections to see a list of collections that you have.

When you create a new collection, you give it a name. Let's say, in this case, “test data” or something like that.

Then you can define whether you want to do a global search or multi-tenancy. In my case, I chose global search, and then I chose simple, single embedding.

Then you need to define the dimension and also the metric. The metric — remember earlier in the code base I said cosine — is basically determined here. You have other metric options too.

Michaela Light
Yeah, this is just how it calculates the distance between the vectors. So you've got this chunk of code, it turns it into a multi-dimensional vector, and then if you've got two vectors, you want to know how close they are.

So these are just different methods of measuring how close they are.

Monte Chan
And then you can select the dimension that you want.

The dimension that you specify here usually has a lot to do with what model you're using. For example, in this case, the OpenAI text-embedding-3-small model has 1,536 dimensions.

And that's actually what I'm using. So this dimension here must match the one that you have in the code base: 1,536.

This dimension number has to match what you have defined in your vector store.

And likewise, the metric type you're using here must match what you define in your collection. If they don't match, you will get an error.

Michaela Light
So, the trade-off here in the number of dimensions is the more dimensions you give, the more details you can get, but the more space the database takes up and potentially the slower it takes to return things.

So how did you pick that number, 1,536, for the number of dimensions? How on earth did you come up with that number? Do they give you a tool to help you with that, or do you just have to play around with it?

Monte Chan
Those are usually set here because these are the default values.

Michaela Light
They give you some defaults, I see. So if you pick this one, then it's 1,536.

Monte Chan
If you pick another one, a larger model, then it would be 3,072. And so basically, based on what you select here, those are the numbers that I go with.

Michaela Light
I would recommend to people listening: play around with it and/or just ask your favorite AI what number to use for the use case you have.

So Qdrant seems pretty easy to use. Was it easy to install?

Monte Chan
Yes. In my case, I have Docker running. So basically, I just searched for Qdrant.

You see a Start button next to the Qdrant image. Basically, just click Start and then you have that started.

And if you need help, which in my case I needed a lot of help — I must say that I don't use Docker too often — basically, I just asked ChatGPT, “How do I start that?” And then it gave me all the step-by-step instructions so I could actually start Qdrant locally.

Michaela Light
Very cool.

Monte Chan
But once it's started, by default it starts at localhost 6333.

When you do a search, though, then you will need to use 6334. So, for example, in my code, in my Qdrant URL, it's actually using port 6334.

So depending on what you're trying to do, the dashboard is at 6333. But when you do a search, then it will be 6334. Those are the two ports that you need for Qdrant.

Michaela Light
And how big is the demo code base you ran this on?

Monte Chan
You said it's about 5,000. So let's see.

This CF code base is the one that I use for all the files. So all together there are just under 5,500 files. And each file may have anywhere from under a hundred lines of code upwards.

If I remember correctly, this one is one that I actually break down to about a hundred lines per chunk. So it would be just under 10,000 lines of code.

Michaela Light
Oh, so a fair-sized chunk of code to be demoing with. And how long did the vector database take to ingest this?

Monte Chan
I let it run, and it took roughly 15 minutes, probably just under that, to ingest the entire code base.

Michaela Light
So in real life, you might run this once on your code base overnight if you had a big code base with hundreds of thousands of lines or millions of lines of code.

But then you'd run a different process, or you'd edit the code to be able to detect what files had changed and only update those. You could have a daily batch process that did that.

So, very analogous to free-text search, where you set up a scheduled task to update the index nightly, usually.

But the initial ingestion may take a chunk of time.

Monte Chan
Yes. And I am using this text-embedding-3-small model from OpenAI. To ingest the whole code base cost me 40 cents.

Michaela Light
Oh, so who were you paying the 40 cents to? That was a token cost?

Monte Chan
Yes, OpenAI.

Michaela Light
Okay. And that's because you picked OpenAI as your embedding model. But if you'd picked a different one of the ones provided by Adobe, you'd have paid a different token cost to someone else.

Monte Chan
Correct. If you pick something that's the newest and greatest, then of course it would be a whole lot more expensive. Versus if I picked a smaller model, then it would not be as expensive. Or you can pick an older model.

Michaela Light
Right. And you also could have picked an open-source model.

Monte Chan
Correct.

Michaela Light
That's one of the options on there, using Ollama as the model. So that could be running locally for people allergic to token costs. Or who've blown their token budget, like some companies manage to do.

I read about one company — I better not say their name — but they had an annual budget for tokens and they blew it in four months. So you've got to pay attention to these things.

But I don't think 40 cents is going to break anyone's back if they just want to try this out.

And just to be clear, it's using those tokens to process the chunks of text and to make those vectors.

Monte Chan
Correct. So once it's ingested, you see the point. The point is basically each data point. You can think of that as a record in a database.

And this is the ID associated with that. You can think of this as kind of like a primary key, in a sense.

And the payload is the actual data. So in this case, the project is CFStripe. And all these data points are basically the same as the ones that I specify in my code right here.

Michaela Light
So the text and the metadata.

Monte Chan
So you will basically see these nodes: project, path, extension, file name, source, text, and code chunk.

And this length is a default vector. It has 1,536 dimensions.

You can copy the vector into the clipboard. If you paste that into a file, you will see all the vectors that were created. There will be 1,536, so there will be a lot of vectors.

Each vector is basically a decimal number, and each of those numbers represents some portion of this data point.

So once it's ingested, you will see something like this.

Michaela Light
Okay.

Monte Chan
And then, once it's ingested, if I go back to the AI chatbot and say, “What files are involved in the ColdBox modules?” these are the files involved in the ColdBox modules.

For someone who is not familiar with the ColdBox framework, they can see, okay, these are the files that are involved in the ColdBox modules. So they can take a look at the code involved.

Or let's say I say, “What files are involved in the payment process?” I click Send.

Basically, these are the files that are related to the payment processes: processPayment.cfc, and this is the path at handlers/processPayment.cfc, or in the views, there's a processPayment.cfm.

So again, for someone who may be new to the code base, they can ask the questions, and then it will basically do a semantic search against the vector database and return the related information.

Michaela Light
Why don't we have a look quickly at the code that's returning that info to see how simple it is?

Monte Chan
Oh, sure. Yes, absolutely.

In this case, I have a chatbot.cfm.

Essentially, after they put in the input, this handle submit would make an AJAX call to chatAPI.cfm, posting the message as JSON.

And then based on the response, it would show on the screen. If there's an error, then it will show the response error. But if not, then it will show whatever is shown from the result, which would be in JSON format.

These are the results coming back. The scores are basically how good that result is, and then the file name.

These are the JSON, the code chunk, and all that. So in this case, I only specify that I want to return the path and the code chunk.

So here I call the chatAPI.cfm.

Then, in here, I have the vector client. Again, that is the function that comes with the new ColdFusion AI features.

I specify the provider, the dimension, the URL, the collection name, and the metric.

In this case, the embedding model is the embedding that was created in Qdrant.

Michaela Light
Yes, in Qdrant, yes.

Monte Chan
So then I use the exact same one that I picked when I created the collection, which is the OpenAI model. And this is text-embedding-3-small.

So this one must match whatever embeddings you used to create the collection. If they don't match, you will get an error.

So this is the way to create the client.

And once you have the client created, .search is how you do the semantic search. You pass the message, which is coming from whatever I input.

And then the minScore is basically how good of a result I want it to be.

I just set the score to be rather low. But if you want something to be a little bit more correct, if you will, then you can increase the score to be higher, so it may be more relevant to what you're looking for.

In this case, 0.3 is rather low, like I said, but you can change the minScore if you want, so you can limit how much you get returned.

After that, once I get the results, I'm just parsing the results.

In some cases, if the file name is not there, I set it as “unknown file.” Then I'm basically parsing the data to get the path, get the source, and different things.

After that, I basically return the local response back, dump the JSON, and that will be what's returned.

Essentially, that's what this is doing.

The message that I put in there would be sent to the ColdFusion back end and do a search against the vector database to get back the result.

And this is a rather simplistic demo.

But when you create metadata, you can include more. In my case, I only had certain things in mind when I was doing the demo — the file name and different things.

But you can definitely include more data, more metadata in there.

So let's say if you want to search for any unscoped variables, you can definitely add another node here for a list of unscoped variables.

But then, of course, you will have some corresponding logic to determine where those variables are and how you determine what an unscoped variable looks like.

Then you have similar logic to provide for your metadata.

And so, the more you think about it, there are a lot of different ways that you can add to this metadata so you can enhance the functionality of your AI chatbot.

Earlier, you had asked me about creating a voice agent.

Right now, this portion is done in ColdFusion. For those who have actually seen the movie Iron Man, Tony Stark did not type. There are times that he actually typed what he wanted to ask the AI chatbot, but a lot of the time Tony Stark actually used his voice to communicate with the AI chatbot.

In this case, I just have text.

Underneath the new ColdFusion AI features, they use LangChain4j. LangChain is an open-source framework for creating AI agents.

A while back, I subscribed to LangSmith and LangChain. LangChain is actually the name of an open-source organization. They're the ones that created the open framework.

LangChain actually has its own YouTube channel. A while back, they did a video on how to create a voice agent.

In their case, essentially what they did was have a voice-to-text engine that would convert that voice into text and then feed the text into an LLM.

The LLM would do its own thing, maybe do a search, call an API, and whatnot.

At the end, once the results are completed, then on the other end, it changes from text to voice.

So essentially, we can do a similar thing here.

This portion is done in ColdFusion, so that portion does not need to change. We just need to add something for voice-to-text.

Assuming that I have done that, I will use my voice to say something, feed the text into the back end, and then it does its existing features.

But then, when it's done, on the other end, just do text-to-voice, and there essentially you have a voice agent.

Michaela Light
That would be genius. And you could have a British accent for this voice agent that really would emulate the movie's Jarvis.

Absolutely.

So, anything else you wanted to show in the code, or we can get back to the interview part and do some wrap-up questions?

Monte Chan
Yes. So this is basically what I have for the demo.

And may I add that I will actually be presenting this same presentation at the ColdFusion Summit East. That will be on October 29th, I believe, in DC.

So I do intend to add maybe a little bit more than what I've shown here. What exactly more? You will need to come and find out.

Michaela Light
There you go.

Yes, I'll add the info on CF Summit East in Washington, DC. And that's a free event for people on the East Coast. Well, it's free for anyone in the world who wants to go to it, but it's most convenient for people on the East Coast of the US.

And it's a great event. And you'll get to meet not just Monte, but some other brilliant ColdFusion speakers, along with members from the Adobe ColdFusion development team. Some of them will be presenting.

So well worth going to. And certainly more convenient than Las Vegas for some people who can't get a travel budget to go to Las Vegas because people seem to think that's a naughty thing to do.

Well, some people think it is. I don't think it is. I mean, I went to Las Vegas this year for CF Summit West and I managed to avoid all the naughty things one might get up to in Las Vegas.

But I understand some people's managers raise their eyebrows when they hear that location.

So, if you can unshare your screen — same button. Fabulous. That way people can see both of us better.

And let's just talk a bit about how a CIO or CTO might view this Jarvis tool.

Does this help if you have compliance questions about code, or you're concerned about someone being promoted and not being able to look after the code base?

Monte Chan
Oh yes, absolutely.

Basically, when you ingest the code, you think about how you want this Jarvis to work.

If you want to include compliance-related information when you ingest the code, you just add the corresponding metadata.

So then when you do the Jarvis portion to actually do the semantic search, you have that metadata available for the search.

You just need to think about what specific information you want to include and include all of that in your metadata.

And then, of course, update the summary text to give a more complete description of what those chunks of code are doing.

Michaela Light
And some people's code bases are very sensitive and they maybe don't want them leaving the building that they're in.

Is there an option here that, as opposed to having another SaaS that does this kind of semantic search, with Jarvis it can all be done on local servers?

Monte Chan
Yes.

For example, in this case, I have the Qdrant database running locally. So you don't have to have something cloud-based.

And, of course, as far as the LLM is concerned, you can also use an open-source one. You don't have to use something cloud-based.

So basically, a lot of these can be localized. You don't have to share them with other people, so to speak, if you don't want to.

Michaela Light
And what about guardrails for that AI prompt? Could you add that in if you wanted to?

Monte Chan
Oh yes, absolutely.

When they put in the message, you can definitely put in some kind of guardrails to check the messages first before actually sending that to the semantic search or LLM, and so on and so forth.

Michaela Light
And if you're using those local models, my understanding is there's really no token cost. You've just got to have it running on a server in your organization.

Monte Chan
To my understanding, yes. I haven't tried that myself, but I believe some other people have tried that before.

Michaela Light
So it could be a good return on investment because instead of developers spending hours trying to find things, this could help you find useful things in the code much quicker.

And I think the other important return on investment is that you get to learn these AI features, and you might have uses for vector databases or RAG or the ColdFusion prompt/chatbot tags in your own app to do cool things.

So I think that's something to consider too.

So if folks are interested in trying this out, what are the next steps?

Monte Chan
Well, definitely, they would need to download ColdFusion Update 8. And then I can upload my current code base into my GitHub account.

Michaela Light
And what is your GitHub account?

Monte Chan
That's GitHub.com slash KnittingGuy. Yes, I knit.

Michaela Light
KnittingGuy with a K.

Monte Chan
Yes.

So you should be able to find a repo called something relating to Jarvis or something like that. Click on that and you will see the code base.

I will upload that after our podcast — I mean, this interview.

Michaela Light
Fabulous. And what was the biggest surprise you had when you were building this?

Monte Chan
How easy it is. ColdFusion features make things a lot easier.

Michaela Light
Is there anything you wish ColdFusion 2026 did differently on these AI features?

Monte Chan
Prior to dealing with these new AI features, I actually played with some AI stuff on my own, for example LangChain.

And I was actually quite pleasantly surprised that under the hood, the AI features are using, I believe, LangChain4j, because that's Java.

And in LangChain4j, it actually has a no-code builder for you to create an AI agent.

I was hoping that that would be somehow included in this as well.

Don't quote me on that, obviously. Ultimately, it's up to Adobe whether they want to release this no-code agent, no-code builder.

But I certainly hope that they would include that in one of the upcoming releases. That would be wonderful.

With that builder, not only can you create a no-code agent, but you can actually run it to see how that agent is running.

So let's say you want to see how well certain prompts behave. You can actually see the whole flow yourself. Quite interesting.

Michaela Light
That sounds very cool. I'll look forward to that.

So if you had to say just one sentence for someone listening about why they should try this out, what would you say?

Monte Chan
It is wonderful. It is helpful.

Michaela Light
I know that's more than one sentence, but I encourage people to indulge themselves with Jarvis and try this out, and learn about the new AI features in ColdFusion.

If people want to find you online, what are the best ways to do that?

Monte Chan
They can add me on Facebook, and they can also send me a message using Facebook Messenger.

But please let me know how you found me because nowadays there are lots of strangers who try to add me and don't say who they are.

Michaela Light
I think mention the word ColdFusion and CF Alive or something like that.

Monte Chan
Yeah, something like that.

Michaela Light
And you're Monte Chan on Facebook. I'll put that in the show notes.

And I'll put your email in there, though you say you prefer Facebook. You'll take emails or Facebook, but you're going to reply to Facebook a lot quicker.

And I'll put your LinkedIn(opens in new tab) and YouTube channel, Geek Talk, links on there as well, along with your GitHub.

So fabulous.

And I'm kind of curious. You've been doing ColdFusion for many years now. Why are you proud to use ColdFusion?

Monte Chan
I have also used other technologies, say, for example, PHP.

When doing the same thing in ColdFusion, ColdFusion just makes a lot of things a lot easier and a lot simpler. And that's why I just love it.

And more than that, the people within the ColdFusion community are just very nice.

I remember when I was a co-manager of a ColdFusion user group. When I tried to talk to, say, Ben Forta or Ben Nadel, a lot of big-name ColdFusion people, they were just so helpful.

And when I asked them if they could be a guest speaker for our user group, they were more than welcome to. They were more than nice and more than generous when they did the topics for us.

Absolutely fantastic. They're always helpful. They're always available for any type of questions. I just absolutely love that.

Michaela Light
And what would it take to make ColdFusion even more alive this year?

Monte Chan
Just more people showing up, more people talking to each other.

We all just do our little part to make ColdFusion more known to other people. And just share our expertise with each other, talk to each other about some of the things that we have learned.

Michaela Light
Yeah. I think that's a great idea.

And that could be done online in the ColdFusion Facebook group(opens in new tab) or on the ColdFusion Slack channel or various other online communities, or at CF Summit East or CF Summit West or CF Summit India or CFCamp in Europe or Into the Box conference.

So lots of conferences for ColdFusion.

Speaking of CF Summit East, what are you looking forward to at this year's CF Summit East?

Monte Chan
Honestly, I haven't looked at all the agenda, but I'm looking forward to attending the other sessions. Especially some that have to do with the database.

I believe Dave Ferguson did one at the ColdFusion Summit in Las Vegas. It was actually quite interesting.

I'm looking forward to attending one of his sessions over there if he's going to be there this year at Summit East.

Michaela Light
That's great. Well, thank you so much for coming on the podcast, Monte.

And good luck with your presentation at CF Summit East.

Monte Chan
Oh, thank you very much.

  • Facebook
  • Twitter
  • LinkedIn
Related Posts
  • 142 Moving to ColdFusion 2025 Cheers and Challenges with Charlie Arehart – Transcript
  • 142 Moving to ColdFusion 2025 Cheers and Challenges with Charlie Arehart
  • CIOs: If Your CF Developer Leaves Tomorrow, Can You Survive?
  • CEOs: Why Your ColdFusion App Can’t Scale (It’s Not the Technology)
  • CEO ColdFusion Modernization: The Growth Drag Hiding in Plain Sight
  • The ColdFusion Modernization Case a CIO Can Defend to the Board
  • Still on ColdFusion 2016, 2018, or 2021? Why “Keeping the Lights On” Is No Longer Safe
  • For CEOs, Legacy ColdFusion = M&A Valuation Risk

Filed Under: Transcript

← Previous Post 143 Semantic CF code search with JARVIS (No Arc Reactor Budget required) with Monte Chan
Next Post →

Primary Sidebar

Popular podcast episodes

  • Revealing ColdFusion 2021 – Rakshith Naresh
  • CF and Angular – Nolan Erck
  • Migrating legacy CFML – Nolan Erck
  • Adobe API manager – Brian Sappey
  • Improve your CFML code – Kai Koenig

CF Alive Best Practices Checklist

Modern ColdFusion development best practices that reduce stress, inefficiency, project lifecycle costs while simultaneously increasing project velocity and innovation.

Get your checklist

Top articles

  • CF Hosting (independent guide)
  • What is Adobe ColdFusion
  • Is Lucee CFML now better than ACF?
  • Is CF dead?
  • Learn CF (comprehensive list of resources)

Recent Posts

  • 143 Semantic CF code search with JARVIS (No Arc Reactor Budget required) with Monte Chan – Transcript
  • 143 Semantic CF code search with JARVIS (No Arc Reactor Budget required) with Monte Chan
  • 142 Moving to ColdFusion 2025 Cheers and Challenges with Charlie Arehart – Transcript
  • 142 Moving to ColdFusion 2025 Cheers and Challenges with Charlie Arehart
  • CIOs: If Your CF Developer Leaves Tomorrow, Can You Survive?

Categories

  • Adobe ColdFusion 11 and older
  • Adobe ColdFusion 2018
  • Adobe ColdFusion 2020 Beta
  • Adobe ColdFusion 2021
  • Adobe ColdFusion 2023
  • Adobe ColdFusion 2024
  • Adobe ColdFusion 2025
  • Adobe ColdFusion 2026
  • Adobe ColdFusion Developer week
  • Adobe ColdFusion Project Stratus
  • Adobe ColdFusion Summit
  • AWS
  • BoxLang
  • CF Alive
  • CF Alive Podcast
  • CF Camp
  • CF Tags
  • CF Vs. Other Languages
  • CFEclipse
  • CFML
  • CFML Open- Source
  • CFUnited
  • ColdBox
  • ColdFusion and other news
  • ColdFusion Community
  • ColdFusion Conference
  • ColdFusion Consulting
  • ColdFusion Developer
  • ColdFusion Development
  • ColdFusion Hosting
  • ColdFusion Maintenance
  • ColdFusion Performance Tuning
  • ColdFusion Projects
  • ColdFusion Roadmap
  • ColdFusion Security
  • ColdFusion Training
  • ColdFusion's AI
  • CommandBox
  • Docker
  • Fixinator
  • Frameworks
  • Fusebox
  • FusionReactor
  • IntoTheBox Conference
  • Java
  • JavaScript
  • JVM
  • Learn CFML
  • Learn ColdFusion
  • Legacy Code
  • Load Testing
  • Lucee
  • Mindmapping
  • MockBox
  • Modernize ColdFusion
  • Ortus Developer Week
  • Ortus Roadshow
  • Server Crash
  • Server Software
  • Server Tuning
  • SQL
  • Survey
  • Survey results
  • TestBox
  • Transcript
  • Uncategorized
  • Webinar
  • Women in Tech

TeraTech

  • About Us
  • Contact

Services

  • CF Coffee Call
  • Free assessment
  • Consulting
  • Crash
  • Development
  • Maintenance
  • Modernization
  • Security
  • Case Studies

Resources

  • CF Alive Book
  • CF Alive Podcast
    • Podcast Guest Schedule
  • TeraTech Blog
  • CF Alive resources
  • Modern CF e-course
  • CF Best Practices Checklist

Community

  • CF Alive
  • CF Inner Circle
  • CF Facebook Group

TeraTech Inc
451 Hungerford Drive Suite 119
Rockville, MD 20850

Tel : +1 (301) 424 3903
Fax: +1 (301) 762 8185

Follow us on Facebook Follow us on LinkedIn Follow us on Twitter Follow us on Pinterest Follow us on YouTube



Copyright © 1998–2026 TeraTech Inc. All rights Reserved. Privacy Policy.