import { ChatCompletion, ChatCompletionMessage, ChatCompletionMessageParam } from 'openai/resources'
import { IKBotOptions } from './types_kbot'
import OpenAI from 'openai'

export type onToolBefore = (category: string, name: string, args: any) => Promise<any>
export type onToolAfter = (category: string, name: string, args: any, result?: any) => Promise<any>
export interface ICollector {
    //OpenAI
    onMessage: (message: ChatCompletionMessageParam) => void
    onToolCall: (tool: ChatCompletionMessage.FunctionCall) => void,
    onFunctionCallResult: (content: string) => void,
    onChatCompletion: (completion: ChatCompletion) => void,
    onContent: (content:string) => void,
    // internal
    onTool: (category: string, name: string, args: any, result?: any) => void
    onToolBefore: onToolBefore
    onToolAfter: onToolAfter
}
export interface IKBotTask extends IKBotOptions 
{
    client: OpenAI
    collector: ICollector
}