@agentics.org/sparc2
Version:
SPARC 2.0 - Autonomous Vector Coding Agent + MCP. SPARC 2.0, vectorized AI code analysis, is an intelligent coding agent framework built to automate and streamline software development. It combines secure execution environments, and version control into a
140 lines (123 loc) • 3.55 kB
text/typescript
/**
* Mock Provider
* Implementation of the LLM provider interface for testing
*/
import {
Assistant,
AssistantOptions,
ChatCompletionOptions,
ChatMessage,
CompletionOptions,
LLMProvider,
} from "../types.ts";
import { logMessage } from "../../logger.ts";
/**
* Mock provider options
*/
export interface MockProviderOptions {
defaultModel?: string;
mockResponses?: Record<string, string>;
}
/**
* Mock provider implementation for testing
*/
export class MockProvider implements LLMProvider {
private defaultModel: string;
private mockResponses: Record<string, string>;
/**
* Create a new mock provider
* @param options Provider options
*/
constructor(options: MockProviderOptions = {}) {
this.defaultModel = options.defaultModel || "mock-model";
this.mockResponses = options.mockResponses || {
"default": "This is a mock response from the mock provider.",
};
}
/**
* Get the provider name
*/
getName(): string {
return "mock";
}
/**
* Get a completion from the LLM
* @param prompt The prompt to send to the LLM
* @param options Options for the completion
*/
async getCompletion(prompt: string, options?: CompletionOptions): Promise<string> {
await logMessage("info", "Mock provider getCompletion called", {
prompt: prompt.substring(0, 100) + (prompt.length > 100 ? "..." : ""),
model: options?.model || this.defaultModel,
});
// Check if we have a specific response for this prompt
for (const [key, value] of Object.entries(this.mockResponses)) {
if (prompt.includes(key)) {
return value;
}
}
// Return default response
return this.mockResponses["default"];
}
/**
* Get a chat completion from the LLM
* @param messages The messages to send to the LLM
* @param options Options for the chat completion
*/
async getChatCompletion(
messages: ChatMessage[],
options?: ChatCompletionOptions,
): Promise<ChatMessage> {
await logMessage("info", "Mock provider getChatCompletion called", {
messageCount: messages.length,
model: options?.model || this.defaultModel,
});
// Get the last user message
const lastUserMessage = messages.filter((m) => m.role === "user").pop();
if (lastUserMessage) {
// Check if we have a specific response for this message
for (const [key, value] of Object.entries(this.mockResponses)) {
if (lastUserMessage.content.includes(key)) {
return {
role: "assistant" as const,
content: value,
};
}
}
}
// Return default response
return {
role: "assistant" as const,
content: this.mockResponses["default"],
};
}
/**
* Check if the provider supports assistants
*/
supportsAssistants(): boolean {
return true;
}
/**
* Create an assistant
* @param options Options for the assistant
*/
async createAssistant(options: AssistantOptions): Promise<Assistant> {
await logMessage("info", "Mock provider createAssistant called", {
name: options.name,
model: options.model || this.defaultModel,
});
return {
id: "mock-assistant-id",
provider: this.getName(),
name: options.name,
model: options.model || this.defaultModel,
};
}
/**
* Set mock responses
* @param responses Mock responses
*/
setMockResponses(responses: Record<string, string>): void {
this.mockResponses = { ...this.mockResponses, ...responses };
}
}