🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

agenthood

Package Overview
Dependencies
Maintainers
1
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

agenthood - npm Package Compare versions

Comparing version
3.8.0
to
3.8.1
+2
dist/llm/providers/provider-errors.d.ts
export declare function mapProviderError(err: unknown, providerName: string, model: string): Error;
//# sourceMappingURL=provider-errors.d.ts.map
{"version":3,"file":"provider-errors.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/provider-errors.ts"],"names":[],"mappings":"AAQA,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,KAAK,CAgBP"}
import { AuthError, RateLimitedError, TimeoutError, ServiceUnavailableError, ModelNotFoundError, } from "../errors.js";
export function mapProviderError(err, providerName, model) {
if (err instanceof Error && typeof err.status === "number") {
const status = err.status;
if (status === 401)
return new AuthError(providerName);
if (status === 429) {
const retryAfter = parseInt(String(err.headers?.["retry-after"] ?? "60"), 10);
return new RateLimitedError(providerName, retryAfter);
}
if (status === 408 || status === 504)
return new TimeoutError(providerName);
if (status === 404)
return new ModelNotFoundError(providerName, model);
if (status >= 500)
return new ServiceUnavailableError(providerName);
}
if (err instanceof Error && (err.name === "AbortError" || err.message?.includes("timeout") || err.message?.includes("timed out"))) {
return new TimeoutError(providerName);
}
return err instanceof Error ? err : new Error(String(err));
}
//# sourceMappingURL=provider-errors.js.map
{"version":3,"file":"provider-errors.js","sourceRoot":"","sources":["../../../src/llm/providers/provider-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,MAAM,UAAU,gBAAgB,CAC9B,GAAY,EACZ,YAAoB,EACpB,KAAa;IAEb,IAAI,GAAG,YAAY,KAAK,IAAI,OAAQ,GAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,MAAM,GAAI,GAAW,CAAC,MAAM,CAAC;QACnC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAE,GAAW,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;QAC5E,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,MAAM,IAAI,GAAG;YAAE,OAAO,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAClI,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5D,CAAC"}
import type { LLMChunk } from "../types.ts";
export declare function createStreamGenerator<T>(source: AsyncIterable<T>, extractDelta: (chunk: T) => string): AsyncGenerator<LLMChunk>;
//# sourceMappingURL=stream-utils.d.ts.map
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/stream-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,wBAAuB,qBAAqB,CAAC,CAAC,EAC5C,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EACxB,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,GACjC,cAAc,CAAC,QAAQ,CAAC,CAM1B"}
export async function* createStreamGenerator(source, extractDelta) {
for await (const chunk of source) {
const delta = extractDelta(chunk);
yield { delta, done: false };
}
yield { delta: "", done: true };
}
//# sourceMappingURL=stream-utils.js.map
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../src/llm/providers/stream-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC1C,MAAwB,EACxB,YAAkC;IAElC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC"}
import type { LLMRequest, ToolCall } from "../types.ts";
export declare function validateMessages<T>(messages: LLMRequest["messages"]): T;
export declare function validateTools<T>(tools: LLMRequest["tools"]): T | undefined;
export declare function parseToolCall(tc: {
id: string;
type: string;
function?: {
name: string;
arguments: string;
};
custom?: {
name: string;
input: unknown;
};
}, providerName: string): ToolCall;
export declare function parseUsage(usage: {
prompt_tokens?: number;
completion_tokens?: number;
total_tokens?: number;
} | undefined): {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
//# sourceMappingURL=validation.d.ts.map
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,GAC/B,CAAC,CAUH;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GACzB,CAAC,GAAG,SAAS,CAWf;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,EAC3H,YAAY,EAAE,MAAM,GACnB,QAAQ,CAkBV;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,SAAS;;;;EAMZ"}
export function validateMessages(messages) {
if (!Array.isArray(messages)) {
throw new Error("messages must be an array");
}
for (const m of messages) {
if (!m || typeof m !== "object" || typeof m.role !== "string") {
throw new Error("each message must have a role");
}
}
return messages;
}
export function validateTools(tools) {
if (!tools)
return undefined;
if (!Array.isArray(tools)) {
throw new Error("tools must be an array");
}
for (const t of tools) {
if (!t || typeof t !== "object" || typeof t.name !== "string") {
throw new Error("each tool must have a name");
}
}
return tools;
}
export function parseToolCall(tc, providerName) {
if (tc.type === "function" && tc.function) {
try {
return {
id: tc.id,
name: tc.function.name,
args: JSON.parse(tc.function.arguments),
};
}
catch (parseErr) {
throw new Error(`Invalid tool call JSON from ${providerName} for ${tc.function.name}: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
}
}
if (tc.custom) {
return { id: tc.id, name: tc.custom.name, args: tc.custom.input };
}
throw new Error(`Unknown tool call type: ${tc.type}`);
}
export function parseUsage(usage) {
return {
promptTokens: usage?.prompt_tokens ?? 0,
completionTokens: usage?.completion_tokens ?? 0,
totalTokens: usage?.total_tokens ?? 0,
};
}
//# sourceMappingURL=validation.js.map
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/llm/providers/validation.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,QAAgC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,QAAwB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAA0B;IAE1B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,KAAqB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAA2H,EAC3H,YAAoB;IAEpB,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;aACxC,CAAC;QACJ,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,+BAA+B,YAAY,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAC1I,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAId;IACX,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC;QACvC,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,IAAI,CAAC;QAC/C,WAAW,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC"}
+3
-2

@@ -5,10 +5,11 @@ import type { ILLMProvider } from "../ILLMProvider.ts";

private client;
private model;
model: string;
constructor(config: LLMConfig);
complete(request: LLMRequest): Promise<LLMResponse>;
stream(request: LLMRequest): Promise<AsyncGenerator<LLMChunk>>;
private buildCommonParams;
getContextWindow(): number;
setModel(model: string): void;
embed(text: string): Promise<number[]>;
embed(_text: string): Promise<number[]>;
}
//# sourceMappingURL=GroqProvider.d.ts.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"GroqProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/GroqProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG/E,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAUvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAuBpE,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAI7C"}
{"version":3,"file":"GroqProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/GroqProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAM/E,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAO;IACrB,KAAK,EAAE,MAAM,CAAC;gBAEF,MAAM,EAAE,SAAS;IAUvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAuCnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAgBpE,OAAO,CAAC,iBAAiB;IAczB,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAG9C"}
import Groq from "groq-sdk";
import { UnsupportedOperationError } from "../errors.js";
import { createStreamGenerator } from "./stream-utils.js";
import { validateMessages, validateTools, parseToolCall, parseUsage } from "./validation.js";
import { mapProviderError } from "./provider-errors.js";
export class GroqProvider {

@@ -16,63 +19,50 @@ client;

async complete(request) {
const startTime = Date.now();
console.info(`[GroqProvider] complete() model=${this.model} messages=${request.messages.length}`);
const params = this.buildCommonParams(request);
try {
const response = await this.client.chat.completions.create({
model: this.model,
messages: request.messages,
tools: request.tools,
temperature: request.temperature,
max_tokens: request.maxTokens,
top_p: request.top_p,
frequency_penalty: request.frequency_penalty,
presence_penalty: request.presence_penalty,
stop: request.stop,
});
const response = await this.client.chat.completions.create(params);
const choice = response.choices[0];
const toolCalls = choice.message.tool_calls?.map((tc) => {
try {
return {
id: tc.id,
name: tc.function.name,
args: JSON.parse(tc.function.arguments),
};
}
catch (parseErr) {
throw new Error(`Invalid tool call JSON from Groq for ${tc.function.name}: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
}
});
return {
if (!choice) {
throw new Error("Groq API returned empty choices array");
}
const toolCalls = choice.message.tool_calls?.map((tc) => parseToolCall(tc, "Groq"));
const result = {
content: choice.message.content ?? "",
toolCalls,
usage: {
promptTokens: response.usage?.prompt_tokens ?? 0,
completionTokens: response.usage?.completion_tokens ?? 0,
totalTokens: response.usage?.total_tokens ?? 0,
},
usage: parseUsage(response.usage),
model: response.model,
};
console.info(`[GroqProvider] complete() ok model=${response.model} tokens=${result.usage.totalTokens} duration=${Date.now() - startTime}ms`);
return result;
}
catch (err) {
const msg = err instanceof Error ? err.message : String(err);
throw new Error(`GroqProvider.complete() failed: ${msg}`);
console.error(`[GroqProvider] complete() failed duration=${Date.now() - startTime}ms error=${msg}`);
throw mapProviderError(err, "Groq", this.model);
}
}
async stream(request) {
console.info(`[GroqProvider] stream() model=${this.model} messages=${request.messages.length}`);
const stream = await this.client.chat.completions.create({
...this.buildCommonParams(request),
stream: true,
});
return createStreamGenerator(stream, (chunk) => chunk.choices[0]?.delta?.content ?? "");
}
buildCommonParams(request) {
return {
model: this.model,
messages: request.messages,
tools: request.tools,
messages: validateMessages(request.messages),
tools: validateTools(request.tools),
temperature: request.temperature,
max_tokens: request.maxTokens,
stream: true,
});
async function* generate() {
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content ?? "";
yield { delta, done: false };
}
yield { delta: "", done: true };
}
return generate();
top_p: request.top_p,
frequency_penalty: request.frequency_penalty,
presence_penalty: request.presence_penalty,
stop: request.stop,
};
}
getContextWindow() {
return 8192;
return 128000;
}

