symposium 2.1.3 → 2.1.4
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/Model.js +4 -1
- package/Models/AnthropicModel.js +30 -27
- package/Models/DeepSeekModel.js +12 -10
- package/Models/GrokModel.js +8 -6
- package/Models/GroqModel.js +15 -12
- package/Models/OllamaModel.js +16 -8
- package/Models/OpenAIEmbedding.js +7 -4
- package/Models/OpenAIModel.js +29 -26
- package/Models/OpenAITranscribe.js +6 -3
- package/Symposium.js +4 -3
- package/package.json +2 -2
package/Model.js
CHANGED
package/Models/AnthropicModel.js
CHANGED
|
@@ -4,33 +4,36 @@ import Message from "../Message.js";
|
|
|
4
4
|
|
|
5
5
|
export default class AnthropicModel extends Model {
|
|
6
6
|
anthropic;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
7
|
+
|
|
8
|
+
async getModels() {
|
|
9
|
+
return new Map([
|
|
10
|
+
['claude-3.7-sonnet', {
|
|
11
|
+
name: 'claude-3-7-sonnet-latest',
|
|
12
|
+
tokens: 200000,
|
|
13
|
+
tools: true,
|
|
14
|
+
}],
|
|
15
|
+
['claude-4-opus', {
|
|
16
|
+
name: 'claude-opus-4-20250514',
|
|
17
|
+
tokens: 200000,
|
|
18
|
+
tools: true,
|
|
19
|
+
}],
|
|
20
|
+
['claude-4-sonnet', {
|
|
21
|
+
name: 'claude-sonnet-4-20250514',
|
|
22
|
+
tokens: 200000,
|
|
23
|
+
tools: true,
|
|
24
|
+
}],
|
|
25
|
+
['claude-4.5-haiku', {
|
|
26
|
+
name: 'claude-haiku-4-5-20251001',
|
|
27
|
+
tokens: 200000,
|
|
28
|
+
tools: true,
|
|
29
|
+
}],
|
|
30
|
+
['claude-4.5-sonnet', {
|
|
31
|
+
name: 'claude-sonnet-4-5-20250929',
|
|
32
|
+
tokens: 200000,
|
|
33
|
+
tools: true,
|
|
34
|
+
}],
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
34
37
|
|
|
35
38
|
getAnthropic() {
|
|
36
39
|
if (!this.anthropic)
|
package/Models/DeepSeekModel.js
CHANGED
|
@@ -2,16 +2,18 @@ import OpenAIModel from "./OpenAIModel.js";
|
|
|
2
2
|
import OpenAI from "openai";
|
|
3
3
|
|
|
4
4
|
export default class DeepSeekModel extends OpenAIModel {
|
|
5
|
-
|
|
6
|
-
[
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
async getModels() {
|
|
6
|
+
return new Map([
|
|
7
|
+
['deepseek-chat', {
|
|
8
|
+
name: 'deepseek-chat',
|
|
9
|
+
tokens: 64000,
|
|
10
|
+
}],
|
|
11
|
+
['deepseek-reasoner', {
|
|
12
|
+
name: 'deepseek-reasoner',
|
|
13
|
+
tokens: 64000,
|
|
14
|
+
}],
|
|
15
|
+
]);
|
|
16
|
+
}
|
|
15
17
|
|
|
16
18
|
getOpenAi() {
|
|
17
19
|
if (!this.openai) {
|
package/Models/GrokModel.js
CHANGED
|
@@ -2,12 +2,14 @@ import OpenAIModel from "./OpenAIModel.js";
|
|
|
2
2
|
import OpenAI from "openai";
|
|
3
3
|
|
|
4
4
|
export default class GrokModel extends OpenAIModel {
|
|
5
|
-
|
|
6
|
-
[
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
async getModels() {
|
|
6
|
+
return new Map([
|
|
7
|
+
['grok-4', {
|
|
8
|
+
name: 'grok-4',
|
|
9
|
+
tokens: 256000,
|
|
10
|
+
}],
|
|
11
|
+
]);
|
|
12
|
+
}
|
|
11
13
|
|
|
12
14
|
getOpenAi() {
|
|
13
15
|
if (!this.openai) {
|
package/Models/GroqModel.js
CHANGED
|
@@ -4,18 +4,21 @@ import Message from "../Message.js";
|
|
|
4
4
|
|
|
5
5
|
export default class GroqModel extends Model {
|
|
6
6
|
groq;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
|
|
8
|
+
async getModels() {
|
|
9
|
+
return new Map([
|
|
10
|
+
['llama-3', {
|
|
11
|
+
name: 'llama-3.3-70b-versatile',
|
|
12
|
+
tokens: 128000,
|
|
13
|
+
tools: true,
|
|
14
|
+
}],
|
|
15
|
+
['mixtral-8', {
|
|
16
|
+
name: 'mixtral-8x7b-32768',
|
|
17
|
+
tokens: 32768,
|
|
18
|
+
tools: true,
|
|
19
|
+
}],
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
19
22
|
|
|
20
23
|
getGroq() {
|
|
21
24
|
if (!this.groq)
|
package/Models/OllamaModel.js
CHANGED
|
@@ -3,14 +3,22 @@ import Model from "../Model.js";
|
|
|
3
3
|
import Message from "../Message.js";
|
|
4
4
|
|
|
5
5
|
export default class OllamaModel extends Model {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
async getModels() {
|
|
7
|
+
const {models} = await ollama.list();
|
|
8
|
+
|
|
9
|
+
const map = new Map();
|
|
10
|
+
|
|
11
|
+
for (let m of models) {
|
|
12
|
+
map.set(m.name, {
|
|
13
|
+
name: m.name,
|
|
14
|
+
tokens: null, // TODO
|
|
15
|
+
tools: true,
|
|
16
|
+
structured_output: true,
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return map;
|
|
21
|
+
}
|
|
14
22
|
|
|
15
23
|
async generate(model, thread, functions = [], options = {}) {
|
|
16
24
|
const parsed = this.parseOptions(options, functions);
|
|
@@ -2,10 +2,13 @@ import OpenAIModel from "./OpenAIModel.js";
|
|
|
2
2
|
|
|
3
3
|
export default class OpenAIEmbedding extends OpenAIModel {
|
|
4
4
|
type = 'embedding';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
|
|
6
|
+
async getModels() {
|
|
7
|
+
return new Map([
|
|
8
|
+
['openai-text-embedding-3-large', {name: 'text-embedding-3-large'}],
|
|
9
|
+
['openai-text-embedding-3-small', {name: 'text-embedding-3-small'}],
|
|
10
|
+
]);
|
|
11
|
+
}
|
|
9
12
|
|
|
10
13
|
async embed(input, model) {
|
|
11
14
|
const response = await this.getOpenAi().embeddings.create({
|
package/Models/OpenAIModel.js
CHANGED
|
@@ -5,30 +5,33 @@ import {encoding_for_model} from "tiktoken";
|
|
|
5
5
|
|
|
6
6
|
export default class OpenAIModel extends Model {
|
|
7
7
|
openai;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
8
|
+
|
|
9
|
+
async getModels() {
|
|
10
|
+
return new Map([
|
|
11
|
+
['gpt-4o', {
|
|
12
|
+
name: 'gpt-4o',
|
|
13
|
+
tiktoken: 'gpt-4',
|
|
14
|
+
tokens: 128000,
|
|
15
|
+
tools: true,
|
|
16
|
+
structured_output: true,
|
|
17
|
+
}],
|
|
18
|
+
['gpt-5', {
|
|
19
|
+
name: 'gpt-5',
|
|
20
|
+
tiktoken: 'gpt-4',
|
|
21
|
+
tokens: 400000,
|
|
22
|
+
tools: true,
|
|
23
|
+
structured_output: true,
|
|
24
|
+
audio: true,
|
|
25
|
+
}],
|
|
26
|
+
['gpt-5-mini', {
|
|
27
|
+
name: 'gpt-5-mini',
|
|
28
|
+
tiktoken: 'gpt-4',
|
|
29
|
+
tokens: 400000,
|
|
30
|
+
tools: true,
|
|
31
|
+
structured_output: true,
|
|
32
|
+
}],
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
32
35
|
|
|
33
36
|
getOpenAi() {
|
|
34
37
|
if (!this.openai)
|
|
@@ -120,7 +123,7 @@ export default class OpenAIModel extends Model {
|
|
|
120
123
|
|
|
121
124
|
async countTokens(thread) {
|
|
122
125
|
try {
|
|
123
|
-
const model = this.
|
|
126
|
+
const model = (await this.getModels()).get(thread.state.model);
|
|
124
127
|
const encoder = encoding_for_model(model.tiktoken || model.name);
|
|
125
128
|
|
|
126
129
|
const texts = [];
|
|
@@ -188,7 +191,7 @@ export default class OpenAIModel extends Model {
|
|
|
188
191
|
content: '[transcribed] ' + c.content.transcription,
|
|
189
192
|
name: message.name,
|
|
190
193
|
});
|
|
191
|
-
} else{
|
|
194
|
+
} else {
|
|
192
195
|
throw new Error('Audio content is not supported by this model');
|
|
193
196
|
}
|
|
194
197
|
break;
|
|
@@ -2,9 +2,12 @@ import OpenAIModel from "./OpenAIModel.js";
|
|
|
2
2
|
|
|
3
3
|
export default class OpenAITranscribe extends OpenAIModel {
|
|
4
4
|
type = 'stt';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
|
|
6
|
+
async getModels() {
|
|
7
|
+
return new Map([
|
|
8
|
+
['gpt-4o-transcribe', {name: 'gpt-4o-transcribe'}],
|
|
9
|
+
]);
|
|
10
|
+
}
|
|
8
11
|
|
|
9
12
|
async transcribe(file, model, prompt = null) {
|
|
10
13
|
const response = await this.getOpenAi().audio.transcriptions.create({
|
package/Symposium.js
CHANGED
|
@@ -29,7 +29,7 @@ export default class Symposium {
|
|
|
29
29
|
const module = await import(`./Models/${file}`);
|
|
30
30
|
const ModelClass = module.default;
|
|
31
31
|
if (ModelClass)
|
|
32
|
-
this.loadModel(new ModelClass());
|
|
32
|
+
await this.loadModel(new ModelClass());
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
if (storage) {
|
|
@@ -38,8 +38,9 @@ export default class Symposium {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
static loadModel(model_class) {
|
|
42
|
-
|
|
41
|
+
static async loadModel(model_class) {
|
|
42
|
+
const models = await model_class.getModels().entries();
|
|
43
|
+
for (let [key, model] of models) {
|
|
43
44
|
if (this.models.has(key))
|
|
44
45
|
throw new Error(`Duplicate model with key "${key}"`);
|
|
45
46
|
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "symposium",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.4",
|
|
5
5
|
"description": "Agents",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"author": "Domenico Giambra",
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@anthropic-ai/sdk": "^0.67.0",
|
|
11
|
-
"groq-sdk": "^0.
|
|
11
|
+
"groq-sdk": "^0.34.0",
|
|
12
12
|
"ollama": "^0.6.0",
|
|
13
13
|
"openai": "^6.0.0",
|
|
14
14
|
"tiktoken": "^1.0.10",
|