fix agent creation error

This commit is contained in:
Saumya 2025-08-24 22:34:32 +05:30
parent f55cc025d7
commit 2e31dd4593
5 changed files with 31 additions and 34 deletions

View File

@ -71,16 +71,17 @@ class MessageCreateRequest(BaseModel):
class AgentCreateRequest(BaseModel):
name: str
description: Optional[str] = None
system_prompt: Optional[str] = None # Make optional to allow defaulting to Suna's system prompt
system_prompt: Optional[str] = None
configured_mcps: Optional[List[Dict[str, Any]]] = []
custom_mcps: Optional[List[Dict[str, Any]]] = []
agentpress_tools: Optional[Dict[str, Any]] = {}
is_default: Optional[bool] = False
# Deprecated, kept for backward-compat
avatar: Optional[str] = None
avatar_color: Optional[str] = None
# New profile image url (can be external or Supabase storage URL)
profile_image_url: Optional[str] = None
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
class AgentVersionResponse(BaseModel):
version_id: str
@ -88,7 +89,7 @@ class AgentVersionResponse(BaseModel):
version_number: int
version_name: str
system_prompt: str
model: Optional[str] = None # Add model field
model: Optional[str] = None
configured_mcps: List[Dict[str, Any]]
custom_mcps: List[Dict[str, Any]]
agentpress_tools: Dict[str, Any]
@ -102,8 +103,8 @@ class AgentVersionCreateRequest(BaseModel):
configured_mcps: Optional[List[Dict[str, Any]]] = []
custom_mcps: Optional[List[Dict[str, Any]]] = []
agentpress_tools: Optional[Dict[str, Any]] = {}
version_name: Optional[str] = None # Custom version name
description: Optional[str] = None # Version description
version_name: Optional[str] = None
description: Optional[str] = None
class AgentUpdateRequest(BaseModel):
name: Optional[str] = None
@ -113,12 +114,9 @@ class AgentUpdateRequest(BaseModel):
custom_mcps: Optional[List[Dict[str, Any]]] = None
agentpress_tools: Optional[Dict[str, Any]] = None
is_default: Optional[bool] = None
# Deprecated, kept for backward-compat
avatar: Optional[str] = None
avatar_color: Optional[str] = None
# New profile image url (backward compatibility)
profile_image_url: Optional[str] = None
# New icon system fields
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
@ -132,19 +130,15 @@ class AgentResponse(BaseModel):
custom_mcps: List[Dict[str, Any]]
agentpress_tools: Dict[str, Any]
is_default: bool
# Deprecated
avatar: Optional[str] = None
avatar_color: Optional[str] = None
# New
profile_image_url: Optional[str] = None
# Icon system fields
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
created_at: str
updated_at: Optional[str] = None
is_public: Optional[bool] = False
tags: Optional[List[str]] = []
current_version_id: Optional[str] = None
version_count: Optional[int] = 1
@ -163,7 +157,7 @@ class AgentsResponse(BaseModel):
class ThreadAgentResponse(BaseModel):
agent: Optional[AgentResponse]
source: str # "thread", "default", "none", "missing"
source: str
message: str
class AgentExportData(BaseModel):
@ -1566,9 +1560,9 @@ async def get_agents(
avatar=agent_config.get('avatar'),
avatar_color=agent_config.get('avatar_color'),
profile_image_url=agent_config.get('profile_image_url'),
icon_name=agent.get('icon_name'),
icon_color=agent.get('icon_color'),
icon_background=agent.get('icon_background'),
icon_name=agent_config.get('icon_name'),
icon_color=agent_config.get('icon_color'),
icon_background=agent_config.get('icon_background'),
created_at=agent['created_at'],
updated_at=agent['updated_at'],
current_version_id=agent.get('current_version_id'),
@ -1694,9 +1688,9 @@ async def get_agent(agent_id: str, user_id: str = Depends(get_current_user_id_fr
avatar=agent_config.get('avatar'),
avatar_color=agent_config.get('avatar_color'),
profile_image_url=agent_config.get('profile_image_url'),
icon_name=agent_data.get('icon_name'),
icon_color=agent_data.get('icon_color'),
icon_background=agent_data.get('icon_background'),
icon_name=agent_config.get('icon_name'),
icon_color=agent_config.get('icon_color'),
icon_background=agent_config.get('icon_background'),
created_at=agent_data['created_at'],
updated_at=agent_data.get('updated_at', agent_data['created_at']),
current_version_id=agent_data.get('current_version_id'),
@ -2405,9 +2399,9 @@ async def update_agent(
avatar=agent_config.get('avatar'),
avatar_color=agent_config.get('avatar_color'),
profile_image_url=agent_config.get('profile_image_url'),
icon_name=agent.get('icon_name'),
icon_color=agent.get('icon_color'),
icon_background=agent.get('icon_background'),
icon_name=agent_config.get('icon_name'),
icon_color=agent_config.get('icon_color'),
icon_background=agent_config.get('icon_background'),
created_at=agent['created_at'],
updated_at=agent.get('updated_at', agent['created_at']),
current_version_id=agent.get('current_version_id'),

View File

@ -49,9 +49,7 @@ def _extract_suna_agent_config(agent_data: Dict[str, Any], version_data: Optiona
}
}
# Add user customizations from version or agent data
if version_data:
# Get customizations from version data
if version_data.get('config'):
version_config = version_data['config']
tools = version_config.get('tools', {})
@ -60,13 +58,11 @@ def _extract_suna_agent_config(agent_data: Dict[str, Any], version_data: Optiona
config['workflows'] = version_config.get('workflows', [])
config['triggers'] = version_config.get('triggers', [])
else:
# Legacy version format
config['configured_mcps'] = version_data.get('configured_mcps', [])
config['custom_mcps'] = version_data.get('custom_mcps', [])
config['workflows'] = []
config['triggers'] = []
else:
# Fallback to agent data or empty
config['configured_mcps'] = agent_data.get('configured_mcps', [])
config['custom_mcps'] = agent_data.get('custom_mcps', [])
config['workflows'] = []
@ -76,13 +72,11 @@ def _extract_suna_agent_config(agent_data: Dict[str, Any], version_data: Optiona
def _extract_custom_agent_config(agent_data: Dict[str, Any], version_data: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""Extract config for custom agents using versioning system."""
agent_id = agent_data.get('agent_id', 'Unknown')
if version_data:
logger.debug(f"Using version data for custom agent {agent_id} (version: {version_data.get('version_name', 'unknown')})")
# Extract from version data
if version_data.get('config'):
config = version_data['config'].copy()
system_prompt = config.get('system_prompt', '')
@ -94,7 +88,6 @@ def _extract_custom_agent_config(agent_data: Dict[str, Any], version_data: Optio
workflows = config.get('workflows', [])
triggers = config.get('triggers', [])
else:
# Legacy version format
system_prompt = version_data.get('system_prompt', '')
model = version_data.get('model')
configured_mcps = version_data.get('configured_mcps', [])
@ -117,6 +110,9 @@ def _extract_custom_agent_config(agent_data: Dict[str, Any], version_data: Optio
'avatar': agent_data.get('avatar'),
'avatar_color': agent_data.get('avatar_color'),
'profile_image_url': agent_data.get('profile_image_url'),
'icon_name': agent_data.get('icon_name'),
'icon_color': agent_data.get('icon_color'),
'icon_background': agent_data.get('icon_background'),
'is_default': agent_data.get('is_default', False),
'is_suna_default': False,
'centrally_managed': False,
@ -126,7 +122,6 @@ def _extract_custom_agent_config(agent_data: Dict[str, Any], version_data: Optio
'restrictions': {}
}
# Fallback: create default config for custom agents without version data
logger.warning(f"No version data found for custom agent {agent_id}, creating default configuration")
return {
@ -143,6 +138,9 @@ def _extract_custom_agent_config(agent_data: Dict[str, Any], version_data: Optio
'avatar': agent_data.get('avatar'),
'avatar_color': agent_data.get('avatar_color'),
'profile_image_url': agent_data.get('profile_image_url'),
'icon_name': agent_data.get('icon_name'),
'icon_color': agent_data.get('icon_color'),
'icon_background': agent_data.get('icon_background'),
'is_default': agent_data.get('is_default', False),
'is_suna_default': False,
'centrally_managed': False,

View File

@ -293,7 +293,6 @@ function AgentConfigurationContent() {
setFormData(prev => ({ ...prev, profile_image_url: profileImageUrl || '' }));
setOriginalData(prev => ({ ...prev, profile_image_url: profileImageUrl || '' }));
toast.success('Profile picture updated');
} catch (error) {
toast.error('Failed to update profile picture');
throw error;

View File

@ -10,7 +10,6 @@ import {
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
DropdownMenuSeparator,
} from '@/components/ui/dropdown-menu';
import {
AlertDialog,
@ -22,7 +21,6 @@ import {
AlertDialogHeader,
AlertDialogTitle,
} from '@/components/ui/alert-dialog';
import type { MarketplaceTemplate } from '@/components/agents/installation/types';
import { KortixLogo } from '@/components/sidebar/kortix-logo';
export type AgentCardMode = 'marketplace' | 'template' | 'agent';

View File

@ -35,6 +35,10 @@ class AgentCreateRequest:
is_default: bool = False
avatar: Optional[str] = None
avatar_color: Optional[str] = None
profile_image_url: Optional[str] = None
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
@dataclass
@ -47,6 +51,10 @@ class AgentUpdateRequest:
is_default: Optional[bool] = None
avatar: Optional[str] = None
avatar_color: Optional[str] = None
profile_image_url: Optional[str] = None
icon_name: Optional[str] = None
icon_color: Optional[str] = None
icon_background: Optional[str] = None
@dataclass