pradipGiriHugging commited on
Commit
11bcf3c
·
verified ·
1 Parent(s): 7b8b237

Upload 2 files

Browse files
Files changed (2) hide show
  1. agents/researchAgent.js +66 -0
  2. agents/synthesisAgent.js +37 -0
agents/researchAgent.js ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { DuckDuckGoSearch } = require("@langchain/community/tools/duckduckgo_search");
2
+ const { model } = require('../model');
3
+ const { HumanMessage, SystemMessage } = require("@langchain/core/messages");
4
+
5
+ // Initialize DuckDuckGo tool
6
+ const ddgTool = new DuckDuckGoSearch({ maxResults: 3 });
7
+
8
+ async function performSearch(query) {
9
+ // 1. Try DuckDuckGo
10
+ try {
11
+ console.log("Using DuckDuckGo Search...");
12
+ const rawResults = await ddgTool.invoke(query);
13
+ return rawResults;
14
+ } catch (e) {
15
+ console.error("DuckDuckGo search failed:", e.message);
16
+ }
17
+
18
+ // 2. Fallback to Mock Data (Safe Mode)
19
+ // This allows the agent to continue even if search tools are blocked/rate-limited.
20
+ console.log("Search tools failed. Using fallback simulation data.");
21
+ return `[System Note: Web search unavailable (Rate Limit). Using simulated research data for: ${query}]
22
+
23
+ Overview:
24
+ - "${query}" is a significant topic with high market relevance.
25
+ - Usage is growing in enterprise sectors.
26
+
27
+ Key Trends:
28
+ - Increased adoption in North America and Europe.
29
+ - Shift towards AI-driven automation.
30
+ - Consolidation among key players.
31
+
32
+ Capabilities/Facts:
33
+ - Reduces operational costs by approx 15-20%.
34
+ - Key players include industry leaders like Google, Microsoft, and specialized startups.
35
+ - Challenges include data privacy and high initial setup costs.
36
+ `;
37
+ }
38
+
39
+ async function researchAgent(state) {
40
+ const { query } = state;
41
+ console.log(`[Research Agent] Searching for: ${query}`);
42
+
43
+ try {
44
+ const searchResults = await performSearch(query);
45
+
46
+ // Summarize results
47
+ const prompt = `You are a Research Assistant. Summarize the following raw search results into clear, bulleted factual notes relevant to the query: "${query}".
48
+
49
+ Raw Results:
50
+ ${typeof searchResults === 'string' ? searchResults : JSON.stringify(searchResults)}
51
+ `;
52
+
53
+ const response = await model.invoke([
54
+ new SystemMessage("You are a helpful research assistant."),
55
+ new HumanMessage(prompt)
56
+ ]);
57
+
58
+ return { research: response.content };
59
+ } catch (error) {
60
+ console.error("Research Agent Error:", error);
61
+ // Ultimate fallback
62
+ return { research: "Research unavailable at this time." };
63
+ }
64
+ }
65
+
66
+ module.exports = { researchAgent };
agents/synthesisAgent.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { model } = require('../model');
2
+ const { HumanMessage, SystemMessage } = require("@langchain/core/messages");
3
+
4
+ async function synthesisAgent(state) {
5
+ const { research, query } = state;
6
+ console.log(`[Synthesis Agent] Analyzing data...`);
7
+
8
+ if (!research) {
9
+ return { insights: "No research data found to analyze." };
10
+ }
11
+
12
+ const prompt = `You are a Strategy Consultant used to high-level analysis.
13
+ Given the following research notes on "${query}", generate valid strategic insights.
14
+
15
+ Include:
16
+ 1. Market Summary (TAM/SAM/SOM if data allows, otherwise qualitative size)
17
+ 2. SWOT Analysis (Strengths, Weaknesses, Opportunities, Threats)
18
+ 3. Key Risks
19
+
20
+ Research Data:
21
+ ${research}
22
+ `;
23
+
24
+ try {
25
+ const response = await model.invoke([
26
+ new SystemMessage("You are a senior strategy consultant."),
27
+ new HumanMessage(prompt)
28
+ ]);
29
+
30
+ return { insights: response.content };
31
+ } catch (error) {
32
+ console.error("Synthesis Agent Error:", error);
33
+ return { insights: "Error generating insights." };
34
+ }
35
+ }
36
+
37
+ module.exports = { synthesisAgent };