Skip to content

Commit 6feddb0

Browse files
author
Jicheng Lu
committed
integrate code generate endpoint
1 parent 7a97ba3 commit 6feddb0

File tree

6 files changed

+135
-7
lines changed

6 files changed

+135
-7
lines changed

src/lib/helpers/http.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ function skipLoader(config) {
7575
new RegExp('http(s*)://(.*?)/knowledge/document/(.*?)/page', 'g'),
7676
new RegExp('http(s*)://(.*?)/users', 'g'),
7777
new RegExp('http(s*)://(.*?)/instruct/chat-completion', 'g'),
78-
new RegExp('http(s*)://(.*?)/agent/(.*?)/code-scripts', 'g')
78+
new RegExp('http(s*)://(.*?)/agent/(.*?)/code-scripts', 'g'),
79+
new RegExp('http(s*)://(.*?)/agent/(.*?)/code-script/generate', 'g')
7980
];
8081

8182
/** @type {RegExp[]} */

src/lib/helpers/types/agentTypes.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,31 @@
135135
* @property {AgentCodeScriptUpdateOptions?} [options]
136136
*/
137137

138+
/**
139+
* @typedef {Object} AgentCodeScriptGenerateModel
140+
* @property {string?} [text]
141+
* @property {CodeProcessOptions?} [options]
142+
*/
143+
144+
/**
145+
* @typedef {Object} CodeProcessOptions
146+
* @property {boolean?} [save_to_db] - Whether to save the generated code to database.
147+
* @property {string?} [script_name] - The code script name.
148+
* @property {string?} [script_type] - The code script type.
149+
* @property {string?} [agent_id] - The agent id.
150+
* @property {string?} [template_name] - The template name.
151+
* @property {any?} [data] - The template data.
152+
* @property {string?} [provider] - The llm provider.
153+
* @property {string?} [model] - The llm model.
154+
*/
155+
156+
/**
157+
* @typedef {Object} CodeGenerationResult
158+
* @property {boolean?} [success]
159+
* @property {string?} [content]
160+
* @property {string?} [language]
161+
* @property {string?} [error_message]
162+
*/
138163

139164
/**
140165
* @typedef {Object} ChannelInstruction

src/lib/scss/custom/pages/_agent.scss

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,6 @@
272272
pre {
273273
white-space: pre !important;
274274
width: fit-content;
275-
margin-top: 1em;
276-
margin-bottom: 1em;
277275
}
278276
}
279277

src/lib/services/agent-service.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,18 @@ export async function updateAgentCodeScripts(agentId, update) {
156156
...update
157157
});
158158
return response.data;
159+
}
160+
161+
/**
162+
* Generate agent code script
163+
* @param {string} agentId
164+
* @param {import('$agentTypes').AgentCodeScriptGenerateModel} request
165+
* @returns {Promise<import('$agentTypes').CodeGenerationResult>}
166+
*/
167+
export async function generateAgentCodeScript(agentId, request) {
168+
const url = endpoints.agentCodeScriptGenerateUrl.replace("{agentId}", agentId);
169+
const response = await axios.post(url, {
170+
...request
171+
});
172+
return response.data;
159173
}

