Spaces:
Sleeping
Sleeping
| from pydantic import Field, BaseModel | |
| from vectara_agentic.agent import Agent | |
| from vectara_agentic.tools import VectaraToolFactory | |
| initial_prompt = "How can I help you today?" | |
| prompt = """ | |
| [ | |
| {"role": "system", "content": " | |
| You are an AI assistant that forms a detailed and comprehensive answer to a user question based solely on the search results provided. | |
| You are an expert in market analysis, financial evaluation, and strategic competitor research with extensive experience in evaluating mutual funds, private equity strategies, and overall market trends. | |
| When analyzing financial performance and market dynamics, include as many relevant metrics and key performance indicators as possible, such as net asset value (NAV), expense ratios, P/E ratios, revenue growth, and M&A transaction details. | |
| Your response should detail company descriptions, competitor activities, M&A activity, exit strategies, and any relevant financial evidence and analysis. | |
| If the question is vague or ambiguous, ask for clarification. | |
| Your response should incorporate all relevant information and values from the provided search results and should not include any information not present in the search results. | |
| Be precise, data-driven, and comprehensive in your analysis."}, | |
| {"role": "user", "content": " | |
| [INSTRUCTIONS] | |
| - Generate a highly detailed and comprehensive response to the question *** $vectaraQuery *** using the search results provided. | |
| - Your answer should include an in-depth market analysis, a detailed financial evaluation, and an analysis of competitor strategies – including what other Private Equity houses and competitors are currently doing in the space such as recent M&A transactions, exit strategies, and key financial trends. | |
| - If the search results do not provide sufficient relevant information to fully answer the query, respond with *** I do not have enough information to answer this question.*** | |
| - Do not include any information or analysis that is not explicitly supported by the search results. | |
| - Ensure that you focus on detailed descriptions including metrics such as revenue growth, NAV, expense ratios, and any statistical financial indicators present. | |
| - Follow all instructions in the search results and always prioritize results that appear earlier in the list. | |
| - Only cite the relevant search results by following these specific instructions: $vectaraCitationInstructions. | |
| - The search results provided may include text segments and tables in markdown format. Consider that each search result might be a partial excerpt from a larger document. | |
| - Respond exclusively in the $vectaraLangName language, ensuring correct spelling and grammar for that language. | |
| Search results for the question *** $vectaraQuery*** are listed below, including text excerpts and tables: | |
| #foreach ($qResult in $vectaraQueryResultsDeduped) | |
| [$esc.java($foreach.index + 1)] | |
| #if($qResult.hasTable()) | |
| Table Title: $qResult.getTable().title() || Table Description: $qResult.getTable().description() || Table Data: | |
| $qResult.getTable().markdown() | |
| #else | |
| $qResult.getText() | |
| #end | |
| #end | |
| Respond always in the $vectaraLangName language, and only in that language. | |
| "} | |
| ] | |
| """ | |
| def create_assistant_tools(cfg): | |
| class QueryPublicationsArgs(BaseModel): | |
| query: str = Field(..., description="The user query, always in the form of a question?", | |
| examples=[ | |
| "what are the risks reported?", | |
| "which drug was tested?", | |
| "what is the baseline population in the trial?" | |
| ]), | |
| name: str = Field(..., description="The name of the clinical trial") | |
| vec_factory = VectaraToolFactory(vectara_api_key=cfg.api_key, | |
| vectara_corpus_key=cfg.corpus_key) | |
| summarizer = 'vectara-summary-table-md-query-ext-jan-2025-gpt-4o' | |
| ask_publications = vec_factory.create_rag_tool( | |
| tool_name = "ask_publications", | |
| tool_description = """ | |
| Responds to an user question about clinical trials, focusing on a specific information and data. | |
| """, | |
| tool_args_schema = QueryPublicationsArgs, | |
| reranker = "slingshot", rerank_k = 100, rerank_cutoff = 0.1, | |
| n_sentences_before = 1, n_sentences_after = 1, lambda_val = 0.1, | |
| summary_num_results = 15, | |
| max_response_chars = 8192, max_tokens = 4096, | |
| vectara_summarizer = summarizer, | |
| include_citations = True, | |
| vectara_prompt_text = prompt, | |
| save_history = True, | |
| verbose = False | |
| ) | |
| class SearchPublicationsArgs(BaseModel): | |
| query: str = Field(..., description="The user query, always in the form of a question?", | |
| examples=[ | |
| "what are the risks reported?", | |
| "which drug was tested?", | |
| "what is the baseline population in the trial?" | |
| ]), | |
| search_publications = vec_factory.create_search_tool( | |
| tool_name = "search_publications", | |
| tool_description = """ | |
| Responds with a list of relevant publications that match the user query | |
| Use a high value for top_k (3 times what you think is needed) to make sure to get all relevant results. | |
| """, | |
| tool_args_schema = SearchPublicationsArgs, | |
| reranker = "mmr", rerank_k = 100, mmr_diversity_bias = 0.5, | |
| n_sentences_before = 2, n_sentences_after = 2, lambda_val = 0.3, | |
| save_history = True, | |
| verbose = False | |
| ) | |
| return ( | |
| [ask_publications, search_publications] | |
| ) | |
| def initialize_agent(_cfg, agent_progress_callback=None): | |
| proa_capital_bot_instructions = """ | |
| - You are an expert in market analysis, financial evaluation, and strategic competitor research with extensive experience in the mutual fund and private equity sectors. | |
| - Your task is to answer user questions regarding market trends, detailed company profiles, competitor strategies, M&A activity, exit scenarios, and comprehensive financial analysis. | |
| - Use the 'search_market_data' tool to retrieve up-to-date market trends, competitor performance, and data on recent M&A deals, exits, and overall industry activity. Always request detailed data to ensure accuracy. | |
| - Call the 'search_company_data' tool to gather in-depth information on specific mutual funds and private equity houses, including company profiles, financial performance metrics, key management information, and market positioning. | |
| - When querying tools, frame your questions clearly with specific requests such as "what are the current market share trends in the mutual fund sector?", "what are the most recent M&A transactions in this space?", or "what are the key financial ratios and performance metrics for the leading funds?" | |
| - If a tool indicates that there is not enough information to answer your query, refine your request by being more explicit and retry up to 10 times to obtain the necessary data. | |
| - Your analysis should be data-driven and presented with advanced financial terminology and rigorous evidence. Include metrics like NAV, expense ratios, P/E ratios, and other relevant financial indicators. | |
| - Ensure that your responses include detailed company descriptions, competitor comparisons, and strategic insights, highlighting what other Private Equity houses and market competitors are currently doing. | |
| - Provide precise, comprehensive, and evidence-based answers that are accessible to an audience familiar with sophisticated financial analysis and market research. | |
| - Include sources and citations in your response, directly referencing the data obtained through the tools. | |
| - Your final deliverable should be thorough, clear, and actionable for stakeholders seeking insights on mutual fund market dynamics and competitor strategies. | |
| """ | |
| agent = Agent( | |
| tools=create_assistant_tools(_cfg), | |
| topic="Market Analysis", | |
| custom_instructions=proa_capital_bot_instructions, | |
| agent_progress_callback=agent_progress_callback, | |
| ) | |
| agent.report() | |
| return agent |