Compare commits

...

3 Commits

Author SHA1 Message Date
claude[bot]
c0a32131d4 fix(blocks/exa): Fix import sorting in search.py
Adds blank line between backend.sdk imports and relative imports to comply with isort formatting requirements.

Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com>
2025-09-09 17:59:17 +00:00
claude[bot]
cdb1f50561 Merge branch 'origin/dev' into codex/investigate-empty-results-in-exa-search-block
- Resolved merge conflicts in exa search and similar blocks
- Updated imports to use new _config pattern
- Ensured camelCase conversion uses model_dump() instead of dict()
- Added docstrings to helper functions as requested in code review

Co-authored-by: Nicholas Tindle <ntindle@users.noreply.github.com>
2025-09-09 16:44:35 +00:00
Toran Bruce Richards
e9a3ba36ab fix(exa): camelCase payload without aliases 2025-05-17 13:35:02 +01:00
3 changed files with 44 additions and 5 deletions

View File

@@ -1,8 +1,47 @@
from typing import Optional
from typing import Any, Optional
from backend.sdk import BaseModel, SchemaField
def _to_camel_case(value: str) -> str:
"""Convert snake_case string to camelCase.
Args:
value: Snake case string to convert
Returns:
String converted to camelCase format
"""
parts = value.split("_")
return parts[0] + "".join(part.capitalize() for part in parts[1:])
def to_camel_case_dict(data: dict[str, Any]) -> dict[str, Any]:
"""Recursively convert dictionary keys from snake_case to camelCase.
Handles nested dictionaries and lists containing dictionaries by recursively
converting all snake_case keys to camelCase format.
Args:
data: Dictionary with snake_case keys to convert
Returns:
Dictionary with all keys converted to camelCase
"""
result: dict[str, Any] = {}
for key, val in data.items():
camel_key = _to_camel_case(key)
if isinstance(val, dict):
result[camel_key] = to_camel_case_dict(val)
elif isinstance(val, list):
result[camel_key] = [
to_camel_case_dict(v) if isinstance(v, dict) else v for v in val
]
else:
result[camel_key] = val
return result
class TextSettings(BaseModel):
max_characters: int = SchemaField(
default=1000,

View File

@@ -12,7 +12,7 @@ from backend.sdk import (
)
from ._config import exa
from .helpers import ContentSettings
from .helpers import ContentSettings, to_camel_case_dict
class ExaSearchBlock(Block):
@@ -93,7 +93,7 @@ class ExaSearchBlock(Block):
"query": input_data.query,
"useAutoprompt": input_data.use_auto_prompt,
"numResults": input_data.number_of_results,
"contents": input_data.contents.model_dump(),
"contents": to_camel_case_dict(input_data.contents.model_dump()),
}
date_field_mapping = {

View File

@@ -13,7 +13,7 @@ from backend.sdk import (
)
from ._config import exa
from .helpers import ContentSettings
from .helpers import ContentSettings, to_camel_case_dict
class ExaFindSimilarBlock(Block):
@@ -95,7 +95,7 @@ class ExaFindSimilarBlock(Block):
payload = {
"url": input_data.url,
"numResults": input_data.number_of_results,
"contents": input_data.contents.model_dump(),
"contents": to_camel_case_dict(input_data.contents.model_dump()),
}
optional_field_mapping = {