Skip to content

Commit 4b0c8b3

Browse files
committed
fix: Incorrect order when Advisors have the same order
Signed-off-by: YunKui Lu <[email protected]>
1 parent 694bb50 commit 4b0c8b3

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/DefaultAroundAdvisorChain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public Builder pushAll(List<? extends Advisor> advisors) {
192192
.toList();
193193

194194
if (!CollectionUtils.isEmpty(callAroundAdvisorList)) {
195-
callAroundAdvisorList.forEach(this.callAdvisors::push);
195+
this.callAdvisors.addAll(callAroundAdvisorList);
196196
}
197197

198198
List<StreamAdvisor> streamAroundAdvisorList = advisors.stream()
@@ -201,7 +201,7 @@ public Builder pushAll(List<? extends Advisor> advisors) {
201201
.toList();
202202

203203
if (!CollectionUtils.isEmpty(streamAroundAdvisorList)) {
204-
streamAroundAdvisorList.forEach(this.streamAdvisors::push);
204+
this.streamAdvisors.addAll(streamAroundAdvisorList);
205205
}
206206

207207
this.reOrder();

spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/DefaultAroundAdvisorChainTests.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,42 @@ void getStreamAdvisors() {
125125
assertThat(chain.getStreamAdvisors()).containsExactlyInAnyOrder(advisors.toArray(new StreamAdvisor[0]));
126126
}
127127

128+
@Test
129+
void testOrder(){
130+
TestOrderAdvisor advisor1 = new TestOrderAdvisor("advisor1", 1);
131+
TestOrderAdvisor advisor21 = new TestOrderAdvisor("advisor2_1", 2);
132+
TestOrderAdvisor advisor22 = new TestOrderAdvisor("advisor2_2", 2);
133+
TestOrderAdvisor advisor3 = new TestOrderAdvisor("advisor3", 3);
134+
135+
var advisors = List.of(advisor3, advisor1, advisor21, advisor22);
136+
137+
DefaultAroundAdvisorChain chain = DefaultAroundAdvisorChain.builder(ObservationRegistry.NOOP)
138+
.pushAll(advisors)
139+
.build();
140+
141+
assertThat(chain.getStreamAdvisors()).containsExactly(advisor1, advisor21, advisor22, advisor3);
142+
assertThat(chain.getCallAdvisors()).containsExactly(advisor1, advisor21, advisor22, advisor3);
143+
}
144+
145+
private record TestOrderAdvisor(String name, int order) implements CallAdvisor, StreamAdvisor {
146+
@Override
147+
public String getName() {
148+
return name;
149+
}
150+
151+
@Override
152+
public int getOrder() {
153+
return order;
154+
}
155+
156+
@Override
157+
public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain callAdvisorChain) {
158+
return null;
159+
}
160+
161+
@Override
162+
public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest, StreamAdvisorChain streamAdvisorChain) {
163+
return null;
164+
}
165+
}
128166
}

0 commit comments

Comments
 (0)