SYMBOL INDEX (966 symbols across 198 files) FILE: backend/chat/chat.py function get_tools (line 32) | def get_tools(): class ChatAgentWithMemory (line 55) | class ChatAgentWithMemory: method __init__ (line 56) | def __init__( method _setup_vector_store (line 82) | def _setup_vector_store(self): method _process_document (line 103) | def _process_document(self, report): method quick_search (line 114) | def quick_search(self, query): method process_chat_completion (line 153) | async def process_chat_completion(self, messages: List[Dict[str, str]]): method chat (line 187) | async def chat(self, messages, websocket=None): method get_context (line 256) | def get_context(self): FILE: backend/memory/draft.py class DraftState (line 5) | class DraftState(TypedDict): FILE: backend/memory/research.py class ResearchState (line 5) | class ResearchState(TypedDict): FILE: backend/report_type/basic_report/basic_report.py class BasicReport (line 9) | class BasicReport: method __init__ (line 10) | def __init__( method _generate_research_id (line 66) | def _generate_research_id(self, query: str) -> str: method run (line 72) | async def run(self): FILE: backend/report_type/deep_research/example.py class ResearchProgress (line 17) | class ResearchProgress: method __init__ (line 18) | def __init__(self, total_depth: int, total_breadth: int): class DeepResearch (line 27) | class DeepResearch: method __init__ (line 28) | def __init__( method generate_feedback (line 50) | async def generate_feedback(self, query: str, num_questions: int = 3) ... method generate_serp_queries (line 72) | async def generate_serp_queries(self, query: str, num_queries: int = 3... method process_serp_result (line 106) | async def process_serp_result(self, query: str, context: str, num_lear... method deep_research (line 150) | async def deep_research( method run (line 275) | async def run(self, on_progress=None) -> str: FILE: backend/report_type/deep_research/main.py function main (line 6) | async def main(task: str): FILE: backend/report_type/detailed_report/detailed_report.py class DetailedReport (line 10) | class DetailedReport: method __init__ (line 11) | def __init__( method _generate_research_id (line 78) | def _generate_research_id(self, query: str) -> str: method run (line 84) | async def run(self) -> str: method _initial_research (line 93) | async def _initial_research(self) -> None: method _get_all_subtopics (line 98) | async def _get_all_subtopics(self) -> List[Dict]: method _generate_subtopic_reports (line 110) | async def _generate_subtopic_reports(self, subtopics: List[Dict]) -> t... method _get_subtopic_report (line 122) | async def _get_subtopic_report(self, subtopic: Dict) -> Dict[str, str]: method _construct_detailed_report (line 181) | async def _construct_detailed_report(self, introduction: str, report_b... FILE: backend/server/app.py class ResearchRequest (line 52) | class ResearchRequest(BaseModel): class ChatRequest (line 63) | class ChatRequest(BaseModel): function lifespan (line 71) | async def lifespan(app: FastAPI): function serve_frontend (line 147) | async def serve_frontend(): function read_report (line 161) | async def read_report(request: Request, research_id: str): function get_all_reports (line 170) | async def get_all_reports(report_ids: str = None): function get_report_by_id (line 177) | async def get_report_by_id(research_id: str): function create_or_update_report (line 185) | async def create_or_update_report(request: Request): function update_report (line 214) | async def update_report(research_id: str, request: Request): function delete_report (line 234) | async def delete_report(research_id: str): function get_report_chat (line 242) | async def get_report_chat(research_id: str): function add_report_chat_message (line 250) | async def add_report_chat_message(research_id: str, request: Request): function write_report (line 273) | async def write_report(research_request: ResearchRequest, research_id: s... function generate_report (line 312) | async def generate_report(research_request: ResearchRequest, background_... function list_files (line 325) | async def list_files(): function run_multi_agents (line 334) | async def run_multi_agents(): function upload_file (line 339) | async def upload_file(file: UploadFile = File(...)): function delete_file (line 344) | async def delete_file(filename: str): function websocket_endpoint (line 349) | async def websocket_endpoint(websocket: WebSocket): function chat (line 363) | async def chat(chat_request: ChatRequest): function research_report_chat (line 407) | async def research_report_chat(research_id: str, request: Request): function update_report (line 444) | async def update_report(research_id: str, request: Request): function delete_report (line 450) | async def delete_report(research_id: str): FILE: backend/server/logging_config.py class JSONResearchHandler (line 7) | class JSONResearchHandler: method __init__ (line 8) | def __init__(self, json_file): method log_event (line 22) | def log_event(self, event_type: str, data: dict): method update_content (line 30) | def update_content(self, key: str, value): method _save_json (line 34) | def _save_json(self): function setup_research_logging (line 38) | def setup_research_logging(): function get_research_logger (line 79) | def get_research_logger(): function get_json_handler (line 82) | def get_json_handler(): FILE: backend/server/multi_agent_runner.py function _ensure_repo_root_on_path (line 8) | def _ensure_repo_root_on_path() -> None: function _resolve_run_research_task (line 15) | def _resolve_run_research_task() -> RunResearchTask: function run_multi_agent_task (line 31) | async def run_multi_agent_task(*args, **kwargs) -> Any: FILE: backend/server/report_store.py class ReportStore (line 7) | class ReportStore: method __init__ (line 8) | def __init__(self, path: Path): method _ensure_parent_dir (line 12) | async def _ensure_parent_dir(self) -> None: method _read_all_unlocked (line 15) | async def _read_all_unlocked(self) -> Dict[str, Dict[str, Any]]: method _write_all_unlocked (line 26) | async def _write_all_unlocked(self, data: Dict[str, Dict[str, Any]]) -... method list_reports (line 32) | async def list_reports(self, report_ids: List[str] | None = None) -> L... method get_report (line 39) | async def get_report(self, report_id: str) -> Dict[str, Any] | None: method upsert_report (line 44) | async def upsert_report(self, report_id: str, report: Dict[str, Any]) ... method delete_report (line 50) | async def delete_report(self, report_id: str) -> bool: FILE: backend/server/server_utils.py class CustomLogsHandler (line 33) | class CustomLogsHandler: method __init__ (line 35) | def __init__(self, websocket, task: str): method send_json (line 56) | async def send_json(self, data: Dict[str, Any]) -> None: class Researcher (line 82) | class Researcher: method __init__ (line 83) | def __init__(self, query: str, report_type: str = "research_report"): method research (line 96) | async def research(self) -> dict: function sanitize_filename (line 115) | def sanitize_filename(filename: str) -> str: function handle_start_command (line 126) | async def handle_start_command(websocket, data: str, manager): function handle_human_feedback (line 181) | async def handle_human_feedback(data: str): function handle_chat_command (line 187) | async def handle_chat_command(websocket, data: str): function generate_report_files (line 256) | async def generate_report_files(report: str, filename: str) -> Dict[str,... function send_file_paths (line 263) | async def send_file_paths(websocket, file_paths: Dict[str, str]): function get_config_dict (line 267) | def get_config_dict( function update_environment_variables (line 290) | def update_environment_variables(config: Dict[str, str]): function handle_file_upload (line 295) | async def handle_file_upload(file, DOC_PATH: str) -> Dict[str, str]: function handle_file_deletion (line 307) | async def handle_file_deletion(filename: str, DOC_PATH: str) -> JSONResp... function execute_multi_agents (line 318) | async def execute_multi_agents(manager) -> Any: function handle_websocket_communication (line 327) | async def handle_websocket_communication(websocket, manager): function extract_command_data (line 398) | def extract_command_data(json_data: Dict) -> tuple: FILE: backend/server/websocket_manager.py class WebSocketManager (line 19) | class WebSocketManager: method __init__ (line 22) | def __init__(self): method start_sender (line 28) | async def start_sender(self, websocket: WebSocket): method connect (line 51) | async def connect(self, websocket: WebSocket): method disconnect (line 64) | async def disconnect(self, websocket: WebSocket): method start_streaming (line 99) | async def start_streaming(self, task, report_type, report_source, sour... function run_agent (line 114) | async def run_agent(task, report_type, report_source, source_urls, docum... FILE: backend/utils.py function write_to_file (line 6) | async def write_to_file(filename: str, text: str) -> None: function write_text_to_md (line 23) | async def write_text_to_md(text: str, filename: str = "") -> str: function _preprocess_images_for_pdf (line 36) | def _preprocess_images_for_pdf(text: str) -> str: function write_md_to_pdf (line 62) | async def write_md_to_pdf(text: str, filename: str = "") -> str: function write_md_to_word (line 99) | async def write_md_to_word(text: str, filename: str = "") -> str: FILE: cli.py function main (line 138) | async def main(args): FILE: docs/discord-bot/commands/ask.js method execute (line 7) | async execute(interaction) { FILE: docs/discord-bot/gptr-webhook.js function initializeWebSocket (line 7) | async function initializeWebSocket() { function sendWebhookMessage (line 50) | async function sendWebhookMessage({query, moreContext}) { FILE: docs/discord-bot/index.js function splitMessage (line 17) | function splitMessage(message, chunkSize = 1500) { function runDevTeam (line 108) | async function runDevTeam({ interaction, query, moreContext, thread }) { FILE: docs/discord-bot/server.js function keepAlive (line 9) | function keepAlive() { FILE: docs/docs/examples/custom_prompt.py function custom_report_example (line 17) | async def custom_report_example(): FILE: docs/docs/examples/sample_report.py function get_report (line 9) | async def get_report(query: str, report_type: str, custom_prompt: str = ... FILE: docs/docs/examples/sample_sources_only.py function get_report (line 5) | async def get_report(query: str, report_source: str, sources: list) -> str: FILE: docs/npm/index.js class GPTResearcher (line 4) | class GPTResearcher { method constructor (line 5) | constructor(options = {}) { method initializeWebSocket (line 13) | async initializeWebSocket() { method sendMessage (line 50) | async sendMessage({ method sendHttpRequest (line 102) | async sendHttpRequest(data) { method getReport (line 112) | async getReport(reportId) { FILE: docs/src/components/HomepageFeatures.js function Feature (line 49) | function Feature({Svg, title, description, docLink}) { function HomepageFeatures (line 66) | function HomepageFeatures() { FILE: docs/src/pages/index.js function HomepageHeader (line 9) | function HomepageHeader() { function Home (line 28) | function Home() { FILE: evals/hallucination_eval/evaluate.py class HallucinationEvaluator (line 18) | class HallucinationEvaluator: method __init__ (line 21) | def __init__(self, model: str = "openai/gpt-4o"): method evaluate_response (line 26) | def evaluate_response(self, model_output: str, source_text: str) -> Dict: function main (line 55) | def main(): FILE: evals/hallucination_eval/run_eval.py class ResearchEvaluator (line 34) | class ResearchEvaluator: method __init__ (line 37) | def __init__(self, queries_file: str = DEFAULT_QUERIES_FILE): method load_queries (line 48) | def load_queries(self, num_queries: Optional[int] = None) -> List[str]: method run_research (line 68) | async def run_research(self, query: str) -> Dict: method evaluate_research (line 97) | def evaluate_research( function main (line 146) | async def main(num_queries: int = 5, output_dir: str = DEFAULT_OUTPUT_DIR): FILE: evals/simple_evals/run_eval.py function map_with_progress (line 17) | def map_with_progress(fn: Callable[[T], R], items: List[T]) -> List[R]: function evaluate_single_query (line 30) | async def evaluate_single_query(query: str, evaluator: SimpleQAEval) -> ... function main (line 74) | async def main(num_examples: int): FILE: evals/simple_evals/simpleqa_eval.py class SimpleQAEval (line 101) | class SimpleQAEval: method __init__ (line 102) | def __init__(self, grader_model, num_examples=1): method evaluate_example (line 119) | def evaluate_example(self, example: dict) -> dict: method grade_response (line 144) | def grade_response(self, question: str, correct_answer: str, model_ans... FILE: frontend/nextjs/actions/apiActions.ts function handleSourcesAndAnswer (line 3) | async function handleSourcesAndAnswer(question: string) { function handleSimilarQuestions (line 58) | async function handleSimilarQuestions(question: string) { function handleLanggraphAnswer (line 67) | async function handleLanggraphAnswer(question: string) { FILE: frontend/nextjs/app/api/chat/route.ts function POST (line 3) | async function POST(request: Request) { FILE: frontend/nextjs/app/api/reports/[id]/chat/route.ts function GET (line 3) | async function GET( function POST (line 33) | async function POST( FILE: frontend/nextjs/app/api/reports/[id]/route.ts function GET (line 3) | async function GET( function DELETE (line 35) | async function DELETE( function PUT (line 68) | async function PUT( FILE: frontend/nextjs/app/api/reports/route.ts function GET (line 3) | async function GET(request: Request) { function POST (line 66) | async function POST(request: Request) { FILE: frontend/nextjs/app/layout.tsx function RootLayout (line 56) | function RootLayout({ FILE: frontend/nextjs/app/page.tsx function Home (line 28) | function Home() { FILE: frontend/nextjs/app/research/[id]/page.tsx function ResearchPage (line 22) | function ResearchPage({ params }: { params: { id: string } }) { FILE: frontend/nextjs/components/Footer.tsx type FooterProps (line 7) | interface FooterProps { FILE: frontend/nextjs/components/Header.tsx type HeaderProps (line 4) | interface HeaderProps { FILE: frontend/nextjs/components/Hero.tsx type THeroProps (line 6) | type THeroProps = { type suggestionType (line 260) | type suggestionType = { FILE: frontend/nextjs/components/HumanFeedback.tsx type HumanFeedbackProps (line 5) | interface HumanFeedbackProps { FILE: frontend/nextjs/components/Images/ImageModal.tsx type ImageModalProps (line 4) | interface ImageModalProps { function ImageModal (line 13) | function ImageModal({ imageSrc, isOpen, onClose, onNext, onPrev }: Image... FILE: frontend/nextjs/components/Images/ImagesAlbum.tsx type ImageType (line 4) | type ImageType = any; type ImagesAlbumProps (line 6) | interface ImagesAlbumProps { function ImagesAlbum (line 10) | function ImagesAlbum({ images }: ImagesAlbumProps) { FILE: frontend/nextjs/components/Langgraph/Langgraph.js function startLanggraphResearch (line 4) | async function startLanggraphResearch(newQuestion, report_source, langgr... FILE: frontend/nextjs/components/ResearchBlocks/AccessReport.tsx type AccessReportProps (line 4) | interface AccessReportProps { FILE: frontend/nextjs/components/ResearchBlocks/ChatInterface.tsx type ChatInterfaceProps (line 7) | interface ChatInterfaceProps { FILE: frontend/nextjs/components/ResearchBlocks/ChatResponse.tsx type ChatResponseProps (line 7) | interface ChatResponseProps { function ChatResponse (line 25) | function ChatResponse({ answer, metadata }: ChatResponseProps) { FILE: frontend/nextjs/components/ResearchBlocks/ImageSection.tsx type ImageSectionProps (line 5) | interface ImageSectionProps { FILE: frontend/nextjs/components/ResearchBlocks/LogsSection.tsx type Log (line 5) | interface Log { type OrderedLogsProps (line 12) | interface OrderedLogsProps { FILE: frontend/nextjs/components/ResearchBlocks/Question.tsx type QuestionProps (line 4) | interface QuestionProps { FILE: frontend/nextjs/components/ResearchBlocks/Report.tsx function Report (line 9) | function Report({ answer, researchId }: { answer: string, researchId?: s... FILE: frontend/nextjs/components/ResearchBlocks/Sources.tsx function Sources (line 5) | function Sources({ FILE: frontend/nextjs/components/ResearchBlocks/elements/ChatInput.tsx type TChatInputProps (line 5) | type TChatInputProps = { function debounce (line 13) | function debounce(func: Function, wait: number) { FILE: frontend/nextjs/components/ResearchBlocks/elements/InputArea.tsx type TInputAreaProps (line 5) | type TInputAreaProps = { function debounce (line 16) | function debounce(func: Function, wait: number) { FILE: frontend/nextjs/components/ResearchBlocks/elements/LogMessage.tsx type ProcessedData (line 8) | type ProcessedData = { type Log (line 14) | type Log = { type LogMessageProps (line 21) | interface LogMessageProps { FILE: frontend/nextjs/components/ResearchBlocks/elements/SubQuestions.tsx type SubQuestionsProps (line 3) | interface SubQuestionsProps { FILE: frontend/nextjs/components/ResearchResults.tsx type ResearchResultsProps (line 12) | interface ResearchResultsProps { FILE: frontend/nextjs/components/ResearchSidebar.tsx type ResearchSidebarProps (line 7) | interface ResearchSidebarProps { FILE: frontend/nextjs/components/Settings/ChatBox.tsx type ChatBoxProps (line 9) | interface ChatBoxProps { type OutputData (line 14) | interface OutputData { type WebSocketMessage (line 20) | interface WebSocketMessage { function ChatBox (line 25) | function ChatBox({ chatBoxSettings, setChatBoxSettings }: ChatBoxProps) { FILE: frontend/nextjs/components/Settings/LayoutSelector.tsx type LayoutSelectorProps (line 3) | interface LayoutSelectorProps { function LayoutSelector (line 8) | function LayoutSelector({ layoutType, onLayoutChange }: LayoutSelectorPr... FILE: frontend/nextjs/components/Settings/MCPSelector.tsx type MCPConfig (line 3) | interface MCPConfig { type MCPSelectorProps (line 10) | interface MCPSelectorProps { FILE: frontend/nextjs/components/Settings/Modal.tsx type ChatBoxProps (line 8) | interface ChatBoxProps { type Domain (line 13) | interface Domain { FILE: frontend/nextjs/components/Settings/ToneSelector.tsx type ToneSelectorProps (line 3) | interface ToneSelectorProps { function ToneSelector (line 7) | function ToneSelector({ tone, onToneChange }: ToneSelectorProps) { FILE: frontend/nextjs/components/Task/Accordion.tsx type ProcessedData (line 6) | type ProcessedData = { type Log (line 12) | type Log = { type AccordionProps (line 18) | interface AccordionProps { FILE: frontend/nextjs/components/Task/AgentLogs.tsx function AgentLogs (line 1) | function AgentLogs({agentLogs}:any){ FILE: frontend/nextjs/components/Task/DomainFilter.tsx type DomainFilterProps (line 4) | interface DomainFilterProps { function DomainFilter (line 12) | function DomainFilter({ FILE: frontend/nextjs/components/Task/Report.tsx function Report (line 5) | function Report({report}:any) { FILE: frontend/nextjs/components/Task/ResearchForm.tsx type ResearchFormProps (line 10) | interface ResearchFormProps { function ResearchForm (line 21) | function ResearchForm({ FILE: frontend/nextjs/components/layouts/CopilotLayout.tsx type CopilotLayoutProps (line 8) | interface CopilotLayoutProps { function CopilotLayout (line 22) | function CopilotLayout({ FILE: frontend/nextjs/components/layouts/MobileLayout.tsx type MobileLayoutProps (line 8) | interface MobileLayoutProps { function MobileLayout (line 22) | function MobileLayout({ FILE: frontend/nextjs/components/layouts/ResearchPageLayout.tsx type ResearchPageLayoutProps (line 7) | interface ResearchPageLayoutProps { function ResearchPageLayout (line 22) | function ResearchPageLayout({ FILE: frontend/nextjs/components/mobile/MobileChatPanel.tsx type MobileChatPanelProps (line 13) | interface MobileChatPanelProps { function processMarkdown (line 180) | function processMarkdown(content: string): string { FILE: frontend/nextjs/components/mobile/MobileHomeScreen.tsx type MobileHomeScreenProps (line 7) | interface MobileHomeScreenProps { function MobileHomeScreen (line 16) | function MobileHomeScreen({ FILE: frontend/nextjs/components/mobile/MobileResearchContent.tsx type MobileResearchContentProps (line 7) | interface MobileResearchContentProps { function MobileResearchContent (line 21) | function MobileResearchContent({ FILE: frontend/nextjs/components/research/CopilotPanel.tsx type CopilotPanelProps (line 9) | interface CopilotPanelProps { FILE: frontend/nextjs/components/research/CopilotResearchContent.tsx type CopilotResearchContentProps (line 6) | interface CopilotResearchContentProps { function CopilotResearchContent (line 28) | function CopilotResearchContent({ FILE: frontend/nextjs/components/research/NotFoundContent.tsx type NotFoundContentProps (line 3) | interface NotFoundContentProps { function NotFoundContent (line 7) | function NotFoundContent({ onNewResearch }: NotFoundContentProps) { FILE: frontend/nextjs/components/research/ResearchContent.tsx type ResearchContentProps (line 8) | interface ResearchContentProps { function ResearchContent (line 31) | function ResearchContent({ FILE: frontend/nextjs/components/research/ResearchPanel.tsx type ResearchPanelProps (line 7) | interface ResearchPanelProps { FILE: frontend/nextjs/helpers/findDifferences.ts type Value (line 1) | type Value = string | number | boolean | null | undefined | object | Val... type Changes (line 2) | type Changes = { [key: string]: { before: Value; after: Value } | Change... function findDifferences (line 4) | function findDifferences>(obj1: T, obj2: T... FILE: frontend/nextjs/helpers/getHost.ts type GetHostParams (line 1) | interface GetHostParams { FILE: frontend/nextjs/hooks/ResearchHistoryContext.tsx type ResearchHistoryContextType (line 8) | interface ResearchHistoryContextType { FILE: frontend/nextjs/hooks/useAnalytics.ts type ResearchData (line 3) | interface ResearchData { type TrackResearchData (line 9) | interface TrackResearchData { FILE: frontend/nextjs/hooks/useScrollHandler.ts function useScrollHandler (line 3) | function useScrollHandler( FILE: frontend/nextjs/next.config.mjs method rewrites (line 19) | async rewrites() { FILE: frontend/nextjs/public/workbox-f1770938.js class s (line 1) | class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.de... method constructor (line 1) | constructor(t,s){super(e(t,s)),this.name=t,this.details=s} class r (line 1) | class r{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.met... method constructor (line 1) | constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s} method setCatchHandler (line 1) | setCatchHandler(t){this.catchHandler=n(t)} class i (line 1) | class i extends r{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.... method constructor (line 1) | constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.o... class a (line 1) | class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return ... method constructor (line 1) | constructor(){this.t=new Map,this.i=new Map} method routes (line 1) | get routes(){return this.t} method addFetchListener (line 1) | addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=... method addCacheListener (line 1) | addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CAC... method handleRequest (line 1) | handleRequest({request:t,event:e}){const s=new URL(t.url,location.href... method findMatchingRoute (line 1) | findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const r=this... method setDefaultHandler (line 1) | setDefaultHandler(t,e="GET"){this.i.set(e,n(t))} method setCatchHandler (line 1) | setCatchHandler(t){this.o=n(t)} method registerRoute (line 1) | registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.... method unregisterRoute (line 1) | unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-ro... function h (line 1) | function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,locatio... function p (line 1) | function p(t,e){const s=new URL(t);for(const t of e)s.searchParams.delet... class y (line 1) | class y{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,th... method constructor (line 1) | constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.rej... function m (line 1) | function m(t){return"string"==typeof t?new Request(t):t} class v (line 1) | class v{constructor(t,e){this.h={},Object.assign(this,e),this.event=e.ev... method constructor (line 1) | constructor(t,e){this.h={},Object.assign(this,e),this.event=e.event,th... method fetch (line 1) | async fetch(t){const{event:e}=this;let n=m(t);if("navigate"===n.mode&&... method fetchAndCachePut (line 1) | async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();retu... method cacheMatch (line 1) | async cacheMatch(t){const e=m(t);let s;const{cacheName:n,matchOptions:... method cachePut (line 1) | async cachePut(t,e){const n=m(t);var r;await(r=0,new Promise(t=>setTim... method getCacheKey (line 1) | async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.h[s]){let n=... method hasCallback (line 1) | hasCallback(t){for(const e of this.u.plugins)if(t in e)return!0;return!1} method runCallbacks (line 1) | async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await ... method iterateCallbacks (line 1) | *iterateCallbacks(t){for(const e of this.u.plugins)if("function"==type... method waitUntil (line 1) | waitUntil(t){return this.p.push(t),t} method doneWaiting (line 1) | async doneWaiting(){let t;for(;t=this.p.shift();)await t} method destroy (line 1) | destroy(){this.l.resolve(null)} method R (line 1) | async R(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWil... class R (line 1) | class R{constructor(t={}){this.cacheName=d(t.cacheName),this.plugins=t.p... method constructor (line 1) | constructor(t={}){this.cacheName=d(t.cacheName),this.plugins=t.plugins... method handle (line 1) | handle(t){const[e]=this.handleAll(t);return e} method handleAll (line 1) | handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});... method q (line 1) | async q(t,e,n){let r;await t.runCallbacks("handlerWillStart",{event:n,... method D (line 1) | async D(t,e,s,n){let r,i;try{r=await t}catch(i){}try{await e.runCallba... function b (line 1) | function b(t){t.then(()=>{})} function q (line 1) | function q(){return q=Object.assign?Object.assign.bind():function(t){for... method get (line 1) | get(t,e,s){if(t instanceof IDBTransaction){if("done"===e)return L.get(t)... function O (line 1) | function O(t){return t!==IDBDatabase.prototype.transaction||"objectStore... function T (line 1) | function T(t){return"function"==typeof t?O(t):(t instanceof IDBTransacti... function k (line 1) | function k(t){if(t instanceof IDBRequest)return function(t){const e=new ... function j (line 1) | function j(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof... class A (line 1) | class A{constructor(t){this._=null,this.L=t}I(t){const e=t.createObjectS... method constructor (line 1) | constructor(t){this._=null,this.L=t} method I (line 1) | I(t){const e=t.createObjectStore(S,{keyPath:"id"});e.createIndex("cach... method C (line 1) | C(t){this.I(t),this.L&&function(t,{blocked:e}={}){const s=indexedDB.de... method setTimestamp (line 1) | async setTimestamp(t,e){const s={url:t=K(t),timestamp:e,cacheName:this... method getTimestamp (line 1) | async getTimestamp(t){const e=await this.getDb(),s=await e.get(S,this.... method expireEntries (line 1) | async expireEntries(t,e){const s=await this.getDb();let n=await s.tran... method N (line 1) | N(t){return this.L+"|"+K(t)} method getDb (line 1) | async getDb(){return this._||(this._=await function(t,e,{blocked:s,upg... class F (line 1) | class F{constructor(t,e={}){this.O=!1,this.T=!1,this.k=e.maxEntries,this... method constructor (line 1) | constructor(t,e={}){this.O=!1,this.T=!1,this.k=e.maxEntries,this.B=e.m... method expireEntries (line 1) | async expireEntries(){if(this.O)return void(this.T=!0);this.O=!0;const... method updateTimestamp (line 1) | async updateTimestamp(t){await this.M.setTimestamp(t,Date.now())} method isURLExpired (line 1) | async isURLExpired(t){if(this.B){const e=await this.M.getTimestamp(t),... method delete (line 1) | async delete(){this.T=!1,await this.M.expireEntries(1/0)} function H (line 1) | async function H(t,e){try{if(206===e.status)return e;const n=t.headers.g... function $ (line 1) | function $(t,e){const s=e();return t.waitUntil(s),s} function z (line 1) | function z(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{ent... class G (line 1) | class G{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.ha... method constructor (line 1) | constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerW... class V (line 1) | class V{constructor({precacheController:t}){this.cacheKeyWillBeUsed=asyn... method constructor (line 1) | constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({req... function X (line 1) | async function X(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!... class Y (line 1) | class Y extends R{constructor(t={}){t.cacheName=w(t.cacheName),super(t),... method constructor (line 1) | constructor(t={}){t.cacheName=w(t.cacheName),super(t),this.j=!1!==t.fa... method U (line 1) | async U(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"instal... method K (line 1) | async K(t,e){let n;const r=e.params||{};if(!this.j)throw new s("missin... method S (line 1) | async S(t,e){this.A();const n=await e.fetch(t);if(!await e.cachePut(t,... method A (line 1) | A(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==Y.copyR... class Z (line 1) | class Z{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}... method constructor (line 1) | constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this... method strategy (line 1) | get strategy(){return this.u} method precache (line 1) | precache(t){this.addToCacheList(t),this.G||(self.addEventListener("ins... method addToCacheList (line 1) | addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.pu... method install (line 1) | install(t){return $(t,async()=>{const e=new G;this.strategy.plugins.pu... method activate (line 1) | activate(t){return $(t,async()=>{const t=await self.caches.open(this.s... method getURLsToCacheKeys (line 1) | getURLsToCacheKeys(){return this.F} method getCachedURLs (line 1) | getCachedURLs(){return[...this.F.keys()]} method getCacheKeyForURL (line 1) | getCacheKeyForURL(t){const e=new URL(t,location.href);return this.F.ge... method getIntegrityForCacheKey (line 1) | getIntegrityForCacheKey(t){return this.$.get(t)} method matchPrecache (line 1) | async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.get... method createHandlerBoundToURL (line 1) | createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)thr... class et (line 1) | class et extends r{constructor(t,e){super(({request:s})=>{const n=t.getU... method constructor (line 1) | constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();... method U (line 1) | async U(t,e){let n,r=await e.cacheMatch(t);if(!r)try{r=await e.fetchAndC... method constructor (line 1) | constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e... method J (line 1) | J(t){if(t===d())throw new s("expire-custom-caches-only");let e=this.Y.ge... method V (line 1) | V(t){if(!this.B)return!0;const e=this.Z(t);if(null===e)return!0;return e... method constructor (line 1) | constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({req... method Z (line 1) | Z(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date")... method constructor (line 1) | constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this... method strategy (line 1) | get strategy(){return this.u} method precache (line 1) | precache(t){this.addToCacheList(t),this.G||(self.addEventListener("ins... method addToCacheList (line 1) | addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.pu... method install (line 1) | install(t){return $(t,async()=>{const e=new G;this.strategy.plugins.pu... method activate (line 1) | activate(t){return $(t,async()=>{const t=await self.caches.open(this.s... method getURLsToCacheKeys (line 1) | getURLsToCacheKeys(){return this.F} method getCachedURLs (line 1) | getCachedURLs(){return[...this.F.keys()]} method getCacheKeyForURL (line 1) | getCacheKeyForURL(t){const e=new URL(t,location.href);return this.F.ge... method getIntegrityForCacheKey (line 1) | getIntegrityForCacheKey(t){return this.$.get(t)} method matchPrecache (line 1) | async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.get... method createHandlerBoundToURL (line 1) | createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)thr... method deleteCacheAndMetadata (line 1) | async deleteCacheAndMetadata(){for(const[t,e]of this.Y)await self.caches... method constructor (line 1) | constructor(t={}){super(t),this.plugins.some(t=>"cacheWillUpdate"in t)||... method U (line 1) | async U(t,e){const n=[],r=[];let i;if(this.tt){const{id:s,promise:a}=thi... method et (line 1) | et({request:t,logs:e,handler:s}){let n;return{promise:new Promise(e=>{n=... method constructor (line 1) | constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();... method st (line 1) | async st({timeoutId:t,request:e,logs:s,handler:n}){let r,i;try{i=await n... method constructor (line 1) | constructor(){this.cachedResponseWillBeUsed=async({request:t,cachedRespo... method constructor (line 1) | constructor(t={}){super(t),this.plugins.some(t=>"cacheWillUpdate"in t)||... method U (line 1) | async U(t,e){const n=e.fetchAndCachePut(t).catch(()=>{});e.waitUntil(n);... FILE: frontend/nextjs/rollup.config.js method transform (line 14) | transform(code) { FILE: frontend/nextjs/src/GPTResearcher.tsx type GPTResearcherProps (line 18) | interface GPTResearcherProps { FILE: frontend/nextjs/src/index.d.ts type GPTResearcherProps (line 4) | interface GPTResearcherProps { FILE: frontend/nextjs/src/utils/imageTransformPlugin.js function imageTransformPlugin (line 2) | function imageTransformPlugin() { FILE: frontend/nextjs/types/data.ts type BaseData (line 1) | interface BaseData { type BasicData (line 5) | interface BasicData extends BaseData { type LanggraphButtonData (line 10) | interface LanggraphButtonData extends BaseData { type DifferencesData (line 15) | interface DifferencesData extends BaseData { type QuestionData (line 21) | interface QuestionData extends BaseData { type ChatData (line 26) | interface ChatData extends BaseData { type Data (line 32) | type Data = BasicData | LanggraphButtonData | DifferencesData | Question... type MCPConfig (line 34) | interface MCPConfig { type ChatBoxSettings (line 41) | interface ChatBoxSettings { type Domain (line 53) | interface Domain { type ChatMessage (line 57) | interface ChatMessage { type ResearchHistoryItem (line 64) | interface ResearchHistoryItem { FILE: frontend/nextjs/types/react-ga4.d.ts type InitOptions (line 2) | interface InitOptions { FILE: frontend/nextjs/utils/getLayout.tsx type LayoutProps (line 7) | interface LayoutProps { FILE: frontend/scripts.js function setCookie (line 1415) | function setCookie(name, value, days) { function getCookie (line 1475) | function getCookie(name) { function deleteCookie (line 1509) | function deleteCookie(name) { FILE: gpt_researcher/actions/agent_creator.py function choose_agent (line 18) | async def choose_agent( function handle_json_error (line 65) | async def handle_json_error(response: str | None): function extract_json_with_regex (line 110) | def extract_json_with_regex(response: str | None) -> str | None: FILE: gpt_researcher/actions/markdown_processing.py function extract_headers (line 5) | def extract_headers(markdown_text: str) -> List[Dict]: function extract_sections (line 41) | def extract_sections(markdown_text: str) -> List[Dict[str, str]]: function table_of_contents (line 68) | def table_of_contents(markdown_text: str) -> str: function add_references (line 94) | def add_references(report_markdown: str, visited_urls: set) -> str: FILE: gpt_researcher/actions/query_processing.py function get_search_results (line 12) | async def get_search_results(query: str, retriever: Any, query_domains: ... function generate_sub_queries (line 37) | async def generate_sub_queries( function plan_research_outline (line 112) | async def plan_research_outline( FILE: gpt_researcher/actions/report_generation.py function write_report_introduction (line 12) | async def write_report_introduction( function write_conclusion (line 63) | async def write_conclusion( function summarize_url (line 115) | async def summarize_url( function generate_draft_section_titles (line 160) | async def generate_draft_section_titles( function generate_report (line 209) | async def generate_report( FILE: gpt_researcher/actions/retriever.py function get_retriever (line 8) | def get_retriever(retriever: str): function get_retrievers (line 99) | def get_retrievers(headers: dict[str, str], cfg): function get_default_retriever (line 139) | def get_default_retriever(): FILE: gpt_researcher/actions/utils.py function stream_output (line 7) | async def stream_output( function safe_send_json (line 35) | async def safe_send_json(websocket: Any, data: Dict[str, Any]) -> None: function calculate_cost (line 62) | def calculate_cost( function format_token_count (line 100) | def format_token_count(count: int) -> str: function update_cost (line 113) | async def update_cost( function create_cost_callback (line 145) | def create_cost_callback(websocket: Any) -> Callable: FILE: gpt_researcher/actions/web_scraping.py function scrape_urls (line 12) | async def scrape_urls( function filter_urls (line 45) | async def filter_urls(urls: list[str], config: Config) -> list[str]: function extract_main_content (line 64) | async def extract_main_content(html_content: str) -> str: function process_scraped_data (line 79) | async def process_scraped_data(scraped_data: list[dict[str, Any]], confi... FILE: gpt_researcher/agent.py class GPTResearcher (line 36) | class GPTResearcher: method __init__ (line 52) | def __init__( method _generate_research_id (line 202) | def _generate_research_id(self) -> str: method _resolve_mcp_strategy (line 216) | def _resolve_mcp_strategy(self, mcp_strategy: str | None, mcp_max_iter... method _process_mcp_configs (line 282) | def _process_mcp_configs(self, mcp_configs: list[dict]) -> None: method _log_event (line 311) | async def _log_event(self, event_type: str, **kwargs): method conduct_research (line 331) | async def conduct_research(self, on_progress=None): method _handle_deep_research (line 403) | async def _handle_deep_research(self, on_progress=None): method write_report (line 451) | async def write_report( method write_report_conclusion (line 494) | async def write_report_conclusion(self, report_body: str) -> str: method write_introduction (line 508) | async def write_introduction(self) -> str: method quick_search (line 519) | async def quick_search(self, query: str, query_domains: list[str] = No... method get_subtopics (line 553) | async def get_subtopics(self): method get_draft_section_titles (line 561) | async def get_draft_section_titles(self, current_subtopic: str) -> lis... method get_similar_written_contents_by_draft_section_titles (line 572) | async def get_similar_written_contents_by_draft_section_titles( method get_research_images (line 598) | def get_research_images(self, top_k: int = 10) -> list[dict[str, Any]]: method add_research_images (line 609) | def add_research_images(self, images: list[dict[str, Any]]) -> None: method get_research_sources (line 617) | def get_research_sources(self) -> list[dict[str, Any]]: method add_research_sources (line 625) | def add_research_sources(self, sources: list[dict[str, Any]]) -> None: method add_references (line 633) | def add_references(self, report_markdown: str, visited_urls: set) -> str: method extract_headers (line 645) | def extract_headers(self, markdown_text: str) -> list[dict]: method extract_sections (line 656) | def extract_sections(self, markdown_text: str) -> list[dict]: method table_of_contents (line 667) | def table_of_contents(self, markdown_text: str) -> str: method get_source_urls (line 678) | def get_source_urls(self) -> list: method get_research_context (line 686) | def get_research_context(self) -> list: method get_costs (line 694) | def get_costs(self) -> float: method get_step_costs (line 702) | def get_step_costs(self) -> dict[str, float]: method set_verbose (line 710) | def set_verbose(self, verbose: bool) -> None: method add_costs (line 718) | def add_costs(self, cost: float) -> None: FILE: gpt_researcher/config/config.py class Config (line 19) | class Config: method __init__ (line 34) | def __init__(self, config_path: str | None = None): method _set_attributes (line 62) | def _set_attributes(self, config: Dict[str, Any]) -> None: method _set_embedding_attributes (line 85) | def _set_embedding_attributes(self) -> None: method _set_llm_attributes (line 91) | def _set_llm_attributes(self) -> None: method _handle_deprecated_attributes (line 98) | def _handle_deprecated_attributes(self) -> None: method _set_doc_path (line 147) | def _set_doc_path(self, config: Dict[str, Any]) -> None: method load_config (line 157) | def load_config(cls, config_path: str | None) -> Dict[str, Any]: method list_available_configs (line 180) | def list_available_configs(cls) -> List[str]: method parse_retrievers (line 188) | def parse_retrievers(self, retriever_str: str) -> List[str]: method parse_llm (line 204) | def parse_llm(llm_str: str | None) -> tuple[str | None, str | None]: method parse_reasoning_effort (line 224) | def parse_reasoning_effort(reasoning_effort_str: str | None) -> str | ... method parse_embedding (line 233) | def parse_embedding(embedding_str: str | None) -> tuple[str | None, st... method validate_doc_path (line 252) | def validate_doc_path(self): method convert_env_value (line 257) | def convert_env_value(key: str, env_value: str, type_hint: Type) -> Any: method set_verbose (line 291) | def set_verbose(self, verbose: bool) -> None: method get_mcp_server_config (line 295) | def get_mcp_server_config(self, name: str) -> dict: FILE: gpt_researcher/config/variables/base.py class BaseConfig (line 5) | class BaseConfig(TypedDict): FILE: gpt_researcher/context/compression.py class VectorstoreCompressor (line 36) | class VectorstoreCompressor: method __init__ (line 48) | def __init__( method async_get_context (line 71) | async def async_get_context(self, query: str, max_results: int = 5) ->... class ContextCompressor (line 85) | class ContextCompressor: method __init__ (line 98) | def __init__( method __get_contextual_retriever (line 122) | def __get_contextual_retriever(self): method async_get_context (line 143) | async def async_get_context(self, query: str, max_results: int = 5, co... class WrittenContentCompressor (line 181) | class WrittenContentCompressor: method __init__ (line 194) | def __init__(self, documents, embeddings, similarity_threshold: float,... method __get_contextual_retriever (line 208) | def __get_contextual_retriever(self): method __pretty_docs_list (line 228) | def __pretty_docs_list(self, docs, top_n: int) -> list[str]: method async_get_context (line 240) | async def async_get_context(self, query: str, max_results: int = 5, co... FILE: gpt_researcher/context/retriever.py class SearchAPIRetriever (line 10) | class SearchAPIRetriever(BaseRetriever): method _get_relevant_documents (line 14) | def _get_relevant_documents( class SectionRetriever (line 31) | class SectionRetriever(BaseRetriever): method _get_relevant_documents (line 48) | def _get_relevant_documents( FILE: gpt_researcher/document/azure_document_loader.py class AzureDocumentLoader (line 5) | class AzureDocumentLoader: method __init__ (line 6) | def __init__(self, container_name, connection_string): method load (line 10) | async def load(self): FILE: gpt_researcher/document/document.py class DocumentLoader (line 16) | class DocumentLoader: method __init__ (line 18) | def __init__(self, path: Union[str, List[str]]): method load (line 21) | async def load(self) -> list: method _load_document (line 63) | async def _load_document(self, file_path: str, file_extension: str) ->... FILE: gpt_researcher/document/langchain_document.py class LangChainDocumentLoader (line 10) | class LangChainDocumentLoader: method __init__ (line 12) | def __init__(self, documents: List[Document]): method load (line 15) | async def load(self, metadata_source_index="title") -> List[Dict[str, ... FILE: gpt_researcher/document/online_document.py class OnlineDocumentLoader (line 15) | class OnlineDocumentLoader: method __init__ (line 17) | def __init__(self, urls): method load (line 20) | async def load(self) -> list: method _download_and_process (line 36) | async def _download_and_process(self, url: str) -> list: method _load_document (line 62) | async def _load_document(self, file_path: str, file_extension: str) ->... method _get_extension (line 90) | def _get_extension(url: str) -> str: FILE: gpt_researcher/llm_provider/generic/base.py class ReasoningEfforts (line 67) | class ReasoningEfforts(Enum): class ChatLogger (line 73) | class ChatLogger: method __init__ (line 78) | def __init__(self, fname: str): method log_request (line 82) | async def log_request(self, messages, response): class GenericLLMProvider (line 91) | class GenericLLMProvider: method __init__ (line 93) | def __init__(self, llm, chat_log: str | None = None, verbose: bool = ... method from_provider (line 98) | def from_provider(cls, provider: str, chat_log: str | None = None, ver... method get_chat_response (line 275) | async def get_chat_response(self, messages, stream, websocket=None, **... method stream_response (line 290) | async def stream_response(self, messages, websocket=None, **kwargs): method _send_output (line 309) | async def _send_output(self, content, websocket=None): function _check_pkg (line 316) | def _check_pkg(pkg: str) -> None: FILE: gpt_researcher/llm_provider/image/image_generator.py class ImageGeneratorProvider (line 22) | class ImageGeneratorProvider: method __init__ (line 48) | def __init__( method _ensure_client (line 75) | def _ensure_client(self): method _ensure_output_dir (line 91) | def _ensure_output_dir(self, research_id: str = "") -> Path: method _generate_image_filename (line 101) | def _generate_image_filename(self, prompt: str, index: int = 0) -> str: method _crop_to_landscape (line 106) | def _crop_to_landscape(self, image_bytes: bytes, target_ratio: float =... method _build_enhanced_prompt (line 156) | def _build_enhanced_prompt(self, prompt: str, context: str = "", style... method generate_image (line 225) | async def generate_image( method _generate_with_gemini (line 268) | async def _generate_with_gemini( method _generate_with_imagen (line 351) | async def _generate_with_imagen( method _generate_alt_text (line 411) | def _generate_alt_text(self, prompt: str) -> str: method is_available (line 420) | def is_available(self) -> bool: method from_config (line 432) | def from_config(cls, config) -> Optional["ImageGeneratorProvider"]: FILE: gpt_researcher/mcp/client.py class MCPClientManager (line 19) | class MCPClientManager: method __init__ (line 29) | def __init__(self, mcp_configs: List[Dict[str, Any]]): method convert_configs_to_langchain_format (line 40) | def convert_configs_to_langchain_format(self) -> Dict[str, Dict[str, A... method get_or_create_client (line 105) | async def get_or_create_client(self) -> Optional[object]: method close_client (line 138) | async def close_client(self): method get_all_tools (line 155) | async def get_all_tools(self) -> List: FILE: gpt_researcher/mcp/research.py class MCPResearchSkill (line 13) | class MCPResearchSkill: method __init__ (line 23) | def __init__(self, cfg, researcher=None): method conduct_research_with_tools (line 34) | async def conduct_research_with_tools(self, query: str, selected_tools... method _process_tool_result (line 158) | def _process_tool_result(self, tool_name: str, result: Any) -> List[Di... FILE: gpt_researcher/mcp/streaming.py class MCPStreamer (line 13) | class MCPStreamer: method __init__ (line 23) | def __init__(self, websocket=None): method stream_log (line 32) | async def stream_log(self, message: str, data: Any = None): method stream_log_sync (line 49) | def stream_log_sync(self, message: str, data: Any = None): method stream_stage_start (line 66) | async def stream_stage_start(self, stage: str, description: str): method stream_stage_complete (line 70) | async def stream_stage_complete(self, stage: str, result_count: int = ... method stream_tool_selection (line 77) | async def stream_tool_selection(self, selected_count: int, total_count... method stream_tool_execution (line 81) | async def stream_tool_execution(self, tool_name: str, step: int, total... method stream_research_results (line 85) | async def stream_research_results(self, result_count: int, total_chars... method stream_error (line 92) | async def stream_error(self, error_msg: str): method stream_warning (line 96) | async def stream_warning(self, warning_msg: str): method stream_info (line 100) | async def stream_info(self, info_msg: str): FILE: gpt_researcher/mcp/tool_selector.py class MCPToolSelector (line 14) | class MCPToolSelector: method __init__ (line 24) | def __init__(self, cfg, researcher=None): method select_relevant_tools (line 35) | async def select_relevant_tools(self, query: str, all_tools: List, max... method _call_llm_for_tool_selection (line 129) | async def _call_llm_for_tool_selection(self, prompt: str) -> str: method _fallback_tool_selection (line 163) | def _fallback_tool_selection(self, all_tools: List, max_tools: int) ->... FILE: gpt_researcher/memory/embeddings.py class Memory (line 55) | class Memory: method __init__ (line 72) | def __init__(self, embedding_provider: str, model: str, **embedding_kw... method get_embeddings (line 209) | def get_embeddings(self): FILE: gpt_researcher/prompts.py class PromptFamily (line 14) | class PromptFamily: method __init__ (line 31) | def __init__(self, config: Config): method generate_mcp_tool_selection_prompt (line 40) | def generate_mcp_tool_selection_prompt(query: str, tools_info: List[Di... method generate_mcp_research_prompt (line 86) | def generate_mcp_research_prompt(query: str, selected_tools: List) -> ... method generate_image_analysis_prompt (line 122) | def generate_image_analysis_prompt( method generate_image_prompt_enhancement (line 178) | def generate_image_prompt_enhancement( method generate_search_queries_prompt (line 213) | def generate_search_queries_prompt( method generate_report_prompt (line 258) | def generate_report_prompt( method curate_sources (line 315) | def curate_sources(query, sources, max_results=10): method generate_resource_report_prompt (line 349) | def generate_resource_report_prompt( method generate_custom_report_prompt (line 389) | def generate_custom_report_prompt( method generate_outline_report_prompt (line 395) | def generate_outline_report_prompt( method generate_deep_research_prompt (line 414) | def generate_deep_research_prompt( method auto_agent_instructions (line 486) | def auto_agent_instructions(): method generate_summary_prompt (line 514) | def generate_summary_prompt(query, data): method generate_quick_summary_prompt (line 528) | def generate_quick_summary_prompt(query: str, context: str) -> str: method pretty_print_docs (line 551) | def pretty_print_docs(docs: list[Document], top_n: int | None = None) ... method join_local_web_documents (line 560) | def join_local_web_documents(docs_context: str, web_context: str) -> str: method generate_subtopics_prompt (line 569) | def generate_subtopics_prompt() -> str: method generate_subtopic_report_prompt (line 592) | def generate_subtopic_report_prompt( method generate_draft_titles_prompt (line 669) | def generate_draft_titles_prompt( method generate_report_introduction (line 703) | def generate_report_introduction(question: str, research_summary: str ... method generate_report_conclusion (line 716) | def generate_report_conclusion(query: str, report_content: str, langua... class GranitePromptFamily (line 752) | class GranitePromptFamily(PromptFamily): method _get_granite_class (line 756) | def _get_granite_class(self) -> type[PromptFamily]: method pretty_print_docs (line 765) | def pretty_print_docs(self, *args, **kwargs) -> str: method join_local_web_documents (line 768) | def join_local_web_documents(self, *args, **kwargs) -> str: class Granite3PromptFamily (line 772) | class Granite3PromptFamily(PromptFamily): method pretty_print_docs (line 779) | def pretty_print_docs(cls, docs: list[Document], top_n: int | None = N... method join_local_web_documents (line 792) | def join_local_web_documents(cls, docs_context: str | list, web_contex... class Granite33PromptFamily (line 802) | class Granite33PromptFamily(PromptFamily): method _get_content (line 810) | def _get_content(doc: Document) -> str: method pretty_print_docs (line 817) | def pretty_print_docs(cls, docs: list[Document], top_n: int | None = N... method join_local_web_documents (line 828) | def join_local_web_documents(cls, docs_context: str | list, web_contex... function get_prompt_by_report_type (line 858) | def get_prompt_by_report_type( function get_prompt_family (line 885) | def get_prompt_family( FILE: gpt_researcher/retrievers/arxiv/arxiv.py class ArxivSearch (line 4) | class ArxivSearch: method __init__ (line 8) | def __init__(self, query, sort='Relevance', query_domains=None): method search (line 15) | def search(self, max_results=5): FILE: gpt_researcher/retrievers/bing/bing.py class BingSearch (line 10) | class BingSearch(): method __init__ (line 15) | def __init__(self, query, query_domains=None): method get_api_key (line 26) | def get_api_key(self): method search (line 39) | def search(self, max_results=7) -> list[dict[str]]: FILE: gpt_researcher/retrievers/bocha/bocha.py class BoChaSearch (line 10) | class BoChaSearch(): method __init__ (line 15) | def __init__(self, query, query_domains=None): method search (line 25) | def search(self, max_results=7) -> list[dict[str]]: FILE: gpt_researcher/retrievers/custom/custom.py class CustomRetriever (line 6) | class CustomRetriever: method __init__ (line 11) | def __init__(self, query: str, query_domains=None): method _populate_params (line 19) | def _populate_params(self) -> Dict[str, Any]: method search (line 29) | def search(self, max_results: int = 5) -> Optional[List[Dict[str, Any]]]: FILE: gpt_researcher/retrievers/duckduckgo/duckduckgo.py class Duckduckgo (line 5) | class Duckduckgo: method __init__ (line 9) | def __init__(self, query, query_domains=None): method search (line 16) | def search(self, max_results=5): FILE: gpt_researcher/retrievers/exa/exa.py class ExaSearch (line 5) | class ExaSearch: method __init__ (line 10) | def __init__(self, query, query_domains=None): method _retrieve_api_key (line 24) | def _retrieve_api_key(self): method search (line 41) | def search( method find_similar (line 68) | def find_similar(self, url, exclude_source_domain=False, **filters): method get_contents (line 87) | def get_contents(self, ids, **options): FILE: gpt_researcher/retrievers/google/google.py class GoogleSearch (line 9) | class GoogleSearch: method __init__ (line 13) | def __init__(self, query, headers=None, query_domains=None): method get_api_key (line 25) | def get_api_key(self): method get_cx_key (line 39) | def get_cx_key(self): method search (line 53) | def search(self, max_results=7): FILE: gpt_researcher/retrievers/mcp/retriever.py class MCPRetriever (line 27) | class MCPRetriever: method __init__ (line 44) | def __init__( method _get_mcp_configs (line 91) | def _get_mcp_configs(self) -> List[Dict[str, Any]]: method _get_config (line 102) | def _get_config(self): method search_async (line 116) | async def search_async(self, max_results: int = 10) -> List[Dict[str, ... method search (line 201) | def search(self, max_results: int = 10) -> List[Dict[str, str]]: method _get_all_tools (line 300) | async def _get_all_tools(self) -> List: FILE: gpt_researcher/retrievers/pubmed_central/pubmed_central.py class PubMedCentralSearch (line 7) | class PubMedCentralSearch: method __init__ (line 12) | def __init__(self, query: str, query_domains=None): method _populate_params (line 27) | def _populate_params(self) -> Dict[str, Any]: method _search_articles (line 42) | def _search_articles(self, max_results: int) -> Optional[List[str]]: method _fetch_full_text (line 73) | def _fetch_full_text(self, article_id: str) -> Optional[Dict[str, str]]: method search (line 126) | def search(self, max_results: int = 5) -> Optional[List[Dict[str, Any]]]: FILE: gpt_researcher/retrievers/searchapi/searchapi.py class SearchApiSearch (line 9) | class SearchApiSearch(): method __init__ (line 13) | def __init__(self, query, query_domains=None): method get_api_key (line 22) | def get_api_key(self): method search (line 35) | def search(self, max_results=7): FILE: gpt_researcher/retrievers/searx/searx.py class SearxSearch (line 8) | class SearxSearch(): method __init__ (line 12) | def __init__(self, query: str, query_domains=None): method get_searxng_url (line 22) | def get_searxng_url(self) -> str: method search (line 39) | def search(self, max_results: int = 10) -> List[Dict[str, str]]: FILE: gpt_researcher/retrievers/semantic_scholar/semantic_scholar.py class SemanticScholarSearch (line 6) | class SemanticScholarSearch: method __init__ (line 14) | def __init__(self, query: str, sort: str = "relevance", query_domains=... method search (line 25) | def search(self, max_results: int = 20) -> List[Dict[str, str]]: FILE: gpt_researcher/retrievers/serpapi/serpapi.py class SerpApiSearch (line 9) | class SerpApiSearch(): method __init__ (line 13) | def __init__(self, query, query_domains=None): method get_api_key (line 23) | def get_api_key(self): method search (line 36) | def search(self, max_results=7): FILE: gpt_researcher/retrievers/serper/serper.py class SerperSearch (line 9) | class SerperSearch(): method __init__ (line 13) | def __init__(self, query, query_domains=None, country=None, language=N... method _get_exclude_sites_from_env (line 32) | def _get_exclude_sites_from_env(self): method get_api_key (line 44) | def get_api_key(self): method search (line 57) | def search(self, max_results=7): FILE: gpt_researcher/retrievers/tavily/tavily_search.py class TavilySearch (line 14) | class TavilySearch: method __init__ (line 19) | def __init__(self, query, headers=None, topic="general", query_domains... method get_api_key (line 39) | def get_api_key(self): method _search (line 57) | def _search( method search (line 100) | def search(self, max_results=10): FILE: gpt_researcher/retrievers/utils.py function stream_output (line 14) | async def stream_output(log_type, step, content, websocket=None, with_da... function check_pkg (line 44) | def check_pkg(pkg: str) -> None: function get_all_retriever_names (line 80) | def get_all_retriever_names(): FILE: gpt_researcher/scraper/arxiv/arxiv.py class ArxivScraper (line 4) | class ArxivScraper: method __init__ (line 6) | def __init__(self, link, session=None): method scrape (line 10) | def scrape(self): FILE: gpt_researcher/scraper/beautiful_soup/beautiful_soup.py class BeautifulSoupScraper (line 6) | class BeautifulSoupScraper: method __init__ (line 8) | def __init__(self, link, session=None): method scrape (line 12) | def scrape(self): FILE: gpt_researcher/scraper/browser/browser.py class BrowserScraper (line 24) | class BrowserScraper: method __init__ (line 25) | def __init__(self, url: str, session=None): method scrape (line 38) | def scrape(self) -> tuple: method _import_selenium (line 61) | def _import_selenium(self): method setup_driver (line 83) | def setup_driver(self) -> None: method _load_saved_cookies (line 121) | def _load_saved_cookies(self): method _load_browser_cookies (line 131) | def _load_browser_cookies(self): method _cleanup_cookie_file (line 152) | def _cleanup_cookie_file(self): method _generate_random_string (line 163) | def _generate_random_string(self, length): method _get_domain (line 167) | def _get_domain(self): method _visit_google_and_save_cookies (line 175) | def _visit_google_and_save_cookies(self): method scrape_text_with_selenium (line 191) | def scrape_text_with_selenium(self) -> tuple: method _scroll_to_bottom (line 226) | def _scroll_to_bottom(self): method _scroll_to_percentage (line 237) | def _scroll_to_percentage(self, ratio: float) -> None: method _add_header (line 243) | def _add_header(self) -> None: FILE: gpt_researcher/scraper/browser/nodriver_scraper.py class NoDriverScraper (line 16) | class NoDriverScraper: method get_domain (line 24) | def get_domain(url: str) -> str: class Browser (line 31) | class Browser: method __init__ (line 32) | def __init__( method get (line 45) | async def get(self, url: str) -> "zendriver.Tab": method scroll_page_to_bottom (line 59) | async def scroll_page_to_bottom(self, page: "zendriver.Tab"): method wait_or_timeout (line 82) | async def wait_or_timeout( method close_page (line 99) | async def close_page(self, page: "zendriver.Tab"): method rate_limit_for_domain (line 108) | async def rate_limit_for_domain(self, url: str): method stop (line 130) | async def stop(self): method get_browser (line 137) | async def get_browser(cls, headless: bool = False) -> "NoDriverScraper... method release_browser (line 175) | async def release_browser(cls, browser: Browser): method __init__ (line 185) | def __init__(self, url: str, session: requests.Session | None = None): method scrape_async (line 190) | async def scrape_async(self) -> Tuple[str, list[dict], str]: FILE: gpt_researcher/scraper/browser/processing/html.py function extract_hyperlinks (line 8) | def extract_hyperlinks(soup: BeautifulSoup, base_url: str) -> list[tuple... function format_hyperlinks (line 24) | def format_hyperlinks(hyperlinks: list[tuple[str, str]]) -> list[str]: FILE: gpt_researcher/scraper/browser/processing/scrape_skills.py function scrape_pdf_with_pymupdf (line 5) | def scrape_pdf_with_pymupdf(url) -> str: function scrape_pdf_with_arxiv (line 19) | def scrape_pdf_with_arxiv(query) -> str: FILE: gpt_researcher/scraper/firecrawl/firecrawl.py class FireCrawl (line 5) | class FireCrawl: method __init__ (line 7) | def __init__(self, link, session=None): method get_api_key (line 13) | def get_api_key(self) -> str: method get_server_url (line 26) | def get_server_url(self) -> str: method scrape (line 39) | def scrape(self) -> tuple: FILE: gpt_researcher/scraper/pymupdf/pymupdf.py class PyMuPDFScraper (line 8) | class PyMuPDFScraper: method __init__ (line 10) | def __init__(self, link, session=None): method is_url (line 21) | def is_url(self) -> bool: method scrape (line 34) | def scrape(self) -> tuple[str, list[str], str]: FILE: gpt_researcher/scraper/scraper.py class Scraper (line 30) | class Scraper: method __init__ (line 35) | def __init__(self, urls, user_agent, scraper, worker_pool: WorkerPool): method run (line 63) | async def run(self): method _check_pkg (line 74) | def _check_pkg(self, scrapper_name: str) -> None: method extract_data_from_url (line 108) | async def extract_data_from_url(self, link, session): method get_scraper (line 171) | def get_scraper(self, link): FILE: gpt_researcher/scraper/tavily_extract/tavily_extract.py class TavilyExtract (line 5) | class TavilyExtract: method __init__ (line 7) | def __init__(self, link, session=None): method get_api_key (line 13) | def get_api_key(self) -> str: method scrape (line 26) | def scrape(self) -> tuple: FILE: gpt_researcher/scraper/utils.py function get_relevant_images (line 16) | def get_relevant_images(soup: BeautifulSoup, url: str) -> list: function parse_dimension (line 58) | def parse_dimension(value: str) -> int: function extract_title (line 68) | def extract_title(soup: BeautifulSoup) -> str: function get_image_hash (line 72) | def get_image_hash(image_url: str) -> str: function clean_soup (line 94) | def clean_soup(soup: BeautifulSoup) -> BeautifulSoup: function get_text_from_soup (line 127) | def get_text_from_soup(soup: BeautifulSoup) -> str: FILE: gpt_researcher/scraper/web_base_loader/web_base_loader.py class WebBaseLoaderScraper (line 6) | class WebBaseLoaderScraper: method __init__ (line 8) | def __init__(self, link, session=None): method scrape (line 12) | def scrape(self) -> tuple: FILE: gpt_researcher/skills/browser.py class BrowserManager (line 14) | class BrowserManager: method __init__ (line 25) | def __init__(self, researcher): method browse_urls (line 37) | async def browse_urls(self, urls: list[str]) -> list[dict]: method select_top_images (line 86) | def select_top_images(self, images: list[dict], k: int = 2) -> list[str]: FILE: gpt_researcher/skills/context_manager.py class ContextManager (line 18) | class ContextManager: method __init__ (line 29) | def __init__(self, researcher): method get_similar_content_by_query (line 37) | async def get_similar_content_by_query(self, query: str, pages: list) ... method get_similar_content_by_query_with_vectorstore (line 65) | async def get_similar_content_by_query_with_vectorstore(self, query: s... method get_similar_written_contents_by_draft_section_titles (line 88) | async def get_similar_written_contents_by_draft_section_titles( method __get_similar_written_contents_by_query (line 120) | async def __get_similar_written_contents_by_query( FILE: gpt_researcher/skills/curator.py class SourceCurator (line 15) | class SourceCurator: method __init__ (line 25) | def __init__(self, researcher): method curate_sources (line 33) | async def curate_sources( FILE: gpt_researcher/skills/deep_research.py function count_words (line 17) | def count_words(text) -> int: function trim_context_to_word_limit (line 23) | def trim_context_to_word_limit(context_list: List[str], max_words: int =... class ResearchProgress (line 39) | class ResearchProgress: method __init__ (line 40) | def __init__(self, total_depth: int, total_breadth: int): class DeepResearchSkill (line 50) | class DeepResearchSkill: method __init__ (line 51) | def __init__(self, researcher): method generate_search_queries (line 65) | async def generate_search_queries(self, query: str, num_queries: int =... method generate_research_plan (line 99) | async def generate_research_plan(self, query: str, num_questions: int ... method process_research_results (line 147) | async def process_research_results(self, query: str, context: str, num... method deep_research (line 199) | async def deep_research( method run (line 363) | async def run(self, on_progress=None) -> str: FILE: gpt_researcher/skills/image_generator.py class ImageGenerator (line 20) | class ImageGenerator: method __init__ (line 33) | def __init__(self, researcher): method _init_provider (line 48) | def _init_provider(self): method is_enabled (line 65) | def is_enabled(self) -> bool: method plan_and_generate_images (line 73) | async def plan_and_generate_images( method _plan_image_concepts (line 178) | async def _plan_image_concepts( method analyze_report_for_images (line 267) | async def analyze_report_for_images( method _extract_sections (line 320) | def _extract_sections(self, report: str) -> List[Dict[str, Any]]: method _build_analysis_prompt (line 367) | def _build_analysis_prompt( method _parse_analysis_response (line 419) | def _parse_analysis_response( method generate_images_for_report (line 463) | async def generate_images_for_report( method _embed_images_in_report (line 583) | def _embed_images_in_report( method get_generated_images (line 627) | def get_generated_images(self) -> List[Dict[str, Any]]: method process_image_placeholders (line 635) | async def process_image_placeholders( FILE: gpt_researcher/skills/researcher.py class ResearchConductor (line 21) | class ResearchConductor: method __init__ (line 34) | def __init__(self, researcher): method plan_research (line 48) | async def plan_research(self, query, query_domains=None): method conduct_research (line 89) | async def conduct_research(self): method _get_context_by_urls (line 213) | async def _get_context_by_urls(self, urls): method _get_context_by_vectorstore (line 233) | async def _get_context_by_vectorstore(self, query, filter: dict | None... method _get_context_by_web_search (line 266) | async def _get_context_by_web_search(self, query, scraped_data: list |... method _get_mcp_strategy (line 367) | def _get_mcp_strategy(self) -> str: method _execute_mcp_research_for_queries (line 393) | async def _execute_mcp_research_for_queries(self, queries: list, mcp_r... method _process_sub_query (line 449) | async def _process_sub_query(self, sub_query: str, scraped_data: list ... method _execute_mcp_research (line 580) | async def _execute_mcp_research(self, retriever, query): method _combine_mcp_and_web_context (line 654) | def _combine_mcp_and_web_context(self, mcp_context: list, web_context:... method _process_sub_query_with_vectorstore (line 707) | async def _process_sub_query_with_vectorstore(self, sub_query: str, fi... method _get_new_urls (line 728) | async def _get_new_urls(self, url_set_input): method _search_relevant_source_urls (line 751) | async def _search_relevant_source_urls(self, query, query_domains: lis... method _scrape_data_by_urls (line 784) | async def _scrape_data_by_urls(self, sub_query, query_domains: list | ... method _search (line 816) | async def _search(self, retriever, query): method _extract_content (line 906) | async def _extract_content(self, results): method _summarize_content (line 943) | async def _summarize_content(self, query, content): method _update_search_progress (line 967) | async def _update_search_progress(self, current, total): FILE: gpt_researcher/skills/writer.py class ReportGenerator (line 20) | class ReportGenerator: method __init__ (line 31) | def __init__(self, researcher): method write_report (line 49) | async def write_report(self, existing_headers: list = [], relevant_wri... method write_report_conclusion (line 125) | async def write_report_conclusion(self, report_content: str) -> str: method write_introduction (line 164) | async def write_introduction(self): method get_subtopics (line 195) | async def get_subtopics(self): method get_draft_section_titles (line 224) | async def get_draft_section_titles(self, current_subtopic: str): FILE: gpt_researcher/utils/costs.py function estimate_llm_cost (line 18) | def estimate_llm_cost(input_content: str, output_content: str) -> float: function estimate_embedding_cost (line 38) | def estimate_embedding_cost(model: str, docs: list) -> float: FILE: gpt_researcher/utils/enum.py class ReportType (line 6) | class ReportType(Enum): class ReportSource (line 30) | class ReportSource(Enum): class Tone (line 54) | class Tone(Enum): class PromptFamily (line 94) | class PromptFamily(Enum): FILE: gpt_researcher/utils/llm.py function get_llm (line 27) | def get_llm(llm_provider: str, **kwargs): function create_chat_completion (line 41) | async def create_chat_completion( function construct_subtopics (line 138) | async def construct_subtopics( FILE: gpt_researcher/utils/logger.py function get_formatted_logger (line 11) | def get_formatted_logger(): class ColourizedFormatter (line 40) | class ColourizedFormatter(logging.Formatter): method __init__ (line 58) | def __init__( method color_level_name (line 71) | def color_level_name(self, level_name: str, level_no: int) -> str: method should_use_colors (line 78) | def should_use_colors(self) -> bool: method formatMessage (line 81) | def formatMessage(self, record: logging.LogRecord) -> str: class DefaultFormatter (line 94) | class DefaultFormatter(ColourizedFormatter): method should_use_colors (line 95) | def should_use_colors(self) -> bool: FILE: gpt_researcher/utils/logging_config.py class JSONResearchHandler (line 7) | class JSONResearchHandler: method __init__ (line 8) | def __init__(self, json_file): method log_event (line 22) | def log_event(self, event_type: str, data: dict): method update_content (line 30) | def update_content(self, key: str, value): method _save_json (line 34) | def _save_json(self): function setup_research_logging (line 38) | def setup_research_logging(): function get_research_logger (line 78) | def get_research_logger(): function get_json_handler (line 81) | def get_json_handler(): FILE: gpt_researcher/utils/rate_limiter.py class GlobalRateLimiter (line 13) | class GlobalRateLimiter: method __new__ (line 24) | def __new__(cls): method __init__ (line 30) | def __init__(self): method get_lock (line 45) | def get_lock(cls): method configure (line 51) | def configure(self, rate_limit_delay: float): method wait_if_needed (line 60) | async def wait_if_needed(self): method reset (line 81) | def reset(self): function get_global_rate_limiter (line 90) | def get_global_rate_limiter() -> GlobalRateLimiter: FILE: gpt_researcher/utils/tools.py function create_chat_completion_with_tools (line 20) | async def create_chat_completion_with_tools( function create_search_tool (line 198) | def create_search_tool(search_function: Callable[[str], Dict]) -> Callable: function create_custom_tool (line 242) | def create_custom_tool( function get_available_providers_with_tools (line 288) | def get_available_providers_with_tools() -> List[str]: function supports_tools (line 307) | def supports_tools(provider: str) -> bool: FILE: gpt_researcher/utils/validators.py class Subtopic (line 8) | class Subtopic(BaseModel): class Subtopics (line 17) | class Subtopics(BaseModel): FILE: gpt_researcher/utils/workers.py class WorkerPool (line 8) | class WorkerPool: method __init__ (line 9) | def __init__(self, max_workers: int, rate_limit_delay: float = 0.0): method throttle (line 36) | async def throttle(self): FILE: gpt_researcher/vector_store/vector_store.py class VectorStoreWrapper (line 10) | class VectorStoreWrapper: method __init__ (line 14) | def __init__(self, vector_store : VectorStore): method load (line 17) | def load(self, documents): method _create_langchain_documents (line 26) | def _create_langchain_documents(self, data: List[Dict[str, str]]) -> L... method _split_documents (line 30) | def _split_documents(self, documents: List[Document], chunk_size: int ... method asimilarity_search (line 40) | async def asimilarity_search(self, query, k, filter): FILE: json_schema_generator.py class UserSchema (line 5) | class UserSchema(BaseModel): function generate_structured_json (line 12) | def generate_structured_json(schema: BaseModel, data: Dict[str, Any]) ->... FILE: multi_agents/agents/editor.py class EditorAgent (line 13) | class EditorAgent: method __init__ (line 16) | def __init__(self, websocket=None, stream_output=None, tone=None, head... method plan_research (line 22) | async def plan_research(self, research_state: Dict[str, any]) -> Dict[... method run_parallel_research (line 52) | async def run_parallel_research(self, research_state: Dict[str, any]) ... method _create_planning_prompt (line 79) | def _create_planning_prompt(self, initial_research: str, include_human... method _format_planning_instructions (line 96) | def _format_planning_instructions(self, initial_research: str, include... method _initialize_agents (line 118) | def _initialize_agents(self) -> Dict[str, any]: method _create_workflow (line 126) | def _create_workflow(self) -> StateGraph: method _log_parallel_research (line 146) | def _log_parallel_research(self, queries: List[str]) -> None: method _create_task_input (line 161) | def _create_task_input(self, research_state: Dict[str, any], query: st... FILE: multi_agents/agents/human.py class HumanAgent (line 4) | class HumanAgent: method __init__ (line 5) | def __init__(self, websocket=None, stream_output=None, headers=None): method review_plan (line 10) | async def review_plan(self, research_state: dict): FILE: multi_agents/agents/orchestrator.py class ChiefEditorAgent (line 19) | class ChiefEditorAgent: method __init__ (line 22) | def __init__(self, task: dict, websocket=None, stream_output=None, ton... method _generate_task_id (line 31) | def _generate_task_id(self): method _create_output_directory (line 35) | def _create_output_directory(self): method _initialize_agents (line 43) | def _initialize_agents(self): method _create_workflow (line 52) | def _create_workflow(self, agents): method _add_workflow_edges (line 68) | def _add_workflow_edges(self, workflow): method init_research_team (line 83) | def init_research_team(self): method _log_research_start (line 88) | async def _log_research_start(self): method run_research_task (line 95) | async def run_research_task(self, task_id=None): FILE: multi_agents/agents/publisher.py class PublisherAgent (line 9) | class PublisherAgent: method __init__ (line 10) | def __init__(self, output_dir: str, websocket=None, stream_output=None... method publish_research_report (line 16) | async def publish_research_report(self, research_state: dict, publish_... method generate_layout (line 22) | def generate_layout(self, research_state: dict): method write_report_by_formats (line 55) | async def write_report_by_formats(self, layout:str, publish_formats: d... method run (line 63) | async def run(self, research_state: dict): FILE: multi_agents/agents/researcher.py class ResearchAgent (line 6) | class ResearchAgent: method __init__ (line 7) | def __init__(self, websocket=None, stream_output=None, tone=None, head... method research (line 13) | async def research(self, query: str, research_report: str = "research_... method run_subtopic_research (line 25) | async def run_subtopic_research(self, parent_query: str, subtopic: str... method run_initial_research (line 34) | async def run_initial_research(self, research_state: dict): method run_depth_research (line 46) | async def run_depth_research(self, draft_state: dict): FILE: multi_agents/agents/reviewer.py class ReviewerAgent (line 9) | class ReviewerAgent: method __init__ (line 10) | def __init__(self, websocket=None, stream_output=None, headers=None): method review_draft (line 15) | async def review_draft(self, draft_state: dict): method run (line 63) | async def run(self, draft_state: dict): FILE: multi_agents/agents/reviser.py class ReviserAgent (line 15) | class ReviserAgent: method __init__ (line 16) | def __init__(self, websocket=None, stream_output=None, headers=None): method revise_draft (line 21) | async def revise_draft(self, draft_state: dict): method run (line 54) | async def run(self, draft_state: dict): FILE: multi_agents/agents/utils/file_formats.py function write_to_file (line 7) | async def write_to_file(filename: str, text: str) -> None: function write_text_to_md (line 24) | async def write_text_to_md(text: str, path: str) -> str: function write_md_to_pdf (line 40) | async def write_md_to_pdf(text: str, path: str) -> str: function write_md_to_word (line 72) | async def write_md_to_word(text: str, path: str) -> str: FILE: multi_agents/agents/utils/llms.py function call_model (line 10) | async def call_model( FILE: multi_agents/agents/utils/utils.py function sanitize_filename (line 3) | def sanitize_filename(filename: str) -> str: FILE: multi_agents/agents/utils/views.py class AgentColor (line 5) | class AgentColor(Enum): function print_agent_output (line 15) | def print_agent_output(output:str, agent: str="RESEARCHER"): FILE: multi_agents/agents/writer.py class WriterAgent (line 16) | class WriterAgent: method __init__ (line 17) | def __init__(self, websocket=None, stream_output=None, headers=None): method get_headers (line 22) | def get_headers(self, research_state: dict): method write_sections (line 32) | async def write_sections(self, research_state: dict): method revise_headers (line 69) | async def revise_headers(self, task: dict, headers: dict): method run (line 94) | async def run(self, research_state: dict): FILE: multi_agents/main.py function open_task (line 17) | def open_task(): function run_research_task (line 40) | async def run_research_task(query, websocket=None, stream_output=None, t... function main (line 52) | async def main(): FILE: multi_agents/memory/draft.py class DraftState (line 5) | class DraftState(TypedDict): FILE: multi_agents/memory/research.py class ResearchState (line 5) | class ResearchState(TypedDict): FILE: multi_agents_ag2/agents/editor.py class EditorAgent (line 8) | class EditorAgent: method __init__ (line 11) | def __init__(self, websocket=None, stream_output=None, tone=None, head... method plan_research (line 17) | async def plan_research(self, research_state: Dict[str, any]) -> Dict[... method _create_planning_prompt (line 43) | def _create_planning_prompt( method _format_planning_instructions (line 65) | def _format_planning_instructions( FILE: multi_agents_ag2/agents/orchestrator.py class ChiefEditorAgent (line 20) | class ChiefEditorAgent: method __init__ (line 23) | def __init__(self, task: dict, websocket=None, stream_output=None, ton... method _generate_task_id (line 33) | def _generate_task_id(self) -> int: method _create_output_directory (line 36) | def _create_output_directory(self) -> str: method _llm_config (line 43) | def _llm_config(self) -> Dict[str, Any]: method _initialize_ag2_team (line 55) | def _initialize_ag2_team(self): method _chat (line 113) | def _chat(self, agent_key: str, message: str) -> None: method _log (line 119) | async def _log(self, agent_key: str, message: str, stream_tag: str = "... method _initialize_agents (line 126) | def _initialize_agents(self) -> Dict[str, Any]: method _run_section (line 137) | async def _run_section(self, agents: Dict[str, Any], topic: str, title... method _run_parallel_research (line 165) | async def _run_parallel_research( method run_research_task (line 171) | async def run_research_task(self, task_id: Optional[str] = None) -> Di... FILE: multi_agents_ag2/main.py function open_task (line 15) | def open_task() -> dict: function run_research_task (line 37) | async def run_research_task(query, websocket=None, stream_output=None, t... function main (line 50) | async def main(): FILE: tests/documents-report-source.py function test_gpt_researcher (line 28) | async def test_gpt_researcher(report_type): FILE: tests/gptr-logs-handler.py function run (line 7) | async def run() -> None: FILE: tests/report-types.py function test_gpt_researcher (line 18) | async def test_gpt_researcher(report_type): FILE: tests/research_test.py function get_report (line 23) | async def get_report(query: str, report_type: str, sources: list) -> str: FILE: tests/test-openai-llm.py function main (line 7) | async def main(): function test_llm (line 21) | async def test_llm(llm): FILE: tests/test-your-embeddings.py function main (line 8) | async def main(): FILE: tests/test-your-llm.py function main (line 7) | async def main(): FILE: tests/test-your-retriever.py function test_scrape_data_by_query (line 10) | async def test_scrape_data_by_query(): FILE: tests/test_logging.py function test_custom_logs_handler (line 9) | async def test_custom_logs_handler(): function test_content_update (line 38) | async def test_content_update(): FILE: tests/test_logging_output.py class TestWebSocket (line 12) | class TestWebSocket(WebSocket): method __init__ (line 13) | def __init__(self): method __bool__ (line 17) | def __bool__(self): method accept (line 20) | async def accept(self): method send_json (line 24) | async def send_json(self, event): function test_log_output_file (line 29) | async def test_log_output_file(): FILE: tests/test_logs.py function test_logs_creation (line 11) | def test_logs_creation(): FILE: tests/test_mcp.py function get_mcp_config (line 40) | def get_mcp_config(): function get_github_mcp_config (line 53) | def get_github_mcp_config(): function setup_environment (line 66) | def setup_environment(): function test_web_search_mcp (line 93) | async def test_web_search_mcp(): function test_github_mcp (line 155) | async def test_github_mcp(): function main (line 217) | async def main(): FILE: tests/test_quick_search.py class TestQuickSearch (line 7) | class TestQuickSearch(unittest.TestCase): method test_quick_search_no_summary (line 12) | def test_quick_search_no_summary(self, mock_embeddings, mock_create_ch... method test_quick_search_with_summary (line 30) | def test_quick_search_with_summary(self, mock_embeddings, mock_create_... FILE: tests/test_researcher_logging.py function test_researcher_logging (line 16) | async def test_researcher_logging(): # Renamed function to be more spec... FILE: tests/test_security_fix.py class TestSecureFilename (line 28) | class TestSecureFilename: method test_basic_filename (line 31) | def test_basic_filename(self): method test_path_traversal_attacks (line 36) | def test_path_traversal_attacks(self): method test_null_byte_injection (line 47) | def test_null_byte_injection(self): method test_control_characters (line 54) | def test_control_characters(self): method test_unicode_normalization (line 60) | def test_unicode_normalization(self): method test_drive_letters_windows (line 68) | def test_drive_letters_windows(self): method test_reserved_names_windows (line 73) | def test_reserved_names_windows(self): method test_empty_filename (line 84) | def test_empty_filename(self): method test_filename_length_limit (line 95) | def test_filename_length_limit(self): method test_leading_dots_spaces (line 102) | def test_leading_dots_spaces(self): class TestValidateFilePath (line 109) | class TestValidateFilePath: method test_valid_path (line 112) | def test_valid_path(self): method test_path_traversal_blocked (line 119) | def test_path_traversal_blocked(self): method test_symlink_traversal_blocked (line 128) | def test_symlink_traversal_blocked(self): class TestHandleFileUpload (line 146) | class TestHandleFileUpload: method mock_file (line 150) | def mock_file(self): method temp_doc_path (line 158) | def temp_doc_path(self): method test_normal_file_upload (line 165) | async def test_normal_file_upload(self, mock_file, temp_doc_path): method test_malicious_filename_upload (line 193) | async def test_malicious_filename_upload(self, temp_doc_path): method test_empty_filename_upload (line 206) | async def test_empty_filename_upload(self, temp_doc_path): method test_file_conflict_handling (line 218) | async def test_file_conflict_handling(self, mock_file, temp_doc_path): class TestHandleFileDeletion (line 248) | class TestHandleFileDeletion: method temp_doc_path (line 252) | def temp_doc_path(self): method test_normal_file_deletion (line 259) | async def test_normal_file_deletion(self, temp_doc_path): method test_malicious_filename_deletion (line 273) | async def test_malicious_filename_deletion(self, temp_doc_path): method test_nonexistent_file_deletion (line 281) | async def test_nonexistent_file_deletion(self, temp_doc_path): method test_directory_deletion_blocked (line 289) | async def test_directory_deletion_blocked(self, temp_doc_path): class TestSecurityIntegration (line 302) | class TestSecurityIntegration: method test_attack_vectors_blocked (line 305) | def test_attack_vectors_blocked(self): method test_legitimate_files_allowed (line 331) | def test_legitimate_files_allowed(self): FILE: tests/vector-store.py function load_document (line 102) | def load_document(): function create_vectorstore (line 108) | def create_vectorstore(documents: List[Document]): function test_gpt_researcher_with_vector_store (line 113) | async def test_gpt_researcher_with_vector_store(): function test_store_in_vector_store_web (line 142) | async def test_store_in_vector_store_web(): function test_store_in_vector_store_urls (line 162) | async def test_store_in_vector_store_urls(): function test_store_in_vector_store_langchain_docs (line 181) | async def test_store_in_vector_store_langchain_docs(): function test_store_in_vector_store_locals (line 201) | async def test_store_in_vector_store_locals(): function test_store_in_vector_store_hybrids (line 220) | async def test_store_in_vector_store_hybrids():