@llm4ts/core 2.54.0 → 3.0.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/README.md +1 -1
- package/dist/Capability.d.ts +0 -9
- package/dist/Capability.d.ts.map +1 -1
- package/dist/Capability.js +0 -38
- package/dist/Capability.js.map +1 -1
- package/dist/Connector.d.ts +2 -3
- package/dist/Connector.d.ts.map +1 -1
- package/dist/Connector.js +0 -5
- package/dist/Connector.js.map +1 -1
- package/dist/ConnectorRegistry.d.ts +0 -3
- package/dist/ConnectorRegistry.d.ts.map +1 -1
- package/dist/ConnectorRegistry.js +0 -3
- package/dist/ConnectorRegistry.js.map +1 -1
- package/dist/HttpClient.d.ts +0 -2
- package/dist/HttpClient.d.ts.map +1 -1
- package/dist/HttpClient.js +0 -2
- package/dist/HttpClient.js.map +1 -1
- package/dist/LlmService.d.ts +1 -2
- package/dist/LlmService.d.ts.map +1 -1
- package/dist/LlmService.js.map +1 -1
- package/dist/Models.d.ts +0 -21
- package/dist/Models.d.ts.map +1 -1
- package/dist/Models.js +0 -19
- package/dist/Models.js.map +1 -1
- package/dist/Streaming.d.ts +4 -11
- package/dist/Streaming.d.ts.map +1 -1
- package/dist/Streaming.js +2 -29
- package/dist/Streaming.js.map +1 -1
- package/dist/providers/AnthropicModels.d.ts +0 -43
- package/dist/providers/AnthropicModels.d.ts.map +1 -1
- package/dist/providers/AnthropicModels.js +0 -39
- package/dist/providers/AnthropicModels.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +2 -3
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +2 -49
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/GeminiApiProvider.d.ts +2 -3
- package/dist/providers/GeminiApiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiApiProvider.js +2 -44
- package/dist/providers/GeminiApiProvider.js.map +1 -1
- package/dist/providers/GeminiModels.d.ts +0 -48
- package/dist/providers/GeminiModels.d.ts.map +1 -1
- package/dist/providers/GeminiModels.js +0 -40
- package/dist/providers/GeminiModels.js.map +1 -1
- package/dist/providers/LmStudioProvider.d.ts.map +1 -1
- package/dist/providers/LmStudioProvider.js +1 -4
- package/dist/providers/LmStudioProvider.js.map +1 -1
- package/dist/providers/MlxLmProvider.d.ts.map +1 -1
- package/dist/providers/MlxLmProvider.js +1 -2
- package/dist/providers/MlxLmProvider.js.map +1 -1
- package/dist/providers/MockProvider.d.ts.map +1 -1
- package/dist/providers/MockProvider.js +1 -6
- package/dist/providers/MockProvider.js.map +1 -1
- package/dist/providers/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/OllamaProvider.js +1 -4
- package/dist/providers/OllamaProvider.js.map +1 -1
- package/dist/providers/OpenAIModels.d.ts +0 -58
- package/dist/providers/OpenAIModels.d.ts.map +1 -1
- package/dist/providers/OpenAIModels.js +0 -51
- package/dist/providers/OpenAIModels.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +2 -3
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +2 -46
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/package.json +2 -14
- package/src/Capability.ts +0 -50
- package/src/Connector.ts +2 -20
- package/src/ConnectorRegistry.ts +0 -15
- package/src/HttpClient.ts +0 -15
- package/src/LlmService.ts +1 -13
- package/src/Models.ts +0 -22
- package/src/Streaming.ts +3 -99
- package/src/providers/AnthropicModels.ts +0 -47
- package/src/providers/AnthropicProvider.ts +1 -87
- package/src/providers/GeminiApiProvider.ts +2 -83
- package/src/providers/GeminiModels.ts +0 -46
- package/src/providers/LmStudioProvider.ts +1 -7
- package/src/providers/MlxLmProvider.ts +1 -3
- package/src/providers/MockProvider.ts +0 -9
- package/src/providers/OllamaProvider.ts +1 -7
- package/src/providers/OpenAIModels.ts +0 -64
- package/src/providers/OpenAIProvider.ts +2 -83
- package/dist/ContextManagement.d.ts +0 -78
- package/dist/ContextManagement.d.ts.map +0 -1
- package/dist/ContextManagement.js +0 -222
- package/dist/ContextManagement.js.map +0 -1
- package/dist/Conversation.d.ts +0 -18
- package/dist/Conversation.d.ts.map +0 -1
- package/dist/Conversation.js +0 -17
- package/dist/Conversation.js.map +0 -1
- package/dist/RateLimiter.d.ts +0 -44
- package/dist/RateLimiter.d.ts.map +0 -1
- package/dist/RateLimiter.js +0 -155
- package/dist/RateLimiter.js.map +0 -1
- package/dist/observability/MeteredLlmService.d.ts +0 -16
- package/dist/observability/MeteredLlmService.d.ts.map +0 -1
- package/dist/observability/MeteredLlmService.js +0 -72
- package/dist/observability/MeteredLlmService.js.map +0 -1
- package/dist/observability/Metrics.d.ts +0 -76
- package/dist/observability/Metrics.d.ts.map +0 -1
- package/dist/observability/Metrics.js +0 -152
- package/dist/observability/Metrics.js.map +0 -1
- package/dist/observability/StructuredLogger.d.ts +0 -31
- package/dist/observability/StructuredLogger.d.ts.map +0 -1
- package/dist/observability/StructuredLogger.js +0 -39
- package/dist/observability/StructuredLogger.js.map +0 -1
- package/dist/observability/Tracing.d.ts +0 -38
- package/dist/observability/Tracing.d.ts.map +0 -1
- package/dist/observability/Tracing.js +0 -80
- package/dist/observability/Tracing.js.map +0 -1
- package/dist/providers/OpenCodeModels.d.ts +0 -61
- package/dist/providers/OpenCodeModels.d.ts.map +0 -1
- package/dist/providers/OpenCodeModels.js +0 -53
- package/dist/providers/OpenCodeModels.js.map +0 -1
- package/dist/providers/OpenCodeProvider.d.ts +0 -10
- package/dist/providers/OpenCodeProvider.d.ts.map +0 -1
- package/dist/providers/OpenCodeProvider.js +0 -154
- package/dist/providers/OpenCodeProvider.js.map +0 -1
- package/dist/tools/Tool.d.ts +0 -83
- package/dist/tools/Tool.d.ts.map +0 -1
- package/dist/tools/Tool.js +0 -278
- package/dist/tools/Tool.js.map +0 -1
- package/dist/tools/ToolCallingExecutor.d.ts +0 -18
- package/dist/tools/ToolCallingExecutor.d.ts.map +0 -1
- package/dist/tools/ToolCallingExecutor.js +0 -64
- package/dist/tools/ToolCallingExecutor.js.map +0 -1
- package/dist/tools/ToolRegistry.d.ts +0 -45
- package/dist/tools/ToolRegistry.d.ts.map +0 -1
- package/dist/tools/ToolRegistry.js +0 -133
- package/dist/tools/ToolRegistry.js.map +0 -1
- package/src/ContextManagement.ts +0 -367
- package/src/Conversation.ts +0 -21
- package/src/RateLimiter.ts +0 -238
- package/src/observability/MeteredLlmService.ts +0 -168
- package/src/observability/Metrics.ts +0 -200
- package/src/observability/StructuredLogger.ts +0 -67
- package/src/observability/Tracing.ts +0 -146
- package/src/providers/OpenCodeModels.ts +0 -60
- package/src/providers/OpenCodeProvider.ts +0 -278
- package/src/tools/Tool.ts +0 -376
- package/src/tools/ToolCallingExecutor.ts +0 -106
- package/src/tools/ToolRegistry.ts +0 -224
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as Redacted from "effect/Redacted";
|
|
3
|
-
import * as Schema from "effect/Schema";
|
|
4
|
-
import * as Stream from "effect/Stream";
|
|
5
|
-
import { makeApiConnector } from "../Connector.js";
|
|
6
|
-
import { AuthenticationError, ConfigError, InvalidRequestError, ParseError } from "../Errors.js";
|
|
7
|
-
import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.js";
|
|
8
|
-
import { parseFromText } from "../StructuredOutput.js";
|
|
9
|
-
import { OpenCodeCompletionRequest, OpenCodeCompletionResponse, OpenCodeJsonSchemaSpec, OpenCodeMessage, OpenCodeResponseFormat } from "./OpenCodeModels.js";
|
|
10
|
-
const roleName = (role) => {
|
|
11
|
-
switch (role) {
|
|
12
|
-
case "System":
|
|
13
|
-
return "system";
|
|
14
|
-
case "User":
|
|
15
|
-
return "user";
|
|
16
|
-
case "Assistant":
|
|
17
|
-
return "assistant";
|
|
18
|
-
case "Tool":
|
|
19
|
-
return "tool";
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
export const openCodeHistory = (messages) => messages.map((message) => OpenCodeMessage.make({
|
|
23
|
-
role: roleName(message.role),
|
|
24
|
-
content: message.content
|
|
25
|
-
}));
|
|
26
|
-
const usage = (response) => response.usage === undefined
|
|
27
|
-
? undefined
|
|
28
|
-
: TokenUsage.make({
|
|
29
|
-
prompt: response.usage.prompt_tokens ?? 0,
|
|
30
|
-
completion: response.usage.completion_tokens ?? 0,
|
|
31
|
-
total: response.usage.total_tokens ?? 0
|
|
32
|
-
});
|
|
33
|
-
const metadata = (config, response) => ({
|
|
34
|
-
provider: "opencode",
|
|
35
|
-
model: config.model,
|
|
36
|
-
...(response.id === undefined ? {} : { id: response.id }),
|
|
37
|
-
...(response.model === undefined ? {} : { response_model: response.model })
|
|
38
|
-
});
|
|
39
|
-
const decodeResponse = (raw, context) => Schema.decodeUnknownEffect(Schema.fromJsonString(OpenCodeCompletionResponse))(raw).pipe(Effect.mapError((error) => ParseError.make({
|
|
40
|
-
message: `${context}: ${String(error)}`,
|
|
41
|
-
raw
|
|
42
|
-
})));
|
|
43
|
-
const toChunk = (config, response) => {
|
|
44
|
-
const choice = response.choices[0];
|
|
45
|
-
const delta = choice?.delta?.content ?? choice?.message?.content ?? choice?.text ?? "";
|
|
46
|
-
const finishReason = choice?.finish_reason ?? undefined;
|
|
47
|
-
const tokenUsage = usage(response);
|
|
48
|
-
return LlmChunk.make({
|
|
49
|
-
delta,
|
|
50
|
-
metadata: metadata(config, response),
|
|
51
|
-
...(finishReason === undefined || finishReason === null ? {} : { finishReason }),
|
|
52
|
-
...(tokenUsage === undefined ? {} : { usage: tokenUsage })
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
|
-
export const parseOpenCodeSseBody = Effect.fn("@llm4ts/core/OpenCodeProvider.parseSseBody")(function* (config, raw) {
|
|
56
|
-
const payloads = raw
|
|
57
|
-
.split(/\r?\n/)
|
|
58
|
-
.map((line) => line.trim())
|
|
59
|
-
.filter((line) => line.startsWith("data:"))
|
|
60
|
-
.map((line) => line.slice("data:".length).trim())
|
|
61
|
-
.filter((payload) => payload.length > 0 && payload !== "[DONE]");
|
|
62
|
-
const chunks = yield* Effect.forEach(payloads, (payload) => Effect.map(decodeResponse(payload, "Failed to parse OpenCode SSE payload"), (response) => toChunk(config, response)));
|
|
63
|
-
return chunks.length === 0
|
|
64
|
-
? yield* Effect.fail(ParseError.make({
|
|
65
|
-
message: "No stream chunks parsed from OpenCode SSE response",
|
|
66
|
-
raw
|
|
67
|
-
}))
|
|
68
|
-
: chunks;
|
|
69
|
-
});
|
|
70
|
-
export const makeOpenCodeProvider = (config, httpClient) => {
|
|
71
|
-
const requiredConfig = config.baseUrl === undefined
|
|
72
|
-
? Effect.fail(ConfigError.make({
|
|
73
|
-
message: "Missing baseUrl for OpenCode provider"
|
|
74
|
-
}))
|
|
75
|
-
: config.apiKey === undefined
|
|
76
|
-
? Effect.fail(AuthenticationError.make({
|
|
77
|
-
message: "Missing API key for OpenCode provider (pass apiKey in the connector config)"
|
|
78
|
-
}))
|
|
79
|
-
: Effect.succeed({
|
|
80
|
-
baseUrl: config.baseUrl.replace(/\/+$/, ""),
|
|
81
|
-
apiKey: Redacted.value(config.apiKey)
|
|
82
|
-
});
|
|
83
|
-
const request = (messages, stream, responseFormat) => OpenCodeCompletionRequest.make({
|
|
84
|
-
model: config.model,
|
|
85
|
-
messages,
|
|
86
|
-
temperature: config.temperature ?? 0.7,
|
|
87
|
-
stream,
|
|
88
|
-
...(config.maxTokens === undefined ? {} : { max_tokens: config.maxTokens }),
|
|
89
|
-
...(responseFormat === undefined ? {} : { response_format: responseFormat })
|
|
90
|
-
});
|
|
91
|
-
const post = (messages, stream, responseFormat) => Effect.flatMap(requiredConfig, ({ apiKey, baseUrl }) => httpClient.postJson(`${baseUrl}/chat/completions`, JSON.stringify(request(messages, stream, responseFormat)), {
|
|
92
|
-
Authorization: `Bearer ${apiKey}`
|
|
93
|
-
}, config.timeout));
|
|
94
|
-
const executeResponse = (messages, responseFormat) => Effect.gen(function* () {
|
|
95
|
-
const raw = yield* post(messages, false, responseFormat);
|
|
96
|
-
const response = yield* decodeResponse(raw, "Failed to decode OpenCode response");
|
|
97
|
-
return [response, raw];
|
|
98
|
-
});
|
|
99
|
-
const responseContent = (response, raw) => {
|
|
100
|
-
const content = (response.choices[0]?.message?.content ?? response.choices[0]?.text)?.trim();
|
|
101
|
-
return content === undefined || content === null || content.length === 0
|
|
102
|
-
? Effect.fail(ParseError.make({
|
|
103
|
-
message: "OpenCode response missing choices[0].message.content",
|
|
104
|
-
raw
|
|
105
|
-
}))
|
|
106
|
-
: Effect.succeed(content);
|
|
107
|
-
};
|
|
108
|
-
const executeStructuredWithUsage = (prompt, schema, jsonSchema) => Effect.gen(function* () {
|
|
109
|
-
const responseFormat = OpenCodeResponseFormat.make({
|
|
110
|
-
type: "json_schema",
|
|
111
|
-
json_schema: OpenCodeJsonSchemaSpec.make({
|
|
112
|
-
name: "response",
|
|
113
|
-
schema: jsonSchema
|
|
114
|
-
})
|
|
115
|
-
});
|
|
116
|
-
const [response, raw] = yield* executeResponse([
|
|
117
|
-
OpenCodeMessage.make({
|
|
118
|
-
role: "user",
|
|
119
|
-
content: prompt
|
|
120
|
-
})
|
|
121
|
-
], responseFormat);
|
|
122
|
-
const content = yield* responseContent(response, raw);
|
|
123
|
-
const value = yield* parseFromText(content, schema, jsonSchema);
|
|
124
|
-
const result = [value, undefined, undefined];
|
|
125
|
-
return result;
|
|
126
|
-
});
|
|
127
|
-
const stream = (messages) => Stream.flatMap(Stream.fromEffect(Effect.flatMap(post(messages, true), (raw) => parseOpenCodeSseBody(config, raw))), Stream.fromIterable);
|
|
128
|
-
const isAvailable = config.baseUrl === undefined || config.apiKey === undefined
|
|
129
|
-
? Effect.succeed(false)
|
|
130
|
-
: httpClient
|
|
131
|
-
.get(`${config.baseUrl.replace(/\/+$/, "")}/models`, {
|
|
132
|
-
Authorization: `Bearer ${Redacted.value(config.apiKey)}`
|
|
133
|
-
}, config.timeout)
|
|
134
|
-
.pipe(Effect.match({
|
|
135
|
-
onFailure: () => false,
|
|
136
|
-
onSuccess: () => true
|
|
137
|
-
}));
|
|
138
|
-
return makeApiConnector({
|
|
139
|
-
id: ConnectorIds.OpenCode,
|
|
140
|
-
executeStream: (prompt) => stream([
|
|
141
|
-
OpenCodeMessage.make({
|
|
142
|
-
role: "user",
|
|
143
|
-
content: prompt
|
|
144
|
-
})
|
|
145
|
-
]),
|
|
146
|
-
executeStreamWithHistory: (messages) => stream(openCodeHistory(messages)),
|
|
147
|
-
executeWithTools: () => Effect.fail(InvalidRequestError.make({
|
|
148
|
-
message: "OpenCode provider does not yet support tool calling in this implementation"
|
|
149
|
-
})),
|
|
150
|
-
executeStructuredWithUsage,
|
|
151
|
-
isAvailable
|
|
152
|
-
});
|
|
153
|
-
};
|
|
154
|
-
//# sourceMappingURL=OpenCodeProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenCodeProvider.js","sourceRoot":"","sources":["../../src/providers/OpenCodeProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,UAAU,EAEX,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,EAKX,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACvB,MAAM,qBAAqB,CAAA;AAO5B,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAU,EAAE;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,MAAM;YACT,OAAO,MAAM,CAAA;QACf,KAAK,WAAW;YACd,OAAO,WAAW,CAAA;QACpB,KAAK,MAAM;YACT,OAAO,MAAM,CAAA;IACjB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAgC,EAAkC,EAAE,CAClG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvB,eAAe,CAAC,IAAI,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;CACzB,CAAC,CACH,CAAA;AAEH,MAAM,KAAK,GAAG,CAAC,QAAoC,EAA0B,EAAE,CAC7E,QAAQ,CAAC,KAAK,KAAK,SAAS;IAC1B,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QACd,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC;QACzC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC;QACjD,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC;KACxC,CAAC,CAAA;AAER,MAAM,QAAQ,GAAG,CACf,MAAiB,EACjB,QAAoC,EACF,EAAE,CAAC,CAAC;IACtC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACzD,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;CAC5E,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CACrB,GAAW,EACX,OAAe,EACwC,EAAE,CACzD,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CACrF,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,UAAU,CAAC,IAAI,CAAC;IACd,OAAO,EAAE,GAAG,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;IACvC,GAAG;CACJ,CAAC,CACH,CACF,CAAA;AAEH,MAAM,OAAO,GAAG,CAAC,MAAiB,EAAE,QAAoC,EAAY,EAAE;IACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA;IACtF,MAAM,YAAY,GAAG,MAAM,EAAE,aAAa,IAAI,SAAS,CAAA;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,KAAK;QACL,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QACpC,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QAChF,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;KAC3D,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,4CAA4C,CAAC,CACzF,QAAQ,CAAC,EAAE,MAAiB,EAAE,GAAW;IACvC,MAAM,QAAQ,GAAG,GAAG;SACjB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CACzD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,sCAAsC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CACvF,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC1B,CACF,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,UAAU,CAAC,IAAI,CAAC;YACd,OAAO,EAAE,oDAAoD;YAC7D,GAAG;SACJ,CAAC,CACH;QACH,CAAC,CAAC,MAAM,CAAA;AACZ,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAiB,EACjB,UAA2B,EACR,EAAE;IACrB,MAAM,cAAc,GAClB,MAAM,CAAC,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,uCAAuC;SACjD,CAAC,CACH;QACH,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,6EAA6E;aACvF,CAAC,CACH;YACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;aACtC,CAAC,CAAA;IAEV,MAAM,OAAO,GAAG,CACd,QAAwC,EACxC,MAAe,EACf,cAAuC,EACZ,EAAE,CAC7B,yBAAyB,CAAC,IAAI,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ;QACR,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG;QACtC,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3E,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;KAC7E,CAAC,CAAA;IAEJ,MAAM,IAAI,GAAG,CACX,QAAwC,EACxC,MAAe,EACf,cAAuC,EACN,EAAE,CACnC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CACrD,UAAU,CAAC,QAAQ,CACjB,GAAG,OAAO,mBAAmB,EAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,EACzD;QACE,aAAa,EAAE,UAAU,MAAM,EAAE;KAClC,EACD,MAAM,CAAC,OAAO,CACf,CACF,CAAA;IAEH,MAAM,eAAe,GAAG,CACtB,QAAwC,EACxC,cAAuC,EACgD,EAAE,CACzF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAA;QACjF,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEJ,MAAM,eAAe,GAAG,CACtB,QAAoC,EACpC,GAAW,EACwB,EAAE;QACrC,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA;QAC5F,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YACtE,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,sDAAsD;gBAC/D,GAAG;aACJ,CAAC,CACH;YACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC,CAAA;IAED,MAAM,0BAA0B,GAAG,CACjC,MAAc,EACd,MAA4C,EAC5C,UAAsB,EAC4B,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC;YACjD,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC;gBACvC,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,UAAU;aACnB,CAAC;SACH,CAAC,CAAA;QACF,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,eAAe,CAC5C;YACE,eAAe,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC;SACH,EACD,cAAc,CACf,CAAA;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QACjE,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;IAEJ,MAAM,MAAM,GAAG,CAAC,QAAwC,EAAqC,EAAE,CAC7F,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,UAAU,CACf,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACjF,EACD,MAAM,CAAC,YAAY,CACpB,CAAA;IAEH,MAAM,WAAW,GACf,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QACzD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,UAAU;aACP,GAAG,CACF,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,EAC9C;YACE,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;SACzD,EACD,MAAM,CAAC,OAAO,CACf;aACA,IAAI,CACH,MAAM,CAAC,KAAK,CAAC;YACX,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;YACtB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;SACtB,CAAC,CACH,CAAA;IAET,OAAO,gBAAgB,CAAC;QACtB,EAAE,EAAE,YAAY,CAAC,QAAQ;QACzB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC;YACL,eAAe,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC;SACH,CAAC;QACJ,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACzE,gBAAgB,EAAE,GAAG,EAAE,CACrB,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,4EAA4E;SACtF,CAAC,CACH;QACH,0BAA0B;QAC1B,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/dist/tools/Tool.d.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import { type Capability } from "../Capability.ts";
|
|
4
|
-
import { ToolDefinition, type JsonSchema, type LlmProvider } from "../Models.ts";
|
|
5
|
-
import { type JsonValue } from "../providers/CliSupport.ts";
|
|
6
|
-
declare const InvalidToolSchema_base: Schema.Class<InvalidToolSchema, Schema.TaggedStruct<"InvalidSchema", {
|
|
7
|
-
readonly message: Schema.String;
|
|
8
|
-
}>, import("effect/Cause").YieldableError>;
|
|
9
|
-
export declare class InvalidToolSchema extends InvalidToolSchema_base {
|
|
10
|
-
}
|
|
11
|
-
declare const InvalidToolParameters_base: Schema.Class<InvalidToolParameters, Schema.TaggedStruct<"InvalidParameters", {
|
|
12
|
-
readonly message: Schema.String;
|
|
13
|
-
}>, import("effect/Cause").YieldableError>;
|
|
14
|
-
export declare class InvalidToolParameters extends InvalidToolParameters_base {
|
|
15
|
-
}
|
|
16
|
-
declare const DuplicateToolName_base: Schema.Class<DuplicateToolName, Schema.TaggedStruct<"DuplicateToolName", {
|
|
17
|
-
readonly name: Schema.String;
|
|
18
|
-
}>, import("effect/Cause").YieldableError>;
|
|
19
|
-
export declare class DuplicateToolName extends DuplicateToolName_base {
|
|
20
|
-
get message(): string;
|
|
21
|
-
}
|
|
22
|
-
declare const ToolSandboxViolation_base: Schema.Class<ToolSandboxViolation, Schema.TaggedStruct<"SandboxViolation", {
|
|
23
|
-
readonly message: Schema.String;
|
|
24
|
-
}>, import("effect/Cause").YieldableError>;
|
|
25
|
-
export declare class ToolSandboxViolation extends ToolSandboxViolation_base {
|
|
26
|
-
}
|
|
27
|
-
declare const ToolExecutionFailed_base: Schema.Class<ToolExecutionFailed, Schema.TaggedStruct<"ExecutionFailed", {
|
|
28
|
-
readonly message: Schema.String;
|
|
29
|
-
}>, import("effect/Cause").YieldableError>;
|
|
30
|
-
export declare class ToolExecutionFailed extends ToolExecutionFailed_base {
|
|
31
|
-
}
|
|
32
|
-
declare const ToolSchemaGenerationFailed_base: Schema.Class<ToolSchemaGenerationFailed, Schema.TaggedStruct<"SchemaGenerationFailed", {
|
|
33
|
-
readonly message: Schema.String;
|
|
34
|
-
}>, import("effect/Cause").YieldableError>;
|
|
35
|
-
export declare class ToolSchemaGenerationFailed extends ToolSchemaGenerationFailed_base {
|
|
36
|
-
}
|
|
37
|
-
export declare const ToolExecutionError: Schema.Union<readonly [typeof InvalidToolSchema, typeof InvalidToolParameters, typeof DuplicateToolName, typeof ToolSandboxViolation, typeof ToolExecutionFailed, typeof ToolSchemaGenerationFailed]>;
|
|
38
|
-
export type ToolExecutionError = typeof ToolExecutionError.Type;
|
|
39
|
-
export declare const ToolSandbox: Schema.Literals<readonly ["WorkspaceReadWrite", "WorkspaceReadOnly", "Unrestricted"]>;
|
|
40
|
-
export type ToolSandbox = typeof ToolSandbox.Type;
|
|
41
|
-
declare const ToolDescriptor_base: Schema.Class<ToolDescriptor, Schema.Struct<{
|
|
42
|
-
readonly name: Schema.String;
|
|
43
|
-
readonly description: Schema.String;
|
|
44
|
-
readonly parameters: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
45
|
-
readonly tags: Schema.withConstructorDefault<Schema.$ReadonlySet<Schema.String>>;
|
|
46
|
-
readonly sandbox: Schema.withConstructorDefault<Schema.Literals<readonly ["WorkspaceReadWrite", "WorkspaceReadOnly", "Unrestricted"]>>;
|
|
47
|
-
readonly requires: Schema.withConstructorDefault<Schema.$Array<Schema.Union<readonly [typeof import("../Capability.ts").GitRead, typeof import("../Capability.ts").GitWrite, typeof import("../Capability.ts").GitPush, typeof import("../Capability.ts").GhRead, typeof import("../Capability.ts").GhWrite, typeof import("../Capability.ts").AdoRead, typeof import("../Capability.ts").AdoWrite, typeof import("../Capability.ts").BasecampRead, typeof import("../Capability.ts").BasecampWrite, typeof import("../Capability.ts").Exec, typeof import("../Capability.ts").UseCoder, typeof import("../Capability.ts").UseReasoning, typeof import("../Capability.ts").Declassify]>>>;
|
|
48
|
-
}>, {}>;
|
|
49
|
-
export declare class ToolDescriptor extends ToolDescriptor_base {
|
|
50
|
-
}
|
|
51
|
-
export interface Tool {
|
|
52
|
-
readonly name: string;
|
|
53
|
-
readonly description: string;
|
|
54
|
-
readonly parameters: JsonSchema;
|
|
55
|
-
readonly execute: (parameters: JsonValue) => Effect.Effect<JsonValue, ToolExecutionError>;
|
|
56
|
-
readonly tags: ReadonlySet<string>;
|
|
57
|
-
readonly sandbox: ToolSandbox;
|
|
58
|
-
readonly requires: ReadonlyArray<Capability>;
|
|
59
|
-
}
|
|
60
|
-
export interface ToolOptions {
|
|
61
|
-
readonly name: string;
|
|
62
|
-
readonly description: string;
|
|
63
|
-
readonly parameters: JsonSchema;
|
|
64
|
-
readonly execute: Tool["execute"];
|
|
65
|
-
readonly tags?: Iterable<string>;
|
|
66
|
-
readonly sandbox?: ToolSandbox;
|
|
67
|
-
readonly requires?: ReadonlyArray<Capability>;
|
|
68
|
-
}
|
|
69
|
-
export declare const makeTool: (options: ToolOptions) => Tool;
|
|
70
|
-
export declare const toolDefinition: (tool: Tool) => ToolDefinition;
|
|
71
|
-
export declare const schemaFromMethodSignature: (signature: string) => Effect.Effect<JsonSchema, ToolSchemaGenerationFailed>;
|
|
72
|
-
export declare const toolFromMethodSignature: (options: Omit<ToolOptions, "parameters"> & {
|
|
73
|
-
readonly signature: string;
|
|
74
|
-
}) => Effect.Effect<Tool, ToolSchemaGenerationFailed, never>;
|
|
75
|
-
export declare const validateToolParameters: (schema: {
|
|
76
|
-
readonly [x: string]: Schema.Json;
|
|
77
|
-
}, parameters: Schema.Json) => Effect.Effect<void, InvalidToolSchema | InvalidToolParameters | DuplicateToolName | ToolSandboxViolation | ToolExecutionFailed | ToolSchemaGenerationFailed, never>;
|
|
78
|
-
export declare const toolsToOpenAI: (tools: ReadonlyArray<Tool>) => JsonValue;
|
|
79
|
-
export declare const toolsToAnthropic: (tools: ReadonlyArray<Tool>) => JsonValue;
|
|
80
|
-
export declare const toolsToGemini: (tools: ReadonlyArray<Tool>) => JsonValue;
|
|
81
|
-
export declare const toolsToProviderFormat: (provider: LlmProvider, tools: ReadonlyArray<Tool>) => JsonValue;
|
|
82
|
-
export {};
|
|
83
|
-
//# sourceMappingURL=Tool.d.ts.map
|
package/dist/tools/Tool.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/tools/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAA;;;;AAEnC,qBAAa,iBAAkB,SAAQ,sBAErC;CAAG;;;;AAEL,qBAAa,qBAAsB,SAAQ,0BAK1C;CAAG;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAKtC;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qBAAa,oBAAqB,SAAQ,yBAKzC;CAAG;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAKxC;CAAG;;;;AAEJ,qBAAa,0BAA2B,SAAQ,+BAK/C;CAAG;AAEJ,eAAO,MAAM,kBAAkB,uMAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,WAAW,uFAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;;;;;;;;;AAEjD,qBAAa,cAAe,SAAQ,mBAWlC;CAAG;AAEL,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IACzF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC9C;AAED,eAAO,MAAM,QAAQ,GAAI,SAAS,WAAW,KAAG,IAQ9C,CAAA;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,cAKxC,CAAA;AAsGJ,eAAO,MAAM,yBAAyB,GACpC,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAoCtD,CAAA;AAED,eAAO,MAAM,uBAAuB;wBAGV,MAAM;4DAS/B,CAAA;AAqBD,eAAO,MAAM,sBAAsB;;kMAuClC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAQtD,CAAA;AAEL,eAAO,MAAM,gBAAgB,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAKzD,CAAA;AAEL,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAMzD,CAAA;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,WAAW,EACrB,OAAO,aAAa,CAAC,IAAI,CAAC,KACzB,SAWF,CAAA"}
|
package/dist/tools/Tool.js
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import { Capability as CapabilitySchema } from "../Capability.js";
|
|
4
|
-
import { ToolDefinition } from "../Models.js";
|
|
5
|
-
import { isJsonRecord, jsonArray, jsonField, jsonStringField } from "../providers/CliSupport.js";
|
|
6
|
-
export class InvalidToolSchema extends Schema.TaggedError()("InvalidSchema", {
|
|
7
|
-
message: Schema.String
|
|
8
|
-
}) {
|
|
9
|
-
}
|
|
10
|
-
export class InvalidToolParameters extends Schema.TaggedError()("InvalidParameters", {
|
|
11
|
-
message: Schema.String
|
|
12
|
-
}) {
|
|
13
|
-
}
|
|
14
|
-
export class DuplicateToolName extends Schema.TaggedError()("DuplicateToolName", {
|
|
15
|
-
name: Schema.String
|
|
16
|
-
}) {
|
|
17
|
-
get message() {
|
|
18
|
-
return `Tool already registered: ${this.name}`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export class ToolSandboxViolation extends Schema.TaggedError()("SandboxViolation", {
|
|
22
|
-
message: Schema.String
|
|
23
|
-
}) {
|
|
24
|
-
}
|
|
25
|
-
export class ToolExecutionFailed extends Schema.TaggedError()("ExecutionFailed", {
|
|
26
|
-
message: Schema.String
|
|
27
|
-
}) {
|
|
28
|
-
}
|
|
29
|
-
export class ToolSchemaGenerationFailed extends Schema.TaggedError()("SchemaGenerationFailed", {
|
|
30
|
-
message: Schema.String
|
|
31
|
-
}) {
|
|
32
|
-
}
|
|
33
|
-
export const ToolExecutionError = Schema.Union([
|
|
34
|
-
InvalidToolSchema,
|
|
35
|
-
InvalidToolParameters,
|
|
36
|
-
DuplicateToolName,
|
|
37
|
-
ToolSandboxViolation,
|
|
38
|
-
ToolExecutionFailed,
|
|
39
|
-
ToolSchemaGenerationFailed
|
|
40
|
-
]);
|
|
41
|
-
export const ToolSandbox = Schema.Literals([
|
|
42
|
-
"WorkspaceReadWrite",
|
|
43
|
-
"WorkspaceReadOnly",
|
|
44
|
-
"Unrestricted"
|
|
45
|
-
]);
|
|
46
|
-
export class ToolDescriptor extends Schema.Class("ToolDescriptor")({
|
|
47
|
-
name: Schema.String,
|
|
48
|
-
description: Schema.String,
|
|
49
|
-
parameters: Schema.Record(Schema.String, Schema.Json),
|
|
50
|
-
tags: Schema.ReadonlySet(Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(new Set()))),
|
|
51
|
-
sandbox: ToolSandbox.pipe(Schema.withConstructorDefault(Effect.succeed("WorkspaceReadWrite"))),
|
|
52
|
-
requires: Schema.Array(CapabilitySchema).pipe(Schema.withConstructorDefault(Effect.succeed(Object.freeze([]))))
|
|
53
|
-
}) {
|
|
54
|
-
}
|
|
55
|
-
export const makeTool = (options) => ({
|
|
56
|
-
name: options.name,
|
|
57
|
-
description: options.description,
|
|
58
|
-
parameters: options.parameters,
|
|
59
|
-
execute: options.execute,
|
|
60
|
-
tags: new Set(options.tags ?? []),
|
|
61
|
-
sandbox: options.sandbox ?? "WorkspaceReadWrite",
|
|
62
|
-
requires: options.requires ?? []
|
|
63
|
-
});
|
|
64
|
-
export const toolDefinition = (tool) => ToolDefinition.make({
|
|
65
|
-
name: tool.name,
|
|
66
|
-
description: tool.description,
|
|
67
|
-
parameters: tool.parameters
|
|
68
|
-
});
|
|
69
|
-
const splitParameters = (raw) => {
|
|
70
|
-
const parameters = [];
|
|
71
|
-
let start = 0;
|
|
72
|
-
let depth = 0;
|
|
73
|
-
for (let index = 0; index < raw.length; index += 1) {
|
|
74
|
-
const character = raw.charAt(index);
|
|
75
|
-
if (character === "[" || character === "<" || character === "(") {
|
|
76
|
-
depth += 1;
|
|
77
|
-
}
|
|
78
|
-
else if (character === "]" || character === ">" || character === ")") {
|
|
79
|
-
depth -= 1;
|
|
80
|
-
}
|
|
81
|
-
else if (character === "," && depth === 0) {
|
|
82
|
-
parameters.push(raw.slice(start, index).trim());
|
|
83
|
-
start = index + 1;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const last = raw.slice(start).trim();
|
|
87
|
-
return last.length === 0 ? parameters : [...parameters, last];
|
|
88
|
-
};
|
|
89
|
-
const parseParameter = (raw) => {
|
|
90
|
-
const match = /^(?:readonly\s+)?([A-Za-z_$][\w$]*)(\?)?\s*:\s*(.+?)(?:\s*=\s*.+)?$/.exec(raw);
|
|
91
|
-
const name = match?.[1];
|
|
92
|
-
const type = match?.[3]?.trim();
|
|
93
|
-
if (name === undefined || type === undefined) {
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
const optional = match?.[2] === "?" || raw.includes("=") || /^(?:Option|Optional)[[<]/.test(type);
|
|
97
|
-
return {
|
|
98
|
-
name,
|
|
99
|
-
type,
|
|
100
|
-
required: !optional
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
const genericInner = (type, names) => {
|
|
104
|
-
for (const name of names) {
|
|
105
|
-
const squarePrefix = `${name}[`;
|
|
106
|
-
const anglePrefix = `${name}<`;
|
|
107
|
-
if (type.startsWith(squarePrefix) && type.endsWith("]")) {
|
|
108
|
-
return type.slice(squarePrefix.length, -1).trim();
|
|
109
|
-
}
|
|
110
|
-
if (type.startsWith(anglePrefix) && type.endsWith(">")) {
|
|
111
|
-
return type.slice(anglePrefix.length, -1).trim();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return undefined;
|
|
115
|
-
};
|
|
116
|
-
const schemaForType = (rawType) => {
|
|
117
|
-
const type = rawType.trim();
|
|
118
|
-
switch (type) {
|
|
119
|
-
case "String":
|
|
120
|
-
case "string":
|
|
121
|
-
return { type: "string" };
|
|
122
|
-
case "Boolean":
|
|
123
|
-
case "boolean":
|
|
124
|
-
return { type: "boolean" };
|
|
125
|
-
case "Int":
|
|
126
|
-
case "Long":
|
|
127
|
-
case "Short":
|
|
128
|
-
case "Byte":
|
|
129
|
-
case "BigInt":
|
|
130
|
-
case "int":
|
|
131
|
-
case "integer":
|
|
132
|
-
return { type: "integer" };
|
|
133
|
-
case "Double":
|
|
134
|
-
case "Float":
|
|
135
|
-
case "BigDecimal":
|
|
136
|
-
case "number":
|
|
137
|
-
return { type: "number" };
|
|
138
|
-
}
|
|
139
|
-
const optional = genericInner(type, ["Option", "Optional"]);
|
|
140
|
-
if (optional !== undefined) {
|
|
141
|
-
return schemaForType(optional);
|
|
142
|
-
}
|
|
143
|
-
const array = genericInner(type, ["List", "Seq", "Vector", "Set", "Array", "ReadonlyArray"]);
|
|
144
|
-
if (array !== undefined) {
|
|
145
|
-
return {
|
|
146
|
-
type: "array",
|
|
147
|
-
items: schemaForType(array)
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
const map = genericInner(type, ["Map", "Record"]);
|
|
151
|
-
if (map !== undefined) {
|
|
152
|
-
const parts = splitParameters(map);
|
|
153
|
-
return {
|
|
154
|
-
type: "object",
|
|
155
|
-
additionalProperties: schemaForType(parts.at(-1) ?? "object")
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
return { type: "object" };
|
|
159
|
-
};
|
|
160
|
-
export const schemaFromMethodSignature = (signature) => {
|
|
161
|
-
const parametersText = signature.match(/(?:def|function)?\s*[A-Za-z_$][\w$]*\s*\((.*)\)\s*(?::.*)?$/)?.[1];
|
|
162
|
-
if (parametersText === undefined) {
|
|
163
|
-
return Effect.fail(ToolSchemaGenerationFailed.make({
|
|
164
|
-
message: "Unsupported signature. Expected a method declaration or definition"
|
|
165
|
-
}));
|
|
166
|
-
}
|
|
167
|
-
const parameters = splitParameters(parametersText).map(parseParameter);
|
|
168
|
-
if (parameters.some((parameter) => parameter === undefined)) {
|
|
169
|
-
return Effect.fail(ToolSchemaGenerationFailed.make({
|
|
170
|
-
message: "Failed to parse one or more method parameters"
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
const properties = {};
|
|
174
|
-
const required = [];
|
|
175
|
-
for (const parameter of parameters) {
|
|
176
|
-
if (parameter !== undefined) {
|
|
177
|
-
properties[parameter.name] = schemaForType(parameter.type);
|
|
178
|
-
if (parameter.required) {
|
|
179
|
-
required.push(parameter.name);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return Effect.succeed({
|
|
184
|
-
type: "object",
|
|
185
|
-
properties,
|
|
186
|
-
required,
|
|
187
|
-
additionalProperties: false
|
|
188
|
-
});
|
|
189
|
-
};
|
|
190
|
-
export const toolFromMethodSignature = Effect.fn("@llm4ts/core/tools/Tool.fromMethodSignature")(function* (options) {
|
|
191
|
-
const parameters = yield* schemaFromMethodSignature(options.signature);
|
|
192
|
-
return makeTool({
|
|
193
|
-
...options,
|
|
194
|
-
parameters
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
const valueMatchesType = (value, expected) => {
|
|
198
|
-
switch (expected) {
|
|
199
|
-
case "string":
|
|
200
|
-
return typeof value === "string";
|
|
201
|
-
case "boolean":
|
|
202
|
-
return typeof value === "boolean";
|
|
203
|
-
case "integer":
|
|
204
|
-
return typeof value === "number" && Number.isInteger(value);
|
|
205
|
-
case "number":
|
|
206
|
-
return typeof value === "number";
|
|
207
|
-
case "array":
|
|
208
|
-
return Array.isArray(value);
|
|
209
|
-
case "object":
|
|
210
|
-
return isJsonRecord(value);
|
|
211
|
-
default:
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
export const validateToolParameters = Effect.fn("@llm4ts/core/tools/Tool.validateParameters")(function* (schema, parameters) {
|
|
216
|
-
if (!isJsonRecord(schema)) {
|
|
217
|
-
return yield* InvalidToolParameters.make({
|
|
218
|
-
message: "Tool schema must be a JSON object"
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
if (!isJsonRecord(parameters)) {
|
|
222
|
-
return yield* InvalidToolParameters.make({
|
|
223
|
-
message: "Tool arguments must be a JSON object"
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
const required = jsonArray(jsonField(schema, "required")).flatMap((value) => typeof value === "string" ? [value] : []);
|
|
227
|
-
const missing = required.filter((name) => parameters[name] === undefined).sort();
|
|
228
|
-
if (missing.length > 0) {
|
|
229
|
-
return yield* InvalidToolParameters.make({
|
|
230
|
-
message: `Missing required parameters: ${missing.join(", ")}`
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
const properties = jsonField(schema, "properties");
|
|
234
|
-
for (const [name, value] of Object.entries(parameters)) {
|
|
235
|
-
const property = jsonField(properties, name);
|
|
236
|
-
if (property !== undefined) {
|
|
237
|
-
const expected = jsonStringField(property, "type") ?? "object";
|
|
238
|
-
if (!valueMatchesType(value, expected)) {
|
|
239
|
-
return yield* InvalidToolParameters.make({
|
|
240
|
-
message: `Invalid type for '${name}'. Expected: ${expected}`
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
export const toolsToOpenAI = (tools) => tools.map((tool) => ({
|
|
247
|
-
type: "function",
|
|
248
|
-
function: {
|
|
249
|
-
name: tool.name,
|
|
250
|
-
description: tool.description,
|
|
251
|
-
parameters: tool.parameters
|
|
252
|
-
}
|
|
253
|
-
}));
|
|
254
|
-
export const toolsToAnthropic = (tools) => tools.map((tool) => ({
|
|
255
|
-
name: tool.name,
|
|
256
|
-
description: tool.description,
|
|
257
|
-
input_schema: tool.parameters
|
|
258
|
-
}));
|
|
259
|
-
export const toolsToGemini = (tools) => ({
|
|
260
|
-
functionDeclarations: tools.map((tool) => ({
|
|
261
|
-
name: tool.name,
|
|
262
|
-
description: tool.description,
|
|
263
|
-
parameters: tool.parameters
|
|
264
|
-
}))
|
|
265
|
-
});
|
|
266
|
-
export const toolsToProviderFormat = (provider, tools) => {
|
|
267
|
-
switch (provider) {
|
|
268
|
-
case "OpenAI":
|
|
269
|
-
return toolsToOpenAI(tools);
|
|
270
|
-
case "Anthropic":
|
|
271
|
-
return toolsToAnthropic(tools);
|
|
272
|
-
case "GeminiApi":
|
|
273
|
-
return toolsToGemini(tools);
|
|
274
|
-
default:
|
|
275
|
-
return [];
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
//# sourceMappingURL=Tool.js.map
|
package/dist/tools/Tool.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tool.js","sourceRoot":"","sources":["../../src/tools/Tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import { InvalidRequestError } from "../Errors.ts";
|
|
4
|
-
import type { LlmServiceShape } from "../LlmService.ts";
|
|
5
|
-
import { LlmResponse, type ToolCallResponse } from "../Models.ts";
|
|
6
|
-
import { type Tool } from "./Tool.ts";
|
|
7
|
-
import { type ToolRegistryShape, type ToolResult } from "./ToolRegistry.ts";
|
|
8
|
-
declare const ToolLoopConfig_base: Schema.Class<ToolLoopConfig, Schema.Struct<{
|
|
9
|
-
readonly maxIterations: Schema.withConstructorDefault<Schema.Int>;
|
|
10
|
-
readonly maxDenials: Schema.optionalKey<Schema.Int>;
|
|
11
|
-
readonly maxConcurrency: Schema.withConstructorDefault<Schema.Int>;
|
|
12
|
-
}>, {}>;
|
|
13
|
-
export declare class ToolLoopConfig extends ToolLoopConfig_base {
|
|
14
|
-
}
|
|
15
|
-
export declare const buildToolFollowUpPrompt: (previousPrompt: string, response: ToolCallResponse, results: ReadonlyArray<ToolResult>) => string;
|
|
16
|
-
export declare const runToolCallingLoop: (prompt: string, tools: readonly Tool[], llmService: LlmServiceShape, registry: ToolRegistryShape, config?: ToolLoopConfig | undefined) => Effect.Effect<LlmResponse, import("../Errors.ts").ProviderError | import("../Errors.ts").UsageLimitError | import("../Errors.ts").AuthenticationError | InvalidRequestError | import("../Errors.ts").ParseError | import("../Errors.ts").ToolError | import("../Errors.ts").ConfigError | import("../Errors.ts").RateLimitError | import("../Errors.ts").TimeoutError | import("../Errors.ts").TurnLimitError, never>;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=ToolCallingExecutor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolCallingExecutor.d.ts","sourceRoot":"","sources":["../../src/tools/ToolCallingExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAiB,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAmB,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;;;;;;AAE5F,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;AAEL,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,MAAM,EACtB,UAAU,gBAAgB,EAC1B,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,MAYF,CAAA;AAED,eAAO,MAAM,kBAAkB,kiBAwE9B,CAAA"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import { InvalidRequestError } from "../Errors.js";
|
|
4
|
-
import { LlmResponse } from "../Models.js";
|
|
5
|
-
import { jsonText } from "../providers/CliSupport.js";
|
|
6
|
-
import { toolDefinition } from "./Tool.js";
|
|
7
|
-
import { toolResultValue } from "./ToolRegistry.js";
|
|
8
|
-
export class ToolLoopConfig extends Schema.Class("ToolLoopConfig")({
|
|
9
|
-
maxIterations: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(8))),
|
|
10
|
-
maxDenials: Schema.optionalKey(Schema.Int),
|
|
11
|
-
maxConcurrency: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(1)))
|
|
12
|
-
}) {
|
|
13
|
-
}
|
|
14
|
-
export const buildToolFollowUpPrompt = (previousPrompt, response, results) => {
|
|
15
|
-
const renderedResults = results
|
|
16
|
-
.map((result) => `tool_call_id=${result.toolCallId} result=${jsonText(toolResultValue(result))}`)
|
|
17
|
-
.join("\n");
|
|
18
|
-
return (`${previousPrompt}\n\n` +
|
|
19
|
-
`Assistant requested tool execution with finishReason='${response.finishReason}'.\n` +
|
|
20
|
-
`Tool results:\n${renderedResults}\n\n` +
|
|
21
|
-
"Continue the task. If no further tools are needed, respond with final user-facing content.\n");
|
|
22
|
-
};
|
|
23
|
-
export const runToolCallingLoop = Effect.fn("@llm4ts/core/tools/ToolCallingExecutor.run")(function* (prompt, tools, llmService, registry, config = ToolLoopConfig.make({})) {
|
|
24
|
-
if (config.maxIterations < 0) {
|
|
25
|
-
return yield* InvalidRequestError.make({
|
|
26
|
-
message: `Tool loop maxIterations must be non-negative; received ${config.maxIterations}`
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
if (config.maxDenials !== undefined && config.maxDenials < 0) {
|
|
30
|
-
return yield* InvalidRequestError.make({
|
|
31
|
-
message: `Tool loop maxDenials must be non-negative; received ${config.maxDenials}`
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
const definitions = tools.map(toolDefinition);
|
|
35
|
-
const loop = (currentPrompt, iteration, denials) => {
|
|
36
|
-
if (iteration >= config.maxIterations) {
|
|
37
|
-
return Effect.fail(InvalidRequestError.make({
|
|
38
|
-
message: `Tool call loop reached max iterations (${config.maxIterations})`
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
return Effect.flatMap(llmService.executeWithTools(currentPrompt, definitions), (response) => {
|
|
42
|
-
if (response.toolCalls.length === 0) {
|
|
43
|
-
return Effect.succeed(LlmResponse.make({
|
|
44
|
-
content: response.content ?? "",
|
|
45
|
-
metadata: {
|
|
46
|
-
finish_reason: response.finishReason,
|
|
47
|
-
tool_iterations: String(iteration)
|
|
48
|
-
}
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
return Effect.flatMap(registry.executeAll(response.toolCalls, config.maxConcurrency), (results) => {
|
|
52
|
-
const totalDenials = denials + results.filter((result) => result.denied).length;
|
|
53
|
-
if (config.maxDenials !== undefined && totalDenials >= config.maxDenials) {
|
|
54
|
-
return Effect.fail(InvalidRequestError.make({
|
|
55
|
-
message: "Tool loop exceeded the capability-denial budget " + `(${config.maxDenials})`
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
return Effect.suspend(() => loop(buildToolFollowUpPrompt(currentPrompt, response, results), iteration + 1, totalDenials));
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
return yield* loop(prompt, 0, 0);
|
|
63
|
-
});
|
|
64
|
-
//# sourceMappingURL=ToolCallingExecutor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolCallingExecutor.js","sourceRoot":"","sources":["../../src/tools/ToolCallingExecutor.ts"],"names":[],"mappings":"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"}
|