Skip to content
Open
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
28 changes: 22 additions & 6 deletions openspace/cloud/embedding.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,25 @@ def generate_embedding(text: str, api_key: Optional[str] = None) -> Optional[Lis
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=15) as resp:
data = json.loads(resp.read().decode("utf-8"))
return data.get("data", [{}])[0].get("embedding")
except Exception as e:
logger.warning("Embedding generation failed: %s", e)
return None
with urllib.request.urlopen(req, timeout=15) as resp:
data = json.loads(resp.read().decode("utf-8"))

# 验证 API 响应结构
data_list = data.get("data")
if not data_list or not isinstance(data_list, list) or len(data_list) == 0:
logger.warning("Embedding API response missing or invalid 'data' array")
return None

embedding = data_list[0].get("embedding")
if not embedding:
logger.warning("Embedding API response missing 'embedding' field")
return None

return embedding
except urllib.error.HTTPError as e:
logger.warning(f"Embedding API HTTP error: {e.code} {e.reason}")
return None
except Exception as e:
logger.warning("Embedding generation failed: %s", e)
return None

4 changes: 2 additions & 2 deletions openspace/llm/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -777,8 +777,8 @@ async def complete(

args_str = json.dumps(args, ensure_ascii=False)[:200]
self._logger.info(f"Calling {tool_name} with args: {args_str}")
except:
pass
except (json.JSONDecodeError, ValueError, TypeError) as e:
self._logger.debug(f"Failed to parse tool arguments for {tool_name}: {e}")

if tool_obj is None:
if ambiguous_tool_names:
Expand Down
12 changes: 11 additions & 1 deletion openspace/skill_engine/skill_ranker.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,17 @@ def _generate_embedding(
try:
with urllib.request.urlopen(req, timeout=15) as resp:
data = json.loads(resp.read().decode("utf-8"))
return data.get("data", [{}])[0].get("embedding")

data_list = data.get("data")
if not data_list or not isinstance(data_list, list):
logger.warning(f"Invalid embedding API response: missing 'data' array")
return None

embedding = data_list[0].get("embedding")
if not embedding:
logger.warning("Embedding API response missing 'embedding' field in first result")
return None
return embedding
except Exception as e:
last_err = e
if attempt < 2:
Expand Down
2 changes: 2 additions & 0 deletions openspace/tool_layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,8 +355,10 @@ async def execute(
self._running = True
self._task_done.clear()
self._last_evolved_skills = [] # Reset per-execution tracking
start_time = asyncio.get_running_loop().time()
self._capture_skill_dir = capture_skill_dir
start_time = asyncio.get_event_loop().time()

# Use external task_id if provided, otherwise generate one
if task_id is None:
task_id = f"task_{uuid.uuid4().hex[:12]}"
Expand Down