@mariozechner/pi-web-ui 0.16.0 → 0.17.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/dist/agent/transports/AppTransport.d.ts +4 -0
- package/dist/agent/transports/AppTransport.d.ts.map +1 -1
- package/dist/agent/transports/AppTransport.js +23 -15
- package/dist/agent/transports/AppTransport.js.map +1 -1
- package/dist/agent/transports/ProviderTransport.d.ts +4 -0
- package/dist/agent/transports/ProviderTransport.d.ts.map +1 -1
- package/dist/agent/transports/ProviderTransport.js +22 -9
- package/dist/agent/transports/ProviderTransport.js.map +1 -1
- package/dist/agent/transports/types.d.ts +3 -0
- package/dist/agent/transports/types.d.ts.map +1 -1
- package/example/package.json +1 -1
- package/package.json +3 -3
- package/src/agent/transports/AppTransport.ts +26 -20
- package/src/agent/transports/ProviderTransport.ts +26 -9
- package/src/agent/transports/types.ts +5 -1
|
@@ -6,6 +6,10 @@ import type { AgentRunConfig, AgentTransport } from "./types.js";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class AppTransport implements AgentTransport {
|
|
8
8
|
private readonly proxyUrl;
|
|
9
|
+
private getStreamFn;
|
|
10
|
+
private buildContext;
|
|
11
|
+
private buildLoopConfig;
|
|
9
12
|
run(messages: Message[], userMessage: Message, cfg: AgentRunConfig, signal?: AbortSignal): AsyncGenerator<import("@mariozechner/pi-ai").AgentEvent, void, unknown>;
|
|
13
|
+
continue(messages: Message[], cfg: AgentRunConfig, signal?: AbortSignal): AsyncGenerator<import("@mariozechner/pi-ai").AgentEvent, void, unknown>;
|
|
10
14
|
}
|
|
11
15
|
//# sourceMappingURL=AppTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppTransport.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/AppTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOX,OAAO,EAKP,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"AppTransport.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/AppTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOX,OAAO,EAKP,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA0SjE;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;YAE9C,WAAW;IAWzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAQhB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW;IAUxF,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW;CAS9E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { agentLoop } from "@mariozechner/pi-ai";
|
|
1
|
+
import { agentLoop, agentLoopContinue } from "@mariozechner/pi-ai";
|
|
2
2
|
import { AssistantMessageEventStream } from "@mariozechner/pi-ai/dist/utils/event-stream.js";
|
|
3
3
|
import { parseStreamingJson } from "@mariozechner/pi-ai/dist/utils/json-parse.js";
|
|
4
4
|
import { clearAuthToken, getAuthToken } from "../../utils/auth-token.js";
|
|
@@ -276,44 +276,52 @@ function streamSimpleProxy(model, context, options, proxyUrl) {
|
|
|
276
276
|
})();
|
|
277
277
|
return stream;
|
|
278
278
|
}
|
|
279
|
-
// Proxy transport executes the turn using a remote proxy server
|
|
280
279
|
/**
|
|
281
280
|
* Transport that uses an app server with user authentication tokens.
|
|
282
281
|
* The server manages user accounts and proxies requests to LLM providers.
|
|
283
282
|
*/
|
|
284
283
|
export class AppTransport {
|
|
285
284
|
constructor() {
|
|
286
|
-
// Hardcoded proxy URL for now - will be made configurable later
|
|
287
285
|
this.proxyUrl = "https://genai.mariozechner.at";
|
|
288
286
|
}
|
|
289
|
-
async
|
|
287
|
+
async getStreamFn() {
|
|
290
288
|
const authToken = await getAuthToken();
|
|
291
289
|
if (!authToken) {
|
|
292
290
|
throw new Error(i18n("Auth token is required for proxy transport"));
|
|
293
291
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return streamSimpleProxy(model, context, {
|
|
297
|
-
...options,
|
|
298
|
-
authToken,
|
|
299
|
-
}, this.proxyUrl);
|
|
292
|
+
return (model, context, options) => {
|
|
293
|
+
return streamSimpleProxy(model, context, { ...options, authToken }, this.proxyUrl);
|
|
300
294
|
};
|
|
301
|
-
|
|
302
|
-
|
|
295
|
+
}
|
|
296
|
+
buildContext(messages, cfg) {
|
|
297
|
+
return {
|
|
303
298
|
systemPrompt: cfg.systemPrompt,
|
|
304
299
|
messages,
|
|
305
300
|
tools: cfg.tools,
|
|
306
301
|
};
|
|
307
|
-
|
|
302
|
+
}
|
|
303
|
+
buildLoopConfig(cfg) {
|
|
304
|
+
return {
|
|
308
305
|
model: cfg.model,
|
|
309
306
|
reasoning: cfg.reasoning,
|
|
310
307
|
getQueuedMessages: cfg.getQueuedMessages,
|
|
311
308
|
};
|
|
312
|
-
|
|
313
|
-
|
|
309
|
+
}
|
|
310
|
+
async *run(messages, userMessage, cfg, signal) {
|
|
311
|
+
const streamFn = await this.getStreamFn();
|
|
312
|
+
const context = this.buildContext(messages, cfg);
|
|
313
|
+
const pc = this.buildLoopConfig(cfg);
|
|
314
314
|
for await (const ev of agentLoop(userMessage, context, pc, signal, streamFn)) {
|
|
315
315
|
yield ev;
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
|
+
async *continue(messages, cfg, signal) {
|
|
319
|
+
const streamFn = await this.getStreamFn();
|
|
320
|
+
const context = this.buildContext(messages, cfg);
|
|
321
|
+
const pc = this.buildLoopConfig(cfg);
|
|
322
|
+
for await (const ev of agentLoopContinue(context, pc, signal, streamFn)) {
|
|
323
|
+
yield ev;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
318
326
|
}
|
|
319
327
|
//# sourceMappingURL=AppTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppTransport.js","sourceRoot":"","sources":["../../../src/agent/transports/AppTransport.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppTransport.js","sourceRoot":"","sources":["../../../src/agent/transports/AppTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ import type { AgentRunConfig, AgentTransport } from "./types.js";
|
|
|
5
5
|
* Uses CORS proxy only for providers that require it (Anthropic OAuth, Z-AI).
|
|
6
6
|
*/
|
|
7
7
|
export declare class ProviderTransport implements AgentTransport {
|
|
8
|
+
private getModelAndKey;
|
|
9
|
+
private buildContext;
|
|
10
|
+
private buildLoopConfig;
|
|
8
11
|
run(messages: Message[], userMessage: Message, cfg: AgentRunConfig, signal?: AbortSignal): AsyncGenerator<import("@mariozechner/pi-ai").AgentEvent, void, unknown>;
|
|
12
|
+
continue(messages: Message[], cfg: AgentRunConfig, signal?: AbortSignal): AsyncGenerator<import("@mariozechner/pi-ai").AgentEvent, void, unknown>;
|
|
9
13
|
}
|
|
10
14
|
//# sourceMappingURL=ProviderTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderTransport.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/ProviderTransport.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ProviderTransport.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/ProviderTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,OAAO,EAEZ,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,cAAc;YACzC,cAAc;IAa5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAShB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW;IAUxF,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW;CAS9E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { agentLoop, } from "@mariozechner/pi-ai";
|
|
1
|
+
import { agentLoop, agentLoopContinue, } from "@mariozechner/pi-ai";
|
|
2
2
|
import { getAppStorage } from "../../storage/app-storage.js";
|
|
3
3
|
import { applyProxyIfNeeded } from "../../utils/proxy-utils.js";
|
|
4
4
|
/**
|
|
@@ -6,33 +6,46 @@ import { applyProxyIfNeeded } from "../../utils/proxy-utils.js";
|
|
|
6
6
|
* Uses CORS proxy only for providers that require it (Anthropic OAuth, Z-AI).
|
|
7
7
|
*/
|
|
8
8
|
export class ProviderTransport {
|
|
9
|
-
async
|
|
10
|
-
// Get API key from storage
|
|
9
|
+
async getModelAndKey(cfg) {
|
|
11
10
|
const apiKey = await getAppStorage().providerKeys.get(cfg.model.provider);
|
|
12
11
|
if (!apiKey) {
|
|
13
12
|
throw new Error("no-api-key");
|
|
14
13
|
}
|
|
15
|
-
// Get proxy URL from settings (if available)
|
|
16
14
|
const proxyEnabled = await getAppStorage().settings.get("proxy.enabled");
|
|
17
15
|
const proxyUrl = await getAppStorage().settings.get("proxy.url");
|
|
18
|
-
// Apply proxy only if this provider/key combination requires it
|
|
19
16
|
const model = applyProxyIfNeeded(cfg.model, apiKey, proxyEnabled ? proxyUrl || undefined : undefined);
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
return { model, apiKey };
|
|
18
|
+
}
|
|
19
|
+
buildContext(messages, cfg) {
|
|
20
|
+
return {
|
|
22
21
|
systemPrompt: cfg.systemPrompt,
|
|
23
22
|
messages,
|
|
24
23
|
tools: cfg.tools,
|
|
25
24
|
};
|
|
26
|
-
|
|
25
|
+
}
|
|
26
|
+
buildLoopConfig(model, apiKey, cfg) {
|
|
27
|
+
return {
|
|
27
28
|
model,
|
|
28
29
|
reasoning: cfg.reasoning,
|
|
29
30
|
apiKey,
|
|
30
31
|
getQueuedMessages: cfg.getQueuedMessages,
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
+
}
|
|
34
|
+
async *run(messages, userMessage, cfg, signal) {
|
|
35
|
+
const { model, apiKey } = await this.getModelAndKey(cfg);
|
|
36
|
+
const context = this.buildContext(messages, cfg);
|
|
37
|
+
const pc = this.buildLoopConfig(model, apiKey, cfg);
|
|
33
38
|
for await (const ev of agentLoop(userMessage, context, pc, signal)) {
|
|
34
39
|
yield ev;
|
|
35
40
|
}
|
|
36
41
|
}
|
|
42
|
+
async *continue(messages, cfg, signal) {
|
|
43
|
+
const { model, apiKey } = await this.getModelAndKey(cfg);
|
|
44
|
+
const context = this.buildContext(messages, cfg);
|
|
45
|
+
const pc = this.buildLoopConfig(model, apiKey, cfg);
|
|
46
|
+
for await (const ev of agentLoopContinue(context, pc, signal)) {
|
|
47
|
+
yield ev;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
51
|
//# sourceMappingURL=ProviderTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderTransport.js","sourceRoot":"","sources":["../../../src/agent/transports/ProviderTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,SAAS,
|
|
1
|
+
{"version":3,"file":"ProviderTransport.js","sourceRoot":"","sources":["../../../src/agent/transports/ProviderTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,SAAS,EACT,iBAAiB,GAGjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACrB,KAAK,CAAC,cAAc,CAAC,GAAmB;QAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,aAAa,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAU,eAAe,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAS,WAAW,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEtG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAEO,YAAY,CAAC,QAAmB,EAAE,GAAmB;QAC5D,OAAO;YACN,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,QAAQ;YACR,KAAK,EAAE,GAAG,CAAC,KAAK;SAChB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAuB,EAAE,MAAc,EAAE,GAAmB;QACnF,OAAO;YACN,KAAK;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM;YACN,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;SACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,GAAG,CAAC,QAAmB,EAAE,WAAoB,EAAE,GAAmB,EAAE,MAAoB;QAC9F,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAEpD,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,WAAqC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9F,MAAM,EAAE,CAAC;QACV,CAAC;IACF,CAAC;IAED,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAmB,EAAE,GAAmB,EAAE,MAAoB;QAC7E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAEpD,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAC/D,MAAM,EAAE,CAAC;QACV,CAAC;IACF,CAAC;CACD"}
|
|
@@ -7,6 +7,9 @@ export interface AgentRunConfig {
|
|
|
7
7
|
getQueuedMessages?: <T>() => Promise<QueuedMessage<T>[]>;
|
|
8
8
|
}
|
|
9
9
|
export interface AgentTransport {
|
|
10
|
+
/** Run with a new user message */
|
|
10
11
|
run(messages: Message[], userMessage: Message, config: AgentRunConfig, signal?: AbortSignal): AsyncIterable<AgentEvent>;
|
|
12
|
+
/** Continue from current context (no new user message) */
|
|
13
|
+
continue(messages: Message[], config: AgentRunConfig, signal?: AbortSignal): AsyncIterable<AgentEvent>;
|
|
11
14
|
}
|
|
12
15
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGhG,MAAM,WAAW,cAAc;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACzD;AAKD,MAAM,WAAW,cAAc;IAC9B,GAAG,CACF,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,WAAW,GAClB,aAAa,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/transports/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGhG,MAAM,WAAW,cAAc;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACzD;AAKD,MAAM,WAAW,cAAc;IAC9B,kCAAkC;IAClC,GAAG,CACF,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,WAAW,GAClB,aAAa,CAAC,UAAU,CAAC,CAAC;IAE7B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;CACvG"}
|
package/example/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mariozechner/pi-web-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Reusable web UI components for AI chat interfaces powered by @mariozechner/pi-ai",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@lmstudio/sdk": "^1.5.0",
|
|
21
|
-
"@mariozechner/pi-ai": "^0.
|
|
22
|
-
"@mariozechner/pi-tui": "^0.
|
|
21
|
+
"@mariozechner/pi-ai": "^0.17.0",
|
|
22
|
+
"@mariozechner/pi-tui": "^0.17.0",
|
|
23
23
|
"docx-preview": "^0.3.7",
|
|
24
24
|
"jszip": "^3.10.1",
|
|
25
25
|
"lucide": "^0.544.0",
|
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
ToolCall,
|
|
12
12
|
UserMessage,
|
|
13
13
|
} from "@mariozechner/pi-ai";
|
|
14
|
-
import { agentLoop } from "@mariozechner/pi-ai";
|
|
14
|
+
import { agentLoop, agentLoopContinue } from "@mariozechner/pi-ai";
|
|
15
15
|
import { AssistantMessageEventStream } from "@mariozechner/pi-ai/dist/utils/event-stream.js";
|
|
16
16
|
import { parseStreamingJson } from "@mariozechner/pi-ai/dist/utils/json-parse.js";
|
|
17
17
|
import { clearAuthToken, getAuthToken } from "../../utils/auth-token.js";
|
|
@@ -315,51 +315,57 @@ function streamSimpleProxy(
|
|
|
315
315
|
return stream;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
// Proxy transport executes the turn using a remote proxy server
|
|
319
318
|
/**
|
|
320
319
|
* Transport that uses an app server with user authentication tokens.
|
|
321
320
|
* The server manages user accounts and proxies requests to LLM providers.
|
|
322
321
|
*/
|
|
323
322
|
export class AppTransport implements AgentTransport {
|
|
324
|
-
// Hardcoded proxy URL for now - will be made configurable later
|
|
325
323
|
private readonly proxyUrl = "https://genai.mariozechner.at";
|
|
326
324
|
|
|
327
|
-
async
|
|
325
|
+
private async getStreamFn() {
|
|
328
326
|
const authToken = await getAuthToken();
|
|
329
327
|
if (!authToken) {
|
|
330
328
|
throw new Error(i18n("Auth token is required for proxy transport"));
|
|
331
329
|
}
|
|
332
330
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
return streamSimpleProxy(
|
|
336
|
-
model,
|
|
337
|
-
context,
|
|
338
|
-
{
|
|
339
|
-
...options,
|
|
340
|
-
authToken,
|
|
341
|
-
},
|
|
342
|
-
this.proxyUrl,
|
|
343
|
-
);
|
|
331
|
+
return <TApi extends Api>(model: Model<TApi>, context: Context, options?: SimpleStreamOptions) => {
|
|
332
|
+
return streamSimpleProxy(model, context, { ...options, authToken }, this.proxyUrl);
|
|
344
333
|
};
|
|
334
|
+
}
|
|
345
335
|
|
|
346
|
-
|
|
347
|
-
|
|
336
|
+
private buildContext(messages: Message[], cfg: AgentRunConfig): AgentContext {
|
|
337
|
+
return {
|
|
348
338
|
systemPrompt: cfg.systemPrompt,
|
|
349
339
|
messages,
|
|
350
340
|
tools: cfg.tools,
|
|
351
341
|
};
|
|
342
|
+
}
|
|
352
343
|
|
|
353
|
-
|
|
344
|
+
private buildLoopConfig(cfg: AgentRunConfig): AgentLoopConfig {
|
|
345
|
+
return {
|
|
354
346
|
model: cfg.model,
|
|
355
347
|
reasoning: cfg.reasoning,
|
|
356
348
|
getQueuedMessages: cfg.getQueuedMessages,
|
|
357
349
|
};
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
async *run(messages: Message[], userMessage: Message, cfg: AgentRunConfig, signal?: AbortSignal) {
|
|
353
|
+
const streamFn = await this.getStreamFn();
|
|
354
|
+
const context = this.buildContext(messages, cfg);
|
|
355
|
+
const pc = this.buildLoopConfig(cfg);
|
|
358
356
|
|
|
359
|
-
// Yield events from the upstream agentLoop iterator
|
|
360
|
-
// Pass streamFn as the 5th parameter to use proxy
|
|
361
357
|
for await (const ev of agentLoop(userMessage as unknown as UserMessage, context, pc, signal, streamFn as any)) {
|
|
362
358
|
yield ev;
|
|
363
359
|
}
|
|
364
360
|
}
|
|
361
|
+
|
|
362
|
+
async *continue(messages: Message[], cfg: AgentRunConfig, signal?: AbortSignal) {
|
|
363
|
+
const streamFn = await this.getStreamFn();
|
|
364
|
+
const context = this.buildContext(messages, cfg);
|
|
365
|
+
const pc = this.buildLoopConfig(cfg);
|
|
366
|
+
|
|
367
|
+
for await (const ev of agentLoopContinue(context, pc, signal, streamFn as any)) {
|
|
368
|
+
yield ev;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
365
371
|
}
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
type AgentContext,
|
|
3
3
|
type AgentLoopConfig,
|
|
4
4
|
agentLoop,
|
|
5
|
+
agentLoopContinue,
|
|
5
6
|
type Message,
|
|
6
7
|
type UserMessage,
|
|
7
8
|
} from "@mariozechner/pi-ai";
|
|
@@ -14,37 +15,53 @@ import type { AgentRunConfig, AgentTransport } from "./types.js";
|
|
|
14
15
|
* Uses CORS proxy only for providers that require it (Anthropic OAuth, Z-AI).
|
|
15
16
|
*/
|
|
16
17
|
export class ProviderTransport implements AgentTransport {
|
|
17
|
-
async
|
|
18
|
-
// Get API key from storage
|
|
18
|
+
private async getModelAndKey(cfg: AgentRunConfig) {
|
|
19
19
|
const apiKey = await getAppStorage().providerKeys.get(cfg.model.provider);
|
|
20
20
|
if (!apiKey) {
|
|
21
21
|
throw new Error("no-api-key");
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
// Get proxy URL from settings (if available)
|
|
25
24
|
const proxyEnabled = await getAppStorage().settings.get<boolean>("proxy.enabled");
|
|
26
25
|
const proxyUrl = await getAppStorage().settings.get<string>("proxy.url");
|
|
27
|
-
|
|
28
|
-
// Apply proxy only if this provider/key combination requires it
|
|
29
26
|
const model = applyProxyIfNeeded(cfg.model, apiKey, proxyEnabled ? proxyUrl || undefined : undefined);
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
return { model, apiKey };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private buildContext(messages: Message[], cfg: AgentRunConfig): AgentContext {
|
|
32
|
+
return {
|
|
33
33
|
systemPrompt: cfg.systemPrompt,
|
|
34
34
|
messages,
|
|
35
35
|
tools: cfg.tools,
|
|
36
36
|
};
|
|
37
|
+
}
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
private buildLoopConfig(model: typeof cfg.model, apiKey: string, cfg: AgentRunConfig): AgentLoopConfig {
|
|
40
|
+
return {
|
|
39
41
|
model,
|
|
40
42
|
reasoning: cfg.reasoning,
|
|
41
43
|
apiKey,
|
|
42
44
|
getQueuedMessages: cfg.getQueuedMessages,
|
|
43
45
|
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async *run(messages: Message[], userMessage: Message, cfg: AgentRunConfig, signal?: AbortSignal) {
|
|
49
|
+
const { model, apiKey } = await this.getModelAndKey(cfg);
|
|
50
|
+
const context = this.buildContext(messages, cfg);
|
|
51
|
+
const pc = this.buildLoopConfig(model, apiKey, cfg);
|
|
44
52
|
|
|
45
|
-
// Yield events from agentLoop
|
|
46
53
|
for await (const ev of agentLoop(userMessage as unknown as UserMessage, context, pc, signal)) {
|
|
47
54
|
yield ev;
|
|
48
55
|
}
|
|
49
56
|
}
|
|
57
|
+
|
|
58
|
+
async *continue(messages: Message[], cfg: AgentRunConfig, signal?: AbortSignal) {
|
|
59
|
+
const { model, apiKey } = await this.getModelAndKey(cfg);
|
|
60
|
+
const context = this.buildContext(messages, cfg);
|
|
61
|
+
const pc = this.buildLoopConfig(model, apiKey, cfg);
|
|
62
|
+
|
|
63
|
+
for await (const ev of agentLoopContinue(context, pc, signal)) {
|
|
64
|
+
yield ev;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
50
67
|
}
|
|
@@ -13,10 +13,14 @@ export interface AgentRunConfig {
|
|
|
13
13
|
// We re-export the Message type above; consumers should use the upstream AgentEvent type.
|
|
14
14
|
|
|
15
15
|
export interface AgentTransport {
|
|
16
|
+
/** Run with a new user message */
|
|
16
17
|
run(
|
|
17
18
|
messages: Message[],
|
|
18
19
|
userMessage: Message,
|
|
19
20
|
config: AgentRunConfig,
|
|
20
21
|
signal?: AbortSignal,
|
|
21
|
-
): AsyncIterable<AgentEvent>;
|
|
22
|
+
): AsyncIterable<AgentEvent>;
|
|
23
|
+
|
|
24
|
+
/** Continue from current context (no new user message) */
|
|
25
|
+
continue(messages: Message[], config: AgentRunConfig, signal?: AbortSignal): AsyncIterable<AgentEvent>;
|
|
22
26
|
}
|