Skip to content

Commit d14504d

Browse files
committed
feature #1171 [Chat] Split message store bridges into dedicated packages (OskarStark)
This PR was squashed before being merged into the main branch. Discussion ---------- [Chat] Split message store bridges into dedicated packages | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | Docs? | no | Issues | -- | License | MIT Commits ------- 373cb36 [Chat] Split message store bridges into dedicated packages
2 parents 48cc7a9 + 373cb36 commit d14504d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1460
-218
lines changed

.github/workflows/build-matrix.yaml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ on:
3030
platform-bridges-include:
3131
description: 'Platform bridges includes for test matrix'
3232
value: ${{ jobs.matrix.outputs.platform-bridges-include }}
33+
message-store-bridges:
34+
description: 'List of message store bridges'
35+
value: ${{ jobs.matrix.outputs.message-store-bridges }}
36+
message-store-bridges-include:
37+
description: 'Message store bridge includes for test matrix'
38+
value: ${{ jobs.matrix.outputs.message-store-bridges-include }}
3339

3440
jobs:
3541
matrix:
@@ -45,6 +51,8 @@ jobs:
4551
tool-bridges-include: ${{ steps.set-matrix.outputs.tool-bridges-include }}
4652
platform-bridges: ${{ steps.set-matrix.outputs.platform-bridges }}
4753
platform-bridges-include: ${{ steps.set-matrix.outputs.platform-bridges-include }}
54+
message-store-bridges: ${{ steps.set-matrix.outputs.message-store-bridges }}
55+
message-store-bridges-include: ${{ steps.set-matrix.outputs.message-store-bridges-include }}
4856
steps:
4957
- name: Checkout
5058
uses: actions/checkout@v6
@@ -78,9 +86,11 @@ jobs:
7886
| jq -R -s -c 'split("\n") | map(select(length > 0)) | map({component: "agent", type: "Tool", bridge: .})')
7987
PLATFORM_BRIDGES=$(ls -1 src/platform/src/Bridge/ | sort \
8088
| jq -R -s -c 'split("\n") | map(select(length > 0)) | map({component: "platform", type: "Platform", bridge: .})')
89+
MESSAGE_STORE_BRIDGES=$(ls -1 src/chat/src/Bridge/ | sort \
90+
| jq -R -s -c 'split("\n") | map(select(length > 0)) | map({component: "chat", type: "Message Store", bridge: .})')
8191
8292
# Combined bridges (for code-quality)
83-
BRIDGES=$(jq -n -c --argjson store "$STORE_BRIDGES" --argjson tool "$TOOL_BRIDGES" --argjson platform "$PLATFORM_BRIDGES" '$store + $tool + $platform')
93+
BRIDGES=$(jq -n -c --argjson store "$STORE_BRIDGES" --argjson tool "$TOOL_BRIDGES" --argjson platform "$PLATFORM_BRIDGES" --argjson messageStore "$MESSAGE_STORE_BRIDGES" '$store + $tool + $platform + $messageStore')
8494
echo "bridges=$BRIDGES" >> $GITHUB_OUTPUT
8595
8696
# Individual bridges without type (for tests)
@@ -123,11 +133,21 @@ jobs:
123133
')
124134
echo "packages-include=$PACKAGES_INCLUDE" >> $GITHUB_OUTPUT
125135
136+
# Message store bridges (for tests)
137+
echo "message-store-bridges=$(echo "$MESSAGE_STORE_BRIDGES" | jq -c 'map(del(.type))')" >> $GITHUB_OUTPUT
138+
139+
MESSAGE_STORE_BRIDGES_INCLUDE=$(echo "$MESSAGE_STORE_BRIDGES" | jq -c '
140+
. as $bridges |
141+
($bridges | map({bridge: {component: .component, bridge: .bridge}, "php-version": "8.2", "dependency-version": "lowest"})) +
142+
($bridges | map({bridge: {component: .component, bridge: .bridge}, "php-version": "8.2", "dependency-version": "highest"})) +
143+
($bridges | map({bridge: {component: .component, bridge: .bridge}, "php-version": "8.5", "dependency-version": "highest"}))
144+
')
145+
echo "message-store-bridges-include=$MESSAGE_STORE_BRIDGES_INCLUDE" >> $GITHUB_OUTPUT
146+
126147
# Pretty print
127148
echo "::group::Packages"
128149
echo "$PACKAGES" | jq .
129150
echo "::endgroup::"
130151
echo "::group::Bridges"
131152
echo "$BRIDGES" | jq .
132153
echo "::endgroup::"
133-

.github/workflows/tests.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,40 @@ jobs:
103103
- name: Run PHPUnit
104104
run: cd src/${{ matrix.bridge.component }}/src/Bridge/${{ matrix.bridge.bridge }} && vendor/bin/phpunit
105105

106+
message-store-bridges:
107+
name: Unit / Message Store / ${{ matrix.bridge.bridge }} / PHP ${{ matrix.php-version }}${{ matrix.dependency-version == 'lowest' && ' / lowest' || '' }}
108+
needs: matrix
109+
runs-on: ubuntu-latest
110+
strategy:
111+
fail-fast: false
112+
matrix:
113+
include: ${{ fromJson(needs.matrix.outputs.message-store-bridges-include) }}
114+
115+
steps:
116+
- name: Checkout
117+
uses: actions/checkout@v6
118+
119+
- name: Configure environment
120+
run: |
121+
echo COLUMNS=120 >> $GITHUB_ENV
122+
[ 'lowest' = '${{ matrix.dependency-version }}' ] && echo SYMFONY_DEPRECATIONS_HELPER=weak >> $GITHUB_ENV || true
123+
124+
- name: Setup PHP
125+
uses: shivammathur/setup-php@v2
126+
with:
127+
php-version: ${{ matrix.php-version }}
128+
tools: flex
129+
extensions: ${{ env.REQUIRED_PHP_EXTENSIONS }}
130+
131+
- name: Install dependencies
132+
uses: ramsey/composer-install@v3
133+
with:
134+
working-directory: src/${{ matrix.bridge.component }}/src/Bridge/${{ matrix.bridge.bridge }}
135+
dependency-versions: ${{ matrix.dependency-version }}
136+
137+
- name: Run PHPUnit
138+
run: cd src/${{ matrix.bridge.component }}/src/Bridge/${{ matrix.bridge.bridge }} && vendor/bin/phpunit
139+
106140
tool-bridges:
107141
name: Unit / Tool / ${{ matrix.bridge.bridge }} / PHP ${{ matrix.php-version }}${{ matrix.dependency-version == 'lowest' && ' / lowest' || '' }}
108142
needs: matrix

.github/workflows/validation.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ jobs:
3232
store: ${{ steps.filter.outputs.store }}
3333
tool: ${{ steps.filter.outputs.tool }}
3434
platform: ${{ steps.filter.outputs.platform }}
35+
message-store: ${{ steps.filter.outputs.message-store }}
3536
steps:
3637
- name: Checkout
3738
uses: actions/checkout@v6
@@ -47,6 +48,8 @@ jobs:
4748
- 'src/agent/src/Bridge/**'
4849
platform:
4950
- 'src/platform/src/Bridge/**'
51+
message-store:
52+
- 'src/chat/src/Bridge/**'
5053
5154
validate_stores:
5255
name: Store Bridges
@@ -84,6 +87,24 @@ jobs:
8487
- name: Validate tool bridges have required files
8588
run: .github/scripts/validate-bridge-files.sh tool agent
8689

90+
validate_message_stores:
91+
name: Message Store Bridges
92+
needs: changes
93+
if: needs.changes.outputs.message-store == 'true'
94+
runs-on: ubuntu-latest
95+
steps:
96+
- name: Checkout
97+
uses: actions/checkout@v6
98+
99+
- name: Validate message store bridge naming conventions
100+
run: .github/scripts/validate-bridge-naming.sh message-store chat
101+
102+
- name: Validate message store bridges are in splitsh.json
103+
run: .github/scripts/validate-bridge-splitsh.sh message-store chat
104+
105+
- name: Validate message store bridges have required files
106+
run: .github/scripts/validate-bridge-files.sh message-store chat
107+
87108
validate_platforms:
88109
name: Platform Bridges
89110
needs: changes

examples/composer.json

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,42 @@
1919
{
2020
"type": "path",
2121
"url": "../src/store"
22+
},
23+
{
24+
"type": "path",
25+
"url": "../src/chat/src/Bridge/Cache"
26+
},
27+
{
28+
"type": "path",
29+
"url": "../src/chat/src/Bridge/Cloudflare"
30+
},
31+
{
32+
"type": "path",
33+
"url": "../src/chat/src/Bridge/Doctrine"
34+
},
35+
{
36+
"type": "path",
37+
"url": "../src/chat/src/Bridge/Session"
38+
},
39+
{
40+
"type": "path",
41+
"url": "../src/chat/src/Bridge/Meilisearch"
42+
},
43+
{
44+
"type": "path",
45+
"url": "../src/chat/src/Bridge/MongoDb"
46+
},
47+
{
48+
"type": "path",
49+
"url": "../src/chat/src/Bridge/Pogocache"
50+
},
51+
{
52+
"type": "path",
53+
"url": "../src/chat/src/Bridge/Redis"
54+
},
55+
{
56+
"type": "path",
57+
"url": "../src/chat/src/Bridge/SurrealDb"
2258
}
2359
],
2460
"require": {
@@ -32,29 +68,35 @@
3268
"symfony/ai-azure-search-store": "@dev",
3369
"symfony/ai-bedrock-platform": "@dev",
3470
"symfony/ai-brave-tool": "@dev",
71+
"symfony/ai-cache-message-store": "@dev",
3572
"symfony/ai-cache-store": "@dev",
3673
"symfony/ai-cartesia-platform": "@dev",
3774
"symfony/ai-cerebras-platform": "@dev",
3875
"symfony/ai-chat": "@dev",
3976
"symfony/ai-chroma-db-store": "@dev",
4077
"symfony/ai-click-house-store": "@dev",
4178
"symfony/ai-clock-tool": "@dev",
79+
"symfony/ai-cloudflare-message-store": "@dev",
4280
"symfony/ai-cloudflare-store": "@dev",
4381
"symfony/ai-decart-platform": "@dev",
4482
"symfony/ai-deep-seek-platform": "@dev",
83+
"symfony/ai-doctrine-message-store": "@dev",
4584
"symfony/ai-docker-model-runner-platform": "@dev",
4685
"symfony/ai-elasticsearch-store": "@dev",
4786
"symfony/ai-eleven-labs-platform": "@dev",
4887
"symfony/ai-gemini-platform": "@dev",
4988
"symfony/ai-generic-platform": "@dev",
89+
"symfony/ai-session-message-store": "@dev",
5090
"symfony/ai-hugging-face-platform": "@dev",
5191
"symfony/ai-lm-studio-platform": "@dev",
5292
"symfony/ai-manticore-search-store": "@dev",
5393
"symfony/ai-maria-db-store": "@dev",
94+
"symfony/ai-meilisearch-message-store": "@dev",
5495
"symfony/ai-meilisearch-store": "@dev",
5596
"symfony/ai-meta-platform": "@dev",
5697
"symfony/ai-milvus-store": "@dev",
5798
"symfony/ai-mistral-platform": "@dev",
99+
"symfony/ai-mongo-db-message-store": "@dev",
58100
"symfony/ai-mongo-db-store": "@dev",
59101
"symfony/ai-neo4j-store": "@dev",
60102
"symfony/ai-ollama-platform": "@dev",
@@ -64,14 +106,17 @@
64106
"symfony/ai-open-search-store": "@dev",
65107
"symfony/ai-perplexity-platform": "@dev",
66108
"symfony/ai-pinecone-store": "@dev",
109+
"symfony/ai-pogocache-message-store": "@dev",
67110
"symfony/ai-postgres-store": "@dev",
68111
"symfony/ai-qdrant-store": "@dev",
112+
"symfony/ai-redis-message-store": "@dev",
69113
"symfony/ai-redis-store": "@dev",
70114
"symfony/ai-scaleway-platform": "@dev",
71115
"symfony/ai-scraper-tool": "@dev",
72116
"symfony/ai-serp-api-tool": "@dev",
73117
"symfony/ai-similarity-search-tool": "@dev",
74118
"symfony/ai-supabase-store": "@dev",
119+
"symfony/ai-surreal-db-message-store": "@dev",
75120
"symfony/ai-surreal-db-store": "@dev",
76121
"symfony/ai-tavily-tool": "@dev",
77122
"symfony/ai-transformers-php-platform": "@dev",

splitsh.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,18 @@
1616
"ai-youtube-tool": "src/agent/src/Bridge/Youtube",
1717
"ai-wikipedia-tool": "src/agent/src/Bridge/Wikipedia",
1818
"ai-bundle": "src/ai-bundle",
19-
"ai-chat": "src/chat",
19+
"ai-chat": {
20+
"prefixes": [{ "from": "src/chat", "to": "", "excludes": ["src/Bridge"] }]
21+
},
22+
"ai-cache-message-store": "src/chat/src/Bridge/Cache",
23+
"ai-cloudflare-message-store": "src/chat/src/Bridge/Cloudflare",
24+
"ai-doctrine-message-store": "src/chat/src/Bridge/Doctrine",
25+
"ai-session-message-store": "src/chat/src/Bridge/Session",
26+
"ai-meilisearch-message-store": "src/chat/src/Bridge/Meilisearch",
27+
"ai-mongo-db-message-store": "src/chat/src/Bridge/MongoDb",
28+
"ai-pogocache-message-store": "src/chat/src/Bridge/Pogocache",
29+
"ai-redis-message-store": "src/chat/src/Bridge/Redis",
30+
"ai-surreal-db-message-store": "src/chat/src/Bridge/SurrealDb",
2031
"mcp-bundle": "src/mcp-bundle",
2132
"ai-platform": {
2233
"prefixes": [{ "from": "src/platform", "to": "", "excludes": ["src/Bridge"] }]

src/ai-bundle/composer.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,44 @@
33
"description": "Integration bundle for Symfony AI components",
44
"license": "MIT",
55
"type": "symfony-bundle",
6+
"repositories": [
7+
{
8+
"type": "path",
9+
"url": "../chat/src/Bridge/Cache"
10+
},
11+
{
12+
"type": "path",
13+
"url": "../chat/src/Bridge/Cloudflare"
14+
},
15+
{
16+
"type": "path",
17+
"url": "../chat/src/Bridge/Doctrine"
18+
},
19+
{
20+
"type": "path",
21+
"url": "../chat/src/Bridge/Meilisearch"
22+
},
23+
{
24+
"type": "path",
25+
"url": "../chat/src/Bridge/MongoDb"
26+
},
27+
{
28+
"type": "path",
29+
"url": "../chat/src/Bridge/Pogocache"
30+
},
31+
{
32+
"type": "path",
33+
"url": "../chat/src/Bridge/Redis"
34+
},
35+
{
36+
"type": "path",
37+
"url": "../chat/src/Bridge/Session"
38+
},
39+
{
40+
"type": "path",
41+
"url": "../chat/src/Bridge/SurrealDb"
42+
}
43+
],
644
"authors": [
745
{
846
"name": "Christopher Hertel",
@@ -41,27 +79,33 @@
4179
"symfony/ai-azure-platform": "@dev",
4280
"symfony/ai-azure-search-store": "@dev",
4381
"symfony/ai-bedrock-platform": "@dev",
82+
"symfony/ai-cache-message-store": "@dev",
4483
"symfony/ai-cache-store": "@dev",
4584
"symfony/ai-cartesia-platform": "@dev",
4685
"symfony/ai-cerebras-platform": "@dev",
4786
"symfony/ai-chroma-db-store": "@dev",
4887
"symfony/ai-click-house-store": "@dev",
88+
"symfony/ai-cloudflare-message-store": "@dev",
4989
"symfony/ai-cloudflare-store": "@dev",
5090
"symfony/ai-decart-platform": "@dev",
5191
"symfony/ai-deep-seek-platform": "@dev",
5292
"symfony/ai-docker-model-runner-platform": "@dev",
93+
"symfony/ai-doctrine-message-store": "@dev",
5394
"symfony/ai-eleven-labs-platform": "@dev",
5495
"symfony/ai-elasticsearch-store": "@dev",
5596
"symfony/ai-gemini-platform": "@dev",
5697
"symfony/ai-generic-platform": "@dev",
98+
"symfony/ai-session-message-store": "@dev",
5799
"symfony/ai-hugging-face-platform": "@dev",
58100
"symfony/ai-lm-studio-platform": "@dev",
59101
"symfony/ai-manticore-search-store": "@dev",
60102
"symfony/ai-maria-db-store": "@dev",
103+
"symfony/ai-meilisearch-message-store": "@dev",
61104
"symfony/ai-meilisearch-store": "@dev",
62105
"symfony/ai-meta-platform": "@dev",
63106
"symfony/ai-milvus-store": "@dev",
64107
"symfony/ai-mistral-platform": "@dev",
108+
"symfony/ai-mongo-db-message-store": "@dev",
65109
"symfony/ai-mongo-db-store": "@dev",
66110
"symfony/ai-neo4j-store": "@dev",
67111
"symfony/ai-ollama-platform": "@dev",
@@ -70,12 +114,15 @@
70114
"symfony/ai-open-search-store": "@dev",
71115
"symfony/ai-perplexity-platform": "@dev",
72116
"symfony/ai-pinecone-store": "@dev",
117+
"symfony/ai-pogocache-message-store": "@dev",
73118
"symfony/ai-postgres-store": "@dev",
74119
"symfony/ai-qdrant-store": "@dev",
120+
"symfony/ai-redis-message-store": "@dev",
75121
"symfony/ai-redis-store": "@dev",
76122
"symfony/ai-replicate-platform": "@dev",
77123
"symfony/ai-scaleway-platform": "@dev",
78124
"symfony/ai-supabase-store": "@dev",
125+
"symfony/ai-surreal-db-message-store": "@dev",
79126
"symfony/ai-surreal-db-store": "@dev",
80127
"symfony/ai-transformers-php-platform": "@dev",
81128
"symfony/ai-typesense-store": "@dev",

src/chat/composer.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,14 @@
2929
"symfony/ai-platform": "@dev"
3030
},
3131
"require-dev": {
32-
"ext-redis": "*",
33-
"doctrine/dbal": "^3.3|^4.0",
34-
"mongodb/mongodb": "^1.21|^2.0",
3532
"phpstan/phpstan": "^2.1",
3633
"phpstan/phpstan-strict-rules": "^2.0",
3734
"phpunit/phpunit": "^11.5.46",
38-
"psr/cache": "^3.0",
3935
"symfony/clock": "^7.3|^8.0",
4036
"symfony/console": "^7.3|^8.0",
4137
"symfony/dependency-injection": "^7.3|^8.0",
42-
"symfony/http-foundation": "^7.3|^8.0",
4338
"symfony/serializer": "^7.3|^8.0"
4439
},
45-
"conflict": {
46-
"mongodb/mongodb": "<1.21"
47-
},
4840
"minimum-stability": "dev",
4941
"autoload": {
5042
"psr-4": {

0 commit comments

Comments
 (0)