@push.rocks/smartai 0.5.11 → 0.6.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/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/abstract.classes.multimodal.d.ts +30 -0
- package/dist_ts/abstract.classes.multimodal.js +1 -1
- package/dist_ts/index.d.ts +6 -0
- package/dist_ts/index.js +7 -1
- package/dist_ts/provider.anthropic.d.ts +5 -1
- package/dist_ts/provider.anthropic.js +105 -1
- package/dist_ts/provider.exo.d.ts +2 -1
- package/dist_ts/provider.exo.js +4 -1
- package/dist_ts/provider.groq.d.ts +2 -1
- package/dist_ts/provider.groq.js +4 -1
- package/dist_ts/provider.ollama.d.ts +2 -1
- package/dist_ts/provider.ollama.js +4 -1
- package/dist_ts/provider.openai.d.ts +4 -0
- package/dist_ts/provider.openai.js +101 -1
- package/dist_ts/provider.perplexity.d.ts +2 -1
- package/dist_ts/provider.perplexity.js +60 -1
- package/dist_ts/provider.xai.d.ts +2 -0
- package/dist_ts/provider.xai.js +4 -1
- package/package.json +2 -1
- package/readme.research.md +177 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/abstract.classes.multimodal.ts +33 -0
- package/ts/index.ts +6 -0
- package/ts/provider.anthropic.ts +121 -1
- package/ts/provider.exo.ts +5 -1
- package/ts/provider.groq.ts +5 -1
- package/ts/provider.ollama.ts +5 -1
- package/ts/provider.openai.ts +110 -1
- package/ts/provider.perplexity.ts +66 -1
- package/ts/provider.xai.ts +5 -1
|
@@ -140,5 +140,64 @@ export class PerplexityProvider extends MultiModalModel {
|
|
|
140
140
|
async document(optionsArg) {
|
|
141
141
|
throw new Error('Document processing is not supported by Perplexity.');
|
|
142
142
|
}
|
|
143
|
+
async research(optionsArg) {
|
|
144
|
+
// Perplexity has Sonar models that are optimized for search
|
|
145
|
+
// sonar models: sonar, sonar-pro
|
|
146
|
+
const model = optionsArg.searchDepth === 'deep' ? 'sonar-pro' : 'sonar';
|
|
147
|
+
try {
|
|
148
|
+
const response = await fetch('https://api.perplexity.ai/chat/completions', {
|
|
149
|
+
method: 'POST',
|
|
150
|
+
headers: {
|
|
151
|
+
'Authorization': `Bearer ${this.options.perplexityToken}`,
|
|
152
|
+
'Content-Type': 'application/json',
|
|
153
|
+
},
|
|
154
|
+
body: JSON.stringify({
|
|
155
|
+
model,
|
|
156
|
+
messages: [
|
|
157
|
+
{
|
|
158
|
+
role: 'system',
|
|
159
|
+
content: 'You are a helpful research assistant. Provide accurate information with sources.'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
role: 'user',
|
|
163
|
+
content: optionsArg.query
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
temperature: 0.7,
|
|
167
|
+
max_tokens: 4000
|
|
168
|
+
}),
|
|
169
|
+
});
|
|
170
|
+
if (!response.ok) {
|
|
171
|
+
throw new Error(`Perplexity API error: ${response.statusText}`);
|
|
172
|
+
}
|
|
173
|
+
const result = await response.json();
|
|
174
|
+
const answer = result.choices[0].message.content;
|
|
175
|
+
// Parse citations from the response
|
|
176
|
+
const sources = [];
|
|
177
|
+
// Perplexity includes citations in the format [1], [2], etc. with sources listed
|
|
178
|
+
// This is a simplified parser - could be enhanced based on actual Perplexity response format
|
|
179
|
+
if (result.citations) {
|
|
180
|
+
for (const citation of result.citations) {
|
|
181
|
+
sources.push({
|
|
182
|
+
url: citation.url || '',
|
|
183
|
+
title: citation.title || '',
|
|
184
|
+
snippet: citation.snippet || ''
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
answer,
|
|
190
|
+
sources,
|
|
191
|
+
metadata: {
|
|
192
|
+
model,
|
|
193
|
+
searchDepth: optionsArg.searchDepth || 'basic'
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.error('Perplexity research error:', error);
|
|
199
|
+
throw new Error(`Failed to perform research: ${error.message}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
143
202
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIucGVycGxleGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Byb3ZpZGVyLnBlcnBsZXhpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBT25FLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUFlO0lBR3JELFlBQVksVUFBc0M7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxnREFBZ0Q7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLEtBQUksQ0FBQztJQUVSLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBaUM7UUFDdkQsaURBQWlEO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksY0FBYyxHQUE4QyxJQUFJLENBQUM7UUFFckUsZ0RBQWdEO1FBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFxQjtZQUN4RCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVO2dCQUMvQixNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFbEQsc0RBQXNEO2dCQUN0RCxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNaLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFDLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQzt3QkFBRSxNQUFNO29CQUUvQixN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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
3
|
+
import type { ResearchOptions, ResearchResponse } from './abstract.classes.multimodal.js';
|
|
3
4
|
export interface IXAIProviderOptions {
|
|
4
5
|
xaiToken: string;
|
|
5
6
|
}
|
|
@@ -39,4 +40,5 @@ export declare class XAIProvider extends MultiModalModel {
|
|
|
39
40
|
}): Promise<{
|
|
40
41
|
message: any;
|
|
41
42
|
}>;
|
|
43
|
+
research(optionsArg: ResearchOptions): Promise<ResearchResponse>;
|
|
42
44
|
}
|
package/dist_ts/provider.xai.js
CHANGED
|
@@ -139,5 +139,8 @@ export class XAIProvider extends MultiModalModel {
|
|
|
139
139
|
message: completion.choices[0]?.message?.content || ''
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
|
+
async research(optionsArg) {
|
|
143
|
+
throw new Error('Research capabilities are not yet supported by xAI provider.');
|
|
144
|
+
}
|
|
142
145
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIueGFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIueGFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVFuRSxNQUFNLE9BQU8sV0FBWSxTQUFRLGVBQWU7SUFJOUMsWUFBWSxVQUErQjtRQUN6QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDaEQsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUM3QixPQUFPLEVBQUUscUJBQXFCO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWlDO1FBQ3ZELGlEQUFpRDtRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLGNBQWMsR0FBOEMsSUFBSSxDQUFDO1FBRXJFLGdEQUFnRDtRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBcUI7WUFDeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVTtnQkFDL0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
],
|
|
78
78
|
"scripts": {
|
|
79
79
|
"test": "(tstest test/ --web --verbose)",
|
|
80
|
+
"typecheck": "tsbuild check",
|
|
80
81
|
"build": "(tsbuild --web --allowimplicitany)",
|
|
81
82
|
"buildDocs": "(tsdoc)"
|
|
82
83
|
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# SmartAI Research API Implementation
|
|
2
|
+
|
|
3
|
+
This document describes the new research capabilities added to the SmartAI library, enabling web search and deep research features for OpenAI and Anthropic providers.
|
|
4
|
+
|
|
5
|
+
## Features Added
|
|
6
|
+
|
|
7
|
+
### 1. Research Method Interface
|
|
8
|
+
|
|
9
|
+
Added a new `research()` method to the `MultiModalModel` abstract class with the following interfaces:
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
interface ResearchOptions {
|
|
13
|
+
query: string;
|
|
14
|
+
searchDepth?: 'basic' | 'advanced' | 'deep';
|
|
15
|
+
maxSources?: number;
|
|
16
|
+
includeWebSearch?: boolean;
|
|
17
|
+
background?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface ResearchResponse {
|
|
21
|
+
answer: string;
|
|
22
|
+
sources: Array<{
|
|
23
|
+
url: string;
|
|
24
|
+
title: string;
|
|
25
|
+
snippet: string;
|
|
26
|
+
}>;
|
|
27
|
+
searchQueries?: string[];
|
|
28
|
+
metadata?: any;
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. OpenAI Provider Research Implementation
|
|
33
|
+
|
|
34
|
+
The OpenAI provider now supports:
|
|
35
|
+
- **Deep Research API** with models:
|
|
36
|
+
- `o3-deep-research-2025-06-26` (comprehensive analysis)
|
|
37
|
+
- `o4-mini-deep-research-2025-06-26` (lightweight, faster)
|
|
38
|
+
- **Web Search** for standard models (gpt-5, o3, o3-pro, o4-mini)
|
|
39
|
+
- **Background processing** for async deep research tasks
|
|
40
|
+
|
|
41
|
+
### 3. Anthropic Provider Research Implementation
|
|
42
|
+
|
|
43
|
+
The Anthropic provider now supports:
|
|
44
|
+
- **Web Search API** with Claude models
|
|
45
|
+
- **Domain filtering** (allow/block lists)
|
|
46
|
+
- **Progressive searches** for comprehensive research
|
|
47
|
+
- **Citation extraction** from responses
|
|
48
|
+
|
|
49
|
+
### 4. Perplexity Provider Research Implementation
|
|
50
|
+
|
|
51
|
+
The Perplexity provider implements research using:
|
|
52
|
+
- **Sonar models** for standard searches
|
|
53
|
+
- **Sonar Pro** for deep research
|
|
54
|
+
- Built-in citation support
|
|
55
|
+
|
|
56
|
+
### 5. Other Providers
|
|
57
|
+
|
|
58
|
+
Added research method stubs to:
|
|
59
|
+
- Groq Provider
|
|
60
|
+
- Ollama Provider
|
|
61
|
+
- xAI Provider
|
|
62
|
+
- Exo Provider
|
|
63
|
+
|
|
64
|
+
These providers throw a "not yet supported" error when research is called, maintaining interface compatibility.
|
|
65
|
+
|
|
66
|
+
## Usage Examples
|
|
67
|
+
|
|
68
|
+
### Basic Research with OpenAI
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { OpenAiProvider } from '@push.rocks/smartai';
|
|
72
|
+
|
|
73
|
+
const openai = new OpenAiProvider({
|
|
74
|
+
openaiToken: 'your-api-key',
|
|
75
|
+
researchModel: 'o4-mini-deep-research-2025-06-26'
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
await openai.start();
|
|
79
|
+
|
|
80
|
+
const result = await openai.research({
|
|
81
|
+
query: 'What are the latest developments in quantum computing?',
|
|
82
|
+
searchDepth: 'basic',
|
|
83
|
+
includeWebSearch: true
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
console.log(result.answer);
|
|
87
|
+
console.log('Sources:', result.sources);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Deep Research with OpenAI
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
const deepResult = await openai.research({
|
|
94
|
+
query: 'Comprehensive analysis of climate change mitigation strategies',
|
|
95
|
+
searchDepth: 'deep',
|
|
96
|
+
background: true
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Research with Anthropic
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { AnthropicProvider } from '@push.rocks/smartai';
|
|
104
|
+
|
|
105
|
+
const anthropic = new AnthropicProvider({
|
|
106
|
+
anthropicToken: 'your-api-key',
|
|
107
|
+
enableWebSearch: true,
|
|
108
|
+
searchDomainAllowList: ['nature.com', 'science.org']
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
await anthropic.start();
|
|
112
|
+
|
|
113
|
+
const result = await anthropic.research({
|
|
114
|
+
query: 'Latest breakthroughs in CRISPR gene editing',
|
|
115
|
+
searchDepth: 'advanced'
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Research with Perplexity
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
import { PerplexityProvider } from '@push.rocks/smartai';
|
|
123
|
+
|
|
124
|
+
const perplexity = new PerplexityProvider({
|
|
125
|
+
perplexityToken: 'your-api-key'
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const result = await perplexity.research({
|
|
129
|
+
query: 'Current state of autonomous vehicle technology',
|
|
130
|
+
searchDepth: 'deep' // Uses Sonar Pro model
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Configuration Options
|
|
135
|
+
|
|
136
|
+
### OpenAI Provider
|
|
137
|
+
- `researchModel`: Specify deep research model (default: `o4-mini-deep-research-2025-06-26`)
|
|
138
|
+
- `enableWebSearch`: Enable web search for standard models
|
|
139
|
+
|
|
140
|
+
### Anthropic Provider
|
|
141
|
+
- `enableWebSearch`: Enable web search capabilities
|
|
142
|
+
- `searchDomainAllowList`: Array of allowed domains
|
|
143
|
+
- `searchDomainBlockList`: Array of blocked domains
|
|
144
|
+
|
|
145
|
+
## API Pricing
|
|
146
|
+
|
|
147
|
+
- **OpenAI Deep Research**: $10 per 1,000 calls
|
|
148
|
+
- **Anthropic Web Search**: $10 per 1,000 searches + standard token costs
|
|
149
|
+
- **Perplexity Sonar**: $5 per 1,000 searches (Sonar Pro)
|
|
150
|
+
|
|
151
|
+
## Testing
|
|
152
|
+
|
|
153
|
+
Run the test suite:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
pnpm test test/test.research.ts
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
All providers have been tested to ensure:
|
|
160
|
+
- Research methods are properly exposed
|
|
161
|
+
- Interfaces are correctly typed
|
|
162
|
+
- Unsupported providers throw appropriate errors
|
|
163
|
+
|
|
164
|
+
## Next Steps
|
|
165
|
+
|
|
166
|
+
Future enhancements could include:
|
|
167
|
+
1. Implementing Google Gemini Grounding API support
|
|
168
|
+
2. Adding Brave Search API integration
|
|
169
|
+
3. Implementing retry logic for rate limits
|
|
170
|
+
4. Adding caching for repeated queries
|
|
171
|
+
5. Supporting batch research operations
|
|
172
|
+
|
|
173
|
+
## Notes
|
|
174
|
+
|
|
175
|
+
- The implementation maintains backward compatibility
|
|
176
|
+
- All existing methods continue to work unchanged
|
|
177
|
+
- Research capabilities are optional and don't affect existing functionality
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartai',
|
|
6
|
-
version: '0.
|
|
6
|
+
version: '0.6.1',
|
|
7
7
|
description: 'SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.'
|
|
8
8
|
}
|
|
@@ -25,6 +25,31 @@ export interface ChatResponse {
|
|
|
25
25
|
message: string;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Options for research interactions
|
|
30
|
+
*/
|
|
31
|
+
export interface ResearchOptions {
|
|
32
|
+
query: string;
|
|
33
|
+
searchDepth?: 'basic' | 'advanced' | 'deep';
|
|
34
|
+
maxSources?: number;
|
|
35
|
+
includeWebSearch?: boolean;
|
|
36
|
+
background?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Response format for research interactions
|
|
41
|
+
*/
|
|
42
|
+
export interface ResearchResponse {
|
|
43
|
+
answer: string;
|
|
44
|
+
sources: Array<{
|
|
45
|
+
url: string;
|
|
46
|
+
title: string;
|
|
47
|
+
snippet: string;
|
|
48
|
+
}>;
|
|
49
|
+
searchQueries?: string[];
|
|
50
|
+
metadata?: any;
|
|
51
|
+
}
|
|
52
|
+
|
|
28
53
|
/**
|
|
29
54
|
* Abstract base class for multi-modal AI models.
|
|
30
55
|
* Provides a common interface for different AI providers (OpenAI, Anthropic, Perplexity, Ollama)
|
|
@@ -98,4 +123,12 @@ export abstract class MultiModalModel {
|
|
|
98
123
|
pdfDocuments: Uint8Array[];
|
|
99
124
|
messageHistory: ChatMessage[];
|
|
100
125
|
}): Promise<{ message: any }>;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Research and web search capabilities
|
|
129
|
+
* @param optionsArg Options containing the research query and configuration
|
|
130
|
+
* @returns Promise resolving to the research results with sources
|
|
131
|
+
* @throws Error if the provider doesn't support research capabilities
|
|
132
|
+
*/
|
|
133
|
+
public abstract research(optionsArg: ResearchOptions): Promise<ResearchResponse>;
|
|
101
134
|
}
|
package/ts/index.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export * from './classes.smartai.js';
|
|
2
2
|
export * from './abstract.classes.multimodal.js';
|
|
3
3
|
export * from './provider.openai.js';
|
|
4
|
+
export * from './provider.anthropic.js';
|
|
5
|
+
export * from './provider.perplexity.js';
|
|
6
|
+
export * from './provider.groq.js';
|
|
7
|
+
export * from './provider.ollama.js';
|
|
8
|
+
export * from './provider.xai.js';
|
|
9
|
+
export * from './provider.exo.js';
|
package/ts/provider.anthropic.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
4
|
-
import type { ChatOptions, ChatResponse, ChatMessage } from './abstract.classes.multimodal.js';
|
|
4
|
+
import type { ChatOptions, ChatResponse, ChatMessage, ResearchOptions, ResearchResponse } from './abstract.classes.multimodal.js';
|
|
5
5
|
import type { ImageBlockParam, TextBlockParam } from '@anthropic-ai/sdk/resources/messages';
|
|
6
6
|
|
|
7
7
|
type ContentBlock = ImageBlockParam | TextBlockParam;
|
|
8
8
|
|
|
9
9
|
export interface IAnthropicProviderOptions {
|
|
10
10
|
anthropicToken: string;
|
|
11
|
+
enableWebSearch?: boolean;
|
|
12
|
+
searchDomainAllowList?: string[];
|
|
13
|
+
searchDomainBlockList?: string[];
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
export class AnthropicProvider extends MultiModalModel {
|
|
@@ -239,4 +242,121 @@ export class AnthropicProvider extends MultiModalModel {
|
|
|
239
242
|
}
|
|
240
243
|
};
|
|
241
244
|
}
|
|
245
|
+
|
|
246
|
+
public async research(optionsArg: ResearchOptions): Promise<ResearchResponse> {
|
|
247
|
+
// Prepare the messages for the research request
|
|
248
|
+
const systemMessage = `You are a research assistant with web search capabilities.
|
|
249
|
+
Provide comprehensive, well-researched answers with citations and sources.
|
|
250
|
+
When searching the web, be thorough and cite your sources accurately.`;
|
|
251
|
+
|
|
252
|
+
try {
|
|
253
|
+
// Build the tool configuration for web search
|
|
254
|
+
const tools = this.options.enableWebSearch ? [
|
|
255
|
+
{
|
|
256
|
+
type: 'web_search_20250305' as const,
|
|
257
|
+
name: 'web_search',
|
|
258
|
+
description: 'Search the web for current information',
|
|
259
|
+
input_schema: {
|
|
260
|
+
type: 'object' as const,
|
|
261
|
+
properties: {
|
|
262
|
+
query: {
|
|
263
|
+
type: 'string',
|
|
264
|
+
description: 'The search query'
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
required: ['query']
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
] : [];
|
|
271
|
+
|
|
272
|
+
// Configure the request based on search depth
|
|
273
|
+
const maxTokens = optionsArg.searchDepth === 'deep' ? 8192 :
|
|
274
|
+
optionsArg.searchDepth === 'advanced' ? 6144 : 4096;
|
|
275
|
+
|
|
276
|
+
// Create the research request
|
|
277
|
+
const requestParams: any = {
|
|
278
|
+
model: 'claude-3-opus-20240229',
|
|
279
|
+
system: systemMessage,
|
|
280
|
+
messages: [
|
|
281
|
+
{
|
|
282
|
+
role: 'user' as const,
|
|
283
|
+
content: optionsArg.query
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
max_tokens: maxTokens,
|
|
287
|
+
temperature: 0.7
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
// Add tools if web search is enabled
|
|
291
|
+
if (tools.length > 0) {
|
|
292
|
+
requestParams.tools = tools;
|
|
293
|
+
requestParams.tool_choice = { type: 'auto' };
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Execute the research request
|
|
297
|
+
const result = await this.anthropicApiClient.messages.create(requestParams);
|
|
298
|
+
|
|
299
|
+
// Extract the answer from content blocks
|
|
300
|
+
let answer = '';
|
|
301
|
+
const sources: Array<{ url: string; title: string; snippet: string }> = [];
|
|
302
|
+
const searchQueries: string[] = [];
|
|
303
|
+
|
|
304
|
+
// Process content blocks
|
|
305
|
+
for (const block of result.content) {
|
|
306
|
+
if ('text' in block) {
|
|
307
|
+
answer += block.text;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Parse sources from the answer (Claude includes citations in various formats)
|
|
312
|
+
const urlRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
313
|
+
let match: RegExpExecArray | null;
|
|
314
|
+
|
|
315
|
+
while ((match = urlRegex.exec(answer)) !== null) {
|
|
316
|
+
sources.push({
|
|
317
|
+
title: match[1],
|
|
318
|
+
url: match[2],
|
|
319
|
+
snippet: ''
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Also look for plain URLs
|
|
324
|
+
const plainUrlRegex = /https?:\/\/[^\s\)]+/g;
|
|
325
|
+
const plainUrls = answer.match(plainUrlRegex) || [];
|
|
326
|
+
|
|
327
|
+
for (const url of plainUrls) {
|
|
328
|
+
// Check if this URL is already in sources
|
|
329
|
+
if (!sources.some(s => s.url === url)) {
|
|
330
|
+
sources.push({
|
|
331
|
+
title: new URL(url).hostname,
|
|
332
|
+
url: url,
|
|
333
|
+
snippet: ''
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Extract tool use information if available
|
|
339
|
+
if ('tool_use' in result && Array.isArray(result.tool_use)) {
|
|
340
|
+
for (const toolUse of result.tool_use) {
|
|
341
|
+
if (toolUse.name === 'web_search' && toolUse.input?.query) {
|
|
342
|
+
searchQueries.push(toolUse.input.query);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return {
|
|
348
|
+
answer,
|
|
349
|
+
sources,
|
|
350
|
+
searchQueries: searchQueries.length > 0 ? searchQueries : undefined,
|
|
351
|
+
metadata: {
|
|
352
|
+
model: 'claude-3-opus-20240229',
|
|
353
|
+
searchDepth: optionsArg.searchDepth || 'basic',
|
|
354
|
+
tokensUsed: result.usage?.output_tokens
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
} catch (error) {
|
|
358
|
+
console.error('Anthropic research error:', error);
|
|
359
|
+
throw new Error(`Failed to perform research: ${error.message}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
242
362
|
}
|
package/ts/provider.exo.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
4
|
-
import type { ChatOptions, ChatResponse, ChatMessage } from './abstract.classes.multimodal.js';
|
|
4
|
+
import type { ChatOptions, ChatResponse, ChatMessage, ResearchOptions, ResearchResponse } from './abstract.classes.multimodal.js';
|
|
5
5
|
import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';
|
|
6
6
|
|
|
7
7
|
export interface IExoProviderOptions {
|
|
@@ -125,4 +125,8 @@ export class ExoProvider extends MultiModalModel {
|
|
|
125
125
|
}): Promise<{ message: any }> {
|
|
126
126
|
throw new Error('Document processing is not supported by Exo provider');
|
|
127
127
|
}
|
|
128
|
+
|
|
129
|
+
public async research(optionsArg: ResearchOptions): Promise<ResearchResponse> {
|
|
130
|
+
throw new Error('Research capabilities are not yet supported by Exo provider.');
|
|
131
|
+
}
|
|
128
132
|
}
|
package/ts/provider.groq.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
4
|
-
import type { ChatOptions, ChatResponse, ChatMessage } from './abstract.classes.multimodal.js';
|
|
4
|
+
import type { ChatOptions, ChatResponse, ChatMessage, ResearchOptions, ResearchResponse } from './abstract.classes.multimodal.js';
|
|
5
5
|
|
|
6
6
|
export interface IGroqProviderOptions {
|
|
7
7
|
groqToken: string;
|
|
@@ -189,4 +189,8 @@ export class GroqProvider extends MultiModalModel {
|
|
|
189
189
|
}): Promise<{ message: any }> {
|
|
190
190
|
throw new Error('Document processing is not yet supported by Groq.');
|
|
191
191
|
}
|
|
192
|
+
|
|
193
|
+
public async research(optionsArg: ResearchOptions): Promise<ResearchResponse> {
|
|
194
|
+
throw new Error('Research capabilities are not yet supported by Groq provider.');
|
|
195
|
+
}
|
|
192
196
|
}
|
package/ts/provider.ollama.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { MultiModalModel } from './abstract.classes.multimodal.js';
|
|
4
|
-
import type { ChatOptions, ChatResponse, ChatMessage } from './abstract.classes.multimodal.js';
|
|
4
|
+
import type { ChatOptions, ChatResponse, ChatMessage, ResearchOptions, ResearchResponse } from './abstract.classes.multimodal.js';
|
|
5
5
|
|
|
6
6
|
export interface IOllamaProviderOptions {
|
|
7
7
|
baseUrl?: string;
|
|
@@ -251,4 +251,8 @@ export class OllamaProvider extends MultiModalModel {
|
|
|
251
251
|
}
|
|
252
252
|
};
|
|
253
253
|
}
|
|
254
|
+
|
|
255
|
+
public async research(optionsArg: ResearchOptions): Promise<ResearchResponse> {
|
|
256
|
+
throw new Error('Research capabilities are not yet supported by Ollama provider.');
|
|
257
|
+
}
|
|
254
258
|
}
|