import { IAgenticaVendor } from "@agentica/core";
import { AutoBeEvent, AutoBeHistory, IAutoBeCompiler } from "@autobe/interface";
import { ILlmSchema } from "@samchon/openapi";

import { IAutoBeConfig } from "../structures/IAutoBeConfig";
import { AutoBeState } from "./AutoBeState";
import { AutoBeTokenUsage } from "./AutoBeTokenUsage";

export interface AutoBeContext<Model extends ILlmSchema.Model> {
  model: Model;
  vendor: IAgenticaVendor;
  config: IAutoBeConfig | undefined;
  compiler: IAutoBeCompiler;
  files: () => Record<string, string>;
  histories: () => AutoBeHistory[];
  state: () => AutoBeState;
  usage: () => AutoBeTokenUsage;
  dispatch: (event: AutoBeEvent) => void;
}
