refactor(api): modularize assistant router workflow
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { PermissionKey, SystemRole, type PermissionKey as PermissionKeyValue } from "@capakraken/shared";
|
||||
import { getAvailableAssistantTools } from "../router/assistant-tool-policy.js";
|
||||
import { selectAssistantToolsForRequest } from "../router/assistant-tool-selection.js";
|
||||
|
||||
function getSelectedToolNames(
|
||||
permissions: PermissionKeyValue[],
|
||||
messages: Array<{ role: "user" | "assistant"; content: string }>,
|
||||
userRole: SystemRole = SystemRole.ADMIN,
|
||||
pageContext?: string,
|
||||
) {
|
||||
return selectAssistantToolsForRequest(
|
||||
getAvailableAssistantTools(new Set(permissions), userRole),
|
||||
messages,
|
||||
pageContext,
|
||||
).map((tool) => tool.function.name);
|
||||
}
|
||||
|
||||
describe("assistant tool selection", () => {
|
||||
it("caps the OpenAI tool payload to 128 definitions even for fully privileged admins", () => {
|
||||
const allPermissions = Object.values(PermissionKey);
|
||||
const selectedNames = getSelectedToolNames(
|
||||
allPermissions,
|
||||
[{ role: "user", content: "Bitte gib mir einen Überblick über das System." }],
|
||||
SystemRole.ADMIN,
|
||||
);
|
||||
|
||||
expect(selectedNames.length).toBeLessThanOrEqual(128);
|
||||
expect(selectedNames).toContain("get_current_user");
|
||||
expect(selectedNames).toContain("search_resources");
|
||||
expect(selectedNames).toContain("search_projects");
|
||||
});
|
||||
|
||||
it("prioritizes holiday and resource tools for German holiday questions", () => {
|
||||
const allPermissions = Object.values(PermissionKey);
|
||||
const selectedNames = getSelectedToolNames(
|
||||
allPermissions,
|
||||
[{ role: "user", content: "Kannst du mir alle Feiertage nennen, die Peter Parker in 2026 zustehen?" }],
|
||||
SystemRole.ADMIN,
|
||||
);
|
||||
|
||||
expect(selectedNames.length).toBeLessThanOrEqual(128);
|
||||
expect(selectedNames).toContain("search_resources");
|
||||
expect(selectedNames).toContain("get_resource");
|
||||
expect(selectedNames).toContain("get_resource_holidays");
|
||||
expect(selectedNames).toContain("list_holidays_by_region");
|
||||
expect(selectedNames).toContain("list_holiday_calendars");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user