import type z from 'zod';
import type { Message } from '../../types.js';

export type Tool = {
  name: string;
  description: string;
  schema: z.ZodObject<Record<string, z.ZodTypeAny>>;
};

export type ToolCall = {
  id: string;
  name: string;
  arguments: Record<string, unknown>;
};

export type GenerateTextInput = {
  messages: Message[];
  tools?: Tool[];
};

export type GenerateTextOutput = {
  content: string;
  toolCalls: ToolCall[];
};

export abstract class BaseLLM {
  abstract generateText(input: GenerateTextInput): Promise<GenerateTextOutput>;
}
