mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-12 07:01:49 +00:00
74f7a86c2b
Co-authored-by: Chandrapal Badshah <12944530+Chan9390@users.noreply.github.com>
152 lines
3.7 KiB
TypeScript
152 lines
3.7 KiB
TypeScript
import { createReactAgent } from "@langchain/langgraph/prebuilt";
|
|
import { createSupervisor } from "@langchain/langgraph-supervisor";
|
|
import { ChatOpenAI } from "@langchain/openai";
|
|
|
|
import { getAIKey, getLighthouseConfig } from "@/actions/lighthouse/lighthouse";
|
|
import {
|
|
complianceAgentPrompt,
|
|
findingsAgentPrompt,
|
|
overviewAgentPrompt,
|
|
providerAgentPrompt,
|
|
rolesAgentPrompt,
|
|
scansAgentPrompt,
|
|
supervisorPrompt,
|
|
userInfoAgentPrompt,
|
|
} from "@/lib/lighthouse/prompts";
|
|
import {
|
|
getProviderCheckDetailsTool,
|
|
getProviderChecksTool,
|
|
} from "@/lib/lighthouse/tools/checks";
|
|
import {
|
|
getComplianceFrameworksTool,
|
|
getComplianceOverviewTool,
|
|
getCompliancesOverviewTool,
|
|
} from "@/lib/lighthouse/tools/compliances";
|
|
import {
|
|
getFindingsTool,
|
|
getMetadataInfoTool,
|
|
} from "@/lib/lighthouse/tools/findings";
|
|
import {
|
|
getFindingsBySeverityTool,
|
|
getFindingsByStatusTool,
|
|
getProvidersOverviewTool,
|
|
} from "@/lib/lighthouse/tools/overview";
|
|
import {
|
|
getProvidersTool,
|
|
getProviderTool,
|
|
} from "@/lib/lighthouse/tools/providers";
|
|
import { getRolesTool, getRoleTool } from "@/lib/lighthouse/tools/roles";
|
|
import { getScansTool, getScanTool } from "@/lib/lighthouse/tools/scans";
|
|
import {
|
|
getMyProfileInfoTool,
|
|
getUsersTool,
|
|
} from "@/lib/lighthouse/tools/users";
|
|
|
|
export async function initLighthouseWorkflow() {
|
|
const apiKey = await getAIKey();
|
|
const aiConfig = await getLighthouseConfig();
|
|
const modelConfig = aiConfig?.data?.attributes;
|
|
|
|
// Initialize models without API keys
|
|
const llm = new ChatOpenAI({
|
|
model: modelConfig?.model || "gpt-4o",
|
|
temperature: modelConfig?.temperature || 0,
|
|
maxTokens: modelConfig?.max_tokens || 4000,
|
|
apiKey: apiKey,
|
|
tags: ["agent"],
|
|
});
|
|
|
|
const supervisorllm = new ChatOpenAI({
|
|
model: modelConfig?.model || "gpt-4o",
|
|
temperature: modelConfig?.temperature || 0,
|
|
maxTokens: modelConfig?.max_tokens || 4000,
|
|
apiKey: apiKey,
|
|
streaming: true,
|
|
tags: ["supervisor"],
|
|
});
|
|
|
|
const providerAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [getProvidersTool, getProviderTool],
|
|
name: "provider_agent",
|
|
prompt: providerAgentPrompt,
|
|
});
|
|
|
|
const userInfoAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [getUsersTool, getMyProfileInfoTool],
|
|
name: "user_info_agent",
|
|
prompt: userInfoAgentPrompt,
|
|
});
|
|
|
|
const scansAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [getScansTool, getScanTool],
|
|
name: "scans_agent",
|
|
prompt: scansAgentPrompt,
|
|
});
|
|
|
|
const complianceAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [
|
|
getCompliancesOverviewTool,
|
|
getComplianceOverviewTool,
|
|
getComplianceFrameworksTool,
|
|
],
|
|
name: "compliance_agent",
|
|
prompt: complianceAgentPrompt,
|
|
});
|
|
|
|
const findingsAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [
|
|
getFindingsTool,
|
|
getMetadataInfoTool,
|
|
getProviderChecksTool,
|
|
getProviderCheckDetailsTool,
|
|
],
|
|
name: "findings_agent",
|
|
prompt: findingsAgentPrompt,
|
|
});
|
|
|
|
const overviewAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [
|
|
getProvidersOverviewTool,
|
|
getFindingsByStatusTool,
|
|
getFindingsBySeverityTool,
|
|
],
|
|
name: "overview_agent",
|
|
prompt: overviewAgentPrompt,
|
|
});
|
|
|
|
const rolesAgent = createReactAgent({
|
|
llm: llm,
|
|
tools: [getRolesTool, getRoleTool],
|
|
name: "roles_agent",
|
|
prompt: rolesAgentPrompt,
|
|
});
|
|
|
|
const agents = [
|
|
userInfoAgent,
|
|
providerAgent,
|
|
overviewAgent,
|
|
scansAgent,
|
|
complianceAgent,
|
|
findingsAgent,
|
|
rolesAgent,
|
|
];
|
|
|
|
// Create supervisor workflow
|
|
const workflow = createSupervisor({
|
|
agents: agents,
|
|
llm: supervisorllm,
|
|
prompt: supervisorPrompt,
|
|
outputMode: "last_message",
|
|
});
|
|
|
|
// Compile and run
|
|
const app = workflow.compile();
|
|
return app;
|
|
}
|