@astrive-ai/providers 1.0.21 → 1.0.23
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overchat-provider.d.ts","sourceRoot":"","sources":["../src/overchat-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGjG,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,EAAE,CAAqH;IAC/H,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAIlC,WAAW,IAAI,OAAO;IAItC,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"overchat-provider.d.ts","sourceRoot":"","sources":["../src/overchat-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGjG,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,EAAE,CAAqH;IAC/H,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAIlC,WAAW,IAAI,OAAO;IAItC,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,WAAW;IAmDN,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4EhD,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;IA6EjF,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAIjD"}
|
|
@@ -63,16 +63,14 @@ export class OverchatProvider extends BaseProvider {
|
|
|
63
63
|
{ id: crypto.randomUUID(), role: 'user', content: 'test downloader tool: download video https://vt.tiktok.com/123/' },
|
|
64
64
|
{ id: crypto.randomUUID(), role: 'assistant', content: '```json\n{"tool_calls":[{"name":"downloader","arguments":{"url":"https://vt.tiktok.com/123/"}}]}\n```' },
|
|
65
65
|
{ id: crypto.randomUUID(), role: 'user', content: '[Tool Result for downloader]: Success' },
|
|
66
|
-
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the downloader tool.' }
|
|
66
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the downloader tool.' },
|
|
67
|
+
{ id: crypto.randomUUID(), role: 'user', content: 'test image editing: edit this photo add hijab https://img.com/1.png' },
|
|
68
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: '```json\n{"tool_calls":[{"name":"img2img","arguments":{"imageUrl":"https://img.com/1.png","prompt":"add hijab, wearing hijab, highly detailed","prompt_mode":"append"}}]}\n```' },
|
|
69
|
+
{ id: crypto.randomUUID(), role: 'user', content: '[Tool Result for img2img]: Success' },
|
|
70
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the image editing tools.' }
|
|
67
71
|
];
|
|
68
72
|
const filteredMessages = messages.filter(m => m.role !== 'system');
|
|
69
73
|
messages = [...fakeHistory, ...filteredMessages];
|
|
70
|
-
// Inject Assistant Prefill explicitly right at the end to hijack generation
|
|
71
|
-
messages.push({
|
|
72
|
-
id: crypto.randomUUID(),
|
|
73
|
-
role: 'assistant',
|
|
74
|
-
content: '```json\n{"tool_calls":[{"name":"'
|
|
75
|
-
});
|
|
76
74
|
}
|
|
77
75
|
return messages;
|
|
78
76
|
}
|
|
@@ -89,41 +87,52 @@ export class OverchatProvider extends BaseProvider {
|
|
|
89
87
|
}
|
|
90
88
|
}
|
|
91
89
|
let finalContent = fullContent;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
let toolCallsArray = [];
|
|
91
|
+
// Our prefill looks like: {"tool_calls":[{"name":"
|
|
92
|
+
// The model responds with: downloader","arguments":{"url":"..."}}]}
|
|
93
|
+
// So fullContent will literally start with the model's completion.
|
|
94
|
+
// First, try standard JSON extraction
|
|
95
|
+
let match = fullContent.match(/```(?:json)?\s*(\{[\s\S]*?"tool_calls"[\s\S]*?\})\s*```/);
|
|
96
|
+
if (!match) {
|
|
97
|
+
match = fullContent.match(/(\{[\s\S]*?"tool_calls"[\s\S]*?\})/);
|
|
98
|
+
}
|
|
99
|
+
if (match) {
|
|
95
100
|
try {
|
|
96
|
-
const parsed = JSON.parse(
|
|
101
|
+
const parsed = JSON.parse(match[1]);
|
|
97
102
|
if (parsed.tool_calls && Array.isArray(parsed.tool_calls)) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
name: tc.name,
|
|
101
|
-
arguments: typeof tc.arguments === 'string' ? JSON.parse(tc.arguments) : (tc.arguments || tc.parameters || {})
|
|
102
|
-
}));
|
|
103
|
+
toolCallsArray = parsed.tool_calls;
|
|
104
|
+
finalContent = fullContent.replace(match[0], '').trim();
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
catch (e) { }
|
|
106
|
-
finalContent = ""; // Clear output because we successfully triggered a tool
|
|
107
108
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
109
|
+
// If standard extraction failed, check if it's the prefilled response
|
|
110
|
+
// Model output looks like: downloader","arguments":{"url":"https://vt.tiktok.com/ZSXc7Dakk/"}}]}
|
|
111
|
+
if (toolCallsArray.length === 0 && fullContent.includes('"arguments":')) {
|
|
112
|
+
// Let's use string manipulation to extract it because regex fails on nested JSON braces
|
|
113
|
+
try {
|
|
114
|
+
const parts = fullContent.split('"arguments":');
|
|
115
|
+
if (parts.length > 1) {
|
|
116
|
+
const toolName = parts[0].replace(/```(?:json)?/, '').replace(/"\s*,\s*$/, '').trim();
|
|
117
|
+
let argStr = parts.slice(1).join('"arguments":').trim();
|
|
118
|
+
// Remove trailing JSON clutter from prefill completion
|
|
119
|
+
argStr = argStr.split('}')[0] + '}'; // Gets just the first argument block
|
|
120
|
+
const toolArgs = JSON.parse(argStr);
|
|
121
|
+
toolCallsArray = [{
|
|
122
|
+
name: toolName,
|
|
123
|
+
arguments: toolArgs
|
|
124
|
+
}];
|
|
125
|
+
finalContent = ""; // Clear content because it's a tool call
|
|
124
126
|
}
|
|
125
|
-
catch (e) { }
|
|
126
127
|
}
|
|
128
|
+
catch (e) { }
|
|
129
|
+
}
|
|
130
|
+
if (toolCallsArray.length > 0) {
|
|
131
|
+
toolCalls = toolCallsArray.map((tc) => ({
|
|
132
|
+
id: `call_${crypto.randomUUID()}`,
|
|
133
|
+
name: tc.name,
|
|
134
|
+
arguments: typeof tc.arguments === 'string' ? JSON.parse(tc.arguments) : (tc.arguments || tc.parameters || {})
|
|
135
|
+
}));
|
|
127
136
|
}
|
|
128
137
|
return {
|
|
129
138
|
id: crypto.randomUUID(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overchat-provider.js","sourceRoot":"","sources":["../src/overchat-provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"overchat-provider.js","sourceRoot":"","sources":["../src/overchat-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/overchat-provider.ts
CHANGED
|
@@ -71,18 +71,15 @@ export class OverchatProvider extends BaseProvider {
|
|
|
71
71
|
{ id: crypto.randomUUID(), role: 'user', content: 'test downloader tool: download video https://vt.tiktok.com/123/' },
|
|
72
72
|
{ id: crypto.randomUUID(), role: 'assistant', content: '```json\n{"tool_calls":[{"name":"downloader","arguments":{"url":"https://vt.tiktok.com/123/"}}]}\n```' },
|
|
73
73
|
{ id: crypto.randomUUID(), role: 'user', content: '[Tool Result for downloader]: Success' },
|
|
74
|
-
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the downloader tool.' }
|
|
74
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the downloader tool.' },
|
|
75
|
+
{ id: crypto.randomUUID(), role: 'user', content: 'test image editing: edit this photo add hijab https://img.com/1.png' },
|
|
76
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: '```json\n{"tool_calls":[{"name":"img2img","arguments":{"imageUrl":"https://img.com/1.png","prompt":"add hijab, wearing hijab, highly detailed","prompt_mode":"append"}}]}\n```' },
|
|
77
|
+
{ id: crypto.randomUUID(), role: 'user', content: '[Tool Result for img2img]: Success' },
|
|
78
|
+
{ id: crypto.randomUUID(), role: 'assistant', content: 'I have successfully tested the image editing tools.' }
|
|
75
79
|
];
|
|
76
80
|
|
|
77
81
|
const filteredMessages = messages.filter(m => m.role !== 'system');
|
|
78
82
|
messages = [...fakeHistory, ...filteredMessages];
|
|
79
|
-
|
|
80
|
-
// Inject Assistant Prefill explicitly right at the end to hijack generation
|
|
81
|
-
messages.push({
|
|
82
|
-
id: crypto.randomUUID(),
|
|
83
|
-
role: 'assistant',
|
|
84
|
-
content: '```json\n{"tool_calls":[{"name":"'
|
|
85
|
-
});
|
|
86
83
|
}
|
|
87
84
|
|
|
88
85
|
return messages;
|
|
@@ -103,39 +100,55 @@ export class OverchatProvider extends BaseProvider {
|
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
let finalContent = fullContent;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
let toolCallsArray: any[] = [];
|
|
104
|
+
|
|
105
|
+
// Our prefill looks like: {"tool_calls":[{"name":"
|
|
106
|
+
// The model responds with: downloader","arguments":{"url":"..."}}]}
|
|
107
|
+
// So fullContent will literally start with the model's completion.
|
|
108
|
+
|
|
109
|
+
// First, try standard JSON extraction
|
|
110
|
+
let match = fullContent.match(/```(?:json)?\s*(\{[\s\S]*?"tool_calls"[\s\S]*?\})\s*```/);
|
|
111
|
+
if (!match) {
|
|
112
|
+
match = fullContent.match(/(\{[\s\S]*?"tool_calls"[\s\S]*?\})/);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (match) {
|
|
109
116
|
try {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
const parsed = JSON.parse(match[1]);
|
|
118
|
+
if (parsed.tool_calls && Array.isArray(parsed.tool_calls)) {
|
|
119
|
+
toolCallsArray = parsed.tool_calls;
|
|
120
|
+
finalContent = fullContent.replace(match[0], '').trim();
|
|
121
|
+
}
|
|
122
|
+
} catch (e) {}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// If standard extraction failed, check if it's the prefilled response
|
|
126
|
+
// Model output looks like: downloader","arguments":{"url":"https://vt.tiktok.com/ZSXc7Dakk/"}}]}
|
|
127
|
+
if (toolCallsArray.length === 0 && fullContent.includes('"arguments":')) {
|
|
128
|
+
// Let's use string manipulation to extract it because regex fails on nested JSON braces
|
|
129
|
+
try {
|
|
130
|
+
const parts = fullContent.split('"arguments":');
|
|
131
|
+
if (parts.length > 1) {
|
|
132
|
+
const toolName = parts[0].replace(/```(?:json)?/, '').replace(/"\s*,\s*$/, '').trim();
|
|
133
|
+
let argStr = parts.slice(1).join('"arguments":').trim();
|
|
134
|
+
// Remove trailing JSON clutter from prefill completion
|
|
135
|
+
argStr = argStr.split('}')[0] + '}'; // Gets just the first argument block
|
|
136
|
+
const toolArgs = JSON.parse(argStr);
|
|
137
|
+
toolCallsArray = [{
|
|
138
|
+
name: toolName,
|
|
139
|
+
arguments: toolArgs
|
|
140
|
+
}];
|
|
141
|
+
finalContent = ""; // Clear content because it's a tool call
|
|
117
142
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
const parsed = JSON.parse(match[1]);
|
|
129
|
-
if (parsed.tool_calls && Array.isArray(parsed.tool_calls)) {
|
|
130
|
-
toolCalls = parsed.tool_calls.map((tc: any) => ({
|
|
131
|
-
id: `call_${crypto.randomUUID()}`,
|
|
132
|
-
name: tc.name,
|
|
133
|
-
arguments: typeof tc.arguments === 'string' ? JSON.parse(tc.arguments) : (tc.arguments || tc.parameters || {})
|
|
134
|
-
}));
|
|
135
|
-
finalContent = fullContent.replace(match[0], '').trim();
|
|
136
|
-
}
|
|
137
|
-
} catch (e) {}
|
|
138
|
-
}
|
|
143
|
+
} catch(e) {}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (toolCallsArray.length > 0) {
|
|
147
|
+
toolCalls = toolCallsArray.map((tc: any) => ({
|
|
148
|
+
id: `call_${crypto.randomUUID()}`,
|
|
149
|
+
name: tc.name,
|
|
150
|
+
arguments: typeof tc.arguments === 'string' ? JSON.parse(tc.arguments) : (tc.arguments || tc.parameters || {})
|
|
151
|
+
}));
|
|
139
152
|
}
|
|
140
153
|
|
|
141
154
|
return {
|