Make the following request:
curl -X POST http://localhost:8001/routes/{routeName|Id}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--data '
{
"name": "ai-semantic-cache",
"config": {
"embeddings": {
"auth": {
"header_name": "Authorization",
"header_value": "Bearer MISTRAL_API_KEY"
},
"model": {
"provider": "mistral",
"name": "mistral-embed",
"options": {
"upstream_url": "https://api.mistral.ai/v1/embeddings"
}
}
},
"vectordb": {
"dimensions": 1024,
"distance_metric": "cosine",
"strategy": "redis",
"threshold": 0.1,
"redis": {
"host": "redis-stack.redis.svc.cluster.local",
"port": 6379
}
}
}
}
'
Replace ROUTE_NAME|ID
with the id
or name
of the route that this plugin configuration will target.
Make the following request, substituting your own access token, region, control plane ID, and route ID:
curl -X POST \
https://{us|eu}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/routes/{routeId}/plugins \
--header "accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer TOKEN" \
--data '{"name":"ai-semantic-cache","config":{"embeddings":{"auth":{"header_name":"Authorization","header_value":"Bearer MISTRAL_API_KEY"},"model":{"provider":"mistral","name":"mistral-embed","options":{"upstream_url":"https://api.mistral.ai/v1/embeddings"}}},"vectordb":{"dimensions":1024,"distance_metric":"cosine","strategy":"redis","threshold":0.1,"redis":{"host":"redis-stack.redis.svc.cluster.local","port":6379}}}}'
See the Konnect API reference to learn about region-specific URLs and personal access tokens.
First, create a KongPlugin
resource:
echo "
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: ai-semantic-cache-example
plugin: ai-semantic-cache
config:
embeddings:
auth:
header_name: Authorization
header_value: Bearer MISTRAL_API_KEY
model:
provider: mistral
name: mistral-embed
options:
upstream_url: https://api.mistral.ai/v1/embeddings
vectordb:
dimensions: 1024
distance_metric: cosine
strategy: redis
threshold: 0.1
redis:
host: redis-stack.redis.svc.cluster.local
port: 6379
" | kubectl apply -f -
Next, apply the KongPlugin
resource to an ingress by annotating the ingress
as follows:
kubectl annotate ingress INGRESS_NAME konghq.com/plugins=ai-semantic-cache-example
Replace INGRESS_NAME
with the name of the ingress that this plugin configuration will target.
You can see your available ingresses by running kubectl get ingress
.
Note:
The KongPlugin resource only needs to be defined once
and can be applied to any service, consumer, or route in the namespace. If you
want the plugin to be available cluster-wide, create the resource as a
KongClusterPlugin
instead of KongPlugin
.
Add this section to your declarative configuration file:
plugins:
- name: ai-semantic-cache
route: ROUTE_NAME|ID
config:
embeddings:
auth:
header_name: Authorization
header_value: Bearer MISTRAL_API_KEY
model:
provider: mistral
name: mistral-embed
options:
upstream_url: https://api.mistral.ai/v1/embeddings
vectordb:
dimensions: 1024
distance_metric: cosine
strategy: redis
threshold: 0.1
redis:
host: redis-stack.redis.svc.cluster.local
port: 6379
Replace ROUTE_NAME|ID
with the id
or name
of the route that this plugin configuration will target.
Prerequisite: Configure your Personal Access Token
terraform {
required_providers {
konnect = {
source = "kong/konnect"
}
}
}
provider "konnect" {
personal_access_token = "kpat_YOUR_TOKEN"
server_url = "https://us.api.konghq.com/"
}
Add the following to your Terraform configuration to create a Konnect Gateway Plugin:
resource "konnect_gateway_plugin_ai_semantic_cache" "my_ai_semantic_cache" {
enabled = true
config = {
embeddings = {
auth = {
header_name = "Authorization"
header_value = "Bearer MISTRAL_API_KEY"
}
model = {
provider = "mistral"
name = "mistral-embed"
options = {
upstream_url = "https://api.mistral.ai/v1/embeddings"
}
}
}
vectordb = {
dimensions = 1024
distance_metric = "cosine"
strategy = "redis"
threshold = 0.1
redis = {
host = "redis-stack.redis.svc.cluster.local"
port = 6379
}
}
}
control_plane_id = konnect_gateway_control_plane.my_konnect_cp.id
route = {
id = konnect_gateway_route.my_route.id
}
}