@@ -82,4 +72,3 @@ setModel(model) {

}
async embed(text) {
void text; // embed not supported
async embed(_text) {
throw new UnsupportedOperationError("embed", "GroqProvider");

@@ -86,0 +75,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"GroqProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/GroqProvider.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"GroqProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/GroqProvider.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/OpenAIProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EAEV,MAAM,aAAa,CAAA;AAyBpB,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAmCnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAqBpE,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAY7C"}
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/OpenAIProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAA;AAKpB,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAepE,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAY7C"}
import OpenAI from "openai";
function parseToolCall(tc) {
if (tc.type === "function") {
try {
return {
id: tc.id,
name: tc.function.name,
args: JSON.parse(tc.function.arguments),
};
}
catch (parseErr) {
throw new Error(`Invalid tool call JSON from OpenAI for ${tc.function.name}: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
}
}
return {
id: tc.id,
name: tc.custom.name,
args: tc.custom.input,
};
}
import { createStreamGenerator } from "./stream-utils.js";
import { validateMessages, validateTools, parseToolCall, parseUsage } from "./validation.js";
import { mapProviderError } from "./provider-errors.js";
export class OpenAIProvider {

@@ -29,3 +13,3 @@ client;

});
this.model = config.model ?? "gpt-4o";
this.model = config.model ?? "gpt-5.4";
}

@@ -36,4 +20,4 @@ async complete(request) {

model: this.model,
messages: request.messages,
tools: request.tools,
messages: validateMessages(request.messages),
tools: validateTools(request.tools),
temperature: request.temperature,

@@ -48,11 +32,7 @@ max_tokens: request.maxTokens,

const message = choice.message;
const toolCalls = message.tool_calls?.map(parseToolCall);
const toolCalls = message.tool_calls?.map((tc) => parseToolCall(tc, "OpenAI"));
return {
content: message.content ?? "",
toolCalls,
usage: {
promptTokens: response.usage?.prompt_tokens ?? 0,
completionTokens: response.usage?.completion_tokens ?? 0,
totalTokens: response.usage?.total_tokens ?? 0,
},
usage: parseUsage(response.usage),
model: response.model,

@@ -63,3 +43,3 @@ };

const msg = err instanceof Error ? err.message : String(err);
throw new Error(`OpenAIProvider.complete() failed: ${msg}`);
throw mapProviderError(err, "OpenAI", this.model);
}

@@ -70,3 +50,3 @@ }

model: this.model,
messages: request.messages,
messages: validateMessages(request.messages),
temperature: request.temperature,

@@ -76,10 +56,3 @@ max_tokens: request.maxTokens,

});
async function* generate() {
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content ?? "";
yield { delta, done: false };
}
yield { delta: "", done: true };
}
return generate();
return createStreamGenerator(stream, (chunk) => chunk.choices[0]?.delta?.content ?? "");
}

@@ -86,0 +59,0 @@ getContextWindow() {

@@ -1,1 +0,1 @@

{"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/OpenAIProvider.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/OpenAIProvider.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"OpenCodeProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/OpenCodeProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EAEV,MAAM,aAAa,CAAA;AA6DpB,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAoBpE,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAG9C"}
{"version":3,"file":"OpenCodeProvider.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/OpenCodeProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAA;AAsCpB,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,SAAS;IAQvB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CnD,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAiBpE,gBAAgB,IAAI,MAAM;IAI1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAG9C"}
import OpenAI from "openai";
import { UnsupportedOperationError } from "../errors.js";
function parseToolCall(tc) {
if (tc.type === "function") {
try {
return {
id: tc.id,
name: tc.function.name,
args: JSON.parse(tc.function.arguments),
};
}
catch (parseErr) {
throw new Error(`Invalid tool call JSON from OpenCode for ${tc.function.name}: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
}
}
return {
id: tc.id,
name: tc.custom.name,
args: tc.custom.input,
};
}
import { createStreamGenerator } from "./stream-utils.js";
import { validateMessages, parseToolCall } from "./validation.js";
import { mapProviderError } from "./provider-errors.js";
function toOpenAIMessages(messages) {

@@ -28,3 +12,2 @@ return messages.map((msg) => {

};
// Convert toolCalls (camelCase) -> tool_calls (snake_case) for OpenAI SDK
if (msg.toolCalls && msg.toolCalls.length > 0) {

@@ -40,7 +23,5 @@ base.tool_calls = msg.toolCalls.map((tc) => ({

}
// Pass through tool_call_id for tool result messages
if (msg.tool_call_id) {
base.tool_call_id = msg.tool_call_id;
}
// Pass through name
if (msg.name) {

@@ -64,2 +45,3 @@ base.name = msg.name;

try {
validateMessages(request.messages);
const openaiTools = request.tools?.map((t) => ({

@@ -83,3 +65,3 @@ type: "function",

const message = choice.message;
const toolCalls = message.tool_calls?.map(parseToolCall);
const toolCalls = message.tool_calls?.map((tc) => parseToolCall(tc, "OpenCode"));
return {

@@ -98,6 +80,7 @@ content: message.content ?? "",

const msg = err instanceof Error ? err.message : String(err);
throw new Error(`OpenCodeProvider.complete() failed: ${msg}`);
throw mapProviderError(err, "OpenCode", this.model);
}
}
async stream(request) {
validateMessages(request.messages);
const stream = await this.client.chat.completions.create({

@@ -110,10 +93,3 @@ model: this.model,

});
async function* generate() {
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content ?? "";
yield { delta, done: false };
}
yield { delta: "", done: true };
}
return generate();
return createStreamGenerator(stream, (chunk) => chunk.choices[0]?.delta?.content ?? "");
}

@@ -120,0 +96,0 @@ getContextWindow() {

@@ -1,1 +0,1 @@

{"version":3,"file":"OpenCodeProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/OpenCodeProvider.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"OpenCodeProvider.js","sourceRoot":"","sources":["../../../src/llm/providers/OpenCodeProvider.ts"],"names":[],"mappings":"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"}

@@ -24,5 +24,5 @@ # Provider Failover

|----------|---------------|-------|
| **Anthropic** | Claude Sonnet 4.6 | Primary for most members; precise, detailed reasoning |
| **Groq** | llama-3.1-70b-versatile | Default when no provider is configured; free tier |
| **OpenAI** | GPT-4o | Broad general capability; fallback for Anthropic |
| **Anthropic** | Claude Sonnet 5 | Primary for most members; precise, detailed reasoning |
| **Groq** | llama-3.3-70b-versatile | Default when no provider is configured; free tier |
| **OpenAI** | GPT-5.4 | Broad general capability; fallback for Anthropic |
| **Ollama** | Local model (configurable) | Air-gapped / offline use; default for the Doorman |

@@ -29,0 +29,0 @@

{
"name": "agenthood",
"version": "3.8.0",
"version": "3.8.1",
"description": "A full AI engineering team as plain Markdown files. 14 specialized agents for code quality, commits, reviews, security, and more — works with any agent runtime.",

@@ -94,3 +94,3 @@ "keywords": [

"dotenv": "^17.4.2",
"groq-sdk": "^1.2.1",
"groq-sdk": "1.2.1",
"openai": "^6.44.0",

@@ -97,0 +97,0 @@ "tree-sitter": "^0.21.1",