Make any of your functions queryable with natural language.
Project description
🌟argai
⚡ Run any of your functions with just natural language.
🔮 Quickstart
Install: pip install argai
OpenAI Setup:
via terminal export OPENAI_API_KEY="..."
or via python
import openai
openai.api_key = "..."
Make your functions intelligent and queryable via natural language:
def create_file(filename, text):
with open(filename,'w') as f:
f.write(text)
return {"status" : "success", "filename" : filename}
from argai import ArgFunc
arg = ArgFunc(create_file)
result = arg("Create a file called language.csv with all the programming languages available.")
Logs to keep track of the progress:
1: 💬: Create a file called language.csv for the top 10 most popular programming languages and its complexity.
📝 Calling LLM
🏃 Running function: create_file(filename='language.csv', text='Language,Complexity\nPython,Low\nJavaScript,Medium\nJava,High\nC++,High\nC#,Medium\nRuby,Low\nPHP,Medium\nSwift,Medium\nGo,Medium\nTypeScript,Medium')
✔️ Sucessfull, result: {'status': 'success', 'filename': 'language.csv'}
2: 🌟: Ran create_file, result: {'status': 'success', 'filename': 'language.csv'}
📝 Calling LLM
3: 🤖: I have created a file called `language.csv` with the information of the top 10 most popular programming languages and their complexity.
Final output can be accessed via result.output
{'status': 'success', 'filename': 'language.csv'}
❓ What is this?
LLM function calling is the ability to describe functions to LLMs and have the LLMs infer the input of the functions based off natural language query. For example:
- “Email Anya to see if she wants to get coffee next Friday” ->
send_email(to="anya@gmail.com", body="Hey Anya, do you want to get coffee this Friday? Let me know what time works best for you" )
- “Who are our highest spending customers” ->
sql_query(query="SELECT customer, spend FROM CUSTOMERS ORDERED BY spend DESC;")
This library aims to help you develop function calling capabilities for your functions and build applications that utilizes function calling. For example:
🤖 Agents
- Create autonomous agents that can continuously execute and run your functions based off a goal.
💬 Chatbots with 'Plugins'
- Create chatbots that can execute your function like ChatGPT with Plugins.
✈️ Copilots
- Automatically make your functions callable via natural language for copiloting.
🧪 Testing
- Automatically test your function against different scenarios.
More examples
🌟 1. Function Calling
Calling a function with just natural language. Below is an example of a simple function of creating file.
from argai import ArgFunc
def create_file(filename, text):
with open(filename,'w') as f:
f.write(text)
return {"status" : "success", "filename" : filename}
arg = ArgFunc(create_file)
result = arg("Create a file called language.csv with all the programming languages available.")
Output
logs:
1: 💬: Create a file called language.csv for the top 10 most popular programming languages and its complexity.
📝 Calling LLM
🏃 Running function: create_file(filename='language.csv', text='Language,Complexity\nPython,Low\nJavaScript,Medium\nJava,High\nC++,High\nC#,Medium\nRuby,Low\nPHP,Medium\nSwift,Medium\nGo,Medium\nTypeScript,Medium')
✔️ Sucessfull, result: {'status': 'success', 'filename': 'language.csv'}
2: 🌟: Ran create_file, result: {'status': 'success', 'filename': 'language.csv'}
📝 Calling LLM
3: 🤖: I have created a file called `language.csv` with the information of the top 10 most popular programming languages and their complexity.
result.output
{'status': 'success', 'filename': 'language.csv'}
️🩹 1.2 Function calling with self-healing
When the LLM hallucinates we can make it self heal/repair. You just add max_attempts
as a argument to the function and it will be attempting to fix itself till max_attempts
or a successfull call is made:
arg(
"Create a python file that builds a linear regression model for a csv called 'data.csv'",
max_attempts=5,
)
The results of a function won't be appended until max_attempts
is reached to save tokens + context limit.
️⏭️ 1.3 Consecutive function calling
Sometimes a query will require a function being called not once but multiple times consecutively. In those scenarios set a max_calls
and it will be called continuously till max_calls
or an answer is reached.
arg(
"Create a file called data.csv with top 10 grossing movie of all time. Then create a python file that will create a linear regression model on that csv.",
max_calls=5,
max_attempts=5,
)
Output
logs:
1: 💬: Create a file called data.csv with top 10 grossing movie of all time. Then create a python file that will create a linear regression model on that csv.
📝 Calling LLM
🏃 Running function: create_file(filename='data.csv', text='Movie,Revenue\nAvengers: Endgame,2797800564\nAvatar,2787965087\nTitanic,2187463944\nStar Wars: The Force Awakens,2068223624\nAvengers: Infinity War,2048359754\nJurassic World,1670516444\nThe Lion King,1656962239\nThe Avengers,1518815515\nFurious 7,1515047671\nFrozen II,1450026933')
✔️ Sucessfull, result: {'status': 'success', 'filename': 'data.csv'}
2: 🌟: Ran create_file, result: {'status': 'success', 'filename': 'data.csv'}
📝 Calling LLM
🏃 Running function: create_file(filename='linear_regression.py', text="import pandas as pd\nfrom sklearn.linear_model import LinearRegression\n\n# Load the CSV file\ndata = pd.read_csv('data.csv')\n\n# Prepare the data\nX = data['Revenue'].values.reshape(-1, 1)\ny = data['Movie'].values\n\n# Create a linear regression model\nmodel = LinearRegression()\n\n# Fit the model\nmodel.fit(X, y)\n\n# Print the coefficients\nprint('Intercept:', model.intercept_)\nprint('Coefficient:', model.coef_)")
✔️ Sucessfull, result: {'status': 'success', 'filename': 'linear_regression.py'}
3: 🌟: Ran create_file, result: {'status': 'success', 'filename': 'linear_regression.py'}
📝 Calling LLM
4: 🤖: I have created a file called "data.csv" with the top 10 grossing movies of all time. I have also created a Python file called "linear_regression.py" that creates a linear regression model on the provided CSV data.
result.output
{'status': 'success', 'filename': 'linear_regression.py'}
💾 2. Function Calling from Multiple functions
Calling from a list of functions with just natural language, the LLM will automatically decide which function to use.
from argai import ArgFuncStorage
arg = ArgFuncStorage()
@arg.register
def create_file(filename, text):
"""Create a file from raw text"""
with open(filename,'w') as f:
f.write(text)
return {"success":True}
import pandas as pd
@arg.register
def pandas_query(csv_file, query):
"""Run a pandas query on a csv file"""
df = pd.read_csv(csv_file)
return df.query(query)
arg(
"Create a file called language.csv with the top 10 most popular programming languages available.",
)
⏭️ 2.2 Consecutive function calling on multiple functions
This will be able choose and run different registered functions till max_calls
or an answer is reached.
arg(
"Create a file called language.csv with the top 10 most popular programming languages available, after that show me only the low complexity languages.",
max_calls=10,
)
🩹 2.3 Multiple functions with self-healing
Just like single function calling, when a function fails you can repair it with self-healing.
arg(
"Create a file called language.csv with the top 10 most popular programming languages available, after that show me only the low complexity languages.",
max_calls=10,
max_attempts=5
)
🙌 Contributing
Contributions of all kinds are extremely welcome!
What is with the 🌟?
Last but not least, the most important question and answer:
def func(*args)
->
def func(🌟args)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file argai-0.0.5.tar.gz
.
File metadata
- Download URL: argai-0.0.5.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bac7fe0a0c70da66206b5caa02f32a16b9cbbf838ff1d93f36f076c9f731c26 |
|
MD5 | 973b282f14107798b1a039c95ac23d37 |
|
BLAKE2b-256 | e800465815191daa23ba3e3aa47816ac88e7ed7705edd5a531c1160285a61c2a |
File details
Details for the file argai-0.0.5-py3-none-any.whl
.
File metadata
- Download URL: argai-0.0.5-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54a81a33e655741037067a30d45302e8704a3055ec0647d74bb218d3daae2830 |
|
MD5 | 2f93311ee99bcbc133216757dc9ce1fc |
|
BLAKE2b-256 | 751215e5b4d505a22f154ad9668600d372d3392f0b5f3d7a7e2ecfa7d7c39337 |