Add symfony/ai-*-store recipes (#1503)

* Add recipes for Symfony AI store bridges (0.1)

Add 21 store bridge recipes that append configuration to ai.yaml
under the ai.store key using add-lines directive.

Stores: Azure Search, Cache, ChromaDB, ClickHouse, Cloudflare,
Elasticsearch, ManticoreSearch, MariaDB, Meilisearch, Milvus,
MongoDB, Neo4j, OpenSearch, Pinecone, Postgres, Qdrant, Redis,
Supabase, SurrealDB, Typesense, Weaviate

* Remove optional fields from AI store recipes

Only set required connection parameters, let users configure
optional fields like vector_field, dimensions, etc.

* Simplify AI store recipes to only required fields

Remove fields that have defaults (table, collection, index_name, etc.
default to the store name like 'default').

* Use separate YAML config files for AI store recipes

Switch from add-lines to copy-from-recipe with dedicated
config/packages/ai.yaml files for each store.

* Rename store YAML files to unique names

Use ai_<store>_store.yaml instead of ai.yaml to avoid conflicts
when multiple stores are installed.
This commit is contained in:
Oskar Stark
2025-12-29 09:22:54 +01:00
committed by GitHub
parent c3f82df25f
commit 2dfcf7a1ba
42 changed files with 295 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
ai:
store:
azuresearch:
default:
endpoint: '%env(AZURE_SEARCH_ENDPOINT)%'
api_key: '%env(AZURE_SEARCH_API_KEY)%'
api_version: '2024-07-01'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "AZURE_SEARCH_ENDPOINT=",
"#2": "AZURE_SEARCH_API_KEY="
}
}

View File

@@ -0,0 +1,5 @@
ai:
store:
cache:
default:
service: 'cache.app'

View File

@@ -0,0 +1,5 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}

View File

@@ -0,0 +1,5 @@
ai:
store:
chromadb:
default:
collection: 'my_collection'

View File

@@ -0,0 +1,5 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
clickhouse:
default:
dsn: '%env(CLICKHOUSE_DSN)%'
database: 'default'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "CLICKHOUSE_DSN="
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
cloudflare:
default:
account_id: '%env(CLOUDFLARE_ACCOUNT_ID)%'
api_key: '%env(CLOUDFLARE_API_KEY)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "CLOUDFLARE_ACCOUNT_ID=",
"#2": "CLOUDFLARE_API_KEY="
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
elasticsearch:
default:
hosts:
- '%env(ELASTICSEARCH_HOST)%'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "ELASTICSEARCH_HOST=http://localhost:9200"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
manticoresearch:
default:
host: '%env(MANTICORESEARCH_HOST)%'
port: '%env(int:MANTICORESEARCH_PORT)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "MANTICORESEARCH_HOST=localhost",
"#2": "MANTICORESEARCH_PORT=9308"
}
}

View File

@@ -0,0 +1,5 @@
ai:
store:
mariadb:
default:
connection: 'default'

View File

@@ -0,0 +1,5 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
meilisearch:
default:
host: '%env(MEILISEARCH_HOST)%'
api_key: '%env(MEILISEARCH_API_KEY)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "MEILISEARCH_HOST=http://localhost:7700",
"#2": "MEILISEARCH_API_KEY="
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
milvus:
default:
host: '%env(MILVUS_HOST)%'
port: '%env(int:MILVUS_PORT)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "MILVUS_HOST=localhost",
"#2": "MILVUS_PORT=19530"
}
}

View File

@@ -0,0 +1,7 @@
ai:
store:
mongodb:
default:
uri: '%env(MONGODB_URI)%'
database: 'my_database'
index_name: 'vector_index'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "MONGODB_URI=mongodb://localhost:27017"
}
}

View File

@@ -0,0 +1,7 @@
ai:
store:
neo4j:
default:
uri: '%env(NEO4J_URI)%'
username: '%env(NEO4J_USERNAME)%'
password: '%env(NEO4J_PASSWORD)%'

View File

@@ -0,0 +1,10 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "NEO4J_URI=bolt://localhost:7687",
"#2": "NEO4J_USERNAME=neo4j",
"#3": "NEO4J_PASSWORD="
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
opensearch:
default:
hosts:
- '%env(OPENSEARCH_HOST)%'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "OPENSEARCH_HOST=http://localhost:9200"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
pinecone:
default:
api_key: '%env(PINECONE_API_KEY)%'
index_host: '%env(PINECONE_INDEX_HOST)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "PINECONE_API_KEY=",
"#2": "PINECONE_INDEX_HOST="
}
}

View File

@@ -0,0 +1,5 @@
ai:
store:
postgres:
default:
connection: 'default'

View File

@@ -0,0 +1,5 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
qdrant:
default:
host: '%env(QDRANT_HOST)%'
port: '%env(int:QDRANT_PORT)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "QDRANT_HOST=localhost",
"#2": "QDRANT_PORT=6333"
}
}

View File

@@ -0,0 +1,5 @@
ai:
store:
redis:
default:
dsn: '%env(REDIS_DSN)%'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "REDIS_DSN=redis://localhost:6379"
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
supabase:
default:
url: '%env(SUPABASE_URL)%'
api_key: '%env(SUPABASE_API_KEY)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "SUPABASE_URL=",
"#2": "SUPABASE_API_KEY="
}
}

View File

@@ -0,0 +1,7 @@
ai:
store:
surrealdb:
default:
dsn: '%env(SURREALDB_DSN)%'
namespace: 'default'
database: 'default'

View File

@@ -0,0 +1,8 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "SURREALDB_DSN=http://localhost:8000"
}
}

View File

@@ -0,0 +1,7 @@
ai:
store:
typesense:
default:
host: '%env(TYPESENSE_HOST)%'
port: '%env(int:TYPESENSE_PORT)%'
api_key: '%env(TYPESENSE_API_KEY)%'

View File

@@ -0,0 +1,10 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "TYPESENSE_HOST=localhost",
"#2": "TYPESENSE_PORT=8108",
"#3": "TYPESENSE_API_KEY="
}
}

View File

@@ -0,0 +1,6 @@
ai:
store:
weaviate:
default:
host: '%env(WEAVIATE_HOST)%'
api_key: '%env(WEAVIATE_API_KEY)%'

View File

@@ -0,0 +1,9 @@
{
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "WEAVIATE_HOST=http://localhost:8080",
"#2": "WEAVIATE_API_KEY="
}
}