@hardlydifficult/ai 1.0.0 → 1.0.1
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 +59 -9
- package/dist/createAI.d.ts.map +1 -1
- package/dist/createAI.js +13 -0
- package/dist/createAI.js.map +1 -1
- package/dist/createAgent.d.ts +6 -0
- package/dist/createAgent.d.ts.map +1 -0
- package/dist/createAgent.js +116 -0
- package/dist/createAgent.js.map +1 -0
- package/dist/createStream.d.ts +6 -0
- package/dist/createStream.d.ts.map +1 -0
- package/dist/createStream.js +39 -0
- package/dist/createStream.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @hardlydifficult/ai
|
|
2
2
|
|
|
3
|
-
Unified AI client with chainable structured output, required usage tracking, and response parsing utilities.
|
|
3
|
+
Unified AI client with chainable structured output, callback-based streaming, tool-calling agent, required usage tracking, and response parsing utilities.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -10,16 +10,20 @@ npm install @hardlydifficult/ai
|
|
|
10
10
|
|
|
11
11
|
## AI Client
|
|
12
12
|
|
|
13
|
-
### `createAI(model, tracker, options?)`
|
|
13
|
+
### `createAI(model, tracker, logger, options?)`
|
|
14
14
|
|
|
15
|
-
Creates an AI client. Usage tracking
|
|
15
|
+
Creates an AI client. Usage tracking and logging are **required** — every call automatically fires `tracker.record()` and logs via `logger`.
|
|
16
16
|
|
|
17
17
|
```typescript
|
|
18
|
-
import { createAI, claude } from "@hardlydifficult/ai";
|
|
18
|
+
import { createAI, claude, ollama } from "@hardlydifficult/ai";
|
|
19
|
+
import { Logger, ConsolePlugin } from "@hardlydifficult/logger";
|
|
19
20
|
|
|
20
|
-
const
|
|
21
|
+
const logger = new Logger().use(new ConsolePlugin());
|
|
22
|
+
const ai = createAI(claude("sonnet"), tracker, logger);
|
|
21
23
|
```
|
|
22
24
|
|
|
25
|
+
Options: `{ maxTokens?: number, temperature?: number }`. Per-request AI instances are free — `createAI()` is a closure factory with zero async overhead.
|
|
26
|
+
|
|
23
27
|
### `chat(prompt, systemPrompt?)`
|
|
24
28
|
|
|
25
29
|
Send a prompt and get a rich response with usage info and conversation support.
|
|
@@ -33,6 +37,12 @@ msg.usage; // { inputTokens: 50, outputTokens: 200, durationMs: 1200 }
|
|
|
33
37
|
const msg = await ai.chat("Explain closures", "You are a TypeScript tutor");
|
|
34
38
|
```
|
|
35
39
|
|
|
40
|
+
### `.text()` — String Shorthand
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
const text = await ai.chat("Summarize this").text(); // → string
|
|
44
|
+
```
|
|
45
|
+
|
|
36
46
|
### `.zod(schema)` — Structured Output
|
|
37
47
|
|
|
38
48
|
Chain `.zod(schema)` to constrain the model's output format AND validate the result. The schema does triple duty: constrains output, validates response, provides TypeScript types.
|
|
@@ -45,8 +55,8 @@ const TaskSchema = z.object({
|
|
|
45
55
|
priority: z.enum(["high", "medium", "low"]),
|
|
46
56
|
});
|
|
47
57
|
|
|
48
|
-
const
|
|
49
|
-
|
|
58
|
+
const data = await ai.chat("Create a task for fixing the login bug").zod(TaskSchema);
|
|
59
|
+
// { title: "Fix login bug", priority: "high" } — typed as z.infer<typeof TaskSchema>
|
|
50
60
|
```
|
|
51
61
|
|
|
52
62
|
### `.reply(prompt)` — Conversation
|
|
@@ -59,6 +69,46 @@ const msg2 = await msg1.reply("Give me a TypeScript example");
|
|
|
59
69
|
const msg3 = await msg2.reply("Now formalize it").zod(DefinitionSchema);
|
|
60
70
|
```
|
|
61
71
|
|
|
72
|
+
### `stream(messages, onText)` — Callback-Based Streaming
|
|
73
|
+
|
|
74
|
+
Stream text deltas via callback. Returns accumulated text + usage when done.
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
const result = await ai.stream(messages, (text) => process.stdout.write(text));
|
|
78
|
+
result.text; // full accumulated text
|
|
79
|
+
result.usage; // { inputTokens, outputTokens, durationMs }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### `agent(tools, options?)` — Tool-Calling Agent
|
|
83
|
+
|
|
84
|
+
Create a tool-calling agent. Tools are plain objects — no SDK imports needed. Tool calls and results are auto-logged via Logger.
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import type { ToolMap } from "@hardlydifficult/ai";
|
|
88
|
+
|
|
89
|
+
const tools: ToolMap = {
|
|
90
|
+
read_file: {
|
|
91
|
+
description: "Read a file",
|
|
92
|
+
inputSchema: z.object({ path: z.string() }),
|
|
93
|
+
execute: async ({ path }) => fs.readFileSync(path, "utf-8"),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Non-streaming
|
|
98
|
+
const result = await ai.agent(tools).run(messages);
|
|
99
|
+
|
|
100
|
+
// Streaming — function shorthand
|
|
101
|
+
await ai.agent(tools).stream(messages, (text) => process.stdout.write(text));
|
|
102
|
+
|
|
103
|
+
// Streaming — with tool call markers
|
|
104
|
+
await ai.agent(tools, { maxSteps: 20 }).stream(messages, {
|
|
105
|
+
onText: (text) => process.stdout.write(text),
|
|
106
|
+
onToolCall: (name) => console.log(`Using tool: ${name}`),
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Agent options: `{ maxSteps?: number (default 10), temperature?: number (default 0.7), maxTokens?: number (default 4096) }`.
|
|
111
|
+
|
|
62
112
|
## Model Helpers
|
|
63
113
|
|
|
64
114
|
### `claude(variant)`
|
|
@@ -86,7 +136,7 @@ ollama("llama3.3");
|
|
|
86
136
|
|
|
87
137
|
## Usage Tracking
|
|
88
138
|
|
|
89
|
-
`createAI` requires an `AITracker` — no AI without tracking. The tracker fires for every call (`chat`, `reply`, `zod`).
|
|
139
|
+
`createAI` requires an `AITracker` — no AI without tracking. The tracker fires for every call (`chat`, `reply`, `zod`, `stream`, `agent`).
|
|
90
140
|
|
|
91
141
|
```typescript
|
|
92
142
|
import type { AITracker } from "@hardlydifficult/ai";
|
|
@@ -98,7 +148,7 @@ const tracker: AITracker = {
|
|
|
98
148
|
},
|
|
99
149
|
};
|
|
100
150
|
|
|
101
|
-
const ai = createAI(claude("sonnet"), tracker);
|
|
151
|
+
const ai = createAI(claude("sonnet"), tracker, logger);
|
|
102
152
|
```
|
|
103
153
|
|
|
104
154
|
## Response Parsing
|
package/dist/createAI.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAI.d.ts","sourceRoot":"","sources":["../src/createAI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAgB,KAAK,aAAa,EAAU,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"createAI.d.ts","sourceRoot":"","sources":["../src/createAI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAgB,KAAK,aAAa,EAAU,MAAM,IAAI,CAAC;AAK9D,OAAO,KAAK,EAIV,EAAE,EACF,SAAS,EACT,SAAS,EAMV,MAAM,YAAY,CAAC;AA6IpB,qEAAqE;AACrE,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,SAAS,GAClB,EAAE,CA4CJ"}
|
package/dist/createAI.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createAI = createAI;
|
|
4
4
|
const ai_1 = require("ai");
|
|
5
|
+
const createAgent_js_1 = require("./createAgent.js");
|
|
6
|
+
const createStream_js_1 = require("./createStream.js");
|
|
5
7
|
const DEFAULT_MAX_TOKENS = 4096;
|
|
6
8
|
function createChatCall(model, tracker, logger, maxTokens, messages, systemPrompt) {
|
|
7
9
|
let zodSchema;
|
|
@@ -91,10 +93,21 @@ function createAI(model, tracker, logger, options) {
|
|
|
91
93
|
throw new Error("AITracker is required — all AI usage must be tracked");
|
|
92
94
|
}
|
|
93
95
|
const maxTokens = options?.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
96
|
+
const temperature = options?.temperature;
|
|
94
97
|
return {
|
|
95
98
|
chat(prompt, systemPrompt) {
|
|
96
99
|
return createChatCall(model, tracker, logger, maxTokens, [{ role: "user", content: prompt }], systemPrompt);
|
|
97
100
|
},
|
|
101
|
+
stream(messages, onText) {
|
|
102
|
+
return (0, createStream_js_1.runStream)(model, tracker, logger, messages, onText, maxTokens, temperature);
|
|
103
|
+
},
|
|
104
|
+
agent(tools, agentOptions) {
|
|
105
|
+
return (0, createAgent_js_1.createAgent)(model, tools, tracker, logger, {
|
|
106
|
+
maxSteps: agentOptions?.maxSteps,
|
|
107
|
+
maxTokens: agentOptions?.maxTokens ?? maxTokens,
|
|
108
|
+
temperature: agentOptions?.temperature ?? temperature,
|
|
109
|
+
});
|
|
110
|
+
},
|
|
98
111
|
};
|
|
99
112
|
}
|
|
100
113
|
//# sourceMappingURL=createAI.js.map
|
package/dist/createAI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAI.js","sourceRoot":"","sources":["../src/createAI.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"createAI.js","sourceRoot":"","sources":["../src/createAI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Logger } from "@hardlydifficult/logger";
|
|
2
|
+
import { type LanguageModel } from "ai";
|
|
3
|
+
import type { Agent, AgentOptions, AITracker, ToolMap } from "./types.js";
|
|
4
|
+
/** Create a tool-calling Agent bound to a model, tools, and tracker. */
|
|
5
|
+
export declare function createAgent(model: LanguageModel, tools: ToolMap, tracker: AITracker, logger: Logger, options?: AgentOptions): Agent;
|
|
6
|
+
//# sourceMappingURL=createAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAgent.d.ts","sourceRoot":"","sources":["../src/createAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,IAAI,CAAC;AAEZ,OAAO,KAAK,EACV,KAAK,EAEL,YAAY,EAEZ,SAAS,EAET,OAAO,EAER,MAAM,YAAY,CAAC;AAiDpB,wEAAwE;AACxE,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CAiGP"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAgent = createAgent;
|
|
4
|
+
const ai_1 = require("ai");
|
|
5
|
+
const DEFAULT_MAX_STEPS = 10;
|
|
6
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
7
|
+
const DEFAULT_TEMPERATURE = 0.7;
|
|
8
|
+
/** Normalize the handler arg into AgentCallbacks. */
|
|
9
|
+
function toCallbacks(handler) {
|
|
10
|
+
return typeof handler === "function" ? { onText: handler } : handler;
|
|
11
|
+
}
|
|
12
|
+
/** Convert ToolMap entries to AI SDK tool() calls, wrapping execute with logging + callbacks. */
|
|
13
|
+
function convertTools(tools, logger, callbacks) {
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const [name, def] of Object.entries(tools)) {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- SDK tool() requires explicit generic params for heterogeneous ToolMap
|
|
17
|
+
result[name] = (0, ai_1.tool)({
|
|
18
|
+
description: def.description,
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- ToolMap uses any to support heterogeneous schemas
|
|
20
|
+
inputSchema: def.inputSchema,
|
|
21
|
+
execute: async (args) => {
|
|
22
|
+
logger.debug("Tool call", { tool: name, input: args });
|
|
23
|
+
callbacks?.onToolCall?.(name, args);
|
|
24
|
+
const output = await def.execute(args);
|
|
25
|
+
logger.debug("Tool result", {
|
|
26
|
+
tool: name,
|
|
27
|
+
outputLength: output.length,
|
|
28
|
+
});
|
|
29
|
+
callbacks?.onToolResult?.(name, output);
|
|
30
|
+
return output;
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/** Create a tool-calling Agent bound to a model, tools, and tracker. */
|
|
37
|
+
function createAgent(model, tools, tracker, logger, options) {
|
|
38
|
+
const maxSteps = options?.maxSteps ?? DEFAULT_MAX_STEPS;
|
|
39
|
+
const maxTokens = options?.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
40
|
+
const temperature = options?.temperature ?? DEFAULT_TEMPERATURE;
|
|
41
|
+
return {
|
|
42
|
+
async run(messages) {
|
|
43
|
+
const startMs = Date.now();
|
|
44
|
+
const sdkTools = convertTools(tools, logger);
|
|
45
|
+
logger.debug("Agent run start", {
|
|
46
|
+
messageCount: messages.length,
|
|
47
|
+
toolCount: Object.keys(tools).length,
|
|
48
|
+
maxSteps,
|
|
49
|
+
});
|
|
50
|
+
const result = await (0, ai_1.generateText)({
|
|
51
|
+
model,
|
|
52
|
+
messages,
|
|
53
|
+
tools: sdkTools,
|
|
54
|
+
stopWhen: (0, ai_1.stepCountIs)(maxSteps),
|
|
55
|
+
maxOutputTokens: maxTokens,
|
|
56
|
+
temperature,
|
|
57
|
+
});
|
|
58
|
+
const durationMs = Date.now() - startMs;
|
|
59
|
+
const resultUsage = result.usage;
|
|
60
|
+
const usage = {
|
|
61
|
+
inputTokens: resultUsage.inputTokens ?? 0,
|
|
62
|
+
outputTokens: resultUsage.outputTokens ?? 0,
|
|
63
|
+
durationMs,
|
|
64
|
+
};
|
|
65
|
+
tracker.record(usage);
|
|
66
|
+
logger.debug("Agent run complete", {
|
|
67
|
+
responseLength: result.text.length,
|
|
68
|
+
durationMs,
|
|
69
|
+
inputTokens: usage.inputTokens,
|
|
70
|
+
outputTokens: usage.outputTokens,
|
|
71
|
+
});
|
|
72
|
+
return { text: result.text, usage };
|
|
73
|
+
},
|
|
74
|
+
async stream(messages, handler) {
|
|
75
|
+
const callbacks = toCallbacks(handler);
|
|
76
|
+
const startMs = Date.now();
|
|
77
|
+
const sdkTools = convertTools(tools, logger, callbacks);
|
|
78
|
+
logger.debug("Agent stream start", {
|
|
79
|
+
messageCount: messages.length,
|
|
80
|
+
toolCount: Object.keys(tools).length,
|
|
81
|
+
maxSteps,
|
|
82
|
+
});
|
|
83
|
+
const result = (0, ai_1.streamText)({
|
|
84
|
+
model,
|
|
85
|
+
messages,
|
|
86
|
+
tools: sdkTools,
|
|
87
|
+
stopWhen: (0, ai_1.stepCountIs)(maxSteps),
|
|
88
|
+
maxOutputTokens: maxTokens,
|
|
89
|
+
temperature,
|
|
90
|
+
});
|
|
91
|
+
let accumulated = "";
|
|
92
|
+
for await (const part of result.fullStream) {
|
|
93
|
+
if (part.type === "text-delta") {
|
|
94
|
+
accumulated += part.text;
|
|
95
|
+
callbacks.onText(part.text);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const resultUsage = await result.usage;
|
|
99
|
+
const durationMs = Date.now() - startMs;
|
|
100
|
+
const usage = {
|
|
101
|
+
inputTokens: resultUsage.inputTokens ?? 0,
|
|
102
|
+
outputTokens: resultUsage.outputTokens ?? 0,
|
|
103
|
+
durationMs,
|
|
104
|
+
};
|
|
105
|
+
tracker.record(usage);
|
|
106
|
+
logger.debug("Agent stream complete", {
|
|
107
|
+
responseLength: accumulated.length,
|
|
108
|
+
durationMs,
|
|
109
|
+
inputTokens: usage.inputTokens,
|
|
110
|
+
outputTokens: usage.outputTokens,
|
|
111
|
+
});
|
|
112
|
+
return { text: accumulated, usage };
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=createAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAgent.js","sourceRoot":"","sources":["../src/createAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Logger } from "@hardlydifficult/logger";
|
|
2
|
+
import { type LanguageModel } from "ai";
|
|
3
|
+
import type { AgentResult, AITracker, Message } from "./types.js";
|
|
4
|
+
/** Stream a response, calling onText for each text delta. */
|
|
5
|
+
export declare function runStream(model: LanguageModel, tracker: AITracker, logger: Logger, messages: Message[], onText: (text: string) => void, maxTokens?: number, temperature?: number): Promise<AgentResult>;
|
|
6
|
+
//# sourceMappingURL=createStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStream.d.ts","sourceRoot":"","sources":["../src/createStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,IAAI,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAS,MAAM,YAAY,CAAC;AAIzE,6DAA6D;AAC7D,wBAAsB,SAAS,CAC7B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,SAAS,GAAE,MAA2B,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAwCtB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runStream = runStream;
|
|
4
|
+
const ai_1 = require("ai");
|
|
5
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
6
|
+
/** Stream a response, calling onText for each text delta. */
|
|
7
|
+
async function runStream(model, tracker, logger, messages, onText, maxTokens = DEFAULT_MAX_TOKENS, temperature) {
|
|
8
|
+
const startMs = Date.now();
|
|
9
|
+
logger.debug("AI stream start", {
|
|
10
|
+
messageCount: messages.length,
|
|
11
|
+
});
|
|
12
|
+
const result = (0, ai_1.streamText)({
|
|
13
|
+
model,
|
|
14
|
+
messages,
|
|
15
|
+
maxOutputTokens: maxTokens,
|
|
16
|
+
...(temperature !== undefined && { temperature }),
|
|
17
|
+
});
|
|
18
|
+
let accumulated = "";
|
|
19
|
+
for await (const chunk of result.textStream) {
|
|
20
|
+
accumulated += chunk;
|
|
21
|
+
onText(chunk);
|
|
22
|
+
}
|
|
23
|
+
const resultUsage = await result.usage;
|
|
24
|
+
const durationMs = Date.now() - startMs;
|
|
25
|
+
const usage = {
|
|
26
|
+
inputTokens: resultUsage.inputTokens ?? 0,
|
|
27
|
+
outputTokens: resultUsage.outputTokens ?? 0,
|
|
28
|
+
durationMs,
|
|
29
|
+
};
|
|
30
|
+
tracker.record(usage);
|
|
31
|
+
logger.debug("AI stream complete", {
|
|
32
|
+
responseLength: accumulated.length,
|
|
33
|
+
durationMs,
|
|
34
|
+
inputTokens: usage.inputTokens,
|
|
35
|
+
outputTokens: usage.outputTokens,
|
|
36
|
+
});
|
|
37
|
+
return { text: accumulated, usage };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=createStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStream.js","sourceRoot":"","sources":["../src/createStream.ts"],"names":[],"mappings":";;AAQA,8BAgDC;AAvDD,2BAAoD;AAIpD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,6DAA6D;AACtD,KAAK,UAAU,SAAS,CAC7B,KAAoB,EACpB,OAAkB,EAClB,MAAc,EACd,QAAmB,EACnB,MAA8B,EAC9B,YAAoB,kBAAkB,EACtC,WAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;QAC9B,YAAY,EAAE,QAAQ,CAAC,MAAM;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAA,eAAU,EAAC;QACxB,KAAK;QACL,QAAQ;QACR,eAAe,EAAE,SAAS;QAC1B,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5C,WAAW,IAAI,KAAK,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAExC,MAAM,KAAK,GAAU;QACnB,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,CAAC;QACzC,YAAY,EAAE,WAAW,CAAC,YAAY,IAAI,CAAC;QAC3C,UAAU;KACX,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;QACjC,cAAc,EAAE,WAAW,CAAC,MAAM;QAClC,UAAU;QACV,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createAI } from "./createAI.js";
|
|
2
2
|
export { claude } from "./claude.js";
|
|
3
3
|
export { ollama } from "./ollama.js";
|
|
4
|
-
export type { AI, AIOptions, AITracker, ChatCall, ChatMessage, Usage, } from "./types.js";
|
|
4
|
+
export type { Agent, AgentCallbacks, AgentOptions, AgentResult, AI, AIOptions, AITracker, ChatCall, ChatMessage, Message, ToolDefinition, ToolMap, Usage, } from "./types.js";
|
|
5
5
|
export { extractCodeBlock } from "./extractCodeBlock.js";
|
|
6
6
|
export { extractJson } from "./extractJson.js";
|
|
7
7
|
export { extractTyped, type SchemaLike } from "./extractTyped.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,EAAE,EACF,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,KAAK,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,EAAE,EACF,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,cAAc,EACd,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAgBf,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AACpB,qDAAkE;AAAzD,+GAAA,YAAY,OAAA;AACrB,iDAIyB;AAHvB,mHAAA,kBAAkB,OAAA;AAClB,oHAAA,mBAAmB,OAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface AITracker {
|
|
|
9
9
|
}
|
|
10
10
|
export interface AIOptions {
|
|
11
11
|
maxTokens?: number;
|
|
12
|
+
temperature?: number;
|
|
12
13
|
}
|
|
13
14
|
export interface ChatMessage {
|
|
14
15
|
text: string;
|
|
@@ -19,7 +20,44 @@ export interface ChatCall extends PromiseLike<ChatMessage> {
|
|
|
19
20
|
text(): PromiseLike<string>;
|
|
20
21
|
zod<TSchema extends z.ZodType>(schema: TSchema): PromiseLike<z.infer<TSchema>>;
|
|
21
22
|
}
|
|
23
|
+
/** A conversation message. */
|
|
24
|
+
export interface Message {
|
|
25
|
+
role: "user" | "assistant" | "system";
|
|
26
|
+
content: string;
|
|
27
|
+
}
|
|
28
|
+
/** Tool definition — consumers define tools as plain objects, no SDK import needed. */
|
|
29
|
+
export interface ToolDefinition<TInput extends z.ZodType = z.ZodType> {
|
|
30
|
+
description: string;
|
|
31
|
+
inputSchema: TInput;
|
|
32
|
+
execute: (input: z.infer<TInput>) => Promise<string>;
|
|
33
|
+
}
|
|
34
|
+
/** Named set of tools. Each tool may have a different input schema. */
|
|
35
|
+
export type ToolMap = Record<string, ToolDefinition<any>>;
|
|
36
|
+
/** Callbacks for agent streaming. Tool calls are auto-logged via Logger. */
|
|
37
|
+
export interface AgentCallbacks {
|
|
38
|
+
onText: (text: string) => void;
|
|
39
|
+
onToolCall?: (name: string, input: Record<string, unknown>) => void;
|
|
40
|
+
onToolResult?: (name: string, result: string) => void;
|
|
41
|
+
}
|
|
42
|
+
/** Options for creating an agent. */
|
|
43
|
+
export interface AgentOptions {
|
|
44
|
+
maxSteps?: number;
|
|
45
|
+
temperature?: number;
|
|
46
|
+
maxTokens?: number;
|
|
47
|
+
}
|
|
48
|
+
/** Result of a stream or agent run. */
|
|
49
|
+
export interface AgentResult {
|
|
50
|
+
text: string;
|
|
51
|
+
usage: Usage;
|
|
52
|
+
}
|
|
53
|
+
/** Tool-calling agent bound to a model and tool set. */
|
|
54
|
+
export interface Agent {
|
|
55
|
+
run(messages: Message[]): Promise<AgentResult>;
|
|
56
|
+
stream(messages: Message[], handler: ((text: string) => void) | AgentCallbacks): Promise<AgentResult>;
|
|
57
|
+
}
|
|
22
58
|
export interface AI {
|
|
23
59
|
chat(prompt: string, systemPrompt?: string): ChatCall;
|
|
60
|
+
stream(messages: Message[], onText: (text: string) => void): Promise<AgentResult>;
|
|
61
|
+
agent(tools: ToolMap, options?: AgentOptions): Agent;
|
|
24
62
|
}
|
|
25
63
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,WAAW,KAAK;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|