@oh-my-pi/pi-agent-core 3.31.0 → 3.33.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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/agent-loop.ts +31 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-agent-core",
3
- "version": "3.31.0",
3
+ "version": "3.33.0",
4
4
  "description": "General-purpose agent with transport abstraction, state management, and attachment support",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@mariozechner/pi-ai": "^0.37.8",
17
- "@oh-my-pi/pi-tui": "3.31.0"
17
+ "@oh-my-pi/pi-tui": "3.33.0"
18
18
  },
19
19
  "keywords": [
20
20
  "ai",
package/src/agent-loop.ts CHANGED
@@ -98,6 +98,32 @@ function createAgentStream(): EventStream<AgentEvent, AgentMessage[]> {
98
98
  );
99
99
  }
100
100
 
101
+ function normalizeMessagesForProvider(
102
+ messages: Context["messages"],
103
+ model: AgentLoopConfig["model"],
104
+ ): Context["messages"] {
105
+ if (model.provider !== "cerebras") {
106
+ return messages;
107
+ }
108
+
109
+ let changed = false;
110
+ const normalized = messages.map((message) => {
111
+ if (message.role !== "assistant" || !Array.isArray(message.content)) {
112
+ return message;
113
+ }
114
+
115
+ const filtered = message.content.filter((block) => block.type !== "thinking");
116
+ if (filtered.length === message.content.length) {
117
+ return message;
118
+ }
119
+
120
+ changed = true;
121
+ return { ...message, content: filtered };
122
+ });
123
+
124
+ return changed ? normalized : messages;
125
+ }
126
+
101
127
  /**
102
128
  * Main loop logic shared by agentLoop and agentLoopContinue.
103
129
  */
@@ -218,11 +244,12 @@ async function streamAssistantResponse(
218
244
 
219
245
  // Convert to LLM-compatible messages (AgentMessage[] → Message[])
220
246
  const llmMessages = await config.convertToLlm(messages);
247
+ const normalizedMessages = normalizeMessagesForProvider(llmMessages, config.model);
221
248
 
222
249
  // Build LLM context
223
250
  const llmContext: Context = {
224
251
  systemPrompt: context.systemPrompt,
225
- messages: llmMessages,
252
+ messages: normalizedMessages,
226
253
  tools: context.tools,
227
254
  };
228
255
 
@@ -244,8 +271,9 @@ async function streamAssistantResponse(
244
271
  for await (const event of response) {
245
272
  // Check for abort signal before processing each event
246
273
  if (signal?.aborted) {
274
+ const errorMessage = "Request was aborted";
247
275
  const abortedMessage: AssistantMessage = partialMessage
248
- ? { ...partialMessage, stopReason: "aborted" }
276
+ ? { ...partialMessage, stopReason: "aborted", errorMessage }
249
277
  : {
250
278
  role: "assistant",
251
279
  content: [],
@@ -261,6 +289,7 @@ async function streamAssistantResponse(
261
289
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
262
290
  },
263
291
  stopReason: "aborted",
292
+ errorMessage,
264
293
  timestamp: Date.now(),
265
294
  };
266
295
  if (addedPartial) {