DeepResearch / src /types.ts
zhengr's picture
init
0bcc252
raw
history blame
4.53 kB
// Action Types
import {CoreAssistantMessage, CoreUserMessage, LanguageModelUsage} from "ai";
type BaseAction = {
action: "search" | "answer" | "reflect" | "visit";
think: string;
};
export type SearchAction = BaseAction & {
action: "search";
searchQuery: string;
};
export type AnswerAction = BaseAction & {
action: "answer";
answer: string;
references: Array<{
exactQuote: string;
url: string;
}>;
isFinal?: boolean;
};
export type KnowledgeItem = {
question: string,
answer: string,
references?: Array<{
exactQuote: string;
url: string;
}> | Array<any>;
type: 'qa' | 'side-info' | 'chat-history' | 'url',
updated: string,
}
export type ReflectAction = BaseAction & {
action: "reflect";
questionsToAnswer: string[];
};
export type VisitAction = BaseAction & {
action: "visit";
URLTargets: string[];
};
export type StepAction = SearchAction | AnswerAction | ReflectAction | VisitAction;
export type EvaluationType = 'definitive' | 'freshness' | 'plurality' | 'attribution';
export type EvaluationCriteria = {
types: EvaluationType[];
languageStyle: string;
};
// Following Vercel AI SDK's token counting interface
export interface TokenUsage {
tool: string;
usage: LanguageModelUsage;
}
export interface SearchResponse {
code: number;
status: number;
data: Array<{
title: string;
description: string;
url: string;
content: string;
usage: { tokens: number; };
}> | null;
name?: string;
message?: string;
readableMessage?: string;
}
export interface BraveSearchResponse {
web: {
results: Array<{
title: string;
description: string;
url: string;
}>;
};
}
export type DedupResponse = {
think: string;
unique_queries: string[];
};
export interface ReadResponse {
code: number;
status: number;
data?: {
title: string;
description: string;
url: string;
content: string;
usage: { tokens: number; };
};
name?: string;
message?: string;
readableMessage?: string;
}
export type EvaluationResponse = {
pass: boolean;
think: string;
type?: 'definitive' | 'freshness' | 'plurality' | 'attribution';
freshness_analysis?: {
likely_outdated: boolean;
dates_mentioned: string[];
current_time: string;
max_age_days?: number;
};
plurality_analysis?: {
expects_multiple: boolean;
provides_multiple: boolean;
count_expected?: number;
count_provided: number;
};
};
export type ErrorAnalysisResponse = {
recap: string;
blame: string;
improvement: string;
questionsToAnswer: string[];
};
export interface SearchResult {
title: string;
url: string;
description: string;
}
export interface QueryResult {
query: string;
results: SearchResult[];
}
export interface StepData {
step: number;
question: string;
action: string;
reasoning: string;
searchQuery?: string;
result?: QueryResult[];
}
export type KeywordsResponse = {
think: string;
queries: string[];
};
export interface StreamMessage {
type: 'progress' | 'answer' | 'error';
data: string | StepAction;
step?: number;
budget?: {
used: number;
total: number;
percentage: string;
};
}
// OpenAI API Types
export interface Model {
id: string;
object: 'model';
created: number;
owned_by: string;
}
export interface ChatCompletionRequest {
model: string;
messages: Array<CoreUserMessage | CoreAssistantMessage>;
stream?: boolean;
reasoning_effort?: 'low' | 'medium' | 'high' | null;
max_completion_tokens?: number | null;
}
export interface ChatCompletionResponse {
id: string;
object: 'chat.completion';
created: number;
model: string;
system_fingerprint: string;
choices: Array<{
index: number;
message: {
role: 'assistant';
content: string;
};
logprobs: null;
finish_reason: 'stop';
}>;
usage: {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
};
}
export interface ChatCompletionChunk {
id: string;
object: 'chat.completion.chunk';
created: number;
model: string;
system_fingerprint: string;
choices: Array<{
index: number;
delta: {
role?: 'assistant';
content?: string;
};
logprobs: null;
finish_reason: null | 'stop';
}>;
usage?: any;
}
// Tracker Types
import {TokenTracker} from './utils/token-tracker';
import {ActionTracker} from './utils/action-tracker';
export interface TrackerContext {
tokenTracker: TokenTracker;
actionTracker: ActionTracker;
}