@xynehq/jaf 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +596 -0
- package/dist/a2a/agent-card.d.ts +28 -0
- package/dist/a2a/agent-card.d.ts.map +1 -0
- package/dist/a2a/agent-card.js +250 -0
- package/dist/a2a/agent-card.js.map +1 -0
- package/dist/a2a/agent.d.ts +38 -0
- package/dist/a2a/agent.d.ts.map +1 -0
- package/dist/a2a/agent.js +223 -0
- package/dist/a2a/agent.js.map +1 -0
- package/dist/a2a/client.d.ts +35 -0
- package/dist/a2a/client.d.ts.map +1 -0
- package/dist/a2a/client.js +337 -0
- package/dist/a2a/client.js.map +1 -0
- package/dist/a2a/examples/client-example.d.ts +104 -0
- package/dist/a2a/examples/client-example.d.ts.map +1 -0
- package/dist/a2a/examples/client-example.js +232 -0
- package/dist/a2a/examples/client-example.js.map +1 -0
- package/dist/a2a/examples/server-example.d.ts +9 -0
- package/dist/a2a/examples/server-example.d.ts.map +1 -0
- package/dist/a2a/examples/server-example.js +209 -0
- package/dist/a2a/examples/server-example.js.map +1 -0
- package/dist/a2a/examples/weather-agent.d.ts +8 -0
- package/dist/a2a/examples/weather-agent.d.ts.map +1 -0
- package/dist/a2a/examples/weather-agent.js +232 -0
- package/dist/a2a/examples/weather-agent.js.map +1 -0
- package/dist/a2a/executor.d.ts +43 -0
- package/dist/a2a/executor.d.ts.map +1 -0
- package/dist/a2a/executor.js +507 -0
- package/dist/a2a/executor.js.map +1 -0
- package/dist/a2a/index.d.ts +378 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +72 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/a2a/memory/cleanup.d.ts +58 -0
- package/dist/a2a/memory/cleanup.d.ts.map +1 -0
- package/dist/a2a/memory/cleanup.js +281 -0
- package/dist/a2a/memory/cleanup.js.map +1 -0
- package/dist/a2a/memory/factory.d.ts +38 -0
- package/dist/a2a/memory/factory.d.ts.map +1 -0
- package/dist/a2a/memory/factory.js +369 -0
- package/dist/a2a/memory/factory.js.map +1 -0
- package/dist/a2a/memory/index.d.ts +13 -0
- package/dist/a2a/memory/index.d.ts.map +1 -0
- package/dist/a2a/memory/index.js +16 -0
- package/dist/a2a/memory/index.js.map +1 -0
- package/dist/a2a/memory/providers/in-memory.d.ts +10 -0
- package/dist/a2a/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/a2a/memory/providers/in-memory.js +539 -0
- package/dist/a2a/memory/providers/in-memory.js.map +1 -0
- package/dist/a2a/memory/providers/postgres.d.ts +10 -0
- package/dist/a2a/memory/providers/postgres.d.ts.map +1 -0
- package/dist/a2a/memory/providers/postgres.js +404 -0
- package/dist/a2a/memory/providers/postgres.js.map +1 -0
- package/dist/a2a/memory/providers/redis.d.ts +10 -0
- package/dist/a2a/memory/providers/redis.d.ts.map +1 -0
- package/dist/a2a/memory/providers/redis.js +435 -0
- package/dist/a2a/memory/providers/redis.js.map +1 -0
- package/dist/a2a/memory/serialization.d.ts +53 -0
- package/dist/a2a/memory/serialization.d.ts.map +1 -0
- package/dist/a2a/memory/serialization.js +233 -0
- package/dist/a2a/memory/serialization.js.map +1 -0
- package/dist/a2a/memory/types.d.ts +395 -0
- package/dist/a2a/memory/types.d.ts.map +1 -0
- package/dist/a2a/memory/types.js +85 -0
- package/dist/a2a/memory/types.js.map +1 -0
- package/dist/a2a/protocol.d.ts +38 -0
- package/dist/a2a/protocol.d.ts.map +1 -0
- package/dist/a2a/protocol.js +211 -0
- package/dist/a2a/protocol.js.map +1 -0
- package/dist/a2a/server.d.ts +343 -0
- package/dist/a2a/server.d.ts.map +1 -0
- package/dist/a2a/server.js +362 -0
- package/dist/a2a/server.js.map +1 -0
- package/dist/a2a/types.d.ts +730 -0
- package/dist/a2a/types.d.ts.map +1 -0
- package/dist/a2a/types.js +73 -0
- package/dist/a2a/types.js.map +1 -0
- package/dist/adk/agents/index.d.ts +48 -0
- package/dist/adk/agents/index.d.ts.map +1 -0
- package/dist/adk/agents/index.js +277 -0
- package/dist/adk/agents/index.js.map +1 -0
- package/dist/adk/artifacts/index.d.ts +62 -0
- package/dist/adk/artifacts/index.d.ts.map +1 -0
- package/dist/adk/artifacts/index.js +394 -0
- package/dist/adk/artifacts/index.js.map +1 -0
- package/dist/adk/config/llm-config.d.ts +75 -0
- package/dist/adk/config/llm-config.d.ts.map +1 -0
- package/dist/adk/config/llm-config.js +422 -0
- package/dist/adk/config/llm-config.js.map +1 -0
- package/dist/adk/content/index.d.ts +58 -0
- package/dist/adk/content/index.d.ts.map +1 -0
- package/dist/adk/content/index.js +220 -0
- package/dist/adk/content/index.js.map +1 -0
- package/dist/adk/examples/advanced-features.d.ts +22 -0
- package/dist/adk/examples/advanced-features.d.ts.map +1 -0
- package/dist/adk/examples/advanced-features.js +380 -0
- package/dist/adk/examples/advanced-features.js.map +1 -0
- package/dist/adk/examples/basic-agent.d.ts +28 -0
- package/dist/adk/examples/basic-agent.d.ts.map +1 -0
- package/dist/adk/examples/basic-agent.js +207 -0
- package/dist/adk/examples/basic-agent.js.map +1 -0
- package/dist/adk/examples/multi-agent.d.ts +24 -0
- package/dist/adk/examples/multi-agent.d.ts.map +1 -0
- package/dist/adk/examples/multi-agent.js +321 -0
- package/dist/adk/examples/multi-agent.js.map +1 -0
- package/dist/adk/examples/streaming-example.d.ts +9 -0
- package/dist/adk/examples/streaming-example.d.ts.map +1 -0
- package/dist/adk/examples/streaming-example.js +193 -0
- package/dist/adk/examples/streaming-example.js.map +1 -0
- package/dist/adk/index.d.ts +65 -0
- package/dist/adk/index.d.ts.map +1 -0
- package/dist/adk/index.js +251 -0
- package/dist/adk/index.js.map +1 -0
- package/dist/adk/models.d.ts +338 -0
- package/dist/adk/models.d.ts.map +1 -0
- package/dist/adk/models.js +466 -0
- package/dist/adk/models.js.map +1 -0
- package/dist/adk/providers/error-handler.d.ts +100 -0
- package/dist/adk/providers/error-handler.d.ts.map +1 -0
- package/dist/adk/providers/error-handler.js +289 -0
- package/dist/adk/providers/error-handler.js.map +1 -0
- package/dist/adk/providers/llm-service.d.ts +41 -0
- package/dist/adk/providers/llm-service.d.ts.map +1 -0
- package/dist/adk/providers/llm-service.js +520 -0
- package/dist/adk/providers/llm-service.js.map +1 -0
- package/dist/adk/providers/type-converters.d.ts +34 -0
- package/dist/adk/providers/type-converters.d.ts.map +1 -0
- package/dist/adk/providers/type-converters.js +436 -0
- package/dist/adk/providers/type-converters.js.map +1 -0
- package/dist/adk/runners/index.d.ts +33 -0
- package/dist/adk/runners/index.d.ts.map +1 -0
- package/dist/adk/runners/index.js +466 -0
- package/dist/adk/runners/index.js.map +1 -0
- package/dist/adk/schemas/index.d.ts +85 -0
- package/dist/adk/schemas/index.d.ts.map +1 -0
- package/dist/adk/schemas/index.js +363 -0
- package/dist/adk/schemas/index.js.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts +10 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.js +145 -0
- package/dist/adk/sessions/examples/session-provider-usage.js.map +1 -0
- package/dist/adk/sessions/index.d.ts +53 -0
- package/dist/adk/sessions/index.d.ts.map +1 -0
- package/dist/adk/sessions/index.js +451 -0
- package/dist/adk/sessions/index.js.map +1 -0
- package/dist/adk/sessions/postgres-provider.d.ts +22 -0
- package/dist/adk/sessions/postgres-provider.d.ts.map +1 -0
- package/dist/adk/sessions/postgres-provider.js +293 -0
- package/dist/adk/sessions/postgres-provider.js.map +1 -0
- package/dist/adk/sessions/redis-provider.d.ts +19 -0
- package/dist/adk/sessions/redis-provider.d.ts.map +1 -0
- package/dist/adk/sessions/redis-provider.js +237 -0
- package/dist/adk/sessions/redis-provider.js.map +1 -0
- package/dist/adk/streaming/index.d.ts +76 -0
- package/dist/adk/streaming/index.d.ts.map +1 -0
- package/dist/adk/streaming/index.js +419 -0
- package/dist/adk/streaming/index.js.map +1 -0
- package/dist/adk/tools/index.d.ts +27 -0
- package/dist/adk/tools/index.d.ts.map +1 -0
- package/dist/adk/tools/index.js +506 -0
- package/dist/adk/tools/index.js.map +1 -0
- package/dist/adk/types.d.ts +351 -0
- package/dist/adk/types.d.ts.map +1 -0
- package/dist/adk/types.js +107 -0
- package/dist/adk/types.js.map +1 -0
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +438 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/tool-results.d.ts +57 -0
- package/dist/core/tool-results.d.ts.map +1 -0
- package/dist/core/tool-results.js +133 -0
- package/dist/core/tool-results.js.map +1 -0
- package/dist/core/tracing.d.ts +32 -0
- package/dist/core/tracing.d.ts.map +1 -0
- package/dist/core/tracing.js +132 -0
- package/dist/core/tracing.js.map +1 -0
- package/dist/core/types.d.ts +165 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/demo/agents.d.ts +23 -0
- package/dist/demo/agents.d.ts.map +1 -0
- package/dist/demo/agents.js +69 -0
- package/dist/demo/agents.js.map +1 -0
- package/dist/demo/index.d.ts +2 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +250 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/mock-provider.d.ts +22 -0
- package/dist/demo/mock-provider.d.ts.map +1 -0
- package/dist/demo/mock-provider.js +138 -0
- package/dist/demo/mock-provider.js.map +1 -0
- package/dist/demo/tools.d.ts +14 -0
- package/dist/demo/tools.d.ts.map +1 -0
- package/dist/demo/tools.js +115 -0
- package/dist/demo/tools.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/factory.d.ts +22 -0
- package/dist/memory/factory.d.ts.map +1 -0
- package/dist/memory/factory.js +88 -0
- package/dist/memory/factory.js.map +1 -0
- package/dist/memory/providers/in-memory.d.ts +7 -0
- package/dist/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/memory/providers/in-memory.js +287 -0
- package/dist/memory/providers/in-memory.js.map +1 -0
- package/dist/memory/providers/postgres.d.ts +15 -0
- package/dist/memory/providers/postgres.d.ts.map +1 -0
- package/dist/memory/providers/postgres.js +495 -0
- package/dist/memory/providers/postgres.js.map +1 -0
- package/dist/memory/providers/redis.d.ts +18 -0
- package/dist/memory/providers/redis.d.ts.map +1 -0
- package/dist/memory/providers/redis.js +354 -0
- package/dist/memory/providers/redis.js.map +1 -0
- package/dist/memory/types.d.ts +296 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +93 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/policies/handoff.d.ts +16 -0
- package/dist/policies/handoff.d.ts.map +1 -0
- package/dist/policies/handoff.js +20 -0
- package/dist/policies/handoff.js.map +1 -0
- package/dist/policies/validation.d.ts +14 -0
- package/dist/policies/validation.d.ts.map +1 -0
- package/dist/policies/validation.js +92 -0
- package/dist/policies/validation.js.map +1 -0
- package/dist/providers/mcp.d.ts +17 -0
- package/dist/providers/mcp.d.ts.map +1 -0
- package/dist/providers/mcp.js +111 -0
- package/dist/providers/mcp.js.map +1 -0
- package/dist/providers/model.d.ts +3 -0
- package/dist/providers/model.d.ts.map +1 -0
- package/dist/providers/model.js +113 -0
- package/dist/providers/model.js.map +1 -0
- package/dist/server/index.d.ts +35 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +66 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/server.d.ts +12 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +394 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +456 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +75 -0
- package/dist/server/types.js.map +1 -0
- package/dist/test-utils/db-setup.d.ts +34 -0
- package/dist/test-utils/db-setup.d.ts.map +1 -0
- package/dist/test-utils/db-setup.js +149 -0
- package/dist/test-utils/db-setup.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +199 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-math.d.ts +31 -0
- package/dist/utils/safe-math.d.ts.map +1 -0
- package/dist/utils/safe-math.js +86 -0
- package/dist/utils/safe-math.js.map +1 -0
- package/dist/visualization/example.d.ts +9 -0
- package/dist/visualization/example.d.ts.map +1 -0
- package/dist/visualization/example.js +236 -0
- package/dist/visualization/example.js.map +1 -0
- package/dist/visualization/graphviz.d.ts +42 -0
- package/dist/visualization/graphviz.d.ts.map +1 -0
- package/dist/visualization/graphviz.js +403 -0
- package/dist/visualization/graphviz.js.map +1 -0
- package/dist/visualization/index.d.ts +10 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +12 -0
- package/dist/visualization/index.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JAF ADK Layer - Runner System
|
|
3
|
+
*
|
|
4
|
+
* Functional agent execution system
|
|
5
|
+
*/
|
|
6
|
+
import { throwAgentError } from '../types';
|
|
7
|
+
import { generateRunnerGraph, generateAgentGraph, generateToolGraph } from '../../visualization/graphviz';
|
|
8
|
+
import { getOrCreateSession, addMessageToSession, addArtifactToSession } from '../sessions';
|
|
9
|
+
import { executeTool } from '../tools';
|
|
10
|
+
import { createModelMessage, getFunctionCalls, createUserMessage } from '../content';
|
|
11
|
+
import { createAdkLLMService } from '../providers/llm-service.js';
|
|
12
|
+
import { createAdkLLMConfigFromEnvironment, createAdkLLMServiceConfig } from '../config/llm-config.js';
|
|
13
|
+
// ========== Core Runner Functions ==========
|
|
14
|
+
export const runAgent = async (config, context, message) => {
|
|
15
|
+
const requestId = context.requestId || generateRequestId();
|
|
16
|
+
const startTime = Date.now();
|
|
17
|
+
try {
|
|
18
|
+
// Get or create session
|
|
19
|
+
const session = await getOrCreateSession(config.sessionProvider, {
|
|
20
|
+
appName: context.metadata?.appName || 'default',
|
|
21
|
+
userId: context.userId,
|
|
22
|
+
sessionId: context.sessionId
|
|
23
|
+
});
|
|
24
|
+
// Apply guardrails before adding to session
|
|
25
|
+
const guardedMessage = await applyGuardrails(config.guardrails || [], message, { agent: config.agent, session, previousMessages: session.messages });
|
|
26
|
+
// Add guarded message to session
|
|
27
|
+
const updatedSession = addMessageToSession(session, guardedMessage);
|
|
28
|
+
// Execute agent
|
|
29
|
+
const result = await executeAgent(config, updatedSession, guardedMessage, context);
|
|
30
|
+
// Calculate metadata
|
|
31
|
+
const executionTime = Date.now() - startTime;
|
|
32
|
+
const metadata = {
|
|
33
|
+
requestId,
|
|
34
|
+
agentId: config.agent.id,
|
|
35
|
+
timestamp: new Date(),
|
|
36
|
+
executionTime,
|
|
37
|
+
llmCalls: 1 // Simplified for now
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
...result,
|
|
41
|
+
metadata
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throwAgentError(`Agent execution failed: ${error instanceof Error ? error.message : String(error)}`, config.agent.id, { requestId, context });
|
|
46
|
+
}
|
|
47
|
+
// This should never be reached due to throwAgentError throwing
|
|
48
|
+
throw new Error('Unreachable code');
|
|
49
|
+
};
|
|
50
|
+
export const runAgentStream = async function* (config, context, message) {
|
|
51
|
+
const requestId = context.requestId || generateRequestId();
|
|
52
|
+
try {
|
|
53
|
+
yield createAgentEvent('message_start', { content: message });
|
|
54
|
+
// Get or create session
|
|
55
|
+
const session = await getOrCreateSession(config.sessionProvider, {
|
|
56
|
+
appName: context.metadata?.appName || 'default',
|
|
57
|
+
userId: context.userId,
|
|
58
|
+
sessionId: context.sessionId
|
|
59
|
+
});
|
|
60
|
+
// Apply guardrails before adding to session
|
|
61
|
+
const guardedMessage = await applyGuardrails(config.guardrails || [], message, { agent: config.agent, session, previousMessages: session.messages });
|
|
62
|
+
// Add guarded message to session
|
|
63
|
+
const updatedSession = addMessageToSession(session, guardedMessage);
|
|
64
|
+
// Execute agent with streaming
|
|
65
|
+
yield* executeAgentStream(config, updatedSession, guardedMessage, context);
|
|
66
|
+
yield createAgentEvent('message_complete');
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
yield createAgentEvent('error', { error: error instanceof Error ? error.message : String(error) });
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// ========== Agent Execution ==========
|
|
73
|
+
const executeAgent = async (config, session, message, context) => {
|
|
74
|
+
const agent = config.agent;
|
|
75
|
+
let currentSession = session;
|
|
76
|
+
const toolCalls = [];
|
|
77
|
+
const toolResponses = [];
|
|
78
|
+
// Check if this is a multi-agent
|
|
79
|
+
if (isMultiAgent(agent)) {
|
|
80
|
+
return await executeMultiAgent(config, currentSession, message, context);
|
|
81
|
+
}
|
|
82
|
+
// Call real LLM service
|
|
83
|
+
const llmResponse = await callRealLLM(agent, message, currentSession);
|
|
84
|
+
// Check for function calls in the response
|
|
85
|
+
const functionCalls = getFunctionCalls(llmResponse);
|
|
86
|
+
if (functionCalls.length > 0) {
|
|
87
|
+
// Execute tools
|
|
88
|
+
const toolContext = createToolContext(agent, currentSession, message);
|
|
89
|
+
for (const functionCall of functionCalls) {
|
|
90
|
+
const tool = agent.config.tools.find(t => t.name === functionCall.name);
|
|
91
|
+
if (tool) {
|
|
92
|
+
try {
|
|
93
|
+
const toolResult = await executeTool(tool, functionCall.args, toolContext);
|
|
94
|
+
const functionResponse = {
|
|
95
|
+
id: functionCall.id,
|
|
96
|
+
name: functionCall.name,
|
|
97
|
+
response: toolResult.data,
|
|
98
|
+
success: toolResult.success,
|
|
99
|
+
error: toolResult.error
|
|
100
|
+
};
|
|
101
|
+
toolResponses.push(functionResponse);
|
|
102
|
+
llmResponse.parts.push({
|
|
103
|
+
type: 'function_response',
|
|
104
|
+
functionResponse
|
|
105
|
+
});
|
|
106
|
+
// Handle tool actions
|
|
107
|
+
if (toolContext.actions.transferToAgent) {
|
|
108
|
+
// Handle agent transfer
|
|
109
|
+
const targetAgent = agent.config.subAgents?.find(sub => sub.name === toolContext.actions.transferToAgent);
|
|
110
|
+
if (targetAgent) {
|
|
111
|
+
const transferConfig = { ...config, agent: { ...agent, config: targetAgent } };
|
|
112
|
+
return await executeAgent(transferConfig, currentSession, message, context);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (toolContext.actions.addArtifact) {
|
|
116
|
+
// Artifacts are handled via the actions object
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const functionResponse = {
|
|
121
|
+
id: functionCall.id,
|
|
122
|
+
name: functionCall.name,
|
|
123
|
+
response: null,
|
|
124
|
+
success: false,
|
|
125
|
+
error: error instanceof Error ? error.message : 'Tool execution failed'
|
|
126
|
+
};
|
|
127
|
+
toolResponses.push(functionResponse);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
toolCalls.push(functionCall);
|
|
131
|
+
}
|
|
132
|
+
// If tools were executed, make a second LLM call to get final response with tool results
|
|
133
|
+
if (toolResponses.length > 0) {
|
|
134
|
+
// Update session with the tool calls and responses first
|
|
135
|
+
currentSession = addMessageToSession(currentSession, llmResponse);
|
|
136
|
+
// Create tool response messages for each tool call (required by OpenAI format)
|
|
137
|
+
for (const toolResponse of toolResponses) {
|
|
138
|
+
const toolResultMessage = {
|
|
139
|
+
role: 'tool', // Tool responses must have role 'tool' for OpenAI API
|
|
140
|
+
parts: [{
|
|
141
|
+
type: 'function_response',
|
|
142
|
+
functionResponse: toolResponse
|
|
143
|
+
}],
|
|
144
|
+
metadata: {}
|
|
145
|
+
};
|
|
146
|
+
// Add each tool response message to session
|
|
147
|
+
currentSession = addMessageToSession(currentSession, toolResultMessage);
|
|
148
|
+
}
|
|
149
|
+
// Create a user message asking the LLM to provide a final response
|
|
150
|
+
const followUpMessage = createUserMessage('Please provide a final response based on the tool results.');
|
|
151
|
+
// Make second LLM call to get final response
|
|
152
|
+
const finalResponse = await callRealLLM(agent, followUpMessage, currentSession);
|
|
153
|
+
// Update session with final response
|
|
154
|
+
currentSession = addMessageToSession(currentSession, finalResponse);
|
|
155
|
+
await config.sessionProvider.updateSession(currentSession);
|
|
156
|
+
// Return the final response that includes tool results
|
|
157
|
+
return {
|
|
158
|
+
content: finalResponse,
|
|
159
|
+
session: currentSession,
|
|
160
|
+
toolCalls,
|
|
161
|
+
toolResponses,
|
|
162
|
+
metadata: {
|
|
163
|
+
requestId: generateRequestId(),
|
|
164
|
+
agentId: agent.id,
|
|
165
|
+
llmCalls: 2, // Two LLM calls made
|
|
166
|
+
timestamp: new Date()
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Update session with response (no tools were called)
|
|
172
|
+
currentSession = addMessageToSession(currentSession, llmResponse);
|
|
173
|
+
await config.sessionProvider.updateSession(currentSession);
|
|
174
|
+
return {
|
|
175
|
+
content: llmResponse,
|
|
176
|
+
session: currentSession,
|
|
177
|
+
toolCalls,
|
|
178
|
+
toolResponses,
|
|
179
|
+
metadata: {
|
|
180
|
+
requestId: generateRequestId(),
|
|
181
|
+
agentId: agent.id,
|
|
182
|
+
llmCalls: 1, // One LLM call made
|
|
183
|
+
timestamp: new Date()
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
const executeAgentStream = async function* (config, session, message, context) {
|
|
188
|
+
const agent = config.agent;
|
|
189
|
+
try {
|
|
190
|
+
// Create LLM service instance with environment-based configuration
|
|
191
|
+
const llmConfig = createAdkLLMConfigFromEnvironment();
|
|
192
|
+
const llmService = createAdkLLMService(createAdkLLMServiceConfig(llmConfig));
|
|
193
|
+
// Call real streaming LLM
|
|
194
|
+
const streamGenerator = llmService.generateStreamingResponse(agent, session, message, {
|
|
195
|
+
modelOverride: typeof agent.config.model === 'string' ? agent.config.model : undefined,
|
|
196
|
+
temperature: 0.7,
|
|
197
|
+
maxTokens: 2000
|
|
198
|
+
});
|
|
199
|
+
// Stream real LLM responses
|
|
200
|
+
for await (const chunk of streamGenerator) {
|
|
201
|
+
if (chunk.isDone) {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
if (chunk.delta) {
|
|
205
|
+
yield createAgentEvent('message_delta', {
|
|
206
|
+
content: createModelMessage(chunk.delta)
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (chunk.functionCall) {
|
|
210
|
+
yield createAgentEvent('function_call_start', {
|
|
211
|
+
functionCall: chunk.functionCall
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
console.error('[ADK:STREAM] Real streaming failed:', error);
|
|
218
|
+
// Fallback to error message
|
|
219
|
+
yield createAgentEvent('error', {
|
|
220
|
+
error: `Streaming error: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
// ========== Multi-Agent Execution ==========
|
|
225
|
+
const executeMultiAgent = async (config, session, message, context) => {
|
|
226
|
+
const multiConfig = config.agent.config;
|
|
227
|
+
switch (multiConfig.delegationStrategy) {
|
|
228
|
+
case 'sequential':
|
|
229
|
+
return await executeSequentialAgents(config, session, message, context);
|
|
230
|
+
case 'parallel':
|
|
231
|
+
return await executeParallelAgents(config, session, message, context);
|
|
232
|
+
case 'conditional':
|
|
233
|
+
return await executeConditionalAgents(config, session, message, context);
|
|
234
|
+
case 'hierarchical':
|
|
235
|
+
return await executeHierarchicalAgents(config, session, message, context);
|
|
236
|
+
default:
|
|
237
|
+
throwAgentError(`Unknown delegation strategy: ${multiConfig.delegationStrategy}`);
|
|
238
|
+
}
|
|
239
|
+
// This should never be reached due to throwAgentError throwing
|
|
240
|
+
throw new Error('Unreachable code');
|
|
241
|
+
};
|
|
242
|
+
const executeSequentialAgents = async (config, session, message, context) => {
|
|
243
|
+
const multiConfig = config.agent.config;
|
|
244
|
+
let currentSession = session;
|
|
245
|
+
let currentMessage = message;
|
|
246
|
+
let finalResponse = null;
|
|
247
|
+
for (const subAgentConfig of multiConfig.subAgents) {
|
|
248
|
+
const subAgent = { ...config.agent, config: subAgentConfig };
|
|
249
|
+
const subConfig = { ...config, agent: subAgent };
|
|
250
|
+
const response = await executeAgent(subConfig, currentSession, currentMessage, context);
|
|
251
|
+
currentSession = response.session;
|
|
252
|
+
currentMessage = response.content;
|
|
253
|
+
finalResponse = response;
|
|
254
|
+
}
|
|
255
|
+
return finalResponse;
|
|
256
|
+
};
|
|
257
|
+
const executeParallelAgents = async (config, session, message, context) => {
|
|
258
|
+
const multiConfig = config.agent.config;
|
|
259
|
+
const promises = multiConfig.subAgents.map(subAgentConfig => {
|
|
260
|
+
const subAgent = { ...config.agent, config: subAgentConfig };
|
|
261
|
+
const subConfig = { ...config, agent: subAgent };
|
|
262
|
+
return executeAgent(subConfig, session, message, context);
|
|
263
|
+
});
|
|
264
|
+
const responses = await Promise.all(promises);
|
|
265
|
+
// Merge responses (simplified - just use the first one)
|
|
266
|
+
return responses[0];
|
|
267
|
+
};
|
|
268
|
+
const executeConditionalAgents = async (config, session, message, context) => {
|
|
269
|
+
const multiConfig = config.agent.config;
|
|
270
|
+
// Simple condition - choose based on message content
|
|
271
|
+
// In real implementation, this would be more sophisticated
|
|
272
|
+
const messageText = message.parts
|
|
273
|
+
.filter(p => p.type === 'text')
|
|
274
|
+
.map(p => p.text)
|
|
275
|
+
.join(' ');
|
|
276
|
+
let selectedAgent = multiConfig.subAgents[0]; // Default
|
|
277
|
+
if (messageText.toLowerCase().includes('weather')) {
|
|
278
|
+
selectedAgent = multiConfig.subAgents.find(a => a.name.includes('weather')) || selectedAgent;
|
|
279
|
+
}
|
|
280
|
+
else if (messageText.toLowerCase().includes('news')) {
|
|
281
|
+
selectedAgent = multiConfig.subAgents.find(a => a.name.includes('news')) || selectedAgent;
|
|
282
|
+
}
|
|
283
|
+
const subAgent = { ...config.agent, config: selectedAgent };
|
|
284
|
+
const subConfig = { ...config, agent: subAgent };
|
|
285
|
+
return await executeAgent(subConfig, session, message, context);
|
|
286
|
+
};
|
|
287
|
+
const executeHierarchicalAgents = async (config, session, message, context) => {
|
|
288
|
+
// For now, just delegate to the first sub-agent
|
|
289
|
+
return await executeConditionalAgents(config, session, message, context);
|
|
290
|
+
};
|
|
291
|
+
// ========== Tool Context Creation ==========
|
|
292
|
+
const createToolContext = (agent, session, message) => {
|
|
293
|
+
const actions = {
|
|
294
|
+
transferToAgent: undefined,
|
|
295
|
+
endConversation: false,
|
|
296
|
+
setOutputKey: undefined,
|
|
297
|
+
addArtifact: (key, value) => {
|
|
298
|
+
// This would update the session
|
|
299
|
+
addArtifactToSession(session, key, value);
|
|
300
|
+
},
|
|
301
|
+
getArtifact: (key) => {
|
|
302
|
+
return session.artifacts[key];
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
return {
|
|
306
|
+
agent,
|
|
307
|
+
session,
|
|
308
|
+
message,
|
|
309
|
+
actions,
|
|
310
|
+
metadata: {
|
|
311
|
+
timestamp: new Date()
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
// ========== Guardrails ==========
|
|
316
|
+
const applyGuardrails = async (guardrails, message, context) => {
|
|
317
|
+
let currentMessage = message;
|
|
318
|
+
for (const guardrail of guardrails) {
|
|
319
|
+
const result = await guardrail(currentMessage, {
|
|
320
|
+
agent: context.agent,
|
|
321
|
+
session: context.session,
|
|
322
|
+
previousMessages: context.previousMessages
|
|
323
|
+
});
|
|
324
|
+
if (!result.allowed) {
|
|
325
|
+
throwAgentError(`Message blocked by guardrail: ${result.reason}`);
|
|
326
|
+
}
|
|
327
|
+
if (result.modifiedMessage) {
|
|
328
|
+
currentMessage = result.modifiedMessage;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return currentMessage;
|
|
332
|
+
};
|
|
333
|
+
// ========== Real LLM Integration ==========
|
|
334
|
+
const callRealLLM = async (agent, message, session) => {
|
|
335
|
+
try {
|
|
336
|
+
// Create LLM service instance with environment-based configuration
|
|
337
|
+
const llmConfig = createAdkLLMConfigFromEnvironment();
|
|
338
|
+
const llmService = createAdkLLMService(createAdkLLMServiceConfig(llmConfig));
|
|
339
|
+
// Call real LLM
|
|
340
|
+
const response = await llmService.generateResponse(agent, session, message, {
|
|
341
|
+
modelOverride: typeof agent.config.model === 'string' ? agent.config.model : undefined,
|
|
342
|
+
temperature: 0.7,
|
|
343
|
+
maxTokens: 2000
|
|
344
|
+
});
|
|
345
|
+
return response.content;
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
console.error('[ADK:LLM] Real LLM call failed:', error);
|
|
349
|
+
// Check if this is a critical error that should propagate
|
|
350
|
+
if (error instanceof Error && error.message.includes('Invalid model')) {
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
// Fallback to a simple error response for other errors
|
|
354
|
+
return createModelMessage(`I apologize, but I'm experiencing technical difficulties. Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
// ========== Mock Tool Detection Logic Removed ==========
|
|
358
|
+
// This mock logic has been removed since real LLM now handles tool calling decisions
|
|
359
|
+
const generateCallId = () => {
|
|
360
|
+
return `call_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
|
|
361
|
+
};
|
|
362
|
+
// ========== Utility Functions ==========
|
|
363
|
+
const generateRequestId = () => {
|
|
364
|
+
// Use crypto-based ID generation for pure functional approach
|
|
365
|
+
return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
366
|
+
};
|
|
367
|
+
const createAgentEvent = (type, data) => {
|
|
368
|
+
return {
|
|
369
|
+
type,
|
|
370
|
+
timestamp: new Date(),
|
|
371
|
+
...data
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
const isMultiAgent = (agent) => {
|
|
375
|
+
return agent.config.subAgents !== undefined && agent.config.subAgents.length > 0;
|
|
376
|
+
};
|
|
377
|
+
// ========== Runner Validation ==========
|
|
378
|
+
export const validateRunnerConfig = (config) => {
|
|
379
|
+
const errors = [];
|
|
380
|
+
if (!config.agent) {
|
|
381
|
+
errors.push('Agent is required');
|
|
382
|
+
}
|
|
383
|
+
if (!config.sessionProvider) {
|
|
384
|
+
errors.push('Session provider is required');
|
|
385
|
+
}
|
|
386
|
+
if (config.maxLLMCalls && config.maxLLMCalls <= 0) {
|
|
387
|
+
errors.push('Max LLM calls must be positive');
|
|
388
|
+
}
|
|
389
|
+
if (config.timeout && config.timeout <= 0) {
|
|
390
|
+
errors.push('Timeout must be positive');
|
|
391
|
+
}
|
|
392
|
+
if (errors.length > 0) {
|
|
393
|
+
throwAgentError(`Invalid runner config: ${errors.join(', ')}`);
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
export const validateRunContext = (context) => {
|
|
397
|
+
const errors = [];
|
|
398
|
+
if (!context.userId || context.userId.trim().length === 0) {
|
|
399
|
+
errors.push('User ID is required');
|
|
400
|
+
}
|
|
401
|
+
if (errors.length > 0) {
|
|
402
|
+
throwAgentError(`Invalid run context: ${errors.join(', ')}`);
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
// ========== Runner Builder ==========
|
|
406
|
+
export const createRunnerConfig = (agent, sessionProvider, options) => {
|
|
407
|
+
const config = {
|
|
408
|
+
agent,
|
|
409
|
+
sessionProvider,
|
|
410
|
+
...options
|
|
411
|
+
};
|
|
412
|
+
validateRunnerConfig(config);
|
|
413
|
+
return config;
|
|
414
|
+
};
|
|
415
|
+
// ========== Error Handling ==========
|
|
416
|
+
export const withRunnerErrorHandling = (fn, agentId) => {
|
|
417
|
+
return async (...args) => {
|
|
418
|
+
try {
|
|
419
|
+
return await fn(...args);
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
if (error instanceof Error &&
|
|
423
|
+
(error.name === 'AgentError' || error.name === 'ToolError' || error.name === 'SessionError')) {
|
|
424
|
+
throw error;
|
|
425
|
+
}
|
|
426
|
+
throwAgentError(`Runner operation failed: ${error instanceof Error ? error.message : String(error)}`, agentId, { originalError: error });
|
|
427
|
+
// This should never be reached due to throwAgentError throwing
|
|
428
|
+
throw new Error('Unreachable code');
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
// ========== Runner Statistics ==========
|
|
433
|
+
export const getRunnerStats = (config) => {
|
|
434
|
+
return {
|
|
435
|
+
agentId: config.agent.id,
|
|
436
|
+
agentName: config.agent.config.name,
|
|
437
|
+
toolCount: config.agent.config.tools.length,
|
|
438
|
+
subAgentCount: config.agent.config.subAgents?.length || 0,
|
|
439
|
+
hasGuardrails: (config.guardrails?.length || 0) > 0,
|
|
440
|
+
maxLLMCalls: config.maxLLMCalls,
|
|
441
|
+
timeout: config.timeout,
|
|
442
|
+
isMultiAgent: isMultiAgent(config.agent)
|
|
443
|
+
};
|
|
444
|
+
};
|
|
445
|
+
// ========== Visualization Functions ==========
|
|
446
|
+
export const generateRunnerVisualization = async (config, options = {}) => {
|
|
447
|
+
return await generateRunnerGraph(config, options);
|
|
448
|
+
};
|
|
449
|
+
export const generateAgentVisualization = async (agents, options = {}) => {
|
|
450
|
+
return await generateAgentGraph(agents, options);
|
|
451
|
+
};
|
|
452
|
+
export const generateToolVisualization = async (tools, options = {}) => {
|
|
453
|
+
return await generateToolGraph(tools, options);
|
|
454
|
+
};
|
|
455
|
+
export const generateRunnerGraphPng = async (config, outputPath) => {
|
|
456
|
+
const options = {
|
|
457
|
+
title: `JAF Runner: ${config.agent.config.name}`,
|
|
458
|
+
outputFormat: 'png',
|
|
459
|
+
outputPath: outputPath || './runner-visualization',
|
|
460
|
+
showToolDetails: true,
|
|
461
|
+
showSubAgents: true,
|
|
462
|
+
colorScheme: 'modern'
|
|
463
|
+
};
|
|
464
|
+
return await generateRunnerVisualization(config, options);
|
|
465
|
+
};
|
|
466
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adk/runners/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JAF ADK Layer - Schema Validation
|
|
3
|
+
*
|
|
4
|
+
* Functional schema validation system
|
|
5
|
+
*/
|
|
6
|
+
import { SchemaValidator, ValidationResult, JsonSchema, TypeGuard } from '../types';
|
|
7
|
+
export { createValidationError } from '../types';
|
|
8
|
+
export declare const createSchemaValidator: <T>(schema: JsonSchema, validator: TypeGuard<T>) => SchemaValidator<T>;
|
|
9
|
+
export declare const validateAgainstJsonSchema: (data: unknown, schema: JsonSchema) => ValidationResult<unknown>;
|
|
10
|
+
export declare const isString: TypeGuard<string>;
|
|
11
|
+
export declare const isNumber: TypeGuard<number>;
|
|
12
|
+
export declare const isBoolean: TypeGuard<boolean>;
|
|
13
|
+
export declare const isObject: TypeGuard<Record<string, unknown>>;
|
|
14
|
+
export declare const isArray: TypeGuard<unknown[]>;
|
|
15
|
+
export declare const isNull: TypeGuard<null>;
|
|
16
|
+
export declare const isUndefined: TypeGuard<undefined>;
|
|
17
|
+
export declare const stringSchema: (options?: {
|
|
18
|
+
description?: string;
|
|
19
|
+
enum?: string[];
|
|
20
|
+
default?: string;
|
|
21
|
+
}) => JsonSchema;
|
|
22
|
+
export declare const numberSchema: (options?: {
|
|
23
|
+
description?: string;
|
|
24
|
+
enum?: number[];
|
|
25
|
+
default?: number;
|
|
26
|
+
}) => JsonSchema;
|
|
27
|
+
export declare const booleanSchema: (options?: {
|
|
28
|
+
description?: string;
|
|
29
|
+
default?: boolean;
|
|
30
|
+
}) => JsonSchema;
|
|
31
|
+
export declare const objectSchema: (properties: Record<string, JsonSchema>, required?: string[], options?: {
|
|
32
|
+
description?: string;
|
|
33
|
+
}) => JsonSchema;
|
|
34
|
+
export declare const arraySchema: (items: JsonSchema, options?: {
|
|
35
|
+
description?: string;
|
|
36
|
+
}) => JsonSchema;
|
|
37
|
+
export declare const createStringValidator: (options?: {
|
|
38
|
+
description?: string;
|
|
39
|
+
enum?: string[];
|
|
40
|
+
default?: string;
|
|
41
|
+
}) => SchemaValidator<string>;
|
|
42
|
+
export declare const createNumberValidator: (options?: {
|
|
43
|
+
description?: string;
|
|
44
|
+
enum?: number[];
|
|
45
|
+
default?: number;
|
|
46
|
+
}) => SchemaValidator<number>;
|
|
47
|
+
export declare const createBooleanValidator: (options?: {
|
|
48
|
+
description?: string;
|
|
49
|
+
default?: boolean;
|
|
50
|
+
}) => SchemaValidator<boolean>;
|
|
51
|
+
export declare const createObjectValidator: <T extends Record<string, unknown>>(properties: Record<string, JsonSchema>, required?: string[], typeGuard?: TypeGuard<T>) => SchemaValidator<T>;
|
|
52
|
+
export declare const createArrayValidator: <T extends unknown[]>(items: JsonSchema, typeGuard?: TypeGuard<T>) => SchemaValidator<T>;
|
|
53
|
+
export declare const isOptional: <T>(guard: TypeGuard<T>) => TypeGuard<T | undefined>;
|
|
54
|
+
export declare const isNullable: <T>(guard: TypeGuard<T>) => TypeGuard<T | null>;
|
|
55
|
+
export declare const isUnion: <T>(...guards: TypeGuard<any>[]) => TypeGuard<T>;
|
|
56
|
+
export declare const hasProperty: <K extends string>(key: K) => TypeGuard<Record<K, unknown>>;
|
|
57
|
+
export declare const hasProperties: <K extends string>(...keys: K[]) => TypeGuard<Record<K, unknown>>;
|
|
58
|
+
export declare const validateInput: <T>(validator: SchemaValidator<T>, data: unknown) => ValidationResult<T>;
|
|
59
|
+
export declare const validateOutput: <T>(validator: SchemaValidator<T>, data: unknown) => ValidationResult<T>;
|
|
60
|
+
export declare const assertValid: <T>(validator: SchemaValidator<T>, data: unknown) => T;
|
|
61
|
+
export declare const isValid: <T>(validator: SchemaValidator<T>, data: unknown) => data is T;
|
|
62
|
+
export declare const transformAndValidate: <T, U>(validator: SchemaValidator<U>, transformer: (input: T) => U, data: T) => ValidationResult<U>;
|
|
63
|
+
export declare const validateAndTransform: <T, U>(inputValidator: SchemaValidator<T>, transformer: (input: T) => U, data: unknown) => ValidationResult<U>;
|
|
64
|
+
export interface WeatherQuery {
|
|
65
|
+
location: string;
|
|
66
|
+
units?: 'celsius' | 'fahrenheit';
|
|
67
|
+
includeHourly?: boolean;
|
|
68
|
+
[key: string]: unknown;
|
|
69
|
+
}
|
|
70
|
+
export declare const weatherQueryValidator: SchemaValidator<WeatherQuery>;
|
|
71
|
+
export interface WeatherResponse {
|
|
72
|
+
location: string;
|
|
73
|
+
temperature: number;
|
|
74
|
+
condition: string;
|
|
75
|
+
humidity: number;
|
|
76
|
+
forecast?: Array<{
|
|
77
|
+
time: string;
|
|
78
|
+
temperature: number;
|
|
79
|
+
condition: string;
|
|
80
|
+
}>;
|
|
81
|
+
[key: string]: unknown;
|
|
82
|
+
}
|
|
83
|
+
export declare const weatherResponseValidator: SchemaValidator<WeatherResponse>;
|
|
84
|
+
export declare const withSchemaValidation: <T extends unknown[], R>(fn: (...args: T) => R, inputValidators?: SchemaValidator<unknown>[], outputValidator?: SchemaValidator<R>) => (...args: T) => R;
|
|
85
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adk/schemas/index.ts"],"names":[],"mappings":"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"}
|