68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
import type { ApiChatMessageData } from '$lib/types/api';
|
|
import type { AgenticMessage, AgenticConfig } from '$lib/types/agentic';
|
|
import type { SettingsConfigType } from '$lib/types/settings';
|
|
import type { McpServerOverride } from '$lib/types/database';
|
|
import { DEFAULT_AGENTIC_CONFIG } from '$lib/constants/agentic';
|
|
import { mcpStore } from '$lib/stores/mcp.svelte';
|
|
import { MessageRole } from '$lib/enums';
|
|
|
|
/**
|
|
* Gets the current agentic configuration.
|
|
* Automatically disables agentic mode if no MCP servers are configured.
|
|
* @param settings - Global settings configuration
|
|
* @param perChatOverrides - Optional per-chat MCP server overrides
|
|
*/
|
|
export function getAgenticConfig(
|
|
settings: SettingsConfigType,
|
|
perChatOverrides?: McpServerOverride[]
|
|
): AgenticConfig {
|
|
const maxTurns = Number(settings.agenticMaxTurns) || DEFAULT_AGENTIC_CONFIG.maxTurns;
|
|
const maxToolPreviewLines =
|
|
Number(settings.agenticMaxToolPreviewLines) || DEFAULT_AGENTIC_CONFIG.maxToolPreviewLines;
|
|
|
|
return {
|
|
enabled: mcpStore.hasEnabledServers(perChatOverrides) && DEFAULT_AGENTIC_CONFIG.enabled,
|
|
maxTurns,
|
|
maxToolPreviewLines
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Converts API messages to agentic format.
|
|
*/
|
|
export function toAgenticMessages(messages: ApiChatMessageData[]): AgenticMessage[] {
|
|
return messages.map((message) => {
|
|
if (
|
|
message.role === MessageRole.ASSISTANT &&
|
|
message.tool_calls &&
|
|
message.tool_calls.length > 0
|
|
) {
|
|
return {
|
|
role: MessageRole.ASSISTANT,
|
|
content: message.content,
|
|
tool_calls: message.tool_calls.map((call, index) => ({
|
|
id: call.id ?? `call_${index}`,
|
|
type: (call.type as 'function') ?? 'function',
|
|
function: {
|
|
name: call.function?.name ?? '',
|
|
arguments: call.function?.arguments ?? ''
|
|
}
|
|
}))
|
|
} satisfies AgenticMessage;
|
|
}
|
|
|
|
if (message.role === MessageRole.TOOL && message.tool_call_id) {
|
|
return {
|
|
role: MessageRole.TOOL,
|
|
tool_call_id: message.tool_call_id,
|
|
content: typeof message.content === 'string' ? message.content : ''
|
|
} satisfies AgenticMessage;
|
|
}
|
|
|
|
return {
|
|
role: message.role as MessageRole.SYSTEM | MessageRole.USER,
|
|
content: message.content
|
|
} satisfies AgenticMessage;
|
|
});
|
|
}
|