This commit is contained in:
Harry 2026-04-12 22:12:30 +08:00 committed by GitHub
commit fc63dc3703
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 37 additions and 9 deletions

View file

@ -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

View file

@ -777,8 +777,8 @@ class LLMClient:
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:

View file

@ -340,7 +340,17 @@ class SkillRanker:
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:

View file

@ -355,8 +355,10 @@ class OpenSpace:
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]}"