-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconversationService.ts
96 lines (87 loc) · 2.41 KB
/
conversationService.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { apiRequest } from './apiUtils';
import { FlowState } from '../models/flowExecutionTypes';
/**
* Service for managing conversation persistence via API
*/
export const conversationService = {
/**
* Create a new conversation
*/
async createConversation(
agentId: string,
flowState: FlowState,
ownerInfo: { type: 'user' | 'team'; id: string },
title?: string
): Promise<string> {
const response = await apiRequest<{ id: string }>('/api/conversations', {
method: 'POST',
body: JSON.stringify({
agentId,
flowState,
ownerType: ownerInfo.type,
ownerId: ownerInfo.id,
title
}),
});
return response.id;
},
/**
* Update an existing conversation with new flow state
*/
async updateConversation(
conversationId: string,
flowState: FlowState,
userInput?: string
): Promise<void> {
await apiRequest(`/api/conversations/${conversationId}`, {
method: 'PUT',
body: JSON.stringify({
flowState,
userInput
}),
});
},
/**
* Get a conversation by ID with its messages
*/
async getConversation(conversationId: string): Promise<{
conversation: any;
messages: any[];
flowState?: FlowState;
}> {
return apiRequest(`/api/conversations/${conversationId}`);
},
/**
* List recent conversations for a user or team
*/
async listConversations(options: {
ownerType: 'user' | 'team';
ownerId: string;
limit?: number;
offset?: number;
}): Promise<any[]> {
const { ownerType, ownerId, limit = 10, offset = 0 } = options;
const queryParams = new URLSearchParams({
...(ownerType === 'user' ? { userId: ownerId } : { teamId: ownerId }),
limit: limit.toString(),
offset: offset.toString()
});
const response = await apiRequest<{ conversations: any[] }>(`/api/conversations?${queryParams}`);
return response.conversations;
},
/**
* Delete a conversation
*/
async deleteConversation(conversationId: string): Promise<void> {
await apiRequest(`/api/conversations/${conversationId}`, {
method: 'DELETE',
});
},
/**
* Get flow state for a conversation
*/
async getFlowState(conversationId: string): Promise<FlowState> {
const response = await apiRequest<{ flowState: FlowState }>(`/api/conversations/${conversationId}/state`);
return response.flowState;
}
};