@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 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 is **required** — every call automatically fires `tracker.record()`.
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 ai = createAI(claude("sonnet"), tracker);
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 msg = await ai.chat("Create a task for fixing the login bug").zod(TaskSchema);
49
- msg.data; // { title: "Fix login bug", priority: "high" } — typed as z.infer<typeof TaskSchema>
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
@@ -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;AAG9D,OAAO,KAAK,EACV,EAAE,EACF,SAAS,EACT,SAAS,EAIV,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,CAoBJ"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"createAI.js","sourceRoot":"","sources":["../src/createAI.ts"],"names":[],"mappings":"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"}
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";
@@ -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;AASf,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"}
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
@@ -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;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CACjC;AAED,MAAM,WAAW,QAAS,SAAQ,WAAW,CAAC,WAAW,CAAC;IACxD,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,EAC3B,MAAM,EAAE,OAAO,GACd,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,EAAE;IACjB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACvD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hardlydifficult/ai",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [