This example demonstrates how to create embeddings for a document and queries using a local AI model and then calculate their similarity.
#include "docwire.h"
#include "plain_text_exporter.h"
#include <iostream>
#include <vector>
#include <string>
#include <filesystem>
int main(int argc, char* argv[])
{
try
{
std::vector<message_ptr> passage_msgs;
ensure(passage_msgs.size()) == 1;
ensure(passage_msgs[0]->is<ai::embedding>()) ==
true;
ensure(passage_embedding.values.size()) == 384;
std::vector<message_ptr> similar_query_msgs;
ensure(similar_query_msgs.size()) == 1;
ensure(similar_query_msgs[0]->is<ai::embedding>()) ==
true;
auto similar_query_embedding = similar_query_msgs[0]->get<
ai::embedding>();
std::vector<message_ptr> partial_query_msgs;
ensure(partial_query_msgs.size()) == 1;
ensure(partial_query_msgs[0]->is<ai::embedding>()) ==
true;
auto partial_query_embedding = partial_query_msgs[0]->get<
ai::embedding>();
std::vector<message_ptr> dissimilar_query_msgs;
ensure(dissimilar_query_msgs.size()) == 1;
ensure(dissimilar_query_msgs[0]->is<ai::embedding>()) ==
true;
auto dissimilar_query_embedding = dissimilar_query_msgs[0]->get<
ai::embedding>();
double sim =
cosine_similarity(passage_embedding.values, similar_query_embedding.values);
double partial_sim =
cosine_similarity(passage_embedding.values, partial_query_embedding.values);
double dissim =
cosine_similarity(passage_embedding.values, dissimilar_query_embedding.values);
}
catch (const std::exception& e)
{
return 1;
}
return 0;
}
Embeds a passage (document chunk) using the local AI model's default passage prefix....
Embeds a search query (search input) using the local AI model's default query prefix.
Content type detection chain element.
A utility for creating expressive, exception-throwing assertions in a fluent style.
Exports data to plain text format.
std::string diagnostic_message(const std::exception &e)
Generates a diagnostic message for the given nested exceptions chain.
The main namespace for the DocWire SDK.
double cosine_similarity(const std::vector< double > &a, const std::vector< double > &b)
Calculates the cosine similarity between two vectors.
Wrapper for a MIME type string.