Skip to content

Commit fa5b250

Browse files
committed
Refactor agent message content field and add enums
Renamed 'raw_content' to 'content' in AgentMessageData across frontend and backend for consistency. Added new enums and fields to backend models, including AgentMessageType, PlanStatus 'canceled', Plan 'approved', and updated DataType values. Updated frontend components and services to use the new 'content' field.
1 parent 3097461 commit fa5b250

File tree

7 files changed

+35
-34
lines changed

7 files changed

+35
-34
lines changed

src/backend/common/models/messages_kernel.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
from enum import Enum
44
from typing import Any, Dict, List, Literal, Optional
55

6-
from semantic_kernel.kernel_pydantic import Field, KernelBaseModel
76

7+
from semantic_kernel.kernel_pydantic import Field, KernelBaseModel
8+
from dataclasses import dataclass
89

910
class DataType(str, Enum):
1011
"""Enumeration of possible data types for documents in the database."""
@@ -16,7 +17,7 @@ class DataType(str, Enum):
1617
team_config = "team_config"
1718
user_current_team = "user_current_team"
1819
m_plan = "m_plan"
19-
m_plan_step = "m_plan_step"
20+
m_plan_message = "m_plan_message"
2021

2122

2223
class AgentType(str, Enum):
@@ -53,6 +54,7 @@ class PlanStatus(str, Enum):
5354
in_progress = "in_progress"
5455
completed = "completed"
5556
failed = "failed"
57+
canceled = "canceled"
5658

5759

5860
class HumanFeedbackStatus(str, Enum):
@@ -93,6 +95,7 @@ class AgentMessage(BaseDataModel):
9395
step_id: Optional[str] = None
9496

9597

98+
9699
class Session(BaseDataModel):
97100
"""Represents a user session."""
98101

@@ -119,6 +122,7 @@ class Plan(BaseDataModel):
119122
user_id: str
120123
initial_goal: str
121124
overall_status: PlanStatus = PlanStatus.in_progress
125+
approved: bool = False
122126
source: str = AgentType.PLANNER.value
123127
summary: Optional[str] = None
124128
team_id: Optional[str] = None
@@ -250,3 +254,14 @@ class InputTask(KernelBaseModel):
250254

251255
class UserLanguage(KernelBaseModel):
252256
language: str
257+
258+
259+
class AgentMessageType(str, Enum):
260+
HUMAN_AGENT = "Human_Agent",
261+
AI_AGENT = "AI_Agent",
262+
263+
264+
class AgentMessageData (BaseDataModel):
265+
agent: str
266+
agent_type: AgentMessageType = AgentMessageType.AI_AGENT
267+
content: str

src/backend/v3/models/messages.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ class ApprovalRequest(KernelBaseModel):
123123
agent_name: str
124124

125125

126-
127126
class WebsocketMessageType(str, Enum):
128127
"""Types of WebSocket messages."""
129128
SYSTEM_MESSAGE = "system_message"

src/backend/v3/models/models.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import uuid
22
from datetime import datetime, timezone
33
from enum import Enum
4-
from typing import List, Optional
4+
from typing import List, Literal, Optional
55

66
from pydantic import BaseModel, Field
77

8+
from common.models.messages_kernel import DataType
9+
810

911
class PlanStatus(str, Enum):
1012
CREATED = "created"
@@ -22,6 +24,7 @@ class MStep(BaseModel):
2224
class MPlan(BaseModel):
2325
"""model of a plan"""
2426
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
27+
data_type: Literal[DataType.m_plan] = Field(DataType.m_plan, Literal=True)
2528
user_id: str = ""
2629
team_id: str = ""
2730
plan_id: str = ""

