From b999dd575012005cc94776338264b7c3685b594a Mon Sep 17 00:00:00 2001 From: peachisai <2581009893@qq.com> Date: Sun, 15 Mar 2026 22:53:45 +0800 Subject: [PATCH 1/3] Fix the logic that was failing to record TTFR --- .../apm/plugin/spring/ai/v1/ChatModelStreamInterceptor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-ai-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/ai/v1/ChatModelStreamInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-ai-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/ai/v1/ChatModelStreamInterceptor.java index 9abb852187..e0c11c32ec 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-ai-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/ai/v1/ChatModelStreamInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-ai-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/ai/v1/ChatModelStreamInterceptor.java @@ -63,6 +63,8 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr return; } + ContextManager.getRuntimeContext().put(Constants.SPRING_AI_STREAM_START_TIME, System.currentTimeMillis()); + ChatOptions chatOptions = prompt.getOptions(); if (chatOptions == null) { return; @@ -72,8 +74,6 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr Tags.GEN_AI_TEMPERATURE.set(span, String.valueOf(chatOptions.getTemperature())); Tags.GEN_AI_TOP_K.set(span, String.valueOf(chatOptions.getTopK())); Tags.GEN_AI_TOP_P.set(span, String.valueOf(chatOptions.getTopP())); - - ContextManager.getRuntimeContext().put(Constants.SPRING_AI_STREAM_START_TIME, System.currentTimeMillis()); } @Override From 1fdeaade48991c924cfbc2f3c2bb4c567ea80e47 Mon Sep 17 00:00:00 2001 From: peachisai <2581009893@qq.com> Date: Sun, 15 Mar 2026 22:54:52 +0800 Subject: [PATCH 2/3] fix changes --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index e49c314aab..99a77c9031 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Release Notes. * Add Spring AI 1.x plugin and GenAI layer. * Fix httpclient-5.x plugin injecting sw8 propagation headers into ClickHouse HTTP requests (port 8123), causing HTTP 400. Add `PROPAGATION_EXCLUDE_PORTS` config to skip tracing (including header injection) for specified ports in the classic client interceptor. * Add Spring RabbitMQ 2.x - 4.x plugin. +* Fix the logic that was failing to record Time to First Response. All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/249?closed=1) From 84aa156b4d930c2a9949d0c2a180c2a52054843e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Sun, 15 Mar 2026 23:05:14 +0800 Subject: [PATCH 3/3] Apply suggestion from @wu-sheng --- CHANGES.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 99a77c9031..e49c314aab 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,7 +9,6 @@ Release Notes. * Add Spring AI 1.x plugin and GenAI layer. * Fix httpclient-5.x plugin injecting sw8 propagation headers into ClickHouse HTTP requests (port 8123), causing HTTP 400. Add `PROPAGATION_EXCLUDE_PORTS` config to skip tracing (including header injection) for specified ports in the classic client interceptor. * Add Spring RabbitMQ 2.x - 4.x plugin. -* Fix the logic that was failing to record Time to First Response. All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/249?closed=1)