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
2 changes: 1 addition & 1 deletion python/configs/agent_cards/aswath_damodaran_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/ben_graham_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/bill_ackman_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/cathie_wood_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/charlie_munger_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/fundamentals_analyst_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/michael_burry_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/mohnish_pabrai_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/peter_lynch_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/phil_fisher_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/rakesh_jhunjhunwala_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/sentiment_analyst_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/technical_analyst_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
1 change: 1 addition & 0 deletions python/configs/agent_cards/trading_agents.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"US market"
]
}],
"enabled": false,
"provider": {
"organization": "Tauric",
"url": "https://arxiv.org/abs/2412.20138"
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/valuation_analyst_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
2 changes: 1 addition & 1 deletion python/configs/agent_cards/warren_buffett_agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
]
}
],
"enabled": true,
"enabled": false,
"metadata": {
"version": "1.0.0",
"author": "ValueCell Team",
Expand Down
54 changes: 53 additions & 1 deletion python/valuecell/server/api/routers/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,13 @@
from fastapi import APIRouter, Depends, HTTPException, Path, Query
from sqlalchemy.orm import Session

from valuecell.server.api.schemas.agent import AgentListResponse, AgentResponse
from valuecell.server.api.schemas.agent import (
AgentEnableRequest,
AgentEnableResponse,
AgentEnableSuccessResponse,
AgentListResponse,
AgentResponse,
)
from valuecell.server.api.schemas.base import SuccessResponse
from valuecell.server.db import get_db
from valuecell.server.services.agent_service import AgentService
Expand Down Expand Up @@ -124,4 +130,50 @@ async def get_agent_by_name(
detail=f"Failed to retrieve agent information: {str(e)}",
)

@router.post(
"/{agent_name}/enable",
response_model=AgentEnableSuccessResponse,
summary="Update agent enable status",
description="Enable or disable an agent by its name",
)
async def update_agent_enable_status(
agent_name: str = Path(..., description="Name of the agent"),
request: AgentEnableRequest = ...,
db: Session = Depends(get_db),
) -> AgentEnableSuccessResponse:
"""
Update the enabled status of a specific agent by name.

- **agent_name**: Name of the agent to update
- **enabled**: Whether to enable (true) or disable (false) the agent

Returns updated agent status information, or 404 error if agent doesn't exist.
"""
try:
updated_agent = AgentService.update_agent_enabled(
db=db, agent_name=agent_name, enabled=request.enabled
)
if not updated_agent:
raise HTTPException(
status_code=404, detail=f"Agent with name '{agent_name}' not found"
)

response_data = AgentEnableResponse(
agent_name=updated_agent.agent_name,
enabled=updated_agent.enabled,
message=f"Agent '{agent_name}' has been {'enabled' if request.enabled else 'disabled'} successfully"
)

return SuccessResponse.create(
data=response_data,
msg=f"Successfully {'enabled' if request.enabled else 'disabled'} agent '{agent_name}'"
)
except HTTPException:
raise
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"Failed to update agent status: {str(e)}",
)

return router
15 changes: 15 additions & 0 deletions python/valuecell/server/api/schemas/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ class AgentQueryParams(BaseModel):
)


class AgentEnableRequest(BaseModel):
"""Request model for updating agent enable status."""

enabled: bool = Field(..., description="Whether to enable or disable the agent")


class AgentEnableResponse(BaseModel):
"""Response model for agent enable status update."""

agent_name: str = Field(..., description="Name of the agent")
enabled: bool = Field(..., description="Current enabled status")
message: str = Field(..., description="Status update message")


# Type aliases for SuccessResponse
AgentResponse = SuccessResponse[AgentData]
AgentListResponse = SuccessResponse[AgentListData]
AgentEnableSuccessResponse = SuccessResponse[AgentEnableResponse]
41 changes: 41 additions & 0 deletions python/valuecell/server/services/agent_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Agent service layer for handling agent-related business logic.
"""

from datetime import datetime
from typing import Optional

from sqlalchemy import and_, or_
Expand Down Expand Up @@ -106,6 +107,46 @@ def get_agent_by_id(db: Session, agent_id: int) -> Optional[AgentData]:
updated_at=agent.updated_at,
)

@staticmethod
def update_agent_enabled(db: Session, agent_name: str, enabled: bool) -> Optional[AgentData]:
"""
Update the enabled status of an agent by name.

Args:
db: Database session
agent_name: Name of the agent to update
enabled: New enabled status

Returns:
Updated AgentData if found and updated, None if agent not found
"""
agent = db.query(Agent).filter(Agent.name == agent_name).first()

if not agent:
return None

# Update the enabled status and timestamp
agent.enabled = enabled
agent.updated_at = datetime.utcnow()

# Commit the changes
db.commit()
db.refresh(agent)

return AgentData(
id=agent.id,
agent_name=agent.name,
display_name=agent.display_name,
description=agent.description,
version=agent.version,
enabled=agent.enabled,
icon_url=agent.icon_url,
agent_metadata=agent.agent_metadata,
config=agent.config,
created_at=agent.created_at,
updated_at=agent.updated_at,
)

@staticmethod
def get_agent_by_name(db: Session, agent_name: str) -> Optional[AgentData]:
"""
Expand Down