src/lib/services/api-endpoints.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export const endpoints = {
4141
// agent code script:
4242
agentCodeScriptListUrl: `${host}/agent/{agentId}/code-scripts`,
4343
agentCodeScriptUpdateUrl: `${host}/agent/{agentId}/code-scripts`,
44+
agentCodeScriptGenerateUrl: `${host}/agent/{agentId}/code-script/generate`,
4445

4546
// agent task
4647
agentTaskListUrl: `${host}/agent/tasks`,

src/routes/page/agent/[agentId]/agent-components/agent-rule.svelte

Lines changed: 93 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
11
<script>
22
import { onMount } from 'svelte';
3+
import Swal from 'sweetalert2';
34
import { Card, CardBody, Input, Button } from '@sveltestrap/sveltestrap';
4-
import { getAgentRuleOptions } from '$lib/services/agent-service';
5+
import { getAgentRuleOptions, generateAgentCodeScript } from '$lib/services/agent-service';
56
import Markdown from '$lib/common/markdown/Markdown.svelte';
67
import BotsharpTooltip from '$lib/common/tooltip/BotsharpTooltip.svelte';
7-
import { ADMIN_ROLES } from '$lib/helpers/constants';
8+
import LoadingToComplete from '$lib/common/LoadingToComplete.svelte';
9+
import { ADMIN_ROLES } from '$lib/helpers/constants';
10+
import { AgentCodeScriptType } from '$lib/helpers/enums';
811
912
const limit = 100;
1013
const textLimit = 1024;
11-
14+
15+
/** @type {boolean} */
16+
let isLoading = false;
17+
/** @type {boolean} */
18+
let isComplete = false;
19+
/** @type {boolean} */
20+
let isError = false;
21+
/** @type {number} */
22+
let duration = 2000;
1223
let windowWidth = 0;
1324
let windowHeight = 0;
1425
26+
/** @type {string} */
27+
let successText = '';
28+
let errorText = '';
29+
1530
/** @type {import('$agentTypes').AgentModel} */
1631
export let agent;
1732
@@ -145,6 +160,72 @@
145160
handleAgentChange();
146161
}
147162
163+
/**
164+
* @param {import("$agentTypes").AgentRule} rule
165+
*/
166+
function compileCodeScript(rule) {
167+
Swal.fire({
168+
title: 'Are you sure?',
169+
html: `
170+
<div>
171+
<p>Are you sure you want to generate code script <b>"${rule.trigger_name}_rule.py"</b>?</p>
172+
<p>This action will overwrite existing code script if any.</p>
173+
</div>
174+
`,
175+
icon: 'warning',
176+
showCancelButton: true,
177+
cancelButtonText: 'No',
178+
confirmButtonText: 'Yes'
179+
}).then(async (result) => {
180+
if (result.value) {
181+
generateCodeScript(rule);
182+
}
183+
});
184+
}
185+
186+
/**
187+
* @param {import("$agentTypes").AgentRule} rule
188+
*/
189+
function generateCodeScript(rule) {
190+
return new Promise((resolve, reject) => {
191+
isLoading = true;
192+
generateAgentCodeScript(agent.id, {
193+
text: rule.criteria,
194+
options: {
195+
save_to_db: true,
196+
script_name: `${rule.trigger_name}_rule.py`,
197+
script_type: AgentCodeScriptType.Src,
198+
// to do:
199+
// agent_id: agent.id,
200+
// template_name: "rule"
201+
}
202+
}).then(res => {
203+
if (res?.success) {
204+
isLoading = false;
205+
isComplete = true;
206+
successText = "Code script has been generated!";
207+
setTimeout(() => {
208+
isComplete = false;
209+
successText = "";
210+
}, duration);
211+
resolve(res);
212+
} else {
213+
throw "error when generating code script.";
214+
}
215+
}).catch(() => {
216+
isLoading = false;
217+
isComplete = false;
218+
isError = true;
219+
errorText = "Failed to generate code script.";
220+
setTimeout(() => {
221+
isError = false;
222+
errorText = "";
223+
}, duration);
224+
reject();
225+
});
226+
});
227+
}
228+
148229
149230
/** @param {import('$agentTypes').AgentRule[]} list */
150231
function innerRefresh(list) {
@@ -176,6 +257,8 @@
176257
177258
<svelte:window on:resize={() => resizeWindow()}/>
178259
260+
<LoadingToComplete {isLoading} {isComplete} {isError} {successText} {errorText} />
261+
179262
<Card>
180263
<CardBody>
181264
<div class="text-center">
@@ -248,7 +331,13 @@
248331
data-bs-placement="top"
249332
title="Compile code script"
250333
>
251-
<i class="mdi mdi-file-code" />
334+
<i
335+
class="mdi mdi-file-code"
336+
role="link"
337+
tabindex="0"
338+
on:keydown={() => {}}
339+
on:click={() => compileCodeScript(rule)}
340+
/>
252341
</div>
253342
{/if}
254343
</div>

0 commit comments

Comments
 (0)