@misgara/ai-agent 1.0.0 → 1.2.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 +171 -0
- package/dist/core/AgentBuilder.d.ts +12 -3
- package/dist/core/AgentBuilder.d.ts.map +1 -1
- package/dist/core/AgentBuilder.js +32 -41
- package/dist/core/AgentBuilder.js.map +1 -1
- package/dist/core/MediaBuilder.d.ts +56 -0
- package/dist/core/MediaBuilder.d.ts.map +1 -0
- package/dist/core/MediaBuilder.js +121 -0
- package/dist/core/MediaBuilder.js.map +1 -0
- package/dist/core/types.d.ts +32 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -75
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/InMemory.d.ts.map +1 -1
- package/dist/infrastructure/InMemory.js.map +1 -1
- package/dist/infrastructure/RedisMemory.d.ts.map +1 -1
- package/dist/infrastructure/RedisMemory.js +0 -1
- package/dist/infrastructure/RedisMemory.js.map +1 -1
- package/dist/tools/common.d.ts +1 -1
- package/dist/tools/common.d.ts.map +1 -1
- package/dist/tools/common.js.map +1 -1
- package/package.json +24 -4
package/README.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# 🤖 @misgara/ai-agent
|
|
2
|
+
|
|
3
|
+
Una librería ligera, flexible y agnóstica para construir Agentes de IA en Node.js/TypeScript. Diseñada con arquitectura hexagonal, soporta múltiples proveedores (OpenAI, Google Gemini), gestión de memoria persistente (Redis) y ejecución de herramientas (Function Calling).
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
## ✨ Características
|
|
9
|
+
|
|
10
|
+
- **Fluent Interface**: API intuitiva con `AgentBuilder` para configurar agentes rápidamente.
|
|
11
|
+
- **Multi-Modelo**: Soporte nativo para Google Gemini y OpenAI (fácilmente extensible).
|
|
12
|
+
- **Memoria Persistente**:
|
|
13
|
+
- `InMemoryAdapter` para desarrollo.
|
|
14
|
+
- `RedisMemory` para producción (escalable).
|
|
15
|
+
- **Herramientas (Tools)**: Sistema robusto de *Function Calling* utilizando esquemas Zod.
|
|
16
|
+
- **Modos de Ejecución**:
|
|
17
|
+
- `run`: Chat con estado (memoria).
|
|
18
|
+
- `runStateless`: Ejecución única sin memoria.
|
|
19
|
+
- `stream`: Respuestas en tiempo real.
|
|
20
|
+
- **Multi-paso (Agentic)**: Capacidad de resolver problemas complejos ejecutando múltiples herramientas en bucle.
|
|
21
|
+
|
|
22
|
+
## 📦 Instalación
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @misgara/ai-agent
|
|
26
|
+
# o
|
|
27
|
+
yarn add @misgara/ai-agent
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Asegúrate de configurar tus variables de entorno en un archivo `.env`:
|
|
31
|
+
|
|
32
|
+
```env
|
|
33
|
+
GOOGLE_GENERATIVE_AI_API_KEY=tu_clave_aqui
|
|
34
|
+
OPENAI_API_KEY=tu_clave_aqui
|
|
35
|
+
DEEPINFRA_API_KEY=tu_clave_aqui
|
|
36
|
+
REDIS_URL=redis://localhost:6379
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 🚀 Uso Rápido
|
|
40
|
+
|
|
41
|
+
### 1. Chat Básico
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { AgentBuilder } from '@misgara/ai-agent';
|
|
45
|
+
|
|
46
|
+
const agent = new AgentBuilder()
|
|
47
|
+
.useOpenAI('gpt-4o-mini')
|
|
48
|
+
.setSystem('Eres un asistente experto en programación.');
|
|
49
|
+
|
|
50
|
+
const response = await agent.runStateless('¿Qué es una promesa en JS?');
|
|
51
|
+
console.log(response.text);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 2. Chat con Memoria y Herramientas
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { AgentBuilder, InMemoryAdapter, CommonTools } from '@misgara/ai-agent';
|
|
58
|
+
|
|
59
|
+
const memory = new InMemoryAdapter();
|
|
60
|
+
|
|
61
|
+
const agent = new AgentBuilder()
|
|
62
|
+
.useGemini('gemini-1.5-flash')
|
|
63
|
+
.withMemory(memory, 'session-user-123')
|
|
64
|
+
.addTools({
|
|
65
|
+
hora: CommonTools.time,
|
|
66
|
+
calcular: CommonTools.calculator
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const res = await agent.run('¿Qué hora es y cuánto es 25 * 40?');
|
|
70
|
+
console.log(res.text);
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
### 3. OCR (DeepSeek) + Audio a Texto (Whisper)
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { MediaBuilder } from '@misgara/ai-agent';
|
|
79
|
+
|
|
80
|
+
const media = new MediaBuilder()
|
|
81
|
+
.useDeepSeekOCR('deepseek-ai/DeepSeek-OCR')
|
|
82
|
+
.useOpenAIWhisper('whisper-1');
|
|
83
|
+
|
|
84
|
+
const ocr = await media.extractTextFromImage(
|
|
85
|
+
'https://example.com/factura.png'
|
|
86
|
+
);
|
|
87
|
+
console.log(ocr.text);
|
|
88
|
+
|
|
89
|
+
const audio = await media.transcribeAudio(
|
|
90
|
+
'https://example.com/audio.wav'
|
|
91
|
+
);
|
|
92
|
+
console.log(audio.text);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 🛠 Creación de Tools Personalizadas
|
|
96
|
+
|
|
97
|
+
Puedes conectar el agente a tu lógica de negocio (bases de datos, APIs externas) fácilmente:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { tool } from 'ai';
|
|
101
|
+
import { z } from 'zod';
|
|
102
|
+
|
|
103
|
+
const myTool = tool({
|
|
104
|
+
description: 'Busca el estado de un pedido',
|
|
105
|
+
inputSchema: z.object({
|
|
106
|
+
orderId: z.string().describe('ID del pedido (ej: ORD-001)')
|
|
107
|
+
}),
|
|
108
|
+
execute: async ({ orderId }) => {
|
|
109
|
+
return JSON.stringify({ status: 'En camino', eta: '2 horas' });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
agent.addTools({ buscarPedido: myTool });
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 📚 Ejemplos
|
|
117
|
+
|
|
118
|
+
El repositorio incluye una carpeta `examples/` con casos de uso detallados:
|
|
119
|
+
|
|
120
|
+
- `01-basic-chat.ts`: Chat simple.
|
|
121
|
+
- `02-with-memory.ts`: Persistencia de contexto.
|
|
122
|
+
- `03-with-tools.ts`: Uso de herramientas predefinidas.
|
|
123
|
+
- `04-custom-tools.ts`: E-commerce simulado.
|
|
124
|
+
- `05-multi-step-agent.ts`: Resolución de problemas complejos.
|
|
125
|
+
- `10-streaming.ts`: Respuestas en tiempo real.
|
|
126
|
+
- `11-media-ocr-whisper.ts`: OCR con DeepSeek y transcripcion con Whisper.
|
|
127
|
+
|
|
128
|
+
Para correr los ejemplos:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
npx tsx examples/run-all.ts
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Demo directo de OCR + Whisper:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npm run demo:media
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Nota: el demo acepta URLs remotas para imagen/audio y la libreria ahora las normaliza internamente.
|
|
141
|
+
|
|
142
|
+
Opcionalmente puedes pasar tus propias URLs:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm run demo:media -- "https://tu-sitio.com/imagen.png" "https://tu-sitio.com/audio.wav"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 🏗 Arquitectura
|
|
149
|
+
|
|
150
|
+
El proyecto sigue principios de **Arquitectura Hexagonal**:
|
|
151
|
+
|
|
152
|
+
- **Core**: Logica del agente (`AgentBuilder`) y tareas de media (`MediaBuilder`).
|
|
153
|
+
- **Puertos**: Interfaces como `IMemoryAdapter`.
|
|
154
|
+
- **Adaptadores**: Implementaciones concretas (`RedisMemory`, `GeminiProvider`).
|
|
155
|
+
|
|
156
|
+
Esto permite cambiar la base de datos o el proveedor de IA sin tocar la lógica de negocio.
|
|
157
|
+
|
|
158
|
+
## Produccion y Publicacion
|
|
159
|
+
|
|
160
|
+
Antes de publicar en npm:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
npm run release:verify
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Este comando ejecuta:
|
|
167
|
+
|
|
168
|
+
- `clean`
|
|
169
|
+
- `typecheck`
|
|
170
|
+
- `build`
|
|
171
|
+
- `npm pack --dry-run` (verifica el contenido real del paquete)
|
|
@@ -2,12 +2,12 @@ import { type ToolSet, type LanguageModel, type StreamTextResult } from 'ai';
|
|
|
2
2
|
import type { IMemoryAdapter, AgentResult } from './types.js';
|
|
3
3
|
type GeminiModel = 'gemini-1.5-pro' | 'gemini-1.5-flash' | 'gemini-2.0-flash' | 'gemini-3-flash-preview';
|
|
4
4
|
type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini' | 'gpt-5' | 'gpt-5-mini' | 'gpt-5-nano' | 'gpt-5.2' | 'o1' | 'o1-mini' | 'o3' | 'o3-mini' | 'o3-pro' | 'o4-mini';
|
|
5
|
+
type DeepSeekModel = 'deepseek-ai/DeepSeek-OCR' | 'deepseek-ai/DeepSeek-V3' | 'deepseek-ai/DeepSeek-R1' | 'deepseek-ai/DeepSeek-V3.2';
|
|
5
6
|
/**
|
|
6
7
|
* AgentBuilder - Fluent interface for building AI agents
|
|
7
|
-
* Supports
|
|
8
|
+
* Supports Google Gemini, OpenAI, and DeepSeek models
|
|
8
9
|
*
|
|
9
10
|
* @example
|
|
10
|
-
* ```typescript
|
|
11
11
|
* // Using Gemini
|
|
12
12
|
* const agent = new AgentBuilder()
|
|
13
13
|
* .useGemini('gemini-3-flash-preview')
|
|
@@ -22,7 +22,6 @@ type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini' | 'gpt-5' | 'gpt-5-mini' | 'gpt-5-na
|
|
|
22
22
|
*
|
|
23
23
|
* const result = await agent.run('Hello!');
|
|
24
24
|
* console.log(result.text);
|
|
25
|
-
* ```
|
|
26
25
|
*/
|
|
27
26
|
export declare class AgentBuilder {
|
|
28
27
|
private model;
|
|
@@ -41,6 +40,15 @@ export declare class AgentBuilder {
|
|
|
41
40
|
* Sets an OpenAI model
|
|
42
41
|
*/
|
|
43
42
|
useOpenAI(modelId: OpenAIModel): this;
|
|
43
|
+
/**
|
|
44
|
+
* Sets a DeepSeek model via DeepInfra
|
|
45
|
+
* Uses DEEPINFRA_API_KEY from environment variables automatically
|
|
46
|
+
*/
|
|
47
|
+
useDeepSeek(modelId: DeepSeekModel): this;
|
|
48
|
+
/**
|
|
49
|
+
* Shortcut for DeepSeek OCR model via DeepInfra
|
|
50
|
+
*/
|
|
51
|
+
useDeepSeekOCR(): this;
|
|
44
52
|
/**
|
|
45
53
|
* @deprecated Use useGemini() instead
|
|
46
54
|
* Sets the Gemini model to use (legacy method)
|
|
@@ -76,6 +84,7 @@ export declare class AgentBuilder {
|
|
|
76
84
|
* Sets maximum output tokens for generation
|
|
77
85
|
*/
|
|
78
86
|
setMaxOutputTokens(tokens: number): this;
|
|
87
|
+
private createUserMessage;
|
|
79
88
|
private formatStepResult;
|
|
80
89
|
/**
|
|
81
90
|
* Runs the agent with a user prompt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentBuilder.d.ts","sourceRoot":"","sources":["../../src/core/AgentBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AgentBuilder.d.ts","sourceRoot":"","sources":["../../src/core/AgentBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,OAAO,EAAE,KAAK,aAAa,EAAsB,KAAK,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAI3J,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAA0C,MAAM,YAAY,CAAC;AAGtG,KAAK,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,wBAAwB,CAAC;AACzG,KAAK,WAAW,GACV,QAAQ,GAAG,aAAa,GACxB,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GACjD,IAAI,GAAG,SAAS,GAChB,IAAI,GAAG,SAAS,GAAG,QAAQ,GAC3B,SAAS,CAAC;AAEhB,KAAK,aAAa,GACZ,0BAA0B,GAC1B,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAC,CAAS;IAIjC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKrC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKrC;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAK1C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM5D;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAS9B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMxC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,gBAAgB;IAsBxB;;;;OAIG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CtE;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B/E;;;OAGG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAmC5F;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;CAexG"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
// src/core/AgentBuilder.ts
|
|
2
1
|
import { generateText, streamText, stepCountIs } from 'ai';
|
|
3
2
|
import { google } from '@ai-sdk/google';
|
|
4
3
|
import { openai } from '@ai-sdk/openai';
|
|
4
|
+
import { deepinfra } from '@ai-sdk/deepinfra';
|
|
5
5
|
/**
|
|
6
6
|
* AgentBuilder - Fluent interface for building AI agents
|
|
7
|
-
* Supports
|
|
7
|
+
* Supports Google Gemini, OpenAI, and DeepSeek models
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
|
-
* ```typescript
|
|
11
10
|
* // Using Gemini
|
|
12
11
|
* const agent = new AgentBuilder()
|
|
13
12
|
* .useGemini('gemini-3-flash-preview')
|
|
@@ -22,7 +21,6 @@ import { openai } from '@ai-sdk/openai';
|
|
|
22
21
|
*
|
|
23
22
|
* const result = await agent.run('Hello!');
|
|
24
23
|
* console.log(result.text);
|
|
25
|
-
* ```
|
|
26
24
|
*/
|
|
27
25
|
export class AgentBuilder {
|
|
28
26
|
model = google('gemini-3-flash-preview');
|
|
@@ -30,7 +28,7 @@ export class AgentBuilder {
|
|
|
30
28
|
tools = {};
|
|
31
29
|
memory;
|
|
32
30
|
sessionId;
|
|
33
|
-
maxSteps = 1;
|
|
31
|
+
maxSteps = 1;
|
|
34
32
|
temperature = 0.5;
|
|
35
33
|
maxOutputTokens;
|
|
36
34
|
// --- CONFIGURATION (Fluent Interface) ---
|
|
@@ -48,6 +46,20 @@ export class AgentBuilder {
|
|
|
48
46
|
this.model = openai(modelId);
|
|
49
47
|
return this;
|
|
50
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Sets a DeepSeek model via DeepInfra
|
|
51
|
+
* Uses DEEPINFRA_API_KEY from environment variables automatically
|
|
52
|
+
*/
|
|
53
|
+
useDeepSeek(modelId) {
|
|
54
|
+
this.model = deepinfra(modelId);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Shortcut for DeepSeek OCR model via DeepInfra
|
|
59
|
+
*/
|
|
60
|
+
useDeepSeekOCR() {
|
|
61
|
+
return this.useDeepSeek('deepseek-ai/DeepSeek-OCR');
|
|
62
|
+
}
|
|
51
63
|
/**
|
|
52
64
|
* @deprecated Use useGemini() instead
|
|
53
65
|
* Sets the Gemini model to use (legacy method)
|
|
@@ -112,6 +124,17 @@ export class AgentBuilder {
|
|
|
112
124
|
return this;
|
|
113
125
|
}
|
|
114
126
|
// --- PRIVATE HELPERS ---
|
|
127
|
+
createUserMessage(userPrompt, imageUrl) {
|
|
128
|
+
return {
|
|
129
|
+
role: 'user',
|
|
130
|
+
content: imageUrl
|
|
131
|
+
? [
|
|
132
|
+
{ type: 'text', text: userPrompt },
|
|
133
|
+
{ type: 'image', image: imageUrl },
|
|
134
|
+
]
|
|
135
|
+
: userPrompt,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
115
138
|
formatStepResult(steps) {
|
|
116
139
|
return steps.map((step) => ({
|
|
117
140
|
text: step.text,
|
|
@@ -139,15 +162,7 @@ export class AgentBuilder {
|
|
|
139
162
|
history = await this.memory.get(this.sessionId);
|
|
140
163
|
}
|
|
141
164
|
// 2. Prepare Current Message (supports multimodal)
|
|
142
|
-
const currentMessage =
|
|
143
|
-
role: 'user',
|
|
144
|
-
content: imageUrl
|
|
145
|
-
? [
|
|
146
|
-
{ type: 'text', text: userPrompt },
|
|
147
|
-
{ type: 'image', image: imageUrl },
|
|
148
|
-
]
|
|
149
|
-
: userPrompt,
|
|
150
|
-
};
|
|
165
|
+
const currentMessage = this.createUserMessage(userPrompt, imageUrl);
|
|
151
166
|
// 3. Call AI SDK with generateText
|
|
152
167
|
// In v6, stopWhen with stepCountIs controls the multi-step behavior
|
|
153
168
|
const hasTools = Object.keys(this.tools).length > 0;
|
|
@@ -182,15 +197,7 @@ export class AgentBuilder {
|
|
|
182
197
|
* Runs the agent without saving to memory (stateless)
|
|
183
198
|
*/
|
|
184
199
|
async runStateless(userPrompt, imageUrl) {
|
|
185
|
-
const currentMessage =
|
|
186
|
-
role: 'user',
|
|
187
|
-
content: imageUrl
|
|
188
|
-
? [
|
|
189
|
-
{ type: 'text', text: userPrompt },
|
|
190
|
-
{ type: 'image', image: imageUrl },
|
|
191
|
-
]
|
|
192
|
-
: userPrompt,
|
|
193
|
-
};
|
|
200
|
+
const currentMessage = this.createUserMessage(userPrompt, imageUrl);
|
|
194
201
|
const hasTools = Object.keys(this.tools).length > 0;
|
|
195
202
|
const result = await generateText({
|
|
196
203
|
model: this.model,
|
|
@@ -223,15 +230,7 @@ export class AgentBuilder {
|
|
|
223
230
|
history = await this.memory.get(this.sessionId);
|
|
224
231
|
}
|
|
225
232
|
// 2. Prepare Current Message
|
|
226
|
-
const currentMessage =
|
|
227
|
-
role: 'user',
|
|
228
|
-
content: imageUrl
|
|
229
|
-
? [
|
|
230
|
-
{ type: 'text', text: userPrompt },
|
|
231
|
-
{ type: 'image', image: imageUrl },
|
|
232
|
-
]
|
|
233
|
-
: userPrompt,
|
|
234
|
-
};
|
|
233
|
+
const currentMessage = this.createUserMessage(userPrompt, imageUrl);
|
|
235
234
|
const hasTools = Object.keys(this.tools).length > 0;
|
|
236
235
|
// 3. Start Stream
|
|
237
236
|
const result = streamText({
|
|
@@ -257,15 +256,7 @@ export class AgentBuilder {
|
|
|
257
256
|
* Stateless version of Streaming (no persistence)
|
|
258
257
|
*/
|
|
259
258
|
async streamStateless(userPrompt, imageUrl) {
|
|
260
|
-
const currentMessage =
|
|
261
|
-
role: 'user',
|
|
262
|
-
content: imageUrl
|
|
263
|
-
? [
|
|
264
|
-
{ type: 'text', text: userPrompt },
|
|
265
|
-
{ type: 'image', image: imageUrl },
|
|
266
|
-
]
|
|
267
|
-
: userPrompt,
|
|
268
|
-
};
|
|
259
|
+
const currentMessage = this.createUserMessage(userPrompt, imageUrl);
|
|
269
260
|
const hasTools = Object.keys(this.tools).length > 0;
|
|
270
261
|
return streamText({
|
|
271
262
|
model: this.model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../src/core/AgentBuilder.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../src/core/AgentBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type LanguageModel, type TranscriptionModel } from 'ai';
|
|
2
|
+
import type { AudioTranscriptionResult, MediaInput, OCRResult } from './types.js';
|
|
3
|
+
type DeepSeekOCRModel = 'deepseek-ai/DeepSeek-OCR' | (string & {});
|
|
4
|
+
type OpenAIWhisperModel = 'whisper-1' | 'gpt-4o-mini-transcribe' | 'gpt-4o-transcribe';
|
|
5
|
+
/**
|
|
6
|
+
* MediaBuilder - Fluent interface for OCR and audio transcription tasks.
|
|
7
|
+
* Keeps media workflows separated from the conversational AgentBuilder.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MediaBuilder {
|
|
10
|
+
private ocrModel;
|
|
11
|
+
private transcriptionModel;
|
|
12
|
+
private ocrSystemPrompt;
|
|
13
|
+
private ocrTemperature;
|
|
14
|
+
private ocrMaxOutputTokens;
|
|
15
|
+
private normalizeMediaInput;
|
|
16
|
+
/**
|
|
17
|
+
* Sets a DeepSeek OCR model via DeepInfra.
|
|
18
|
+
*/
|
|
19
|
+
useDeepSeekOCR(modelId?: DeepSeekOCRModel): this;
|
|
20
|
+
/**
|
|
21
|
+
* Sets an OpenAI Whisper/transcription model.
|
|
22
|
+
*/
|
|
23
|
+
useOpenAIWhisper(modelId?: OpenAIWhisperModel): this;
|
|
24
|
+
/**
|
|
25
|
+
* Sets a custom OCR language model.
|
|
26
|
+
*/
|
|
27
|
+
useCustomOCRModel(model: LanguageModel): this;
|
|
28
|
+
/**
|
|
29
|
+
* Sets a custom transcription model.
|
|
30
|
+
*/
|
|
31
|
+
useCustomTranscriptionModel(model: TranscriptionModel): this;
|
|
32
|
+
/**
|
|
33
|
+
* Sets the OCR system prompt.
|
|
34
|
+
*/
|
|
35
|
+
setOCRSystem(prompt: string): this;
|
|
36
|
+
/**
|
|
37
|
+
* Sets OCR temperature (0-2). Defaults to 0 for deterministic extraction.
|
|
38
|
+
*/
|
|
39
|
+
setOCRTemperature(temp: number): this;
|
|
40
|
+
/**
|
|
41
|
+
* Sets OCR max output tokens.
|
|
42
|
+
*/
|
|
43
|
+
setOCRMaxOutputTokens(tokens: number): this;
|
|
44
|
+
/**
|
|
45
|
+
* Extracts text from an image using the configured OCR model.
|
|
46
|
+
* Accepts URL, data URL/base64, or binary data.
|
|
47
|
+
*/
|
|
48
|
+
extractTextFromImage(image: MediaInput, prompt?: string): Promise<OCRResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Transcribes audio to text using the configured transcription model (Whisper by default).
|
|
51
|
+
* Accepts URL, data URL/base64, or binary data.
|
|
52
|
+
*/
|
|
53
|
+
transcribeAudio(audio: MediaInput): Promise<AudioTranscriptionResult>;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=MediaBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaBuilder.d.ts","sourceRoot":"","sources":["../../src/core/MediaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAGtH,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElF,KAAK,gBAAgB,GAAG,0BAA0B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AACnE,KAAK,kBAAkB,GAAG,WAAW,GAAG,wBAAwB,GAAG,mBAAmB,CAAC;AAEvF;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAwD;IACxE,OAAO,CAAC,kBAAkB,CAAyD;IACnF,OAAO,CAAC,eAAe,CAAgF;IACvG,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAQ;IAElC,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,cAAc,CAAC,OAAO,GAAE,gBAA6C,GAAG,IAAI;IAK5E;;OAEG;IACH,gBAAgB,CAAC,OAAO,GAAE,kBAAgC,GAAG,IAAI;IAKjE;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAK7C;;OAEG;IACH,2BAA2B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAK5D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C;;;OAGG;IACG,oBAAoB,CACtB,KAAK,EAAE,UAAU,EACjB,MAAM,SAAwG,GAC/G,OAAO,CAAC,SAAS,CAAC;IA8BrB;;;OAGG;IACG,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAQ9E"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { experimental_transcribe as transcribe, generateText } from 'ai';
|
|
2
|
+
import { deepinfra } from '@ai-sdk/deepinfra';
|
|
3
|
+
import { openai } from '@ai-sdk/openai';
|
|
4
|
+
/**
|
|
5
|
+
* MediaBuilder - Fluent interface for OCR and audio transcription tasks.
|
|
6
|
+
* Keeps media workflows separated from the conversational AgentBuilder.
|
|
7
|
+
*/
|
|
8
|
+
export class MediaBuilder {
|
|
9
|
+
ocrModel = deepinfra('deepseek-ai/DeepSeek-OCR');
|
|
10
|
+
transcriptionModel = openai.transcription('whisper-1');
|
|
11
|
+
ocrSystemPrompt = 'Eres un motor OCR preciso. Extrae texto fielmente, sin inventar contenido.';
|
|
12
|
+
ocrTemperature = 0;
|
|
13
|
+
ocrMaxOutputTokens = 1200;
|
|
14
|
+
normalizeMediaInput(input) {
|
|
15
|
+
if (typeof input !== 'string') {
|
|
16
|
+
return input;
|
|
17
|
+
}
|
|
18
|
+
const trimmed = input.trim();
|
|
19
|
+
if (/^https?:\/\//i.test(trimmed)) {
|
|
20
|
+
try {
|
|
21
|
+
return new URL(trimmed);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return input;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return input;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sets a DeepSeek OCR model via DeepInfra.
|
|
31
|
+
*/
|
|
32
|
+
useDeepSeekOCR(modelId = 'deepseek-ai/DeepSeek-OCR') {
|
|
33
|
+
this.ocrModel = deepinfra(modelId);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets an OpenAI Whisper/transcription model.
|
|
38
|
+
*/
|
|
39
|
+
useOpenAIWhisper(modelId = 'whisper-1') {
|
|
40
|
+
this.transcriptionModel = openai.transcription(modelId);
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sets a custom OCR language model.
|
|
45
|
+
*/
|
|
46
|
+
useCustomOCRModel(model) {
|
|
47
|
+
this.ocrModel = model;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sets a custom transcription model.
|
|
52
|
+
*/
|
|
53
|
+
useCustomTranscriptionModel(model) {
|
|
54
|
+
this.transcriptionModel = model;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Sets the OCR system prompt.
|
|
59
|
+
*/
|
|
60
|
+
setOCRSystem(prompt) {
|
|
61
|
+
this.ocrSystemPrompt = prompt;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Sets OCR temperature (0-2). Defaults to 0 for deterministic extraction.
|
|
66
|
+
*/
|
|
67
|
+
setOCRTemperature(temp) {
|
|
68
|
+
this.ocrTemperature = Math.max(0, Math.min(2, temp));
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Sets OCR max output tokens.
|
|
73
|
+
*/
|
|
74
|
+
setOCRMaxOutputTokens(tokens) {
|
|
75
|
+
this.ocrMaxOutputTokens = Math.max(64, Math.floor(tokens));
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extracts text from an image using the configured OCR model.
|
|
80
|
+
* Accepts URL, data URL/base64, or binary data.
|
|
81
|
+
*/
|
|
82
|
+
async extractTextFromImage(image, prompt = 'Extrae todo el texto visible exactamente como aparece. Conserva saltos de linea cuando sea posible.') {
|
|
83
|
+
const normalizedImage = this.normalizeMediaInput(image);
|
|
84
|
+
const result = await generateText({
|
|
85
|
+
model: this.ocrModel,
|
|
86
|
+
system: this.ocrSystemPrompt,
|
|
87
|
+
messages: [
|
|
88
|
+
{
|
|
89
|
+
role: 'user',
|
|
90
|
+
content: [
|
|
91
|
+
{ type: 'text', text: prompt },
|
|
92
|
+
{ type: 'image', image: normalizedImage },
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
temperature: this.ocrTemperature,
|
|
97
|
+
maxOutputTokens: this.ocrMaxOutputTokens,
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
text: result.text,
|
|
101
|
+
usage: {
|
|
102
|
+
inputTokens: result.usage.inputTokens,
|
|
103
|
+
outputTokens: result.usage.outputTokens,
|
|
104
|
+
totalTokens: result.usage.totalTokens,
|
|
105
|
+
},
|
|
106
|
+
totalUsage: result.usage,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Transcribes audio to text using the configured transcription model (Whisper by default).
|
|
111
|
+
* Accepts URL, data URL/base64, or binary data.
|
|
112
|
+
*/
|
|
113
|
+
async transcribeAudio(audio) {
|
|
114
|
+
const normalizedAudio = this.normalizeMediaInput(audio);
|
|
115
|
+
return transcribe({
|
|
116
|
+
model: this.transcriptionModel,
|
|
117
|
+
audio: normalizedAudio,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=MediaBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaBuilder.js","sourceRoot":"","sources":["../../src/core/MediaBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -57,4 +57,36 @@ export interface AgentResult {
|
|
|
57
57
|
/** Total usage across all steps */
|
|
58
58
|
totalUsage: LanguageModelUsage;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Shared binary/text input format used by OCR and audio transcription.
|
|
62
|
+
*/
|
|
63
|
+
export type MediaInput = string | URL | Uint8Array | ArrayBuffer | Buffer;
|
|
64
|
+
/**
|
|
65
|
+
* OCR extraction result.
|
|
66
|
+
*/
|
|
67
|
+
export interface OCRResult {
|
|
68
|
+
/** Extracted text from the input image */
|
|
69
|
+
text: string;
|
|
70
|
+
/** Token usage statistics */
|
|
71
|
+
usage: {
|
|
72
|
+
inputTokens: number | undefined;
|
|
73
|
+
outputTokens: number | undefined;
|
|
74
|
+
totalTokens: number | undefined;
|
|
75
|
+
};
|
|
76
|
+
/** Total usage across the OCR call */
|
|
77
|
+
totalUsage: LanguageModelUsage;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Audio transcription result (Whisper/OpenAI Transcription API).
|
|
81
|
+
*/
|
|
82
|
+
export interface AudioTranscriptionResult {
|
|
83
|
+
text: string;
|
|
84
|
+
segments: Array<{
|
|
85
|
+
text: string;
|
|
86
|
+
startSecond: number;
|
|
87
|
+
endSecond: number;
|
|
88
|
+
}>;
|
|
89
|
+
language: string | undefined;
|
|
90
|
+
durationInSeconds: number | undefined;
|
|
91
|
+
}
|
|
60
92
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE;QACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,mCAAmC;IACnC,UAAU,EAAE,kBAAkB,CAAC;CAClC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE;QACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,mCAAmC;IACnC,UAAU,EAAE,kBAAkB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,KAAK,EAAE;QACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,sCAAsC;IACtC,UAAU,EAAE,kBAAkB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
export * from './core/AgentBuilder.js';
|
|
2
|
+
export * from './core/MediaBuilder.js';
|
|
3
|
+
export * from './core/types.js';
|
|
4
|
+
export * from './infrastructure/InMemory.js';
|
|
5
|
+
export * from './infrastructure/RedisMemory.js';
|
|
6
|
+
export * from './tools/common.js';
|
|
2
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,76 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { CommonTools } from './tools/common.js';
|
|
8
|
-
async function main() {
|
|
9
|
-
const userId = 'usuario-dev-01';
|
|
10
|
-
// Choose your memory adapter:
|
|
11
|
-
// Option 1: Redis (requires Redis running)
|
|
12
|
-
// const memory = new RedisMemory();
|
|
13
|
-
// Option 2: In-Memory (for development, no external deps)
|
|
14
|
-
const memory = new InMemoryAdapter();
|
|
15
|
-
// Build the agent with fluent interface
|
|
16
|
-
const agent = new AgentBuilder()
|
|
17
|
-
.useModel('gemini-3-flash-preview')
|
|
18
|
-
.setSystem('Eres un asistente financiero sarcástico pero muy útil.')
|
|
19
|
-
.withMemory(memory, userId)
|
|
20
|
-
.setTemperature(0.7)
|
|
21
|
-
// 1. Inject pre-built common tools
|
|
22
|
-
.addTools({
|
|
23
|
-
hora: CommonTools.time,
|
|
24
|
-
web: CommonTools.webSearchMock,
|
|
25
|
-
calcular: CommonTools.calculator,
|
|
26
|
-
})
|
|
27
|
-
// 2. Inject an ad-hoc project-specific tool
|
|
28
|
-
.addTools({
|
|
29
|
-
comprarCripto: tool({
|
|
30
|
-
description: 'Compra una criptomoneda específica',
|
|
31
|
-
inputSchema: z.object({
|
|
32
|
-
moneda: z.string().describe('El símbolo de la criptomoneda (BTC, ETH, etc.)'),
|
|
33
|
-
cantidad: z.number().describe('La cantidad a comprar'),
|
|
34
|
-
}),
|
|
35
|
-
execute: async ({ moneda, cantidad }) => {
|
|
36
|
-
// Simulated order - replace with actual exchange API
|
|
37
|
-
const orderId = Math.random().toString(36).substring(7);
|
|
38
|
-
return JSON.stringify({
|
|
39
|
-
success: true,
|
|
40
|
-
orderId,
|
|
41
|
-
message: `Orden de compra creada: ${cantidad} ${moneda.toUpperCase()}`,
|
|
42
|
-
estimatedPrice: `$${(Math.random() * 50000 + 20000).toFixed(2)} USD`,
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
}),
|
|
46
|
-
});
|
|
47
|
-
console.log('--- 🤖 Inicio del Chat ---\n');
|
|
48
|
-
// Prompt 1: Requires web search and time
|
|
49
|
-
console.log('👤 Usuario: Hola, ¿qué hora es y busca en internet a cuánto está el Bitcoin hoy?');
|
|
50
|
-
const resp1 = await agent.run('Hola, ¿qué hora es y busca en internet a cuánto está el Bitcoin hoy?');
|
|
51
|
-
console.log('🤖 IA:', resp1.text);
|
|
52
|
-
console.log('📊 Tokens usados:', resp1.usage.totalTokens);
|
|
53
|
-
console.log('🔧 Tools usadas:', resp1.steps.flatMap((s) => s.toolCalls.map((t) => t.toolName)).join(', ') || 'ninguna');
|
|
54
|
-
console.log();
|
|
55
|
-
// Prompt 2: Context + new tool (Buy crypto)
|
|
56
|
-
// Thanks to memory, the agent knows we were talking about Bitcoin
|
|
57
|
-
console.log('👤 Usuario: Ok, compra 5 unidades de esa moneda entonces.');
|
|
58
|
-
const resp2 = await agent.run('Ok, compra 5 unidades de esa moneda entonces.');
|
|
59
|
-
console.log('🤖 IA:', resp2.text);
|
|
60
|
-
console.log('📊 Tokens usados:', resp2.usage.totalTokens);
|
|
61
|
-
console.log('🔧 Tools usadas:', resp2.steps.flatMap((s) => s.toolCalls.map((t) => t.toolName)).join(', ') || 'ninguna');
|
|
62
|
-
console.log();
|
|
63
|
-
// Prompt 3: Using calculator
|
|
64
|
-
console.log('👤 Usuario: Si compré a $45000, ¿cuánto gasto en total?');
|
|
65
|
-
const resp3 = await agent.run('Si compré a $45000, ¿cuánto gasto en total por las 5 unidades?');
|
|
66
|
-
console.log('🤖 IA:', resp3.text);
|
|
67
|
-
console.log('📊 Tokens usados:', resp3.usage.totalTokens);
|
|
68
|
-
console.log('🔧 Tools usadas:', resp3.steps.flatMap((s) => s.toolCalls.map((t) => t.toolName)).join(', ') || 'ninguna');
|
|
69
|
-
console.log('\n--- ✅ Chat Finalizado ---');
|
|
70
|
-
process.exit(0);
|
|
71
|
-
}
|
|
72
|
-
main().catch((err) => {
|
|
73
|
-
console.error('❌ Error:', err);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
});
|
|
1
|
+
export * from './core/AgentBuilder.js';
|
|
2
|
+
export * from './core/MediaBuilder.js';
|
|
3
|
+
export * from './core/types.js';
|
|
4
|
+
export * from './infrastructure/InMemory.js';
|
|
5
|
+
export * from './infrastructure/RedisMemory.js';
|
|
6
|
+
export * from './tools/common.js';
|
|
76
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemory.d.ts","sourceRoot":"","sources":["../../src/infrastructure/InMemory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InMemory.d.ts","sourceRoot":"","sources":["../../src/infrastructure/InMemory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,cAAc;IAClD,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAIxC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI/C,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACH,QAAQ,IAAI,IAAI;CAGnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemory.js","sourceRoot":"","sources":["../../src/infrastructure/InMemory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InMemory.js","sourceRoot":"","sources":["../../src/infrastructure/InMemory.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,eAAe;IAChB,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,WAAW,CAAS;IAE5B,YAAY,OAAkC;QAC1C,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,QAAwB;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisMemory.d.ts","sourceRoot":"","sources":["../../src/infrastructure/RedisMemory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RedisMemory.d.ts","sourceRoot":"","sources":["../../src/infrastructure/RedisMemory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,qBAAa,WAAY,YAAW,cAAc;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB;IAOD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAK/C,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisMemory.js","sourceRoot":"","sources":["../../src/infrastructure/RedisMemory.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"RedisMemory.js","sourceRoot":"","sources":["../../src/infrastructure/RedisMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC;;GAEG;AACH,MAAM,OAAO,WAAW;IACZ,MAAM,CAAQ;IACd,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,UAAU,CAAS;IAE3B,YAAY,OAKX;QACG,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,gBAAgB,IAAI,wBAAwB,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,mBAAmB;IACvE,CAAC;IAEO,MAAM,CAAC,SAAiB;QAC5B,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,WAA2B;QACpD,wEAAwE;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB;QACzB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;CACJ"}
|
package/dist/tools/common.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,WAAW;IACpB;;OAEG;;;;;IA+BH;;OAEG;;;;IAqBH;;OAEG;;;;;IAaH;;OAEG
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,WAAW;IACpB;;OAEG;;;;;IA+BH;;OAEG;;;;IAqBH;;OAEG;;;;;IAaH;;OAEG;;cAQ8C,MAAM;mBAAa,MAAM;;CAiB7E,CAAC"}
|
package/dist/tools/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;QACP,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC;gBAClB,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE;gBACtB,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE;gBAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;aAC7D,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;IAEF,uCAAuC;IACvC,UAAU,EAAE,IAAI,CAAC;QACb,WAAW,EAAE,0FAA0F;QACvG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;SAClH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@misgara/ai-agent",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Librería hexagonal para agentes de IA",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"
|
|
8
|
+
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
9
|
+
"dev": "tsx src/demo.ts",
|
|
10
|
+
"demo:media": "tsx src/demo-media.ts",
|
|
9
11
|
"build": "tsc",
|
|
12
|
+
"check:package": "npm pack --dry-run",
|
|
13
|
+
"release:verify": "npm run clean && npm run typecheck && npm run build && npm run check:package",
|
|
10
14
|
"start": "node dist/index.js",
|
|
11
15
|
"typecheck": "tsc --noEmit",
|
|
12
|
-
"prepublishOnly": "npm run
|
|
16
|
+
"prepublishOnly": "npm run release:verify"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"require": "./dist/index.js"
|
|
23
|
+
}
|
|
13
24
|
},
|
|
14
25
|
"files": [
|
|
15
26
|
"dist"
|
|
16
27
|
],
|
|
28
|
+
"sideEffects": false,
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18.0.0"
|
|
31
|
+
},
|
|
17
32
|
"keywords": [
|
|
18
33
|
"ai",
|
|
19
34
|
"agent",
|
|
20
35
|
"gemini",
|
|
36
|
+
"openai",
|
|
37
|
+
"whisper",
|
|
38
|
+
"deepseek",
|
|
39
|
+
"ocr",
|
|
21
40
|
"vercel-ai-sdk"
|
|
22
41
|
],
|
|
23
42
|
"publishConfig": {
|
|
@@ -27,6 +46,7 @@
|
|
|
27
46
|
"license": "ISC",
|
|
28
47
|
"type": "module",
|
|
29
48
|
"dependencies": {
|
|
49
|
+
"@ai-sdk/deepinfra": "^2.0.26",
|
|
30
50
|
"@ai-sdk/google": "^3.0.6",
|
|
31
51
|
"@ai-sdk/openai": "^3.0.7",
|
|
32
52
|
"ai": "^6.0.27",
|
|
@@ -41,4 +61,4 @@
|
|
|
41
61
|
"tsx": "^4.21.0",
|
|
42
62
|
"typescript": "^5.9.3"
|
|
43
63
|
}
|
|
44
|
-
}
|
|
64
|
+
}
|