Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions src/lib/common/RemoteSearchInput.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -53,32 +53,32 @@
</script>

<div class="position-relative">
<Dropdown class="scrollable-dropdown" isOpen={isOpen && (searchResults.length > 0 || loading)} toggle={() => isOpen = !isOpen}>
<DropdownToggle tag="div">
<Input
type="text"
value={selectedValue?.name}
on:input={handleInput}
{disabled}
{placeholder}
/>
</DropdownToggle>
<DropdownMenu class="w-100">
{#if loading}
<DropdownItem>
<Spinner size="sm" />
</DropdownItem>
{:else}
{#each searchResults as result, index}
<DropdownItem
active={selectedValue?.id === result.id}
on:click={() => selectResult(result)}
title={result.name}
>
{result.name}
</DropdownItem>
{/each}
{/if}
</DropdownMenu>
</Dropdown>
<Dropdown class="scrollable-dropdown" isOpen={isOpen && (searchResults.length > 0 || loading)} toggle={() => isOpen = !isOpen}>
<DropdownToggle tag="div">
<Input
type="text"
value={selectedValue?.name}
on:input={handleInput}
{disabled}
{placeholder}
/>
</DropdownToggle>
<DropdownMenu class="w-100">
{#if loading}
<DropdownItem>
<Spinner size="sm" />
</DropdownItem>
{:else}
{#each searchResults as result, index}
<DropdownItem
active={selectedValue?.id === result.id}
on:click={() => selectResult(result)}
title={result.name}
>
{result.name}
</DropdownItem>
{/each}
{/if}
</DropdownMenu>
</Dropdown>
</div>
7 changes: 7 additions & 0 deletions src/lib/scss/custom/pages/_agent.scss
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@
}
}

.agent-reset-container {
position: absolute;
left: 10px;
top: 5px;
font-size: 15px;
}

.agent-prop-list-container {
width: 95%;
max-width: 100%;
Expand Down
6 changes: 6 additions & 0 deletions src/lib/scss/custom/pages/_conversation.scss
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,10 @@
-webkit-box-orient: vertical;
-webkit-line-clamp: 10;
max-height: 300px;
}

.state-search-container {
display: flex;
gap: 10px;
justify-content: flex-end;
}
23 changes: 10 additions & 13 deletions src/routes/chat/[agentId]/[conversationId]/chat-box.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
const chatWidthThreshold = 300;
const maxTextLength = 64000;
const duration = 2000;
const MESSAGE_STORAGE_KEY = 'message_draft_';

/** @type {import('$agentTypes').AgentModel} */
export let agent;
Expand Down Expand Up @@ -224,9 +225,7 @@
initUserSentMessages(dialogs);
initChatView();
const messageDraft = getMessageDraft();
if (messageDraft) {
text = messageDraft;
}
text = messageDraft || '';
handlePaneResize();

signalr.onMessageReceivedFromClient = onMessageReceivedFromClient;
Expand Down Expand Up @@ -1333,26 +1332,24 @@
});
}

/** @param {any} e */
/** @param {any} e */
function handleInputBigText(e) {
saveMessageDraft(e.target.value);
}

const MESSAGE_STORAGE_KEY = 'message_draft_';
function getMessageDraft() {
return messageStorage.get(MESSAGE_STORAGE_KEY + params.conversationId);
}
}

/**
* @param {any} message
*/
function saveMessageDraft(message) {
/** @param {any} message */
function saveMessageDraft(message) {
messageStorage.set(MESSAGE_STORAGE_KEY + params.conversationId, message, 24 * 60 * 60 * 1000);
}
}

function deleteMessageDraft() {
function deleteMessageDraft() {
messageStorage.remove(MESSAGE_STORAGE_KEY + params.conversationId);
}
}

function handlePaneResize() {
const header = document.querySelector('.chat-head');
if (!header) return;
Expand Down
42 changes: 29 additions & 13 deletions src/routes/page/agent/[agentId]/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
let agentPromptCmp = null;
/** @type {any} */
let agentTabsCmp = null;
/** @type {import('$agentTypes').AgentModel} */
let originalAgent;
/** @type {any} */
let agentDraft = null;

/** @type {boolean} */
let isLoading = false;
Expand All @@ -37,18 +41,16 @@
const duration = 3000;
const params = $page.params;
const agentStorage = new LocalStorageManager();
let agentDraft = getAgentDraft();
/** @type {import('$agentTypes').AgentModel} */
let originalAgent;


onMount(() => {
isLoading = true;
agentDraft = getAgentDraft();
getAgent(params.agentId).then(data => {
originalAgent = {
...data,
llm_config: data.llm_config || {}
};
const agentDraft = getAgentDraft();
if (agentDraft) {
agent = agentDraft;
} else {
Expand Down Expand Up @@ -226,8 +228,6 @@
agentTabsCmp?.reinit();
});
}


</script>

<HeadTitle title="{$_('Agent Overview')}" />
Expand All @@ -236,24 +236,40 @@

{#if agent}
<div>
{#if agentDraft}
<button type="button" class="btn btn-sm btn-primary" on:click={agentDraftReset}>{$_('Reset')}</button>
{/if}
<Row class="agent-detail-sections">
<Col class="section-min-width agent-col" style="flex: 40%;">
<div class="agent-detail-section">
<AgentOverview agent={agent} profiles={agent.profiles || []} labels={agent.labels || []} {handleAgentChange} />
<AgentOverview
agent={agent}
profiles={agent.profiles || []}
labels={agent.labels || []}
resetable={!!agentDraft}
resetAgent={() => agentDraftReset()}
{handleAgentChange}
/>
</div>
<div class="agent-detail-section">
<AgentTabs bind:this={agentTabsCmp} agent={agent} {handleAgentChange} />
<AgentTabs
bind:this={agentTabsCmp}
agent={agent}
{handleAgentChange}
/>
</div>
</Col>
<Col class="section-min-width agent-col" style="flex: 60%;">
<div class="agent-detail-section">
<AgentPrompt bind:this={agentPromptCmp} agent={agent} {handleAgentChange} />
<AgentPrompt
bind:this={agentPromptCmp}
agent={agent}
{handleAgentChange}
/>
</div>
<div class="agent-detail-section">
<AgentFunction bind:this={agentFunctionCmp} agent={agent} {handleAgentChange} />
<AgentFunction
bind:this={agentFunctionCmp}
agent={agent}
{handleAgentChange}
/>
</div>
</Col>
</Row>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
return content;
}

export const reinit = () => init();

/** @type {import('svelte-jsoneditor').Content} */
let content = {
json: {}
Expand All @@ -31,8 +33,6 @@
};
}

export const reinit = () => init();

/**
* @param {import('svelte-jsoneditor').Content} updatedContent
* @param {import('svelte-jsoneditor').Content} previousContent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
return innerKnowledgeBases;
}

export const reinit = () => init();

/** @type {any[]} */
let knowledgeBaseOptions = [];

Expand Down Expand Up @@ -73,8 +75,6 @@
refresh(list);
}

export const reinit = () => init();

/** @param {import('$agentTypes').AgentKnowledgeBase | any} b */
function getDisplayOption(b) {
return `${b.name} ${!!KnowledgeCollectionDisplayType[b.type]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
}

config.is_inherit = false;
handleAgentChange();
// handleAgentChange();
models = await getLlmProviderModels(provider);
config.model = models[0]?.name;
handleAgentChange();
Expand Down Expand Up @@ -85,6 +85,7 @@
function changeMaxOutputToken(e) {
const value = Number(e.target.value) || 0;
config.max_output_tokens = value;
handleAgentChange();
}
</script>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script>
import { onMount } from 'svelte';
import { Button, Card, CardBody, CardHeader, Input, Table } from '@sveltestrap/sveltestrap';
import { _ } from 'svelte-i18n'
import InPlaceEdit from '$lib/common/InPlaceEdit.svelte'
import { format } from '$lib/helpers/datetime';
import { AgentType } from '$lib/helpers/enums';
Expand All @@ -20,6 +21,12 @@

/** @type {() => void} */
export let handleAgentChange;

/** @type {boolean} */
export let resetable = false;

/** @type {() => void} */
export let resetAgent = () => {};

onMount(() => {});

Expand Down Expand Up @@ -62,6 +69,19 @@

<Card>
<CardHeader>
{#if resetable}
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div
class="agent-reset-container"
data-bs-toggle="tooltip"
data-bs-placement="bottom"
title={$_('Reset')}
on:click={() => resetAgent()}
>
<i class="mdi mdi-refresh text-primary clickable" />
</div>
{/if}
<div class="text-center">
<div class="agent-overview-header">
<img
Expand All @@ -80,7 +100,9 @@
</Button>
{/if}
</div>
<h5 class="mt-1 mb-1 div-center"><InPlaceEdit bind:value={agent.name} /></h5>
<h5 class="mt-1 mb-1 div-center">
<InPlaceEdit bind:value={agent.name} on:input={handleAgentChange} />
</h5>
<p class="text-muted mb-0">{`Updated at ${format(agent.updated_datetime, 'time')}`}</p>
</div>
</CardHeader>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import { v4 as uuidv4 } from 'uuid';
import util from "lodash";
import { _ } from 'svelte-i18n';

const defaultChannel = "default";

/** @type {import('$agentTypes').AgentModel} */
export let agent;
Expand Down Expand Up @@ -44,8 +46,6 @@

export const refreshChannelPrompts = () => init();

const defaultChannel = "default";

/** @type {import('$agentTypes').ChannelInstruction} */
const defaultInstruction = {
channel: defaultChannel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
return innerRules;
}

export const reinit = () => init();

/** @type {any[]} */
let ruleOptions = [];

Expand Down Expand Up @@ -70,9 +72,7 @@
}) || [];
refresh(list);
}

export const reinit = () => init();


/**
* @param {any} e
* @param {number} idx
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@
return innerUtilities;
}

export const reinit = () => init();

/** @type {any} */
let utilityMapper = {};

Expand Down Expand Up @@ -122,8 +124,6 @@
refresh(list);
}

export const reinit = () => init();

/**
* @param {any} e
* @param {number} idx
Expand Down
Loading