Skip to content

Commit 9b79cc4

Browse files
committed
Add method for running agent server side autonomously
1 parent 02509a5 commit 9b79cc4

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import { BitteToolResult } from "@bitte-ai/types";
2+
3+
const BITTE_API_URL = "https://ai-runtime-446257178793.europe-west1.run.app";
4+
5+
export interface AgentResponse {
6+
content: string;
7+
toolResults: BitteToolResult[];
8+
messageId: string;
9+
finishReason: string;
10+
agentId: string;
11+
}
12+
13+
export interface ChatMessage {
14+
role: "user" | "assistant";
15+
content: string;
16+
messageId: string;
17+
}
18+
19+
export interface ChatConfig {
20+
mode: "debug" | "production";
21+
agentId: string;
22+
}
23+
24+
export interface ChatPayload {
25+
id: string;
26+
accountId: string;
27+
evmAddress: string;
28+
suiAddress: string;
29+
solanaAddress: string;
30+
messages: ChatMessage[];
31+
config: ChatConfig;
32+
}
33+
34+
export async function callAgent(
35+
accountId: string,
36+
message: string,
37+
agentId: string,
38+
evmAddress: string = "",
39+
suiAddress: string = "",
40+
solanaAddress: string = "",
41+
): Promise<AgentResponse> {
42+
const chatId = `chat_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
43+
44+
const payload: ChatPayload = {
45+
id: chatId,
46+
accountId,
47+
evmAddress,
48+
suiAddress,
49+
solanaAddress,
50+
messages: [
51+
{
52+
role: "user",
53+
content: message,
54+
messageId: Math.random().toString(36).substr(2, 9),
55+
},
56+
],
57+
config: { mode: "debug", agentId },
58+
};
59+
60+
const response = await fetch(BITTE_API_URL, {
61+
method: "POST",
62+
headers: {
63+
"Content-Type": "application/json",
64+
Authorization: `Bearer ${process.env.BITTE_API_KEY}`,
65+
},
66+
body: JSON.stringify(payload),
67+
});
68+
69+
if (!response.ok) {
70+
throw new Error(`Bitte API responded with status: ${response.status}`);
71+
}
72+
73+
const text = await response.text();
74+
const lines = text.split("\n");
75+
76+
let messageId = "";
77+
let content = "";
78+
let finishReason = "";
79+
let resultAgentId = "";
80+
const toolResults: BitteToolResult[] = [];
81+
82+
for (const line of lines) {
83+
const prefix = line.substring(0, 2);
84+
const data = line.substring(2);
85+
86+
switch (prefix) {
87+
case "f:":
88+
try {
89+
const metadata = JSON.parse(data);
90+
messageId = metadata.messageId || "";
91+
} catch {}
92+
break;
93+
case "0:":
94+
try {
95+
content += JSON.parse(data);
96+
} catch {}
97+
break;
98+
case "a:":
99+
try {
100+
toolResults.push(JSON.parse(data));
101+
} catch {}
102+
break;
103+
case "e:":
104+
try {
105+
const endData = JSON.parse(data);
106+
finishReason = endData.finishReason || "";
107+
} catch {}
108+
break;
109+
case "8:":
110+
try {
111+
const agentData = JSON.parse(data);
112+
if (Array.isArray(agentData) && agentData[0]?.agentId) {
113+
resultAgentId = agentData[0].agentId;
114+
}
115+
} catch {}
116+
break;
117+
}
118+
}
119+
120+
return {
121+
content: content.trim(),
122+
toolResults,
123+
messageId,
124+
finishReason,
125+
agentId: resultAgentId,
126+
};
127+
}

packages/agent-sdk/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from "./request";
33
export * from "./error";
44
export * from "./misc";
55
export * from "./openai";
6+
export * from "./autonomous";

0 commit comments

Comments
 (0)