fix diff
All checks were successful
Build and Deploy Backend / build-and-deploy (push) Successful in 2m37s
All checks were successful
Build and Deploy Backend / build-and-deploy (push) Successful in 2m37s
This commit is contained in:
parent
35e4ef2256
commit
4736f63040
@ -73,7 +73,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
UserDevice.objects.filter(
|
||||
user=request.user,
|
||||
is_active=True
|
||||
).select_related('device', 'device__device_type', 'spirit', 'role_memory')
|
||||
).select_related('device', 'device__device_type', 'spirit', 'role_memory', 'role_memory__device_type')
|
||||
.order_by('-bind_time')[:1]
|
||||
)
|
||||
if not devices:
|
||||
@ -132,7 +132,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
if existing and existing.user != request.user:
|
||||
return error(code=ErrorCode.DEVICE_ALREADY_BOUND, message='设备已被其他用户绑定')
|
||||
|
||||
# 创建角色记忆
|
||||
# 创建角色记忆(始终创建新的)
|
||||
role_memory = None
|
||||
if device.device_type:
|
||||
role_memory = RoleMemory.objects.create(
|
||||
@ -175,7 +175,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
user_devices = UserDevice.objects.filter(
|
||||
user=request.user,
|
||||
is_active=True
|
||||
).select_related('device', 'device__device_type', 'spirit', 'role_memory')
|
||||
).select_related('device', 'device__device_type', 'spirit', 'role_memory', 'role_memory__device_type')
|
||||
|
||||
serializer = UserDeviceSerializer(user_devices, many=True)
|
||||
return success(data=serializer.data)
|
||||
@ -356,9 +356,9 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
# ==================== 角色记忆相关端点 ====================
|
||||
|
||||
@action(detail=True, methods=['get'], url_path='role-memory')
|
||||
def get_role_memory(self, request, pk=None):
|
||||
def role_memory_detail(self, request, pk=None):
|
||||
"""
|
||||
获取设备的角色记忆
|
||||
获取当前设备的角色记忆
|
||||
GET /api/v1/devices/{user_device_id}/role-memory/
|
||||
"""
|
||||
try:
|
||||
@ -369,12 +369,12 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
|
||||
|
||||
if not user_device.role_memory:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在')
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
|
||||
|
||||
return success(data=RoleMemorySerializer(user_device.role_memory).data)
|
||||
|
||||
@action(detail=True, methods=['put'], url_path='role-memory/settings')
|
||||
def update_role_memory_settings(self, request, pk=None):
|
||||
def role_memory_settings(self, request, pk=None):
|
||||
"""
|
||||
更新角色记忆-设备设置
|
||||
PUT /api/v1/devices/{user_device_id}/role-memory/settings/
|
||||
@ -387,7 +387,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
|
||||
|
||||
if not user_device.role_memory:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在')
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
|
||||
|
||||
serializer = RoleMemorySettingsUpdateSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
@ -401,9 +401,9 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return success(data=RoleMemorySerializer(rm).data, message='设置已保存')
|
||||
|
||||
@action(detail=True, methods=['put'], url_path='role-memory/agent')
|
||||
def update_role_memory_agent(self, request, pk=None):
|
||||
def role_memory_agent(self, request, pk=None):
|
||||
"""
|
||||
更新角色记忆-Agent信息(提示词、音色)
|
||||
更新角色记忆-Agent信息
|
||||
PUT /api/v1/devices/{user_device_id}/role-memory/agent/
|
||||
"""
|
||||
try:
|
||||
@ -414,7 +414,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
|
||||
|
||||
if not user_device.role_memory:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在')
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
|
||||
|
||||
serializer = RoleMemoryAgentUpdateSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
@ -428,7 +428,7 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return success(data=RoleMemorySerializer(rm).data, message='Agent信息已更新')
|
||||
|
||||
@action(detail=True, methods=['put'], url_path='role-memory/memory')
|
||||
def update_role_memory_summary(self, request, pk=None):
|
||||
def role_memory_summary(self, request, pk=None):
|
||||
"""
|
||||
更新角色记忆-聊天记忆摘要
|
||||
PUT /api/v1/devices/{user_device_id}/role-memory/memory/
|
||||
@ -441,17 +441,16 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
|
||||
|
||||
if not user_device.role_memory:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在')
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
|
||||
|
||||
serializer = RoleMemoryMemoryUpdateSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
return error(message=str(serializer.errors))
|
||||
|
||||
rm = user_device.role_memory
|
||||
rm.memory_summary = serializer.validated_data['memory_summary']
|
||||
rm.save(update_fields=['memory_summary', 'updated_at'])
|
||||
user_device.role_memory.memory_summary = serializer.validated_data['memory_summary']
|
||||
user_device.role_memory.save(update_fields=['memory_summary', 'updated_at'])
|
||||
|
||||
return success(data=RoleMemorySerializer(rm).data, message='记忆摘要已更新')
|
||||
return success(message='聊天记忆已更新')
|
||||
|
||||
@action(detail=False, methods=['get'], url_path='role-memories')
|
||||
def role_memory_list(self, request):
|
||||
@ -459,18 +458,13 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
获取角色记忆列表
|
||||
GET /api/v1/devices/role-memories/?device_type_id=1&is_bound=false
|
||||
"""
|
||||
qs = RoleMemory.objects.filter(
|
||||
user=request.user
|
||||
).select_related('device_type').order_by('-created_at')
|
||||
|
||||
qs = RoleMemory.objects.filter(user=request.user).select_related('device_type')
|
||||
device_type_id = request.query_params.get('device_type_id')
|
||||
if device_type_id:
|
||||
qs = qs.filter(device_type_id=device_type_id)
|
||||
|
||||
is_bound = request.query_params.get('is_bound')
|
||||
if is_bound is not None:
|
||||
qs = qs.filter(is_bound=is_bound.lower() == 'true')
|
||||
|
||||
return success(data=RoleMemorySerializer(qs, many=True).data)
|
||||
|
||||
@action(detail=True, methods=['put'], url_path='switch-role-memory')
|
||||
@ -489,12 +483,12 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
|
||||
role_memory_id = request.data.get('role_memory_id')
|
||||
if not role_memory_id:
|
||||
return error(message='请指定角色记忆ID')
|
||||
return error(message='role_memory_id 不能为空')
|
||||
|
||||
try:
|
||||
new_rm = RoleMemory.objects.get(id=role_memory_id, user=request.user)
|
||||
except RoleMemory.DoesNotExist:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在')
|
||||
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
|
||||
|
||||
# 校验: 目标记忆必须是同一设备类型
|
||||
if user_device.device.device_type_id and new_rm.device_type_id != user_device.device.device_type_id:
|
||||
@ -504,17 +498,15 @@ class DeviceViewSet(viewsets.ViewSet):
|
||||
if new_rm.is_bound:
|
||||
return error(code=ErrorCode.ROLE_MEMORY_ALREADY_BOUND, message='该角色记忆正在被其他设备使用')
|
||||
|
||||
# 旧记忆标记闲置
|
||||
# 执行切换:旧记忆标记闲置,新记忆标记绑定
|
||||
old_rm = user_device.role_memory
|
||||
if old_rm:
|
||||
old_rm.is_bound = False
|
||||
old_rm.save(update_fields=['is_bound', 'updated_at'])
|
||||
|
||||
# 新记忆标记绑定
|
||||
new_rm.is_bound = True
|
||||
new_rm.save(update_fields=['is_bound', 'updated_at'])
|
||||
|
||||
# 更新绑定关系
|
||||
user_device.role_memory = new_rm
|
||||
user_device.save(update_fields=['role_memory'])
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user