Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,320 changes: 1,127 additions & 193 deletions autogpt_platform/autogpt_libs/poetry.lock

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions autogpt_platform/autogpt_libs/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ python = ">=3.10,<4.0"
colorama = "^0.4.6"
cryptography = "^45.0"
expiringdict = "^1.2.2"
fastapi = "^0.116.1"
google-cloud-logging = "^3.12.1"
launchdarkly-server-sdk = "^9.12.0"
pydantic = "^2.11.7"
pydantic-settings = "^2.10.1"
pyjwt = { version = "^2.10.1", extras = ["crypto"] }
fastapi = "^0.128.0"
google-cloud-logging = "^3.13.0"
launchdarkly-server-sdk = "^9.14.1"
pydantic = "^2.12.5"
pydantic-settings = "^2.12.0"
pyjwt = { version = "^2.11.0", extras = ["crypto"] }
redis = "^6.2.0"
supabase = "^2.16.0"
uvicorn = "^0.35.0"
supabase = "^2.27.2"
uvicorn = "^0.40.0"

[tool.poetry.group.dev.dependencies]
pyright = "^1.1.404"
Expand Down
24 changes: 12 additions & 12 deletions autogpt_platform/backend/backend/blocks/exa/websets.py
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ async def run(
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

try:
webset = aexa.websets.get(id=input_data.external_id)
webset = await aexa.websets.get(id=input_data.external_id)
webset_result = Webset.model_validate(webset.model_dump(by_alias=True))

yield "webset", webset_result
Expand All @@ -494,7 +494,7 @@ async def run(
count=input_data.search_count,
)

webset = aexa.websets.create(
webset = await aexa.websets.create(
params=CreateWebsetParameters(
search=search_params,
external_id=input_data.external_id,
Expand Down Expand Up @@ -554,7 +554,7 @@ async def run(
if input_data.metadata is not None:
payload["metadata"] = input_data.metadata

sdk_webset = aexa.websets.update(id=input_data.webset_id, params=payload)
sdk_webset = await aexa.websets.update(id=input_data.webset_id, params=payload)

status_str = (
sdk_webset.status.value
Expand Down Expand Up @@ -617,7 +617,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

response = aexa.websets.list(
response = await aexa.websets.list(
cursor=input_data.cursor,
limit=input_data.limit,
)
Expand Down Expand Up @@ -678,7 +678,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

sdk_webset = aexa.websets.get(id=input_data.webset_id)
sdk_webset = await aexa.websets.get(id=input_data.webset_id)

status_str = (
sdk_webset.status.value
Expand Down Expand Up @@ -748,7 +748,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

deleted_webset = aexa.websets.delete(id=input_data.webset_id)
deleted_webset = await aexa.websets.delete(id=input_data.webset_id)

status_str = (
deleted_webset.status.value
Expand Down Expand Up @@ -798,7 +798,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

canceled_webset = aexa.websets.cancel(id=input_data.webset_id)
canceled_webset = await aexa.websets.cancel(id=input_data.webset_id)

status_str = (
canceled_webset.status.value
Expand Down Expand Up @@ -968,7 +968,7 @@ async def run(
entity["description"] = input_data.entity_description
payload["entity"] = entity

sdk_preview = aexa.websets.preview(params=payload)
sdk_preview = await aexa.websets.preview(params=payload)

preview = PreviewWebsetModel.from_sdk(sdk_preview)

Expand Down Expand Up @@ -1051,7 +1051,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

webset = aexa.websets.get(id=input_data.webset_id)
webset = await aexa.websets.get(id=input_data.webset_id)

status = (
webset.status.value
Expand Down Expand Up @@ -1185,7 +1185,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

webset = aexa.websets.get(id=input_data.webset_id)
webset = await aexa.websets.get(id=input_data.webset_id)

# Extract basic info
webset_id = webset.id
Expand All @@ -1211,7 +1211,7 @@ async def run(
total_items = 0

if input_data.include_sample_items and input_data.sample_size > 0:
items_response = aexa.websets.items.list(
items_response = await aexa.websets.items.list(
webset_id=input_data.webset_id, limit=input_data.sample_size
)
sample_items_data = [
Expand Down Expand Up @@ -1362,7 +1362,7 @@ async def run(
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

# Get webset details
webset = aexa.websets.get(id=input_data.webset_id)
webset = await aexa.websets.get(id=input_data.webset_id)

status = (
webset.status.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

sdk_enrichment = aexa.websets.enrichments.create(
sdk_enrichment = await aexa.websets.enrichments.create(
webset_id=input_data.webset_id, params=payload
)

Expand All @@ -223,7 +223,7 @@ async def run(
items_enriched = 0

while time.time() - poll_start < input_data.polling_timeout:
current_enrich = aexa.websets.enrichments.get(
current_enrich = await aexa.websets.enrichments.get(
webset_id=input_data.webset_id, id=enrichment_id
)
current_status = (
Expand All @@ -234,7 +234,7 @@ async def run(

if current_status in ["completed", "failed", "cancelled"]:
# Estimate items from webset searches
webset = aexa.websets.get(id=input_data.webset_id)
webset = await aexa.websets.get(id=input_data.webset_id)
if webset.searches:
for search in webset.searches:
if search.progress:
Expand Down Expand Up @@ -329,7 +329,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

sdk_enrichment = aexa.websets.enrichments.get(
sdk_enrichment = await aexa.websets.enrichments.get(
webset_id=input_data.webset_id, id=input_data.enrichment_id
)

Expand Down Expand Up @@ -474,7 +474,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

deleted_enrichment = aexa.websets.enrichments.delete(
deleted_enrichment = await aexa.websets.enrichments.delete(
webset_id=input_data.webset_id, id=input_data.enrichment_id
)

Expand Down Expand Up @@ -525,13 +525,13 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

canceled_enrichment = aexa.websets.enrichments.cancel(
canceled_enrichment = await aexa.websets.enrichments.cancel(
webset_id=input_data.webset_id, id=input_data.enrichment_id
)

# Try to estimate how many items were enriched before cancellation
items_enriched = 0
items_response = aexa.websets.items.list(
items_response = await aexa.websets.items.list(
webset_id=input_data.webset_id, limit=100
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def __init__(self):
def _create_test_mock():
"""Create test mocks for the AsyncExa SDK."""
from datetime import datetime
from unittest.mock import MagicMock
from unittest.mock import AsyncMock, MagicMock

# Create mock SDK import object
mock_import = MagicMock()
Expand All @@ -247,7 +247,7 @@ def _create_test_mock():
return {
"_get_client": lambda *args, **kwargs: MagicMock(
websets=MagicMock(
imports=MagicMock(create=lambda *args, **kwargs: mock_import)
imports=MagicMock(create=AsyncMock(return_value=mock_import))
)
)
}
Expand Down Expand Up @@ -294,7 +294,7 @@ async def run(
if input_data.metadata:
payload["metadata"] = input_data.metadata

sdk_import = aexa.websets.imports.create(
sdk_import = await aexa.websets.imports.create(
params=payload, csv_data=input_data.csv_data
)

Expand Down Expand Up @@ -360,7 +360,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

sdk_import = aexa.websets.imports.get(import_id=input_data.import_id)
sdk_import = await aexa.websets.imports.get(import_id=input_data.import_id)

import_obj = ImportModel.from_sdk(sdk_import)

Expand Down Expand Up @@ -426,7 +426,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

response = aexa.websets.imports.list(
response = await aexa.websets.imports.list(
cursor=input_data.cursor,
limit=input_data.limit,
)
Expand Down Expand Up @@ -474,7 +474,9 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

deleted_import = aexa.websets.imports.delete(import_id=input_data.import_id)
deleted_import = await aexa.websets.imports.delete(
import_id=input_data.import_id
)

yield "import_id", deleted_import.id
yield "success", "true"
Expand Down Expand Up @@ -573,14 +575,14 @@ def _create_test_mock():
}
)

# Create mock iterator
mock_items = [mock_item1, mock_item2]
# Create async iterator for list_all
async def async_item_iterator(*args, **kwargs):
for item in [mock_item1, mock_item2]:
yield item

return {
"_get_client": lambda *args, **kwargs: MagicMock(
websets=MagicMock(
items=MagicMock(list_all=lambda *args, **kwargs: iter(mock_items))
)
websets=MagicMock(items=MagicMock(list_all=async_item_iterator))
)
}

Expand All @@ -602,7 +604,7 @@ async def run(
webset_id=input_data.webset_id, limit=input_data.max_items
)

for sdk_item in item_iterator:
async for sdk_item in item_iterator:
if len(all_items) >= input_data.max_items:
break

Expand Down
18 changes: 9 additions & 9 deletions autogpt_platform/backend/backend/blocks/exa/websets_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

sdk_item = aexa.websets.items.get(
sdk_item = await aexa.websets.items.get(
webset_id=input_data.webset_id, id=input_data.item_id
)

Expand Down Expand Up @@ -269,7 +269,7 @@ async def run(
response = None

while time.time() - start_time < input_data.wait_timeout:
response = aexa.websets.items.list(
response = await aexa.websets.items.list(
webset_id=input_data.webset_id,
cursor=input_data.cursor,
limit=input_data.limit,
Expand All @@ -282,13 +282,13 @@ async def run(
interval = min(interval * 1.2, 10)

if not response:
response = aexa.websets.items.list(
response = await aexa.websets.items.list(
webset_id=input_data.webset_id,
cursor=input_data.cursor,
limit=input_data.limit,
)
else:
response = aexa.websets.items.list(
response = await aexa.websets.items.list(
webset_id=input_data.webset_id,
cursor=input_data.cursor,
limit=input_data.limit,
Expand Down Expand Up @@ -340,7 +340,7 @@ async def run(
) -> BlockOutput:
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

deleted_item = aexa.websets.items.delete(
deleted_item = await aexa.websets.items.delete(
webset_id=input_data.webset_id, id=input_data.item_id
)

Expand Down Expand Up @@ -408,7 +408,7 @@ async def run(
webset_id=input_data.webset_id, limit=input_data.max_items
)

for sdk_item in item_iterator:
async for sdk_item in item_iterator:
if len(all_items) >= input_data.max_items:
break

Expand Down Expand Up @@ -475,7 +475,7 @@ async def run(
# Use AsyncExa SDK
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

webset = aexa.websets.get(id=input_data.webset_id)
webset = await aexa.websets.get(id=input_data.webset_id)

entity_type = "unknown"
if webset.searches:
Expand All @@ -495,7 +495,7 @@ async def run(
# Get sample items if requested
sample_items: List[WebsetItemModel] = []
if input_data.sample_size > 0:
items_response = aexa.websets.items.list(
items_response = await aexa.websets.items.list(
webset_id=input_data.webset_id, limit=input_data.sample_size
)
# Convert to our stable models
Expand Down Expand Up @@ -569,7 +569,7 @@ async def run(
aexa = AsyncExa(api_key=credentials.api_key.get_secret_value())

# Get items starting from cursor
response = aexa.websets.items.list(
response = await aexa.websets.items.list(
webset_id=input_data.webset_id,
cursor=input_data.since_cursor,
limit=input_data.max_items,
Expand Down
Loading
Loading