arcade-mcp/toolkits/search/arcade_search/tools/google_jobs.py
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

65 lines
2.1 KiB
Python

from typing import Annotated, Optional
from arcade.sdk import ToolContext, tool
from arcade_search.constants import DEFAULT_GOOGLE_JOBS_LANGUAGE
from arcade_search.exceptions import LanguageNotFoundError
from arcade_search.google_data import LANGUAGE_CODES
from arcade_search.utils import call_serpapi, prepare_params
@tool(requires_secrets=["SERP_API_KEY"])
async def search_jobs(
context: ToolContext,
query: Annotated[
str,
"Search query. Provide a job title, company name, and/or any keywords in general "
"representing what kind of jobs the user is looking for. E.g. 'software engineer' "
"or 'data analyst at Apple'.",
],
location: Annotated[
Optional[str],
"Location to search for jobs. E.g. 'United States' or 'New York, NY'. Defaults to None.",
] = None,
language: Annotated[
str,
"2-character language code to use in the Google Jobs search. "
f"E.g. 'en' for English. Defaults to '{DEFAULT_GOOGLE_JOBS_LANGUAGE}'.",
] = DEFAULT_GOOGLE_JOBS_LANGUAGE,
limit: Annotated[
int,
"Maximum number of results to retrieve. Defaults to 10 (max supported by the API).",
] = 10,
next_page_token: Annotated[
Optional[str],
"Next page token to paginate results. Defaults to None (start from the first page).",
] = None,
) -> Annotated[dict, "Google Jobs results"]:
"""Search Google Jobs using SerpAPI."""
if language not in LANGUAGE_CODES:
raise LanguageNotFoundError(language)
params = prepare_params(
engine="google_jobs",
q=query,
hl=language,
)
if location:
params["location"] = location
if next_page_token:
params["next_page_token"] = next_page_token
results = call_serpapi(context, params)
jobs_results = results.get("jobs_results", [])
try:
next_page_token = results["serpapi_pagination"]["next_page_token"]
except KeyError:
next_page_token = None
return {
"jobs": jobs_results[:limit],
"next_page_token": next_page_token,
}