Compare commits
2 Commits
7b79c4034d
...
8cd81900f8
| Author | SHA1 | Date | |
|---|---|---|---|
| 8cd81900f8 | |||
| 8281c532f2 |
@@ -1,14 +1,11 @@
|
|||||||
name: Agent CI/CD
|
name: Agent CI/CD
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
|
||||||
push:
|
push:
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- master
|
|
||||||
tags:
|
tags:
|
||||||
- "v*"
|
- "v*"
|
||||||
- "latest"
|
- "latest"
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker-image:
|
docker-image:
|
||||||
|
|||||||
+27
-9
@@ -278,18 +278,27 @@ export const buildChatRouter = (
|
|||||||
const assistantText = collectTextContent(assistantMessage?.parts ?? []);
|
const assistantText = collectTextContent(assistantMessage?.parts ?? []);
|
||||||
const existingSessionTitle = sessionBridge.getSessionTitle(binding.sessionId);
|
const existingSessionTitle = sessionBridge.getSessionTitle(binding.sessionId);
|
||||||
let sessionTitle = existingSessionTitle;
|
let sessionTitle = existingSessionTitle;
|
||||||
|
const { userMessageCount, assistantMessageCount } =
|
||||||
|
await getConversationTurnStats(runtime, binding.sessionId);
|
||||||
const shouldGenerateTitle =
|
const shouldGenerateTitle =
|
||||||
!existingSessionTitle &&
|
userMessageCount <= 3 &&
|
||||||
(await isFirstRoundConversation(runtime, binding.sessionId));
|
assistantMessageCount >= 1;
|
||||||
if (shouldGenerateTitle) {
|
if (shouldGenerateTitle) {
|
||||||
sessionTitle = await generateSessionTitle(runtime, {
|
sessionTitle = await generateSessionTitle(runtime, {
|
||||||
sessionId: binding.sessionId,
|
sessionId: binding.sessionId,
|
||||||
latestUserMessage: parsed.data.message,
|
latestUserMessage: parsed.data.message,
|
||||||
|
fallbackTitle: existingSessionTitle,
|
||||||
});
|
});
|
||||||
|
if (sessionTitle !== existingSessionTitle) {
|
||||||
sessionBridge.setSessionTitle(binding.sessionId, sessionTitle);
|
sessionBridge.setSessionTitle(binding.sessionId, sessionTitle);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!streamClosed && !res.writableEnded && !res.destroyed) {
|
if (!streamClosed && !res.writableEnded && !res.destroyed) {
|
||||||
if (shouldGenerateTitle && sessionTitle) {
|
if (
|
||||||
|
shouldGenerateTitle &&
|
||||||
|
sessionTitle &&
|
||||||
|
sessionTitle !== existingSessionTitle
|
||||||
|
) {
|
||||||
res.write(
|
res.write(
|
||||||
toSse("session_title", {
|
toSse("session_title", {
|
||||||
session_id: clientSessionId,
|
session_id: clientSessionId,
|
||||||
@@ -1044,16 +1053,25 @@ const buildTitleConversationContext = async (
|
|||||||
.slice(0, 2400);
|
.slice(0, 2400);
|
||||||
};
|
};
|
||||||
|
|
||||||
const isFirstRoundConversation = async (
|
const getConversationTurnStats = async (
|
||||||
runtime: OpencodeRuntimeAdapter,
|
runtime: OpencodeRuntimeAdapter,
|
||||||
sessionId: string,
|
sessionId: string,
|
||||||
) => {
|
) => {
|
||||||
const messages = await runtime.messages(sessionId, 12);
|
const messages = await runtime.messages(sessionId, 12);
|
||||||
const chatMessageCount = messages.filter(
|
return messages.reduce(
|
||||||
(message) =>
|
(stats, message) => {
|
||||||
message.info.role === "user" || message.info.role === "assistant",
|
if (message.info.role === "user") {
|
||||||
).length;
|
stats.userMessageCount += 1;
|
||||||
return chatMessageCount === 2;
|
} else if (message.info.role === "assistant") {
|
||||||
|
stats.assistantMessageCount += 1;
|
||||||
|
}
|
||||||
|
return stats;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
userMessageCount: 0,
|
||||||
|
assistantMessageCount: 0,
|
||||||
|
},
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const normalizeGeneratedTitle = (rawTitle: string, fallback: string) => {
|
const normalizeGeneratedTitle = (rawTitle: string, fallback: string) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user