src/frontend/src/components/content/streaming/StreamingAgentMessage.tsx

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,12 @@ const StreamingAgentMessage = (agentMessages: AgentMessageData[]) => {
1212
if (!agentMessages?.length) return null;
1313

1414
// Filter out messages with empty content
15-
const validMessages = agentMessages.filter(msg => msg.raw_content?.trim());
15+
const validMessages = agentMessages.filter(msg => msg.content?.trim());
1616
const messages = validMessages;
1717
if (!validMessages.length) return null;
1818

1919
return (
20-
// <div className="streaming-agent-messages">
21-
// {validMessages.map((message, index) => (
22-
// <div key={`${message.agent}-${message.timestamp}-${index}`} className="agent-message">
23-
// <div className="agent-name">
24-
// <strong>{message.agent}</strong>:
25-
// </div>
26-
// <div className="agent-content">
27-
// <ReactMarkdown
28-
// remarkPlugins={[remarkGfm]}
29-
// rehypePlugins={[rehypePrism]}
30-
// >
31-
// {message.raw_content.trim()}
32-
// </ReactMarkdown>
33-
// </div>
34-
// </div>
35-
// ))}
36-
// </div>
20+
3721

3822
<div className="message-wrapper">
3923
{messages.map((msg, index) => {
@@ -68,7 +52,7 @@ const StreamingAgentMessage = (agentMessages: AgentMessageData[]) => {
6852
remarkPlugins={[remarkGfm]}
6953
rehypePlugins={[rehypePrism]}
7054
>
71-
{TaskService.cleanHRAgent(msg.raw_content) || ""}
55+
{TaskService.cleanHRAgent(msg.content) || ""}
7256
</ReactMarkdown>
7357

7458
{!isHuman && (
@@ -77,8 +61,8 @@ const StreamingAgentMessage = (agentMessages: AgentMessageData[]) => {
7761
<div>
7862
<Button
7963
onClick={() =>
80-
msg.raw_content &&
81-
navigator.clipboard.writeText(msg.raw_content)
64+
msg.content &&
65+
navigator.clipboard.writeText(msg.content)
8266
}
8367
title="Copy Response"
8468
appearance="subtle"

src/frontend/src/models/agentMessage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ export interface AgentMessageData {
2626
timestamp: number;
2727
steps: any[]; // intentionally always empty
2828
next_steps: []; // intentionally always empty
29-
raw_content: string;
29+
content: string;
3030
raw_data: string;
3131
}

src/frontend/src/pages/PlanPage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ const PlanPage: React.FC = () => {
146146
timestamp: clarificationMessage.timestamp || Date.now(),
147147
steps: [], // intentionally always empty
148148
next_steps: [], // intentionally always empty
149-
raw_content: clarificationMessage.data.question || '',
149+
content: clarificationMessage.data.question || '',
150150
raw_data: clarificationMessage.data || '',
151151
} as AgentMessageData;
152152
console.log('✅ Parsed clarification message:', agentMessageData);
@@ -183,7 +183,7 @@ const PlanPage: React.FC = () => {
183183
timestamp: Date.now(),
184184
steps: [], // intentionally always empty
185185
next_steps: [], // intentionally always empty
186-
raw_content: finalMessage.data.content || '',
186+
content: finalMessage.data.content || '',
187187
raw_data: finalMessage.data || '',
188188
} as AgentMessageData;
189189
console.log('✅ Parsed final result message:', agentMessageData);
@@ -395,7 +395,7 @@ const PlanPage: React.FC = () => {
395395
timestamp: Date.now(),
396396
steps: [], // intentionally always empty
397397
next_steps: [], // intentionally always empty
398-
raw_content: chatInput || '',
398+
content: chatInput || '',
399399
raw_data: chatInput || '',
400400
} as AgentMessageData;
401401

src/frontend/src/services/PlanDataService.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ export class PlanDataService {
376376
raw_block: string;
377377
}>;
378378
next_steps: string[];
379-
raw_content: string;
379+
content: string;
380380
raw_data: any;
381381
} | null {
382382
try {
@@ -401,17 +401,17 @@ export class PlanDataService {
401401

402402
// Extract content='...'
403403
const contentMatch = source.match(/content='((?:\\'|[^'])*)'/);
404-
let raw_content = contentMatch ? contentMatch[1] : '';
404+
let content = contentMatch ? contentMatch[1] : '';
405405
// Unescape
406-
raw_content = raw_content
406+
content = content
407407
.replace(/\\n/g, '\n')
408408
.replace(/\\'/g, "'")
409409
.replace(/\\"/g, '"')
410410
.replace(/\\\\/g, '\\');
411411

412412
// Parse sections of the form "##### Title Completed"
413413
// Each block ends at --- line or next "##### " or end.
414-
const lines = raw_content.split('\n');
414+
const lines = content.split('\n');
415415
const steps: Array<{ title: string; fields: Record<string, string>; summary?: string; raw_block: string; }> = [];
416416
let i = 0;
417417
while (i < lines.length) {
@@ -473,7 +473,7 @@ export class PlanDataService {
473473
timestamp,
474474
steps,
475475
next_steps: nextSteps,
476-
raw_content,
476+
content,
477477
raw_data: rawData
478478
};
479479
} catch (e) {

0 commit comments

Comments
 (0)