@arizeai/phoenix-cli 1.15.2 → 1.16.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/README.md +2 -1
- package/build/pxi/App.d.ts +9 -2
- package/build/pxi/App.d.ts.map +1 -1
- package/build/pxi/App.js +935 -35
- package/build/pxi/App.js.map +1 -1
- package/build/pxi/client.d.ts +36 -21
- package/build/pxi/client.d.ts.map +1 -1
- package/build/pxi/client.js +373 -36
- package/build/pxi/client.js.map +1 -1
- package/build/pxi/commands.d.ts +10 -1
- package/build/pxi/commands.d.ts.map +1 -1
- package/build/pxi/commands.js +27 -2
- package/build/pxi/commands.js.map +1 -1
- package/build/pxi/compaction.d.ts +19 -0
- package/build/pxi/compaction.d.ts.map +1 -0
- package/build/pxi/compaction.js +24 -0
- package/build/pxi/compaction.js.map +1 -0
- package/build/pxi/index.d.ts +5 -5
- package/build/pxi/index.d.ts.map +1 -1
- package/build/pxi/index.js +7 -6
- package/build/pxi/index.js.map +1 -1
- package/build/pxi/options.d.ts +1 -1
- package/build/pxi/options.d.ts.map +1 -1
- package/build/pxi/options.js +5 -1
- package/build/pxi/options.js.map +1 -1
- package/build/pxi/preflight.d.ts +51 -4
- package/build/pxi/preflight.d.ts.map +1 -1
- package/build/pxi/preflight.js +100 -4
- package/build/pxi/preflight.js.map +1 -1
- package/build/pxi/tokenUsage.d.ts +3 -3
- package/build/pxi/tokenUsage.d.ts.map +1 -1
- package/build/pxi/tokenUsage.js +2 -1
- package/build/pxi/tokenUsage.js.map +1 -1
- package/build/pxi/toolPresentation.d.ts +1 -1
- package/build/pxi/toolPresentation.d.ts.map +1 -1
- package/build/pxi/toolPresentation.js +4 -1
- package/build/pxi/toolPresentation.js.map +1 -1
- package/build/pxi/types.d.ts +116 -58
- package/build/pxi/types.d.ts.map +1 -1
- package/package.json +3 -3
package/build/pxi/client.js
CHANGED
|
@@ -1,14 +1,50 @@
|
|
|
1
|
+
import { formatApiError, HttpError, } from "@arizeai/phoenix-client";
|
|
1
2
|
import { DefaultChatTransport, readUIMessageStream, } from "ai";
|
|
2
3
|
import { createOAuthFetch, hasOAuthCredentials } from "../authFetch.js";
|
|
4
|
+
import { createPhoenixClient } from "../client.js";
|
|
3
5
|
import { formatPxiRuntimeError } from "./preflight.js";
|
|
6
|
+
const AGENT_SESSION_CHAT_PATH = "/v1/agent_sessions/{session_id}/chat";
|
|
7
|
+
const AGENT_SESSION_PAGE_LIMIT = 100;
|
|
4
8
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* This wires the Vercel AI SDK's {@link DefaultChatTransport} to Phoenix's
|
|
8
|
-
* `/agents/server/sessions/{id}/chat` route: it builds the request URL, auth
|
|
9
|
-
* headers, and request body, then streams the assistant reply back as a series
|
|
10
|
-
* of {@link PxiMessage} snapshots.
|
|
9
|
+
* Error code the chat endpoint returns (HTTP 409) while another client's turn
|
|
10
|
+
* holds the session lock.
|
|
11
11
|
*/
|
|
12
|
+
const SESSION_BUSY_ERROR_CODE = "agent_session_busy";
|
|
13
|
+
/** Whether an error is the chat endpoint's session-busy (HTTP 409) rejection. */
|
|
14
|
+
export function isSessionBusyError({ error }) {
|
|
15
|
+
return (error instanceof Error && error.message.includes(SESSION_BUSY_ERROR_CODE));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Error code the chat endpoint returns (HTTP 409) when the send's
|
|
19
|
+
* `lastMessageId` no longer matches the persisted transcript — another client
|
|
20
|
+
* appended to the session and this client is rendering a stale transcript.
|
|
21
|
+
*/
|
|
22
|
+
const SESSION_MESSAGES_STALE_ERROR_CODE = "agent_session_messages_stale";
|
|
23
|
+
/** Whether an error is the chat endpoint's stale-transcript (HTTP 409) rejection. */
|
|
24
|
+
export function isSessionMessagesStaleError({ error, }) {
|
|
25
|
+
return (error instanceof Error &&
|
|
26
|
+
error.message.includes(SESSION_MESSAGES_STALE_ERROR_CODE));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error code the chat and compact endpoints return (HTTP 409) when the request
|
|
30
|
+
* asserts a model the session is no longer on — another client moved it. The
|
|
31
|
+
* transcript is unaffected, so this is distinct from
|
|
32
|
+
* {@link SESSION_MESSAGES_STALE_ERROR_CODE}: the user needs to be told their model
|
|
33
|
+
* changed, not that messages were refreshed.
|
|
34
|
+
*/
|
|
35
|
+
const SESSION_MODEL_STALE_ERROR_CODE = "agent_session_model_stale";
|
|
36
|
+
/** Whether an error is the stale-model (HTTP 409) rejection. */
|
|
37
|
+
export function isSessionModelStaleError({ error, }) {
|
|
38
|
+
return (error instanceof Error &&
|
|
39
|
+
error.message.includes(SESSION_MODEL_STALE_ERROR_CODE));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Error code the compact endpoint returns (HTTP 409) when there are no
|
|
43
|
+
* complete turns to compact — nothing new has finished since the latest
|
|
44
|
+
* checkpoint, or a concurrent request's checkpoint already covers them. A
|
|
45
|
+
* benign no-op, not a failure.
|
|
46
|
+
*/
|
|
47
|
+
const SESSION_ALREADY_COMPACT_ERROR_CODE = "agent_session_already_compact";
|
|
12
48
|
function trimTrailingSlash(value) {
|
|
13
49
|
return value.replace(/\/+$/, "");
|
|
14
50
|
}
|
|
@@ -28,12 +64,248 @@ function toLocalISOWithOffset(date) {
|
|
|
28
64
|
const localIso = localDate.toISOString().slice(0, -1);
|
|
29
65
|
return `${localIso}${sign}${offsetHours}:${offsetRemainderMinutes}`;
|
|
30
66
|
}
|
|
67
|
+
/** Build the agent-session chat URL. */
|
|
68
|
+
export function buildAgentSessionChatUrl({ endpoint, agentSessionId, }) {
|
|
69
|
+
const path = AGENT_SESSION_CHAT_PATH.replace("{session_id}", encodeURIComponent(agentSessionId));
|
|
70
|
+
return `${trimTrailingSlash(endpoint)}${path}`;
|
|
71
|
+
}
|
|
72
|
+
/** Pull a printable error message out of an error response body, if any. */
|
|
73
|
+
async function readErrorDetail({ response, }) {
|
|
74
|
+
try {
|
|
75
|
+
return formatApiError(await response.json());
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Create an `AgentSession`. */
|
|
82
|
+
export async function createAgentSession({ config, temporary, model, fetchImpl, }) {
|
|
83
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
84
|
+
let agentSessionId;
|
|
85
|
+
try {
|
|
86
|
+
const { data: payload } = await client.POST("/v1/agent_sessions", {
|
|
87
|
+
body: { title: "", is_ephemeral: temporary, model },
|
|
88
|
+
});
|
|
89
|
+
agentSessionId = payload?.data.id;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (error instanceof HttpError) {
|
|
93
|
+
const detail = await readErrorDetail({ response: error.response });
|
|
94
|
+
throw new Error(`Could not create a PXI chat session: HTTP ${error.status} ${error.statusText} from ${error.url}.${detail ? ` ${detail}` : ""}`);
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
if (!agentSessionId) {
|
|
99
|
+
throw new Error("Could not create a PXI chat session because Phoenix returned no session id.");
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
id: agentSessionId,
|
|
103
|
+
title: "",
|
|
104
|
+
updatedAt: new Date().toISOString(),
|
|
105
|
+
isTemporary: temporary,
|
|
106
|
+
messages: [],
|
|
107
|
+
model,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
31
110
|
/**
|
|
32
|
-
*
|
|
33
|
-
* configured endpoint and URL-encoding the session id.
|
|
111
|
+
* Fetch one page of a session's persisted transcript, oldest message first.
|
|
34
112
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
113
|
+
async function fetchAgentSessionMessagesPage({ client, sessionId, cursor, }) {
|
|
114
|
+
const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}/messages", {
|
|
115
|
+
params: {
|
|
116
|
+
path: { session_id: sessionId },
|
|
117
|
+
query: cursor === null ? {} : { cursor },
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
if (!payload) {
|
|
121
|
+
throw new Error("Could not restore the selected PXI session because Phoenix returned no data.");
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
messages: payload.data,
|
|
125
|
+
nextCursor: payload.next_cursor ?? null,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/** Create the session-management client used by the TUI. */
|
|
129
|
+
export function createPxiSessionClient({ config, fetch: fetchOverride, }) {
|
|
130
|
+
const fetchImpl = fetchOverride ??
|
|
131
|
+
(hasOAuthCredentials(config)
|
|
132
|
+
? createOAuthFetch({ config })
|
|
133
|
+
: globalThis.fetch);
|
|
134
|
+
return {
|
|
135
|
+
createSession: ({ temporary, model }) => createAgentSession({ config, temporary, model, fetchImpl }),
|
|
136
|
+
async listSessions() {
|
|
137
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
138
|
+
const sessions = [];
|
|
139
|
+
let cursor;
|
|
140
|
+
do {
|
|
141
|
+
const { data: payload } = await client.GET("/v1/agent_sessions", {
|
|
142
|
+
params: {
|
|
143
|
+
query: { cursor, limit: AGENT_SESSION_PAGE_LIMIT },
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
if (!payload) {
|
|
147
|
+
throw new Error("Could not load PXI sessions because Phoenix returned no data.");
|
|
148
|
+
}
|
|
149
|
+
sessions.push(...payload.data.map(({ id, title, updated_at, is_ephemeral }) => ({
|
|
150
|
+
id,
|
|
151
|
+
title,
|
|
152
|
+
updatedAt: updated_at,
|
|
153
|
+
isTemporary: is_ephemeral,
|
|
154
|
+
})));
|
|
155
|
+
cursor = payload.next_cursor ?? undefined;
|
|
156
|
+
} while (cursor);
|
|
157
|
+
return sessions;
|
|
158
|
+
},
|
|
159
|
+
async getSession({ sessionId }) {
|
|
160
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
161
|
+
const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}", {
|
|
162
|
+
params: {
|
|
163
|
+
path: { session_id: sessionId },
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
if (!payload) {
|
|
167
|
+
throw new Error("Could not restore the selected PXI session because Phoenix returned no data.");
|
|
168
|
+
}
|
|
169
|
+
const session = payload.data;
|
|
170
|
+
const messages = [];
|
|
171
|
+
let cursor = null;
|
|
172
|
+
do {
|
|
173
|
+
const page = await fetchAgentSessionMessagesPage({
|
|
174
|
+
client,
|
|
175
|
+
sessionId,
|
|
176
|
+
cursor,
|
|
177
|
+
});
|
|
178
|
+
messages.push(...page.messages);
|
|
179
|
+
cursor = page.nextCursor;
|
|
180
|
+
} while (cursor !== null);
|
|
181
|
+
return {
|
|
182
|
+
id: session.id,
|
|
183
|
+
title: session.title,
|
|
184
|
+
updatedAt: session.updated_at,
|
|
185
|
+
isTemporary: session.is_ephemeral,
|
|
186
|
+
isActive: session.is_active === true,
|
|
187
|
+
// Derived from the transcript actually applied, not the metadata
|
|
188
|
+
// response: the two requests aren't atomic, so the transcript can
|
|
189
|
+
// advance in between. The polling loop self-corrects next tick.
|
|
190
|
+
lastMessageId: messages.at(-1)?.id ?? null,
|
|
191
|
+
messages,
|
|
192
|
+
model: session.model,
|
|
193
|
+
};
|
|
194
|
+
},
|
|
195
|
+
async getSessionSyncState({ sessionId }) {
|
|
196
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
197
|
+
const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}", {
|
|
198
|
+
params: {
|
|
199
|
+
path: { session_id: sessionId },
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
if (!payload) {
|
|
203
|
+
throw new Error("Could not check the PXI session for updates because Phoenix " +
|
|
204
|
+
"returned no data.");
|
|
205
|
+
}
|
|
206
|
+
const session = payload.data;
|
|
207
|
+
return {
|
|
208
|
+
isActive: session.is_active === true,
|
|
209
|
+
updatedAt: session.updated_at,
|
|
210
|
+
lastMessageId: session.last_message_id ?? null,
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
async patchSessionModel({ sessionId, model }) {
|
|
214
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
215
|
+
try {
|
|
216
|
+
const { data: payload } = await client.PATCH("/v1/agent_sessions/{session_id}", {
|
|
217
|
+
params: {
|
|
218
|
+
path: { session_id: sessionId },
|
|
219
|
+
},
|
|
220
|
+
body: { model },
|
|
221
|
+
});
|
|
222
|
+
if (!payload) {
|
|
223
|
+
throw new Error("Could not change the session's model because Phoenix returned no data.");
|
|
224
|
+
}
|
|
225
|
+
return payload.data.model;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (error instanceof HttpError) {
|
|
229
|
+
const detail = await readErrorDetail({ response: error.response });
|
|
230
|
+
throw new Error(`Could not change the session's model: HTTP ${error.status} ${error.statusText}.${detail ? ` ${detail}` : ""}`);
|
|
231
|
+
}
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
async compactSession({ sessionId, model }) {
|
|
236
|
+
const client = createPhoenixClient({ config, fetch: fetchImpl });
|
|
237
|
+
try {
|
|
238
|
+
const { data: payload } = await client.POST("/v1/agent_sessions/{session_id}/compact", {
|
|
239
|
+
params: {
|
|
240
|
+
path: { session_id: sessionId },
|
|
241
|
+
},
|
|
242
|
+
body: { model },
|
|
243
|
+
});
|
|
244
|
+
if (!payload) {
|
|
245
|
+
throw new Error("Could not compact the PXI session because Phoenix returned no data.");
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
compacted: true,
|
|
249
|
+
compactionMessage: payload.data,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
if (error instanceof HttpError) {
|
|
254
|
+
const code = await readConflictCode({ response: error.response });
|
|
255
|
+
if (code === SESSION_ALREADY_COMPACT_ERROR_CODE) {
|
|
256
|
+
return { compacted: false, compactionMessage: null };
|
|
257
|
+
}
|
|
258
|
+
throw await buildCompactionHttpError({ error });
|
|
259
|
+
}
|
|
260
|
+
throw error;
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Read the `code` discriminator out of a conflict response body, if any. The
|
|
267
|
+
* response is cloned so the caller can still consume the body.
|
|
268
|
+
*/
|
|
269
|
+
async function readConflictCode({ response, }) {
|
|
270
|
+
try {
|
|
271
|
+
const body = await response.clone().json();
|
|
272
|
+
if (body !== null && typeof body === "object") {
|
|
273
|
+
const record = body;
|
|
274
|
+
if (typeof record.code === "string") {
|
|
275
|
+
return record.code;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
// Not JSON.
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Translate a compaction HTTP failure into a printable error. A 409 whose body
|
|
286
|
+
* carries the session-busy or session-stale code is rethrown with that code in
|
|
287
|
+
* the message so {@link isSessionBusyError} / {@link isSessionMessagesStaleError}
|
|
288
|
+
* recognize it and the UI can enter its busy state or refresh the session.
|
|
289
|
+
*/
|
|
290
|
+
async function buildCompactionHttpError({ error, }) {
|
|
291
|
+
const code = await readConflictCode({ response: error.response });
|
|
292
|
+
let detail = null;
|
|
293
|
+
try {
|
|
294
|
+
detail = formatApiError(await error.response.clone().json());
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Not JSON: fall through to the status-line message.
|
|
298
|
+
}
|
|
299
|
+
if (code === SESSION_BUSY_ERROR_CODE) {
|
|
300
|
+
return new Error(SESSION_BUSY_ERROR_CODE);
|
|
301
|
+
}
|
|
302
|
+
if (code === SESSION_MESSAGES_STALE_ERROR_CODE) {
|
|
303
|
+
return new Error(SESSION_MESSAGES_STALE_ERROR_CODE);
|
|
304
|
+
}
|
|
305
|
+
if (code === SESSION_MODEL_STALE_ERROR_CODE) {
|
|
306
|
+
return new Error(SESSION_MODEL_STALE_ERROR_CODE);
|
|
307
|
+
}
|
|
308
|
+
return new Error(`Could not compact the conversation: HTTP ${error.status} ${error.statusText}.${detail ? ` ${detail}` : ""}`);
|
|
37
309
|
}
|
|
38
310
|
/**
|
|
39
311
|
* Assemble request headers from the config: any custom headers first, then a
|
|
@@ -77,19 +349,16 @@ export function buildPxiContexts({ enableWebAccess, enableSubagents, enableGraph
|
|
|
77
349
|
},
|
|
78
350
|
];
|
|
79
351
|
}
|
|
80
|
-
/**
|
|
81
|
-
|
|
82
|
-
* resolved runtime options — session id, trace settings, edit permission,
|
|
83
|
-
* capability contexts, and model selection.
|
|
84
|
-
*/
|
|
85
|
-
export function buildPxiChatRequest({ messages, options, }) {
|
|
352
|
+
/** Shared request fields derived from the resolved runtime options. */
|
|
353
|
+
function buildPxiRequestBase({ options }) {
|
|
86
354
|
return {
|
|
87
355
|
id: options.sessionId,
|
|
88
|
-
messages,
|
|
89
356
|
trigger: "submit-message",
|
|
90
|
-
|
|
357
|
+
// The CLI drives the headless agent rather than the browser assistant.
|
|
358
|
+
headless: true,
|
|
359
|
+
recordLocalTraces: options.ingestTraces,
|
|
91
360
|
exportRemoteTraces: options.exportRemoteTraces,
|
|
92
|
-
|
|
361
|
+
instrumentUserId: options.attachUserId,
|
|
93
362
|
editPermission: options.editPermission,
|
|
94
363
|
contexts: buildPxiContexts({
|
|
95
364
|
enableWebAccess: options.enableWebAccess,
|
|
@@ -99,28 +368,73 @@ export function buildPxiChatRequest({ messages, options, }) {
|
|
|
99
368
|
model: options.modelSelection,
|
|
100
369
|
};
|
|
101
370
|
}
|
|
102
|
-
/**
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
371
|
+
/** Assemble the chat request. */
|
|
372
|
+
export function buildPxiChatRequest({ messages, options, }) {
|
|
373
|
+
const message = messages.at(-1);
|
|
374
|
+
if (!message) {
|
|
375
|
+
throw new Error("A chat submit request requires a message to send");
|
|
376
|
+
}
|
|
377
|
+
if (message.role !== "user") {
|
|
378
|
+
// The chat contract only accepts user messages; client tool results are
|
|
379
|
+
// submitted as `toolOutputs`, which the CLI never produces because it
|
|
380
|
+
// executes no client tools.
|
|
381
|
+
throw new Error("A chat submit request requires a trailing user message");
|
|
382
|
+
}
|
|
383
|
+
// The send's optimistic-concurrency check: the id of the last transcript
|
|
384
|
+
// message this client believes is persisted. The new user message at the
|
|
385
|
+
// tail is the turn being submitted, so the message before it is the
|
|
386
|
+
// persisted tail. Null while the transcript is empty.
|
|
387
|
+
const lastMessageId = messages.at(-2)?.id ?? null;
|
|
388
|
+
return {
|
|
389
|
+
...buildPxiRequestBase({ options }),
|
|
390
|
+
message,
|
|
391
|
+
lastMessageId,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
/** Create the AI SDK transport pointed at the configured Phoenix endpoint. */
|
|
395
|
+
export function createServerAgentTransport({ options, agentSessionId, fetch, }) {
|
|
396
|
+
const endpoint = options.config.endpoint;
|
|
397
|
+
if (!endpoint) {
|
|
110
398
|
throw new Error("Phoenix endpoint not configured.");
|
|
111
399
|
}
|
|
112
400
|
const transportFetch = fetch ??
|
|
113
401
|
(hasOAuthCredentials(options.config)
|
|
114
402
|
? createOAuthFetch({ config: options.config })
|
|
115
403
|
: undefined);
|
|
404
|
+
// The server session is created lazily on the first send and reused for the
|
|
405
|
+
// rest of the chat. A failed creation clears the cached promise so the next
|
|
406
|
+
// send can retry instead of being stuck on the rejection.
|
|
407
|
+
let agentSessionIdPromise = agentSessionId
|
|
408
|
+
? Promise.resolve(agentSessionId)
|
|
409
|
+
: null;
|
|
410
|
+
const getAgentSessionId = () => {
|
|
411
|
+
agentSessionIdPromise ??= createAgentSession({
|
|
412
|
+
config: options.config,
|
|
413
|
+
temporary: false,
|
|
414
|
+
model: options.modelSelection,
|
|
415
|
+
fetchImpl: transportFetch,
|
|
416
|
+
})
|
|
417
|
+
.then((session) => session.id)
|
|
418
|
+
.catch((error) => {
|
|
419
|
+
agentSessionIdPromise = null;
|
|
420
|
+
throw error;
|
|
421
|
+
});
|
|
422
|
+
return agentSessionIdPromise;
|
|
423
|
+
};
|
|
116
424
|
return new DefaultChatTransport({
|
|
117
|
-
api:
|
|
118
|
-
endpoint
|
|
119
|
-
|
|
425
|
+
api: buildAgentSessionChatUrl({
|
|
426
|
+
endpoint,
|
|
427
|
+
// Placeholder only: prepareSendMessagesRequest overrides the URL with
|
|
428
|
+
// the server-created session id on every send.
|
|
429
|
+
agentSessionId: "placeholder",
|
|
120
430
|
}),
|
|
121
431
|
headers: buildPxiHeaders({ config: options.config }),
|
|
122
432
|
fetch: transportFetch,
|
|
123
|
-
prepareSendMessagesRequest: ({ messages }) => ({
|
|
433
|
+
prepareSendMessagesRequest: async ({ messages }) => ({
|
|
434
|
+
api: buildAgentSessionChatUrl({
|
|
435
|
+
endpoint,
|
|
436
|
+
agentSessionId: await getAgentSessionId(),
|
|
437
|
+
}),
|
|
124
438
|
body: buildPxiChatRequest({ messages, options }),
|
|
125
439
|
}),
|
|
126
440
|
});
|
|
@@ -131,9 +445,20 @@ export function createServerAgentTransport({ options, fetch, }) {
|
|
|
131
445
|
* arrives. Resolves with the final, complete message (or `null` if the stream
|
|
132
446
|
* produced nothing).
|
|
133
447
|
*/
|
|
134
|
-
export async function streamAssistantMessage({ stream, onAssistantMessage, }) {
|
|
448
|
+
export async function streamAssistantMessage({ stream, onAssistantMessage, onSessionTitle, }) {
|
|
135
449
|
let finalMessage = null;
|
|
136
|
-
|
|
450
|
+
const observedStream = stream.pipeThrough(new TransformStream({
|
|
451
|
+
transform(chunk, controller) {
|
|
452
|
+
if (chunk.type === "data-session-summary" &&
|
|
453
|
+
typeof chunk.data === "string") {
|
|
454
|
+
onSessionTitle?.(chunk.data);
|
|
455
|
+
}
|
|
456
|
+
controller.enqueue(chunk);
|
|
457
|
+
},
|
|
458
|
+
}));
|
|
459
|
+
for await (const message of readUIMessageStream({
|
|
460
|
+
stream: observedStream,
|
|
461
|
+
})) {
|
|
137
462
|
finalMessage = message;
|
|
138
463
|
onAssistantMessage(message);
|
|
139
464
|
}
|
|
@@ -146,9 +471,9 @@ export async function streamAssistantMessage({ stream, onAssistantMessage, }) {
|
|
|
146
471
|
* message (e.g. how to fix missing credentials). The transport defaults to a
|
|
147
472
|
* real server-agent transport but is injectable for testing.
|
|
148
473
|
*/
|
|
149
|
-
export function createPxiChatClient({ options, transport = createServerAgentTransport({ options }), }) {
|
|
474
|
+
export function createPxiChatClient({ options, agentSessionId, transport = createServerAgentTransport({ options, agentSessionId }), }) {
|
|
150
475
|
return {
|
|
151
|
-
async sendMessage({ messages, abortSignal, onAssistantMessage }) {
|
|
476
|
+
async sendMessage({ messages, abortSignal, onAssistantMessage, onSessionTitle, }) {
|
|
152
477
|
try {
|
|
153
478
|
const stream = await transport.sendMessages({
|
|
154
479
|
trigger: "submit-message",
|
|
@@ -157,9 +482,21 @@ export function createPxiChatClient({ options, transport = createServerAgentTran
|
|
|
157
482
|
messages,
|
|
158
483
|
abortSignal,
|
|
159
484
|
});
|
|
160
|
-
return await streamAssistantMessage({
|
|
485
|
+
return await streamAssistantMessage({
|
|
486
|
+
stream,
|
|
487
|
+
onAssistantMessage,
|
|
488
|
+
onSessionTitle,
|
|
489
|
+
});
|
|
161
490
|
}
|
|
162
491
|
catch (error) {
|
|
492
|
+
// Session-conflict rejections (HTTP 409: another client's turn holds
|
|
493
|
+
// the lock, or this client's transcript went stale) are not
|
|
494
|
+
// model/provider failures: rethrow them unwrapped so the UI can enter
|
|
495
|
+
// its busy state or refresh the transcript.
|
|
496
|
+
if (isSessionBusyError({ error }) ||
|
|
497
|
+
isSessionMessagesStaleError({ error })) {
|
|
498
|
+
throw error;
|
|
499
|
+
}
|
|
163
500
|
throw formatPxiRuntimeError({
|
|
164
501
|
error,
|
|
165
502
|
modelSelection: options.modelSelection,
|
package/build/pxi/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/pxi/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/pxi/client.ts"],"names":[],"mappings":"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"}
|
package/build/pxi/commands.d.ts
CHANGED
|
@@ -5,7 +5,16 @@
|
|
|
5
5
|
* instantly and never consume a network round-trip.
|
|
6
6
|
*/
|
|
7
7
|
export type CommandContext = {
|
|
8
|
-
|
|
8
|
+
startNewSession: (options: {
|
|
9
|
+
temporary: boolean;
|
|
10
|
+
}) => void;
|
|
11
|
+
openModelPicker: () => void;
|
|
12
|
+
openSessionPicker: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Compact older conversation context into a checkpoint summary. Any text
|
|
15
|
+
* after the command is sent as a follow-up message once compaction finishes.
|
|
16
|
+
*/
|
|
17
|
+
compactSession: (pendingText?: string) => void;
|
|
9
18
|
exit: () => void;
|
|
10
19
|
};
|
|
11
20
|
export type PxiCommand = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAAU,EA2CtC,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,cAAc,GAClB,kBAAkB,CAoBpB;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAG7D"}
|
package/build/pxi/commands.js
CHANGED
|
@@ -7,8 +7,33 @@
|
|
|
7
7
|
export const SLASH_COMMANDS = [
|
|
8
8
|
{
|
|
9
9
|
name: "clear",
|
|
10
|
-
description: "
|
|
11
|
-
handler: (_args, ctx) => ctx.
|
|
10
|
+
description: "Start a new persisted session (alias for /new)",
|
|
11
|
+
handler: (_args, ctx) => ctx.startNewSession({ temporary: false }),
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "compact",
|
|
15
|
+
description: "Compact older conversation context",
|
|
16
|
+
handler: (args, ctx) => ctx.compactSession(args || undefined),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "model",
|
|
20
|
+
description: "Switch models for this session",
|
|
21
|
+
handler: (_args, ctx) => ctx.openModelPicker(),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "new",
|
|
25
|
+
description: "Start a new persisted session",
|
|
26
|
+
handler: (_args, ctx) => ctx.startNewSession({ temporary: false }),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "sessions",
|
|
30
|
+
description: "Browse and restore persisted sessions",
|
|
31
|
+
handler: (_args, ctx) => ctx.openSessionPicker(),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "temporary",
|
|
35
|
+
description: "Start a new temporary session",
|
|
36
|
+
handler: (_args, ctx) => ctx.startNewSession({ temporary: true }),
|
|
12
37
|
},
|
|
13
38
|
{
|
|
14
39
|
name: "exit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PxiMessage } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Compaction checkpoints in the PXI transcript.
|
|
4
|
+
*
|
|
5
|
+
* Compacting a session persists a checkpoint message that summarizes every
|
|
6
|
+
* prior turn; the server then loads model history from the latest checkpoint
|
|
7
|
+
* onward. On the wire a checkpoint is an ordinary user-role message flagged by
|
|
8
|
+
* `metadata.phoenix.isCompactionMessage`, so the transcript renders it distinctly
|
|
9
|
+
* rather than as something the user typed.
|
|
10
|
+
*/
|
|
11
|
+
/** Whether a transcript message is a compaction checkpoint. */
|
|
12
|
+
export declare function isCompactionMessage({ message, }: {
|
|
13
|
+
message: PxiMessage;
|
|
14
|
+
}): boolean;
|
|
15
|
+
/** The checkpoint's summary text — the concatenated text parts. */
|
|
16
|
+
export declare function getCompactionSummary({ message, }: {
|
|
17
|
+
message: PxiMessage;
|
|
18
|
+
}): string;
|
|
19
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/pxi/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG,OAAO,CAOV;AAED,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG,MAAM,CAKT"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compaction checkpoints in the PXI transcript.
|
|
3
|
+
*
|
|
4
|
+
* Compacting a session persists a checkpoint message that summarizes every
|
|
5
|
+
* prior turn; the server then loads model history from the latest checkpoint
|
|
6
|
+
* onward. On the wire a checkpoint is an ordinary user-role message flagged by
|
|
7
|
+
* `metadata.phoenix.isCompactionMessage`, so the transcript renders it distinctly
|
|
8
|
+
* rather than as something the user typed.
|
|
9
|
+
*/
|
|
10
|
+
/** Whether a transcript message is a compaction checkpoint. */
|
|
11
|
+
export function isCompactionMessage({ message, }) {
|
|
12
|
+
const phoenixMetadata = message.metadata?.phoenix;
|
|
13
|
+
return (message.role === "user" &&
|
|
14
|
+
phoenixMetadata?.type === "user" &&
|
|
15
|
+
phoenixMetadata.isCompactionMessage === true);
|
|
16
|
+
}
|
|
17
|
+
/** The checkpoint's summary text — the concatenated text parts. */
|
|
18
|
+
export function getCompactionSummary({ message, }) {
|
|
19
|
+
return message.parts
|
|
20
|
+
.filter((part) => part.type === "text")
|
|
21
|
+
.map((part) => part.text)
|
|
22
|
+
.join("");
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/pxi/compaction.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,GAGR;IACC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;IAClD,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,eAAe,EAAE,IAAI,KAAK,MAAM;QAChC,eAAe,CAAC,mBAAmB,KAAK,IAAI,CAC7C,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,GAGR;IACC,OAAO,OAAO,CAAC,KAAK;SACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|