Text to Python Objects via a LLM Function Call
APACHE-2.0 License
It is designed to make it easy to use OpenAI models e.g. GPT3.5-Turbo and GPT4 with existing Python functions by adding a simple decorator.
AgentAI is a simple Python library with these ethos:
Unlike some libraries, AgentAI does NOT require you to learn a new syntax. No chains!
Instead, it empowers you to add OpenAI functions using Python decorators and then call them directly from your code. This makes it easy to integrate AgentAI with your existing projects.
Install AgentAI using pip:
pip install agentai
from agentai.api import chat_complete, chat_complete_execute_fn
from agentai.openai_function import tool, ToolRegistry
from agentai.conversation import Conversation
from enum import Enum
weather_registry = ToolRegistry()
@tool
decoratorclass TemperatureUnit(Enum):
celsius = "celsius"
fahrenheit = "fahrenheit"
@tool(registry=weather_registry)
def get_current_weather(location: str, format: TemperatureUnit) -> str:
"""
Get the current weather
Args:
location (str): The city and state, e.g. San Francisco, CA
format (str): The temperature unit to use. Infer this from the users location.
Returns:
str: The current weather
"""
# Your function implementation goes here.
return ""
Note that agentai
automatically parses the Python Enum type (TemperatureUnit) and passes it to the model as a JSONSchema Enum. This saves you time in writing boilerplate JSONSchema which is required by OpenAI API.
conversation = Conversation(model=GPT_MODEL)
conversation.add_message("user", "what is the weather like today?")
chat_complete
function to get a response from the modelchat_response = chat_complete(conversation.conversation_history, function_registry=weather_registry, model=GPT_MODEL)
Output:
{'role': 'assistant',
'content': 'In which city would you like to know the current weather?'}
chat_complete
againOnce the user provides the required information, the model can generate the function arguments:
conversation.add_message("user", "I'm in Bengaluru, India")
chat_response = chat_complete(conversation.conversation_history, function_registry=weather_registry, model=GPT_MODEL)
eval(chat_response.json()["choices"][0]["message"]["function_call"]["arguments"])
Output:
{'location': 'Bengaluru, India', 'format': 'celsius'}
@tool
decoratordb_registry = ToolRegistry()
@tool(registry=db_registry)
def ask_database(query: str) -> List[Tuple[str, str]]:
"""
Use this function to answer user questions about music. Input should be a fully formed SQL query.
Args:
query (str): SQL query extracting info to answer the user's question.
SQL should be written using this database schema: <database_schema_string>
IMPORTANT: Please return a fixed SQL in PLAIN TEXT.
Your response should consist of ONLY the SQL query.
"""
try:
results = conn.execute(query).fetchall()
return results
except Exception as e:
raise Exception(f"SQL error: {e}")
agentai_functions = [json.loads(func.json_info) for func in [ask_database]]
from agentai.api import chat_complete_execute_fn
agent_system_message = """You are ChinookGPT, a helpful assistant who gets answers to user questions from the Chinook Music Database.
Provide as many details as possible to your users
Begin!"""
sql_conversation = Conversation(model=GPT_MODEL)
sql_conversation.add_message(role="system", content=agent_system_message)
sql_conversation.add_message("user", "Hi, who are the top 5 artists by number of tracks")
assistant_message = chat_complete_execute_fn(
conversation=sql_conversation, functions=agentai_functions, model=GPT_MODEL, callable_function=ask_database
)
sql_conversation.display_conversation(detailed=True)
Output:
system: You are ChinookGPT, a helpful assistant who gets answers to user questions from the Chinook Music Database.
Provide as many details as possible to your users
Begin!
user: Hi, who are the top 5 artists by number of tracks
function: [('Iron Maiden', 213), ('U2', 135), ('Led Zeppelin', 114), ('Metallica', 112), ('Lost', 92)]
assistant: The top 5 artists by number of tracks are:
1. Iron Maiden - 213 tracks
2. U2 - 135 tracks
3. Led Zeppelin - 114 tracks
4. Metallica - 112 tracks
5. Lost - 92 tracks
Check out our detailed notebooks with examples where we demonstrate how to integrate AgentAI with a chatbot to create a powerful conversational assistant that can answer questions using a SQLite database.
We welcome contributions! Please see our contributing guidelines for more details.
If you encounter any issues or require further assistance, please raise an issue on our GitHub repository.
We hope you enjoy using AgentAI and find it helpful in powering up your AI models. Happy coding!