@vibe-kit/grok-cli
Version:
An open-source AI agent that brings the power of Grok directly into your terminal.
80 lines • 2.82 kB
JavaScript
import OpenAI from "openai";
export class GrokClient {
client;
currentModel = "grok-code-fast-1";
defaultMaxTokens;
constructor(apiKey, model, baseURL) {
this.client = new OpenAI({
apiKey,
baseURL: baseURL || process.env.GROK_BASE_URL || "https://api.x.ai/v1",
timeout: 360000,
});
const envMax = Number(process.env.GROK_MAX_TOKENS);
this.defaultMaxTokens = Number.isFinite(envMax) && envMax > 0 ? envMax : 1536;
if (model) {
this.currentModel = model;
}
}
setModel(model) {
this.currentModel = model;
}
getCurrentModel() {
return this.currentModel;
}
async chat(messages, tools, model, searchOptions) {
try {
const requestPayload = {
model: model || this.currentModel,
messages,
tools: tools || [],
tool_choice: tools && tools.length > 0 ? "auto" : undefined,
temperature: 0.7,
max_tokens: this.defaultMaxTokens,
};
// Add search parameters if specified
if (searchOptions?.search_parameters) {
requestPayload.search_parameters = searchOptions.search_parameters;
}
const response = await this.client.chat.completions.create(requestPayload);
return response;
}
catch (error) {
throw new Error(`Grok API error: ${error.message}`);
}
}
async *chatStream(messages, tools, model, searchOptions) {
try {
const requestPayload = {
model: model || this.currentModel,
messages,
tools: tools || [],
tool_choice: tools && tools.length > 0 ? "auto" : undefined,
temperature: 0.7,
max_tokens: this.defaultMaxTokens,
stream: true,
};
// Add search parameters if specified
if (searchOptions?.search_parameters) {
requestPayload.search_parameters = searchOptions.search_parameters;
}
const stream = (await this.client.chat.completions.create(requestPayload));
for await (const chunk of stream) {
yield chunk;
}
}
catch (error) {
throw new Error(`Grok API error: ${error.message}`);
}
}
async search(query, searchParameters) {
const searchMessage = {
role: "user",
content: query,
};
const searchOptions = {
search_parameters: searchParameters || { mode: "on" },
};
return this.chat([searchMessage], [], undefined, searchOptions);
}
}
//# sourceMappingURL=client.js.map