Commit graph

301 commits

Author SHA1 Message Date
Renato Byrro
d91e417c8d
Improve error message when an exception is raised at toolkit import time upon Worker startup (#327)
Upon Worker startup, when an exception raised in a toolkit at import
time, the worker logged output will not display the cause of the
exception, or even that there was an exception raised in the toolkit.

Instead, the worker logs only a not very useful message:

```
 Failed to start Arcade Worker: Could not find tool {tool_name} in module {toolkit_name}.tools.{module_name}
```

This PR improves the logged message by adding the cause of the error.
2025-03-24 22:31:49 -03:00
Eric Gustin
e7daa1edba
Fix Failing Slack Toolkit Build (#326)
`typing` was being installed and causing builds to fail. [See logs
here](https://github.com/ArcadeAI/arcade-ai/actions/runs/14041206262/job/39311571300)

This PR also removes the `typing-extensions` dependency
2025-03-24 13:45:04 -07:00
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