Skip to content

Commit d25c52d

Browse files
author
marker dao ®
committed
refactor(ai-demos)
1 parent a391ca7 commit d25c52d

10 files changed

Lines changed: 62 additions & 45 deletions

File tree

apps/demos/Demos/Chat/AIAndChatbotIntegration/Angular/app/ai/ai.service.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
import { Injectable } from '@angular/core';
2-
import { AzureOpenAI } from 'openai';
2+
import { AzureOpenAI, OpenAI } from 'openai';
3+
import { type AIResponse } from 'devextreme/common/ai-integration';
4+
5+
export type AIMessage = (
6+
OpenAI.ChatCompletionUserMessageParam
7+
| OpenAI.ChatCompletionSystemMessageParam
8+
| OpenAI.ChatCompletionAssistantMessageParam) & {
9+
content: string;
10+
};
11+
12+
const AzureOpenAIConfig = {
13+
dangerouslyAllowBrowser: true,
14+
deployment: 'gpt-4o-mini',
15+
apiVersion: '2024-02-01',
16+
endpoint: 'https://public-api.devexpress.com/demo-openai',
17+
apiKey: 'DEMO',
18+
};
319

420
@Injectable()
521
export class AiService {
622
chatService: AzureOpenAI;
723

8-
AzureOpenAIConfig = {
9-
dangerouslyAllowBrowser: true,
10-
deployment: 'gpt-4o-mini',
11-
apiVersion: '2024-02-01',
12-
endpoint: 'https://public-api.devexpress.com/demo-openai',
13-
apiKey: 'DEMO',
14-
};
15-
1624
constructor() {
17-
this.chatService = new AzureOpenAI(this.AzureOpenAIConfig);
25+
this.chatService = new AzureOpenAI(AzureOpenAIConfig);
1826
}
1927

20-
async getAIResponse(messages: any[]) {
28+
async getAIResponse(messages: AIMessage[]): Promise<AIResponse> {
2129
const params = {
2230
messages,
23-
model: this.AzureOpenAIConfig.deployment,
31+
model: AzureOpenAIConfig.deployment,
2432
max_tokens: 1000,
2533
temperature: 0.7,
2634
};

apps/demos/Demos/Chat/AIAndChatbotIntegration/Angular/app/app.service.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import rehypeStringify from 'rehype-stringify';
77
import rehypeMinifyWhitespace from 'rehype-minify-whitespace';
88
import { type DxChatTypes } from 'devextreme-angular/ui/chat';
99
import { DataSource, CustomStore } from 'devextreme-angular/common/data';
10-
import { AiService } from './ai/ai.service';
10+
import { AiService, type AIMessage } from './ai/ai.service';
1111

1212
@Injectable({
1313
providedIn: 'root',
@@ -31,7 +31,7 @@ export class AppService {
3131

3232
store: any[] = [];
3333

34-
messages: any[] = [];
34+
messages: AIMessage[] = [];
3535

3636
alerts: DxChatTypes.Alert[] = [];
3737

@@ -90,11 +90,11 @@ export class AppService {
9090
});
9191
}
9292

93-
async getAIResponse(messages) {
94-
return this.aiService.getAIResponse(messages);
93+
async getAIResponse(messages: AIMessage[]): Promise<string> {
94+
return this.aiService.getAIResponse(messages) as Promise<string>;
9595
}
9696

97-
async processMessageSending(message) {
97+
async processMessageSending(message: DxChatTypes.Message) {
9898
this.messages.push({ role: 'user', content: message.text });
9999
this.typingUsersSubject.next([this.assistant]);
100100

apps/demos/Demos/Chat/AIAndChatbotIntegration/React/service.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { AzureOpenAI, OpenAI } from 'openai';
2-
import type { AIResponse } from 'devextreme/common/ai-integration';
2+
import { type AIResponse } from 'devextreme/common/ai-integration';
33

4-
type Message = (OpenAI.ChatCompletionUserMessageParam | OpenAI.ChatCompletionAssistantMessageParam) & {
5-
content: string;
6-
};
4+
export type AIMessage = (
5+
OpenAI.ChatCompletionUserMessageParam
6+
| OpenAI.ChatCompletionSystemMessageParam
7+
| OpenAI.ChatCompletionAssistantMessageParam) & {
8+
content: string;
9+
};
710

8-
export const AzureOpenAIConfig = {
11+
const AzureOpenAIConfig = {
912
dangerouslyAllowBrowser: true,
1013
deployment: 'gpt-4o-mini',
1114
apiVersion: '2024-02-01',
@@ -20,7 +23,7 @@ const wait = (delay: number): Promise<void> =>
2023
setTimeout(resolve, delay);
2124
});
2225

23-
export async function getAIResponse(messages: Message[], delay?: number): Promise<AIResponse> {
26+
export async function getAIResponse(messages: AIMessage[], delay?: number): Promise<AIResponse> {
2427
const params = {
2528
messages,
2629
model: AzureOpenAIConfig.deployment,
@@ -37,5 +40,3 @@ export async function getAIResponse(messages: Message[], delay?: number): Promis
3740

3841
return data.choices[0].message?.content ?? '';
3942
}
40-
41-
export type { Message };

apps/demos/Demos/Chat/AIAndChatbotIntegration/React/useApi.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
REGENERATION_TEXT,
88
} from './data.ts';
99
import { getAIResponse } from './service.ts';
10-
import type { Message } from './service.ts';
10+
import type { AIMessage } from './service.ts';
1111

1212
const store: ChatTypes.Message[] = [];
1313

@@ -31,12 +31,12 @@ export const dataSource = new DataSource({
3131
paginate: false,
3232
});
3333

34-
const dataItemToMessage = (item: ChatTypes.Message): Message => ({
35-
role: item.author?.id as Message['role'],
34+
const dataItemToMessage = (item: ChatTypes.Message): AIMessage => ({
35+
role: item.author?.id as AIMessage['role'],
3636
content: item.text,
3737
});
3838

39-
const getMessageHistory = (): Message[] => [...dataSource.items()].map(dataItemToMessage);
39+
const getMessageHistory = (): AIMessage[] => [...dataSource.items()].map(dataItemToMessage);
4040

4141
export const useApi = () => {
4242
const [alerts, setAlerts] = useState<ChatTypes.Alert[]>([]);

apps/demos/Demos/Chat/AIAndChatbotIntegration/ReactJs/service.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AzureOpenAI } from 'openai';
22

3-
export const AzureOpenAIConfig = {
3+
const AzureOpenAIConfig = {
44
dangerouslyAllowBrowser: true,
55
deployment: 'gpt-4o-mini',
66
apiVersion: '2024-02-01',

apps/demos/Demos/Chat/AIAndChatbotIntegration/Vue/App.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ async function processMessageSending(
117117
typingUsers.value = [assistant];
118118
119119
try {
120-
const aiResponse = await getAIResponse(messages);
120+
const aiResponse = await getAIResponse(messages) as string;
121121
122122
setTimeout(() => {
123123
typingUsers.value = [];
@@ -148,7 +148,7 @@ async function regenerate(): Promise<void> {
148148
const lastMessage = messages.at(-1);
149149
150150
try {
151-
const aiResponse = await getAIResponse(messages.slice(0, -1));
151+
const aiResponse = await getAIResponse(messages.slice(0, -1)) as string;
152152
153153
updateLastMessage(aiResponse);
154154

apps/demos/Demos/Chat/AIAndChatbotIntegration/Vue/data.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import remarkParse from 'remark-parse';
55
import remarkRehype from 'remark-rehype';
66
import rehypeStringify from 'rehype-stringify';
77
import rehypeMinifyWhitespace from 'rehype-minify-whitespace';
8+
import { type AIMessage } from './service';
89

910
export const dictionary = {
1011
en: {
@@ -27,7 +28,8 @@ export const assistant = {
2728
name: 'Virtual Assistant',
2829
};
2930

30-
export const messages: DxChatTypes.Message[] = [];
31+
export const messages: AIMessage[] = [];
32+
3133
const store: DxChatTypes.Message[] = [];
3234

3335
const customStore = new CustomStore<DxChatTypes.Message>({

apps/demos/Demos/Chat/AIAndChatbotIntegration/Vue/service.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1-
import { AzureOpenAI } from 'openai';
2-
import { type DxChatTypes } from 'devextreme-vue/chat';
1+
import { AzureOpenAI, OpenAI } from 'openai';
2+
import { type AIResponse } from 'devextreme/common/ai-integration';
3+
4+
export type AIMessage = (
5+
OpenAI.ChatCompletionUserMessageParam
6+
| OpenAI.ChatCompletionSystemMessageParam
7+
| OpenAI.ChatCompletionAssistantMessageParam) & {
8+
content: string;
9+
};
310

411
const AzureOpenAIConfig = {
512
dangerouslyAllowBrowser: true,
@@ -11,7 +18,7 @@ const AzureOpenAIConfig = {
1118

1219
const chatService = new AzureOpenAI(AzureOpenAIConfig);
1320

14-
export async function getAIResponse(messages: DxChatTypes.Message[]): Promise<string> {
21+
export async function getAIResponse(messages: AIMessage[]): Promise<AIResponse> {
1522
const params: Record<string, any> = {
1623
messages,
1724
model: AzureOpenAIConfig.deployment,

apps/demos/Demos/HtmlEditor/AITextEditing/Vue/data.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
import type { DxHtmlEditorTypes } from 'devextreme-vue/html-editor';
22

3-
export const AzureOpenAIConfig = {
4-
dangerouslyAllowBrowser: true,
5-
deployment: 'gpt-4o-mini',
6-
apiVersion: '2024-02-01',
7-
endpoint: 'https://public-api.devexpress.com/demo-openai',
8-
apiKey: 'DEMO',
9-
};
10-
113
export const extractKeywordsPrompt: DxHtmlEditorTypes.AICustomCommand['prompt'] = () =>
124
'Extract a list of keywords from the text and return it as a comma-separated string';
135

apps/demos/Demos/HtmlEditor/AITextEditing/Vue/service.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,21 @@ import {
44
type RequestParams,
55
type Response,
66
} from 'devextreme-vue/common/ai-integration';
7-
import { AzureOpenAIConfig } from './data.ts';
87

98
type AIMessage = (
109
OpenAI.ChatCompletionUserMessageParam | OpenAI.ChatCompletionSystemMessageParam
1110
) & {
1211
content: string;
1312
};
1413

14+
const AzureOpenAIConfig = {
15+
dangerouslyAllowBrowser: true,
16+
deployment: 'gpt-4o-mini',
17+
apiVersion: '2024-02-01',
18+
endpoint: 'https://public-api.devexpress.com/demo-openai',
19+
apiKey: 'DEMO',
20+
};
21+
1522
const aiService = new AzureOpenAI(AzureOpenAIConfig);
1623

1724
async function getAIResponse(messages: AIMessage[], signal: AbortSignal): Promise<string> {

0 commit comments

Comments
 (0)