""" File Search Example This example demonstrates how to enable file search capabilities for an agent by attaching a file storage with automatic vector store processing. Key Features: - Automatic file processing and vector store creation from a files_folder directory - Smart tool assignment based on file types: * CodeInterpreterTool for code and data files * FileSearchTool for text documents and PDFs - Incremental file processing on agent reinitialization How it works: 1. Files from the specified directory are processed and added to a vector store 2. The files folder is automatically renamed to include the vector store ID 3. On subsequent runs, the system scans for new files and adds them to the existing store 4. The agent can search across all files and provide citations for its answers Note: You don't need to update the agent's files_folder parameter when the folder is renamed. """ import asyncio import os import sys # Path setup for standalone examples current_dir = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, current_dir) sys.path.insert(0, os.path.abspath(os.path.join(current_dir, "..", "src"))) from agents import ModelSettings, RunConfig # noqa: E402 from utils import temporary_files_folder # noqa: E402 from agency_swarm import Agency, Agent # noqa: E402 from agency_swarm.utils.citation_extractor import display_citations, extract_vector_store_citations # noqa: E402 async def main(): """Demonstrate FileSearch functionality with citations.""" print("Simple FileSearch Example") print("=" * 30) with temporary_files_folder("data") as docs_dir: all_files = [f for f in docs_dir.iterdir() if f.is_file()] print(f"Using temporary files directory: {docs_dir}") print(f"Found {len(all_files)} file(s) ready for processing") search_agent = Agent( name="SearchAgent", instructions=( "You are a document search assistant. Always use your FileSearch tool to locate answers and provide clear responses with citations. " "You are allowed to share all data found within documents with the user." ), files_folder=str(docs_dir), include_search_results=True, model="gpt-5.4-mini", model_settings=ModelSettings(tool_choice="file_search"), tool_use_behavior="stop_on_first_tool", ) agency = Agency( search_agent, shared_instructions="Demonstrate FileSearch with citations.", ) print("Processing files...") await asyncio.sleep(5) run_config = RunConfig(model_settings=ModelSettings(tool_choice="file_search")) message = "What is the badge number for Marcus Chen?" print(f"\nā“ Query: {message}") response = await agency.get_response(message, run_config=run_config) print(f"Answer: {response.final_output}") citations = extract_vector_store_citations(response) display_citations(citations, "vector store") if "7401" in response.final_output: print("āœ… Correct answer found!") else: print("āŒ Correct answer not found!") follow_up = "Extract data from the sample_report.pdf file" print(f"\nā“ Query: {follow_up}") response = await agency.get_response(follow_up, run_config=run_config) print(f"šŸ¤– Answer: {response.final_output}") print("\nKey Points:") print(" • Files from the given folder are processed and added to a vector store") print(" • Agent is capable of analyzing all files from the given folder") print(" • Use citations to find files that were used to answer the query") if __name__ == "__main__": if os.name == "nt": asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) asyncio.run(main())