jiva-core 0.1.0
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/.env.example +18 -0
- package/.fluen/cache/state.json +7 -0
- package/README.md +350 -0
- package/actions/action_registry.py +75 -0
- package/actions/python_coder.py +470 -0
- package/api/main.py +269 -0
- package/dist/core/agent.d.ts +69 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +214 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/config.d.ts +222 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +138 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/workspace.d.ts +53 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +164 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/cli/index.d.ts +6 -0
- package/dist/interfaces/cli/index.d.ts.map +1 -0
- package/dist/interfaces/cli/index.js +257 -0
- package/dist/interfaces/cli/index.js.map +1 -0
- package/dist/interfaces/cli/repl.d.ts +9 -0
- package/dist/interfaces/cli/repl.d.ts.map +1 -0
- package/dist/interfaces/cli/repl.js +139 -0
- package/dist/interfaces/cli/repl.js.map +1 -0
- package/dist/interfaces/cli/setup-wizard.d.ts +9 -0
- package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -0
- package/dist/interfaces/cli/setup-wizard.js +321 -0
- package/dist/interfaces/cli/setup-wizard.js.map +1 -0
- package/dist/mcp/client.d.ts +58 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +178 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/server-manager.d.ts +58 -0
- package/dist/mcp/server-manager.d.ts.map +1 -0
- package/dist/mcp/server-manager.js +135 -0
- package/dist/mcp/server-manager.js.map +1 -0
- package/dist/models/base.d.ts +57 -0
- package/dist/models/base.d.ts.map +1 -0
- package/dist/models/base.js +5 -0
- package/dist/models/base.js.map +1 -0
- package/dist/models/harmony.d.ts +78 -0
- package/dist/models/harmony.d.ts.map +1 -0
- package/dist/models/harmony.js +226 -0
- package/dist/models/harmony.js.map +1 -0
- package/dist/models/krutrim.d.ts +30 -0
- package/dist/models/krutrim.d.ts.map +1 -0
- package/dist/models/krutrim.js +185 -0
- package/dist/models/krutrim.js.map +1 -0
- package/dist/models/orchestrator.d.ts +49 -0
- package/dist/models/orchestrator.d.ts.map +1 -0
- package/dist/models/orchestrator.js +140 -0
- package/dist/models/orchestrator.js.map +1 -0
- package/dist/utils/errors.d.ts +23 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +45 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +74 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/BUILD.md +317 -0
- package/docs/DEV_WORKFLOW.md +197 -0
- package/docs/FILESYSTEM_ACCESS.md +244 -0
- package/docs/IMPLEMENTATION_SUMMARY.md +459 -0
- package/docs/QUICKSTART.md +162 -0
- package/docs/TROUBLESHOOTING.md +393 -0
- package/examples/code-review-directive.md +26 -0
- package/examples/data-analysis-directive.md +26 -0
- package/examples/programmatic-usage.ts +120 -0
- package/jiva-directive.md +24 -0
- package/package.json +46 -0
- package/setup.sh +65 -0
- package/src/core/agent.ts +275 -0
- package/src/core/config.ts +177 -0
- package/src/core/workspace.ts +205 -0
- package/src/index.ts +21 -0
- package/src/interfaces/cli/index.ts +290 -0
- package/src/interfaces/cli/repl.ts +182 -0
- package/src/interfaces/cli/setup-wizard.ts +355 -0
- package/src/mcp/client.ts +231 -0
- package/src/mcp/server-manager.ts +168 -0
- package/src/models/base.ts +63 -0
- package/src/models/harmony.ts +301 -0
- package/src/models/krutrim.ts +236 -0
- package/src/models/orchestrator.ts +180 -0
- package/src/utils/errors.ts +41 -0
- package/src/utils/logger.ts +87 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages lifecycle of MCP servers based on configuration
|
|
5
|
+
*/
|
|
6
|
+
import { MCPClient } from './client.js';
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
import { MCPError } from '../utils/errors.js';
|
|
9
|
+
export class MCPServerManager {
|
|
10
|
+
mcpClient;
|
|
11
|
+
serverConfigs = new Map();
|
|
12
|
+
constructor() {
|
|
13
|
+
this.mcpClient = new MCPClient();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Initialize servers from configuration
|
|
17
|
+
*/
|
|
18
|
+
async initialize(servers) {
|
|
19
|
+
logger.info('Initializing MCP servers...');
|
|
20
|
+
const serverEntries = Object.entries(servers);
|
|
21
|
+
const enabledServers = serverEntries.filter(([_, config]) => config.enabled);
|
|
22
|
+
logger.info(`Found ${enabledServers.length} enabled MCP servers`);
|
|
23
|
+
// Store configs
|
|
24
|
+
for (const [name, config] of serverEntries) {
|
|
25
|
+
this.serverConfigs.set(name, config);
|
|
26
|
+
}
|
|
27
|
+
// Connect to enabled servers
|
|
28
|
+
const connectionPromises = enabledServers.map(async ([name, config]) => {
|
|
29
|
+
try {
|
|
30
|
+
await this.connectServer(name, config);
|
|
31
|
+
return { name, success: true };
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.warn(`Failed to connect to MCP server '${name}': ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
// Continue with other servers even if one fails
|
|
36
|
+
return { name, success: false };
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const results = await Promise.allSettled(connectionPromises);
|
|
40
|
+
const connectedServers = this.mcpClient.getConnectedServers();
|
|
41
|
+
if (connectedServers.length > 0) {
|
|
42
|
+
logger.success(`MCP servers connected: ${connectedServers.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
else if (enabledServers.length > 0) {
|
|
45
|
+
logger.warn('No MCP servers connected. Agent will run without external tools.');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger.info('No MCP servers enabled. Agent will run without external tools.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Connect to a specific server
|
|
53
|
+
*/
|
|
54
|
+
async connectServer(name, config) {
|
|
55
|
+
await this.mcpClient.connect(name, config.command, config.args || [], config.env);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Add and connect to a new server
|
|
59
|
+
*/
|
|
60
|
+
async addServer(name, config) {
|
|
61
|
+
if (this.serverConfigs.has(name)) {
|
|
62
|
+
throw new MCPError(`Server '${name}' already exists`, name);
|
|
63
|
+
}
|
|
64
|
+
this.serverConfigs.set(name, config);
|
|
65
|
+
if (config.enabled) {
|
|
66
|
+
await this.connectServer(name, config);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Remove and disconnect from a server
|
|
71
|
+
*/
|
|
72
|
+
async removeServer(name) {
|
|
73
|
+
await this.mcpClient.disconnect(name);
|
|
74
|
+
this.serverConfigs.delete(name);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Enable a server and connect
|
|
78
|
+
*/
|
|
79
|
+
async enableServer(name) {
|
|
80
|
+
const config = this.serverConfigs.get(name);
|
|
81
|
+
if (!config) {
|
|
82
|
+
throw new MCPError(`Server '${name}' not found in configuration`, name);
|
|
83
|
+
}
|
|
84
|
+
config.enabled = true;
|
|
85
|
+
if (!this.mcpClient.isConnected(name)) {
|
|
86
|
+
await this.connectServer(name, config);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Disable a server and disconnect
|
|
91
|
+
*/
|
|
92
|
+
async disableServer(name) {
|
|
93
|
+
const config = this.serverConfigs.get(name);
|
|
94
|
+
if (!config) {
|
|
95
|
+
throw new MCPError(`Server '${name}' not found in configuration`, name);
|
|
96
|
+
}
|
|
97
|
+
config.enabled = false;
|
|
98
|
+
await this.mcpClient.disconnect(name);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the MCP client instance
|
|
102
|
+
*/
|
|
103
|
+
getClient() {
|
|
104
|
+
return this.mcpClient;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all server configurations
|
|
108
|
+
*/
|
|
109
|
+
getServerConfigs() {
|
|
110
|
+
return new Map(this.serverConfigs);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Cleanup all servers
|
|
114
|
+
*/
|
|
115
|
+
async cleanup() {
|
|
116
|
+
logger.info('Cleaning up MCP servers...');
|
|
117
|
+
await this.mcpClient.disconnectAll();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get server status
|
|
121
|
+
*/
|
|
122
|
+
getServerStatus() {
|
|
123
|
+
return Array.from(this.serverConfigs.entries()).map(([name, config]) => {
|
|
124
|
+
const connected = this.mcpClient.isConnected(name);
|
|
125
|
+
const tools = connected ? this.mcpClient.getServerTools(name) : [];
|
|
126
|
+
return {
|
|
127
|
+
name,
|
|
128
|
+
enabled: config.enabled,
|
|
129
|
+
connected,
|
|
130
|
+
toolCount: tools.length,
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../src/mcp/server-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base model interfaces and types
|
|
3
|
+
*/
|
|
4
|
+
export interface Message {
|
|
5
|
+
role: 'system' | 'developer' | 'user' | 'assistant' | 'tool';
|
|
6
|
+
content: string | MessageContent[];
|
|
7
|
+
name?: string;
|
|
8
|
+
tool_call_id?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface MessageContent {
|
|
11
|
+
type: 'text' | 'image_url';
|
|
12
|
+
text?: string;
|
|
13
|
+
image_url?: {
|
|
14
|
+
url: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ModelResponse {
|
|
18
|
+
content: string;
|
|
19
|
+
toolCalls?: ToolCall[];
|
|
20
|
+
usage?: {
|
|
21
|
+
promptTokens: number;
|
|
22
|
+
completionTokens: number;
|
|
23
|
+
totalTokens: number;
|
|
24
|
+
};
|
|
25
|
+
raw?: any;
|
|
26
|
+
}
|
|
27
|
+
export interface ToolCall {
|
|
28
|
+
id: string;
|
|
29
|
+
type: 'function';
|
|
30
|
+
function: {
|
|
31
|
+
name: string;
|
|
32
|
+
arguments: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface Tool {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
parameters: {
|
|
39
|
+
type: 'object';
|
|
40
|
+
properties: Record<string, any>;
|
|
41
|
+
required?: string[];
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface ChatCompletionOptions {
|
|
45
|
+
model: string;
|
|
46
|
+
messages: Message[];
|
|
47
|
+
tools?: Tool[];
|
|
48
|
+
temperature?: number;
|
|
49
|
+
maxTokens?: number;
|
|
50
|
+
stream?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface IModel {
|
|
53
|
+
chat(options: ChatCompletionOptions): Promise<ModelResponse>;
|
|
54
|
+
supportsVision(): boolean;
|
|
55
|
+
supportsToolCalling(): boolean;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/models/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,cAAc,IAAI,OAAO,CAAC;IAC1B,mBAAmB,IAAI,OAAO,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/models/base.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harmony Response Format Handler
|
|
3
|
+
*
|
|
4
|
+
* Implements the Harmony format required by gpt-oss-120b models.
|
|
5
|
+
* Handles multi-channel output, tool calling, and structured message formatting.
|
|
6
|
+
*
|
|
7
|
+
* Reference: https://github.com/openai/harmony
|
|
8
|
+
*/
|
|
9
|
+
export interface HarmonyMessage {
|
|
10
|
+
role: 'system' | 'developer' | 'user' | 'assistant' | 'tool';
|
|
11
|
+
content: string | HarmonyContent[];
|
|
12
|
+
name?: string;
|
|
13
|
+
tool_call_id?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface HarmonyContent {
|
|
16
|
+
type: 'text' | 'image_url';
|
|
17
|
+
text?: string;
|
|
18
|
+
image_url?: {
|
|
19
|
+
url: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface HarmonyToolDefinition {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
parameters: {
|
|
26
|
+
type: 'object';
|
|
27
|
+
properties: Record<string, any>;
|
|
28
|
+
required?: string[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface HarmonyToolCall {
|
|
32
|
+
id: string;
|
|
33
|
+
type: 'function';
|
|
34
|
+
function: {
|
|
35
|
+
name: string;
|
|
36
|
+
arguments: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface ParsedHarmonyResponse {
|
|
40
|
+
analysis?: string;
|
|
41
|
+
commentary?: string;
|
|
42
|
+
final?: string;
|
|
43
|
+
toolCalls: HarmonyToolCall[];
|
|
44
|
+
rawResponse: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Formats tools into Harmony's TypeScript-like syntax for the developer message
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatToolsForHarmony(tools: HarmonyToolDefinition[]): string;
|
|
50
|
+
/**
|
|
51
|
+
* Formats messages into Harmony format
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatMessagesForHarmony(messages: HarmonyMessage[], tools?: HarmonyToolDefinition[]): HarmonyMessage[];
|
|
54
|
+
/**
|
|
55
|
+
* Parses Harmony response with multi-channel support
|
|
56
|
+
*
|
|
57
|
+
* Expected format:
|
|
58
|
+
* <|channel|>analysis
|
|
59
|
+
* [chain of thought content]
|
|
60
|
+
* <|channel|>final
|
|
61
|
+
* [final response]
|
|
62
|
+
* <|call|>function_name({"param": "value"})<|return|>
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseHarmonyResponse(response: string): ParsedHarmonyResponse;
|
|
65
|
+
/**
|
|
66
|
+
* Extracts assistant message with malformed tool call detection
|
|
67
|
+
* This handles cases where gpt-oss-120b generates incorrect tool call formats
|
|
68
|
+
*/
|
|
69
|
+
export declare function extractAssistantMessage(response: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Validates tool call against available tools
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateToolCall(toolCall: HarmonyToolCall, availableTools: HarmonyToolDefinition[]): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Formats tool result for Harmony format
|
|
76
|
+
*/
|
|
77
|
+
export declare function formatToolResult(toolCallId: string, toolName: string, result: any): HarmonyMessage;
|
|
78
|
+
//# sourceMappingURL=harmony.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harmony.d.ts","sourceRoot":"","sources":["../../src/models/harmony.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAoD5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,CAAC,EAAE,qBAAqB,EAAE,GAC9B,cAAc,EAAE,CAmBlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAmF5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAchE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,qBAAqB,EAAE,GACtC,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,cAAc,CAOhB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harmony Response Format Handler
|
|
3
|
+
*
|
|
4
|
+
* Implements the Harmony format required by gpt-oss-120b models.
|
|
5
|
+
* Handles multi-channel output, tool calling, and structured message formatting.
|
|
6
|
+
*
|
|
7
|
+
* Reference: https://github.com/openai/harmony
|
|
8
|
+
*/
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
import { ToolCallError } from '../utils/errors.js';
|
|
11
|
+
/**
|
|
12
|
+
* Formats tools into Harmony's TypeScript-like syntax for the developer message
|
|
13
|
+
*/
|
|
14
|
+
export function formatToolsForHarmony(tools) {
|
|
15
|
+
if (tools.length === 0)
|
|
16
|
+
return '';
|
|
17
|
+
const toolDefinitions = tools.map(tool => {
|
|
18
|
+
const params = Object.entries(tool.parameters.properties || {})
|
|
19
|
+
.map(([name, schema]) => {
|
|
20
|
+
const required = tool.parameters.required?.includes(name) ? '' : '?';
|
|
21
|
+
const type = schema.type || 'any';
|
|
22
|
+
const description = schema.description ? ` // ${schema.description}` : '';
|
|
23
|
+
return ` ${name}${required}: ${type};${description}`;
|
|
24
|
+
})
|
|
25
|
+
.join('\n');
|
|
26
|
+
return `/**
|
|
27
|
+
* ${tool.description}
|
|
28
|
+
*/
|
|
29
|
+
function ${tool.name}(params: {
|
|
30
|
+
${params}
|
|
31
|
+
}): void;`;
|
|
32
|
+
}).join('\n\n');
|
|
33
|
+
return `# Available Tools
|
|
34
|
+
|
|
35
|
+
You have access to the following tools:
|
|
36
|
+
|
|
37
|
+
<namespace name="functions">
|
|
38
|
+
${toolDefinitions}
|
|
39
|
+
</namespace>
|
|
40
|
+
|
|
41
|
+
## CRITICAL: How to Use Tools
|
|
42
|
+
|
|
43
|
+
To execute a tool, you MUST use this EXACT format:
|
|
44
|
+
|
|
45
|
+
<|call|>function_name({"param": "value"})<|return|>
|
|
46
|
+
|
|
47
|
+
Example:
|
|
48
|
+
<|call|>read_file({"path": "/path/to/file"})<|return|>
|
|
49
|
+
|
|
50
|
+
## Rules:
|
|
51
|
+
1. Use the EXACT function names from above (e.g., filesystem__read_file)
|
|
52
|
+
2. Parameters MUST be valid JSON
|
|
53
|
+
3. Do NOT output markdown code blocks with tool calls
|
|
54
|
+
4. Do NOT explain what you're doing - just call the tool
|
|
55
|
+
5. Output the tool call directly with the <|call|> and <|return|> markers
|
|
56
|
+
|
|
57
|
+
WRONG - Do not do this:
|
|
58
|
+
\`\`\`json
|
|
59
|
+
{"action": "read_file", "parameters": {...}}
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
CORRECT - Do this:
|
|
63
|
+
<|call|>filesystem__read_file({"path": "/path"})<|return|>`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Formats messages into Harmony format
|
|
67
|
+
*/
|
|
68
|
+
export function formatMessagesForHarmony(messages, tools) {
|
|
69
|
+
const formattedMessages = [];
|
|
70
|
+
// Process messages based on role hierarchy
|
|
71
|
+
for (const msg of messages) {
|
|
72
|
+
if (msg.role === 'developer' && tools && tools.length > 0) {
|
|
73
|
+
// Inject tool definitions into developer message
|
|
74
|
+
const toolSection = formatToolsForHarmony(tools);
|
|
75
|
+
const existingContent = typeof msg.content === 'string' ? msg.content : '';
|
|
76
|
+
formattedMessages.push({
|
|
77
|
+
...msg,
|
|
78
|
+
content: `${existingContent}\n\n${toolSection}`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
formattedMessages.push(msg);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return formattedMessages;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Parses Harmony response with multi-channel support
|
|
89
|
+
*
|
|
90
|
+
* Expected format:
|
|
91
|
+
* <|channel|>analysis
|
|
92
|
+
* [chain of thought content]
|
|
93
|
+
* <|channel|>final
|
|
94
|
+
* [final response]
|
|
95
|
+
* <|call|>function_name({"param": "value"})<|return|>
|
|
96
|
+
*/
|
|
97
|
+
export function parseHarmonyResponse(response) {
|
|
98
|
+
const result = {
|
|
99
|
+
toolCalls: [],
|
|
100
|
+
rawResponse: response,
|
|
101
|
+
};
|
|
102
|
+
// Parse channels
|
|
103
|
+
const channelRegex = /<\|channel\|>(\w+)\s*([\s\S]*?)(?=<\|channel\|>|<\|call\|>|$)/g;
|
|
104
|
+
let match;
|
|
105
|
+
while ((match = channelRegex.exec(response)) !== null) {
|
|
106
|
+
const channelName = match[1];
|
|
107
|
+
const channelContent = match[2].trim();
|
|
108
|
+
if (channelName === 'analysis') {
|
|
109
|
+
result.analysis = channelContent;
|
|
110
|
+
}
|
|
111
|
+
else if (channelName === 'commentary') {
|
|
112
|
+
result.commentary = channelContent;
|
|
113
|
+
}
|
|
114
|
+
else if (channelName === 'final') {
|
|
115
|
+
result.final = channelContent;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Parse tool calls
|
|
119
|
+
const toolCallRegex = /<\|call\|>([\s\S]*?)<\|return\|>/g;
|
|
120
|
+
let toolMatch;
|
|
121
|
+
let callId = 0;
|
|
122
|
+
while ((toolMatch = toolCallRegex.exec(response)) !== null) {
|
|
123
|
+
const toolCallContent = toolMatch[1].trim();
|
|
124
|
+
try {
|
|
125
|
+
// Parse function call: function_name({"param": "value"})
|
|
126
|
+
const functionMatch = /^(\w+)\(([\s\S]*)\)$/.exec(toolCallContent);
|
|
127
|
+
if (functionMatch) {
|
|
128
|
+
const functionName = functionMatch[1];
|
|
129
|
+
const argsString = functionMatch[2];
|
|
130
|
+
// Validate JSON
|
|
131
|
+
let parsedArgs;
|
|
132
|
+
try {
|
|
133
|
+
parsedArgs = JSON.parse(argsString);
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
logger.warn(`Failed to parse tool call arguments for ${functionName}: ${argsString}`);
|
|
137
|
+
// Try to fix common JSON issues
|
|
138
|
+
const fixedArgs = argsString
|
|
139
|
+
.replace(/'/g, '"') // Replace single quotes
|
|
140
|
+
.replace(/(\w+):/g, '"$1":'); // Quote unquoted keys
|
|
141
|
+
try {
|
|
142
|
+
parsedArgs = JSON.parse(fixedArgs);
|
|
143
|
+
logger.debug(`Successfully fixed and parsed arguments: ${fixedArgs}`);
|
|
144
|
+
}
|
|
145
|
+
catch (e2) {
|
|
146
|
+
throw new ToolCallError(`Invalid JSON in tool call arguments: ${argsString}`, functionName);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
result.toolCalls.push({
|
|
150
|
+
id: `call_${callId++}`,
|
|
151
|
+
type: 'function',
|
|
152
|
+
function: {
|
|
153
|
+
name: functionName,
|
|
154
|
+
arguments: JSON.stringify(parsedArgs),
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
logger.warn(`Failed to parse tool call format: ${toolCallContent}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
logger.error('Error parsing tool call', error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// If no channels found, treat entire response as final
|
|
167
|
+
if (!result.analysis && !result.commentary && !result.final && result.toolCalls.length === 0) {
|
|
168
|
+
result.final = response.trim();
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Extracts assistant message with malformed tool call detection
|
|
174
|
+
* This handles cases where gpt-oss-120b generates incorrect tool call formats
|
|
175
|
+
*/
|
|
176
|
+
export function extractAssistantMessage(response) {
|
|
177
|
+
// Remove channel markers and tool calls to get clean message
|
|
178
|
+
let cleaned = response
|
|
179
|
+
.replace(/<\|channel\|>\w+/g, '')
|
|
180
|
+
.replace(/<\|call\|>[\s\S]*?<\|return\|>/g, '')
|
|
181
|
+
.replace(/<\|start\|>/g, '')
|
|
182
|
+
.replace(/<\|end\|>/g, '')
|
|
183
|
+
.replace(/<\|message\|>/g, '')
|
|
184
|
+
.trim();
|
|
185
|
+
// Handle malformed patterns like "assistant<|channel|>analysis"
|
|
186
|
+
cleaned = cleaned.replace(/assistant<\|channel\|>\w+/g, '');
|
|
187
|
+
return cleaned;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Validates tool call against available tools
|
|
191
|
+
*/
|
|
192
|
+
export function validateToolCall(toolCall, availableTools) {
|
|
193
|
+
const tool = availableTools.find(t => t.name === toolCall.function.name);
|
|
194
|
+
if (!tool) {
|
|
195
|
+
logger.warn(`Tool not found: ${toolCall.function.name}`);
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const args = JSON.parse(toolCall.function.arguments);
|
|
200
|
+
const required = tool.parameters.required || [];
|
|
201
|
+
// Check required parameters
|
|
202
|
+
for (const param of required) {
|
|
203
|
+
if (!(param in args)) {
|
|
204
|
+
logger.warn(`Missing required parameter '${param}' for tool ${tool.name}`);
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
logger.error(`Invalid arguments for tool ${tool.name}`, error);
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Formats tool result for Harmony format
|
|
217
|
+
*/
|
|
218
|
+
export function formatToolResult(toolCallId, toolName, result) {
|
|
219
|
+
return {
|
|
220
|
+
role: 'tool',
|
|
221
|
+
name: toolName,
|
|
222
|
+
tool_call_id: toolCallId,
|
|
223
|
+
content: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=harmony.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harmony.js","sourceRoot":"","sources":["../../src/models/harmony.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Krutrim API Client
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with Krutrim Cloud API for both gpt-oss-120b and Llama-4-Maverick-17B models.
|
|
5
|
+
* Implements Harmony format for gpt-oss-120b and standard format for multimodal model.
|
|
6
|
+
*/
|
|
7
|
+
import { IModel, ChatCompletionOptions, ModelResponse } from './base.js';
|
|
8
|
+
export interface KrutrimConfig {
|
|
9
|
+
endpoint: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model: string;
|
|
12
|
+
type: 'reasoning' | 'multimodal';
|
|
13
|
+
}
|
|
14
|
+
export declare class KrutrimModel implements IModel {
|
|
15
|
+
private config;
|
|
16
|
+
constructor(config: KrutrimConfig);
|
|
17
|
+
supportsVision(): boolean;
|
|
18
|
+
supportsToolCalling(): boolean;
|
|
19
|
+
chat(options: ChatCompletionOptions): Promise<ModelResponse>;
|
|
20
|
+
private attemptChat;
|
|
21
|
+
/**
|
|
22
|
+
* Helper method for vision tasks using multimodal model
|
|
23
|
+
*/
|
|
24
|
+
describeImage(imageUrl: string, prompt?: string): Promise<string>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Factory function to create Krutrim model instances
|
|
28
|
+
*/
|
|
29
|
+
export declare function createKrutrimModel(config: KrutrimConfig): KrutrimModel;
|
|
30
|
+
//# sourceMappingURL=krutrim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"krutrim.d.ts","sourceRoot":"","sources":["../../src/models/krutrim.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAW,MAAM,WAAW,CAAC;AAUlF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;CAClC;AAED,qBAAa,YAAa,YAAW,MAAM;IACzC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC,cAAc,IAAI,OAAO;IAIzB,mBAAmB,IAAI,OAAO;IAKxB,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;YAmCpD,WAAW;IAuHzB;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAEtE"}
|