| 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"} |
@@ -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 +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 @@ |
+2
-2
| { | ||
| "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", |
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1071431
0.62%560
2.19%11027
0.4%+ Added
- Removed
Updated