Commit graph

299 commits

Author SHA1 Message Date
Eric Gustin
3b8d978e89
Update README (#325)
Without the quotes - `zsh: no matches found: arcade-ai[evals]`
2025-03-24 09:57:58 -07:00
Eric Gustin
04bda3cc45
Google Sheets Tools (#321)
| Name | Description |

|--------------------------|---------------------------------------------------------------------------------------|
| Google.CreateSpreadsheet | Create a new spreadsheet with the provided
title and data in its first sheet |
| Google.GetSpreadsheet | Get the user entered and formatted data for
all sheets in the spreadsheet |
| Google.WriteToCell | Write a value to a single cell in a spreadsheet.
|


## Google.CreateSpreadsheet
This tool can create a new spreadsheet with data in its first sheet
This tool takes in the data as a JSON string. Here's an example input: 
```
// Good at large payloads, sparse payloads, and contiguous data payloads.
// For example data[1]["D"] represents the value of the cell in the first row in the D column
{
  // All data in row 1
  1: {
    "A": 42, 
    "B": 2, 
    "D":"=A1+B1"
  },
  // All data in row 54
  54: {
    "A": "my string",
    "QQ": "my far away string"
  }
}
```
The above data format performed better on evals than the other two that
I tested:
```
// Performed poorly at sparse data and also at larger amounts of data
[
  [42, 2, "", "=A1+B1"], 
  [], 
  [],
  ..., 
  ["A": "my string", "", "", ..., "my far away string"]
]
```
```
// Good at small payloads and sparse payloads, but very bad at payloads with contiguous data
{
  "A1": 42", "B1": 2, "D1": "=A1+B1", "A54": "my string", "QQ": "my far away string"
}
```

## Google.GetSpreadsheet
Gets the formatted values for all non empty cells in all sheets of the
spreadsheet. The data returned is in a similar format as the
`Google.CreateSpreadsheet` tool's `data` input parameter. The difference
is that `get_spreadsheet` will return the user entered value (=A1+B1)
and also the formatted value (23.4) for each cell.

## Google.WriteToCell
Writes to a single cell. At this point in time we do not support batch
updating a sheet.
2025-03-24 09:52:51 -07:00
Eric Gustin
e26f647c3d
Add 'Invalid Renamed Tool Parameter' Check (#324)
Arcade tools can rename parameters like so,

```py
@tool()
def func_with_renamed_param(
    param1: Annotated[str, "MyRenamedParam", "The first parameter"],
):
    pass
```

but there is no check for whether the renamed parameter is a valid
identifier.

Anthropic models, for example, will fail if a renamed parameter is not a
valid identifier (which was the cause for
https://github.com/ArcadeAI/arcade-ai/pull/319).
2025-03-22 09:25:56 -07:00
Renato Byrro
c9ed5ce123
Google Shopping search tool (#317) 2025-03-21 21:09:54 -03:00
Renato Byrro
f6765bed67
Walmart shopping search tools (#320) 2025-03-21 21:02:45 -03:00
Sterling Dreyer
227f02d2fd
Add Notion and Youtube toolkits to worker (#322) 2025-03-21 15:33:21 -07:00
Renato Byrro
2338e823cf
YouTube Search tools (#316) 2025-03-21 19:26:52 -03:00
Eric Gustin
a3371d71ac
Fix Search.SearchJobs for Anthropic Models (#319)
Fixes this error:

```bash
openai.InternalServerError: Error code: 503 - {'name': 'all_models_unavailable', 'message': "failed to chat with models; Attempt 0: anthropic - anthropic (type = error, message = tools.75.custom.input_schema.properties: Property keys should match pattern '^[a-zA-Z0-9_-]{1,64}$'); Attempt 1: anthropic - anthropic (type = error, message = tools.75.custom.input_schema.properties: Property keys should match pattern '^[a-zA-Z0-9_-]{1,64}$'); Attempt 2: anthropic - anthropic (type = error, message = tools.75.custom.input_schema.properties: Property keys should match pattern '^[a-zA-Z0-9_-]{1,64}$')"}
```
2025-03-19 20:53:46 -07:00
Eric Gustin
86696ea794
Bump math toolkit version (#318) 2025-03-19 18:05:46 -07:00
Renato Byrro
81b2624c1a
Fix Slack bug when sending msg to a private channel (#313) 2025-03-19 17:45:03 -07:00
Mateo Torres
ab735eb442
increased precision of decimal-based math tools to 100 digits (#315)
Some edge cases of a benchmark were failing due to low precision,
increased the precision to 100 digits.
2025-03-19 13:48:18 -03:00
Sam Partee
0baeb0f219
Bump langchain version of arcadepy (#314)
Release new version of langchain package with arcadepy version bump
2025-03-18 15:43:33 -07:00
Renato Byrro
1867443b84
Bump search toolkit version (#312) 2025-03-18 11:30:01 -07:00
Renato Byrro
a3f55378ca
Add Google News, Jobs, and Maps Tools (#311)
Documentation PR: https://github.com/ArcadeAI/docs/pull/190
2025-03-18 15:23:36 -03:00
Eric Gustin
a92f86d783
Bump notion version (#310)
when testing earlier, 0.1.0 was used for a failed pypi upload. I'm
assuming this is why `This filename has already been used, use a
different version` is occuring
2025-03-17 21:28:10 -07:00
Sterling Dreyer
f7f9489c3e
Deployment Secrets (#301)
Allows environment variables to be used as secrets
2025-03-17 21:17:17 -07:00
Eric Gustin
7edaa0a996
Update Notion Toolkit (#309)
1. The Arcade Worker doesn't like it when the package name is different
than the directory name. This PR renames the directory from
`arcade_notion` to `arcade_notion_toolkit`
2. `Notion` is not a well-known provider name in `arcade-ai==1.0.5`,
I've updated the dep to represent this.
2025-03-17 21:15:00 -07:00
Eric Gustin
b3d254fe56
Relax arcade-ai dep for arcade new (#308) 2025-03-17 17:13:27 -07:00
Eric Gustin
a787b6dbe3
Explicitly define notion directory name (#307) 2025-03-17 17:02:45 -07:00
Eric Gustin
ca2ca50a1f
Rename notion toolkit PyPI package (#306) 2025-03-17 16:46:57 -07:00
Eric Gustin
53a12802f6
More updates to Publish Toolkit Workflow (#305) 2025-03-17 16:33:51 -07:00
Eric Gustin
29e895ca44
Change notion version (#304) 2025-03-17 16:13:28 -07:00
Eric Gustin
5afd31ba27
Update Publish Toolkit Workflow (#303) 2025-03-17 16:10:08 -07:00
Eric Gustin
e048f277fd
Fix publish toolkit workflow (#302)
There was a bug where if the poetry publish failed, then the slack
message would say that it succeeded.

I am setting the notion toolkit version to 0.0.1. This is expected to
fail. I'm doing this to ensure the E2E issue is fixed.

The grep'd string comes from
https://github.com/python-poetry/poetry/blob/main/src/poetry/publishing/uploader.py#L246-L249
2025-03-17 15:40:32 -07:00
Eric Gustin
cd7eca306a
Release Arcade Math 1.0.0 (#300) 2025-03-17 12:58:17 -07:00
Eric Gustin
25c9f76ca8
Fix secrets for firecrawl tool (#299) 2025-03-16 15:38:04 -07:00
Sam Partee
8bfd6755ee
Update README.md (#298)
Minor spelling and changes to README.
2025-03-16 15:11:34 -07:00
Sam Partee
88b1a3d9c2
Shorten README (#297) 2025-03-16 14:49:42 -07:00
Eric Gustin
b7d5736995
Replace changed-files GH Action (#295) 2025-03-15 15:15:01 -07:00
Sterling Dreyer
54fb135a3c
Allow workerup to run without login (#296) 2025-03-15 14:47:43 -07:00
Eric Gustin
7428397318
Notion Toolkit (#283) 2025-03-15 11:08:10 -08:00
Eric Gustin
99ff11d30e
Various Search Toolkits (#285)
1. Add the following tools:
* Google Finance
    - get_stock_summary
    - get_stock_historical_data
* Google Flights
    - search_roundtrip_flights
    - search_one_way_flights
* Google Hotels
    - search_hotels
    
2. Add some common helper functions for serpAPI tools.
2025-03-14 14:23:14 -07:00
Nate Barbettini
ef5b19b4a2
feat: Add Reddit and Twitch named providers (#294)
Adding auth support for future Reddit and Twitch tools.
2025-03-14 13:52:46 -07:00
Mateo Torres
f04087b389
Math tools expanded (#293)
Migrated all interfaces to get and return strings.

Added tests and evals for all functions (except the random generation)
Math functions are now organized into different math categories

---------

Co-authored-by: Nate Barbettini <nate@arcade-ai.com>
2025-03-14 09:47:04 -03:00
Sterling Dreyer
6cafadac9c
Disable Toml Deployment Updates (#291) 2025-03-13 10:58:30 -07:00
Sterling Dreyer
2df682f3b0
Add packaging requirement (#290) 2025-03-13 10:57:00 -07:00
Sterling Dreyer
a181dc5681
Worker Deploy (#278) 2025-03-13 09:02:36 -07:00
Eric Gustin
b296594863
Fix examples (#289)
Somehow these have slipped through the cracks. It hasn't been
`authorization_url` for some time.
2025-03-12 16:46:14 -07:00
Eric Gustin
2fe907e5dd
Release Google Toolkit version 1.0.0 (#280)
Updates to the Google Toolkit:
https://github.com/ArcadeAI/arcade-ai/pull/264 (google patch)
https://github.com/ArcadeAI/arcade-ai/pull/188 (google minor)
https://github.com/ArcadeAI/arcade-ai/pull/272 (google major)
https://github.com/ArcadeAI/arcade-ai/pull/269 (google minor)
https://github.com/ArcadeAI/arcade-ai/pull/265 (google major)
2025-03-12 14:25:50 -07:00
Sam Partee
9da87b1f22
Whitespace fix (#286) 2025-03-11 06:33:58 -07:00
Sam Partee
0cf0a7beeb
Update README.md 2025-03-11 04:23:15 -07:00
Sam Partee
bc2c4919fe
Update README.md (#284) 2025-03-10 20:23:15 -07:00
Sam Partee
28ea4d8933
Update README (#281) 2025-03-10 20:15:45 -07:00
Sam Partee
140f4eca17
Langchain arcade 1.2 (#282)
- **New Class Structure**: Introduced `ToolManager` and
`AsyncToolManager` classes (`ArcadeToolManager` is deprecated)
- **Async Support**: Full async implementation for modern LangChain
applications
- **Better Tool Management**: New methods for adding individual tools
and toolkits
- **CI/CD**: for langchain_arcade


## Upgrade Changes

```python
# Old pattern
manager = ArcadeToolManager(api_key="...")
tools = manager.get_tools(toolkits=["Google"])

# New pattern
manager = ToolManager(api_key="...")
manager.init_tools(toolkits=["Google"])
tools = manager.to_langchain()
```

Now supports underscores vs dots in tool names for better model
compatibility.
2025-03-10 18:52:06 -07:00
Sterling Dreyer
4164f796b0
Fix package install for modal example (#267)
Co-authored-by: Eric Gustin <eric@arcade.dev>
2025-03-07 19:08:49 -08:00
Sterling Dreyer
eed4c0181b
Arcade Serve (#274)
Co-authored-by: Sam Partee <sam@arcade-ai.com>
2025-03-07 18:40:26 -08:00
Eric Gustin
16db170b2c
Update arcade new (#266)
* New README
2025-03-07 18:38:14 -08:00
Renato Byrro
ac0f5aa10c
Search Google Drive documents and retrieve contents (#265)
This tool will be useful in scenarios akin to RAG, where someone wants
to ask questions or request the production of a summary, for instance,
about a bunch of documents related to a particular topic. Currently, to
fulfill such requests, the LLM needs to first `list_documents`, then
`get_document_by_id` for each document.

We also implement a utility functions to return documents in Markdown
and HTML, since the Drive API JSON is verbose and would waste too many
tokens unnecessarily.

Limitations: the Markdown/HTML utilities do not handle table of contents
(which I think aren't really useful here), headers, footers, or
footnotes.

---
This PR deprecates `list_documents` and implements `search_documents`,
apart from `search_and_retrieve_documents`). This configuration makes it
easier for LLMs to understand when to call each tool.

Both tools had their interfaces refactored to remove Google API-specific
arguments that were confusing LLMs sometimes, such as "corpora" and
"support_all_drives". It now accepts arguments that better relate to
expected user requests.

---------

Co-authored-by: Eric Gustin <eric@arcade.dev>
2025-03-07 18:42:12 -03:00
Renato Byrro
2135101acd
Tool to retrieve file tree structure from Google 'My Drive' and 'Shared Drives' (#269) 2025-03-07 18:02:09 -03:00
Eric Gustin
4608cce862
Fix parameterized type bug & better error message (#273)
## PR Description
### 1. Bug Fix
A bug was observed where tools that were using [parameterized
generics](https://docs.python.org/3/library/stdtypes.html#types-genericalias)
(e.g., `dict[str, Any]`) for their input parameters or output, then this
would cause the Worker to fail on startup with the error `issubclass()
arg 1 must be a class` for Python3.13+. This error would not occur for
Python versions less than 3.13.

In Python <3.13, parameterized generics would implicitly be treated as
their underlying type (its origin), so it was possible to treat
`dict[str, Any]` as a class and pass it to `issubclass`. This is not the
case for Python 3.13, so we need to explicitly strip the GenericAlias
(e.g., `dict[str, Any]`) down to its origin (e.g., `dict`), before
checking if it is a subclass of `Enum`.

### 2. Better Error Message
When a tool used an unsupported parameter/output type, then Arcade would
display the following message:
```
Failed to start Arcade Worker: 
Type error encountered while adding tool get_website_map from arcade_web.tools.firecrawl. 
Reason: issubclass() arg 1 must be a class
```

But now it displays
```
Failed to start Arcade Worker: 
Error encountered while adding tool get_website_map from arcade_web.tools.firecrawl. 
Reason: Unsupported type: tuple[str, str]
```
2025-03-07 11:46:42 -08:00