11import os
2- from typing import List
3- from dotenv import load_dotenv
42
3+ from dotenv import load_dotenv
54from llama_index .core .agent .workflow import FunctionAgent
6- from llama_index .llms .openai import OpenAI
75from llama_index .indices .managed .llama_cloud import LlamaCloudIndex
6+ from llama_index .llms .openai import OpenAI
87
98load_dotenv ()
109
1312 name = os .getenv ("LLAMACLOUD_INDEX_1_NAME" ),
1413 project_name = os .getenv ("LLAMACLOUD_PROJECT_NAME" ),
1514 organization_id = os .getenv ("LLAMACLOUD_ORG_ID" ),
16- api_key = os .getenv ("LLAMACLOUD_API_KEY" )
15+ api_key = os .getenv ("LLAMACLOUD_API_KEY" ),
1716)
1817
1918personal_preferences_index = LlamaCloudIndex (
2019 name = os .getenv ("LLAMACLOUD_INDEX_2_NAME" ),
2120 project_name = os .getenv ("LLAMACLOUD_PROJECT_NAME" ),
2221 organization_id = os .getenv ("LLAMACLOUD_ORG_ID" ),
23- api_key = os .getenv ("LLAMACLOUD_API_KEY" )
22+ api_key = os .getenv ("LLAMACLOUD_API_KEY" ),
2423)
2524
2625llm = OpenAI (api_key = os .getenv ("OPENAI_API_KEY" ))
2928def search_company_policy (query : str ) -> str :
3029 """
3130 Search the company policy index for travel rates, guidelines, and company policies.
32-
31+
3332 Args:
3433 query (str): The search query about company travel policies, rates, or guidelines
35-
34+
3635 Returns:
3736 str: Relevant information from company policy documents
3837 """
3938 try :
4039 retriever = company_policy_index .as_retriever ()
4140 retrieved_nodes = retriever .retrieve (query )
42-
41+
4342 if not retrieved_nodes :
4443 return "No relevant company policy information found for your query."
45-
44+
4645 # Format the search results
4746 results = []
4847 for i , node in enumerate (retrieved_nodes [:3 ], 1 ): # Limit to top 3 results
4948 results .append (f"Result { i } :" )
5049 results .append (f" Content: { node .text [:300 ]} ..." )
5150 results .append (f" Relevance Score: { node .score :.4f} " )
52- if hasattr (node .node , ' metadata' ):
51+ if hasattr (node .node , " metadata" ):
5352 metadata = node .node .metadata
54- if ' file_name' in metadata :
53+ if " file_name" in metadata :
5554 results .append (f" Source: { metadata ['file_name' ]} " )
56- if ' page_label' in metadata :
55+ if " page_label" in metadata :
5756 results .append (f" Page: { metadata ['page_label' ]} " )
5857 results .append ("" )
59-
58+
6059 return "\n " .join (results )
6160 except Exception as e :
6261 return f"Error searching company policy index: { str (e )} "
@@ -65,34 +64,34 @@ def search_company_policy(query: str) -> str:
6564def search_personal_preferences (query : str ) -> str :
6665 """
6766 Search the personal preferences index for user's travel preferences and requirements.
68-
67+
6968 Args:
7069 query (str): The search query about personal travel preferences or requirements
71-
70+
7271 Returns:
7372 str: Relevant information from personal preference documents
7473 """
7574 try :
7675 retriever = personal_preferences_index .as_retriever ()
7776 retrieved_nodes = retriever .retrieve (query )
78-
77+
7978 if not retrieved_nodes :
8079 return "No relevant personal preference information found for your query."
81-
80+
8281 # Format the search results
8382 results = []
8483 for i , node in enumerate (retrieved_nodes [:3 ], 1 ): # Limit to top 3 results
8584 results .append (f"Result { i } :" )
8685 results .append (f" Content: { node .text [:300 ]} ..." )
8786 results .append (f" Relevance Score: { node .score :.4f} " )
88- if hasattr (node .node , ' metadata' ):
87+ if hasattr (node .node , " metadata" ):
8988 metadata = node .node .metadata
90- if ' file_name' in metadata :
89+ if " file_name" in metadata :
9190 results .append (f" Source: { metadata ['file_name' ]} " )
92- if ' page_label' in metadata :
91+ if " page_label" in metadata :
9392 results .append (f" Page: { metadata ['page_label' ]} " )
9493 results .append ("" )
95-
94+
9695 return "\n " .join (results )
9796 except Exception as e :
9897 return f"Error searching personal preferences index: { str (e )} "
@@ -101,18 +100,18 @@ def search_personal_preferences(query: str) -> str:
101100def get_travel_recommendation (query : str ) -> str :
102101 """
103102 Get travel recommendations based on company policies and personal preferences.
104-
103+
105104 Args:
106105 query (str): The travel-related query or request for recommendations
107-
106+
108107 Returns:
109108 str: Travel recommendations combining policy and preference information
110109 """
111110 try :
112111 # Search both indexes for comprehensive information
113112 policy_info = search_company_policy (query )
114113 preference_info = search_personal_preferences (query )
115-
114+
116115 recommendation = f"""
117116Travel Recommendation Analysis:
118117
@@ -124,22 +123,26 @@ def get_travel_recommendation(query: str) -> str:
124123
125124Based on the above information, here are the key considerations for your travel request.
126125 """
127-
126+
128127 return recommendation .strip ()
129128 except Exception as e :
130129 return f"Error generating travel recommendation: { str (e )} "
131130
132131
133132# Create the FunctionAgent with our tools
134133agent = FunctionAgent (
135- tools = [search_company_policy , search_personal_preferences , get_travel_recommendation ],
134+ tools = [
135+ search_company_policy ,
136+ search_personal_preferences ,
137+ get_travel_recommendation ,
138+ ],
136139 llm = llm ,
137- system_prompt = """You are a helpful travel assistant that can search through company travel policies and personal preferences to provide comprehensive travel guidance.
140+ system_prompt = """You are a helpful travel assistant that can search through company travel policies and personal preferences to provide comprehensive travel guidance.
138141
139142You have access to three main functions:
1401431. search_company_policy - Search for company travel rates, guidelines, and policies
141- 2. search_personal_preferences - Search for user's personal travel preferences and requirements
144+ 2. search_personal_preferences - Search for user's personal travel preferences and requirements
1421453. get_travel_recommendation - Get comprehensive travel recommendations combining both sources
143146
144- Use these tools to help users with travel-related queries, ensuring you provide accurate information from both company policies and personal preferences when relevant."""
145- )
147+ Use these tools to help users with travel-related queries, ensuring you provide accurate information from both company policies and personal preferences when relevant.""" ,
148+ )
0 commit comments