Compare commits
No commits in common. "8dcef0cff2d566321e6f84620e68ee60385cffa4" and "cbfa7042990612b0ee5f5864919a57e9a37fbf2e" have entirely different histories.
8dcef0cff2
...
cbfa704299
@ -173,35 +173,7 @@
|
|||||||
"Bash(ls c:/Users/admin/Desktop/Lila-Server/qy_lty/settings*)",
|
"Bash(ls c:/Users/admin/Desktop/Lila-Server/qy_lty/settings*)",
|
||||||
"Bash(python manage.py makemigrations card)",
|
"Bash(python manage.py makemigrations card)",
|
||||||
"Bash(python manage.py runserver)",
|
"Bash(python manage.py runserver)",
|
||||||
"Bash(start cmd:*)",
|
"Bash(start cmd:*)"
|
||||||
"Bash(redis-cli ping:*)",
|
|
||||||
"Bash(where redis-cli:*)",
|
|
||||||
"Bash(cmd //c \"where redis-cli\")",
|
|
||||||
"Bash(cmd //c \"where redis-server\")",
|
|
||||||
"Read(//c//**)",
|
|
||||||
"Bash(cmd //c \"where /R C:\\\\\\\\Program Files redis-server.exe\")",
|
|
||||||
"Bash(cmd //c \"where /R C:\\\\\\\\Users\\\\\\\\admin redis-server.exe\")",
|
|
||||||
"Read(//c/Redis/**)",
|
|
||||||
"Read(//c/Program Files/Redis/**)",
|
|
||||||
"Bash(docker info:*)",
|
|
||||||
"Bash(cmd //c \"sc query Redis\")",
|
|
||||||
"Bash(conda run:*)",
|
|
||||||
"Bash(cmd //c \"conda activate fengye && pip show django-redis\")",
|
|
||||||
"Bash(conda env:*)",
|
|
||||||
"Bash(cmd //c \"conda env list\")",
|
|
||||||
"Read(//c/Users/admin/anaconda3/Scripts/**)",
|
|
||||||
"Read(//c/Users/admin/miniconda3/Scripts/**)",
|
|
||||||
"Read(//c/ProgramData/anaconda3/Scripts/**)",
|
|
||||||
"Read(//c/ProgramData/miniconda3/Scripts/**)",
|
|
||||||
"Bash(cmd //c \"where python\")",
|
|
||||||
"Bash(cmd //c \"C:\\\\python\\\\python.exe -c \\\\\"import django; print\\(django.get_version\\(\\)\\)\\\\\"\")",
|
|
||||||
"Bash(cmd //c \"C:\\\\python\\\\python.exe -m pip list\")",
|
|
||||||
"Bash(cmd //c \"netstat -ano | findstr :8000 | findstr LISTENING\")",
|
|
||||||
"Bash(cmd //c \"netstat -ano | findstr :3000 | findstr LISTENING\")",
|
|
||||||
"Bash(cmd //c \"netstat -ano | findstr LISTENING | findstr /R \\\\\"8000 3000\\\\\"\")",
|
|
||||||
"Bash(cmd //c \"netstat -ano\")",
|
|
||||||
"Bash(/c/python/python.exe -m daphne -b 0.0.0.0 -p 8000 qy_lty.asgi:application)",
|
|
||||||
"Bash(kill %1)"
|
|
||||||
],
|
],
|
||||||
"additionalDirectories": [
|
"additionalDirectories": [
|
||||||
"C:\\Users\\admin\\.claude"
|
"C:\\Users\\admin\\.claude"
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
def create_rtc_bot(apps, schema_editor):
|
|
||||||
Bot = apps.get_model('aiapp', 'Bot')
|
|
||||||
Bot.objects.get_or_create(
|
|
||||||
name='RTC_Voice_Agent',
|
|
||||||
defaults={'description': 'RTC实时语音智能体'}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def remove_rtc_bot(apps, schema_editor):
|
|
||||||
Bot = apps.get_model('aiapp', 'Bot')
|
|
||||||
Bot.objects.filter(name='RTC_Voice_Agent').delete()
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('aiapp', '0002_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RunPython(create_rtc_bot, remove_rtc_bot),
|
|
||||||
]
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from .views import ChatBotAPIView, MultiChatAPIView, BotViewSet, RTCChatHistoryAPIView
|
from .views import ChatBotAPIView, MultiChatAPIView, BotViewSet
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register(r'bots', BotViewSet, basename='bot')
|
router.register(r'bots', BotViewSet, basename='bot')
|
||||||
@ -9,5 +9,4 @@ urlpatterns = [
|
|||||||
path('', include(router.urls)),
|
path('', include(router.urls)),
|
||||||
path('chat/<int:bot_id>/', ChatBotAPIView.as_view(), name='chat-bot'),
|
path('chat/<int:bot_id>/', ChatBotAPIView.as_view(), name='chat-bot'),
|
||||||
path('multichat/', MultiChatAPIView.as_view(), name='multi-chat'),
|
path('multichat/', MultiChatAPIView.as_view(), name='multi-chat'),
|
||||||
path('rtc-chat-history/', RTCChatHistoryAPIView.as_view(), name='rtc-chat-history'),
|
|
||||||
]
|
]
|
||||||
|
|||||||
@ -9,7 +9,6 @@ from rest_framework.permissions import IsAuthenticated
|
|||||||
from userapp.authentication import RedisTokenAuthentication
|
from userapp.authentication import RedisTokenAuthentication
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from common.swagger_utils import swagger_schema
|
from common.swagger_utils import swagger_schema
|
||||||
from common.responses import success_response, created_response, error_response
|
|
||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from drf_yasg.utils import swagger_auto_schema
|
from drf_yasg.utils import swagger_auto_schema
|
||||||
import logging
|
import logging
|
||||||
@ -428,89 +427,4 @@ def create_user_message(user: ParadiseUser, bot: Bot, message_type: str, user_me
|
|||||||
logger.info(f"Created video message for user {user.id} and bot {bot.id}")
|
logger.info(f"Created video message for user {user.id} and bot {bot.id}")
|
||||||
return user_chat_message
|
return user_chat_message
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class RTCChatHistoryAPIView(APIView):
|
|
||||||
"""
|
|
||||||
RTC 语音智能体聊天记录接口
|
|
||||||
|
|
||||||
GET: 获取当前用户的 RTC 聊天历史
|
|
||||||
POST: 保存一条 RTC 聊天消息
|
|
||||||
DELETE: 清空当前用户的 RTC 聊天记录
|
|
||||||
"""
|
|
||||||
authentication_classes = [RedisTokenAuthentication]
|
|
||||||
permission_classes = [IsAuthenticated]
|
|
||||||
|
|
||||||
RTC_BOT_NAME = 'RTC_Voice_Agent'
|
|
||||||
|
|
||||||
def _get_rtc_bot(self):
|
|
||||||
try:
|
|
||||||
return Bot.objects.get(name=self.RTC_BOT_NAME)
|
|
||||||
except Bot.DoesNotExist:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get(self, request):
|
|
||||||
bot = self._get_rtc_bot()
|
|
||||||
if bot is None:
|
|
||||||
return error_response(message='RTC Bot 未配置', code=500, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
||||||
|
|
||||||
page_size = int(request.query_params.get('page_size', 50))
|
|
||||||
page_size = min(page_size, 200)
|
|
||||||
|
|
||||||
queryset = ChatMessage.objects.filter(
|
|
||||||
user=request.user,
|
|
||||||
bot=bot
|
|
||||||
).order_by('timestamp')
|
|
||||||
|
|
||||||
total = queryset.count()
|
|
||||||
messages = queryset[max(0, total - page_size):]
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'messages': [
|
|
||||||
{
|
|
||||||
'id': msg.id,
|
|
||||||
'message': msg.message,
|
|
||||||
'sender': msg.sender,
|
|
||||||
'timestamp': msg.timestamp.isoformat(),
|
|
||||||
}
|
|
||||||
for msg in messages
|
|
||||||
],
|
|
||||||
'total': total,
|
|
||||||
'has_more': total > page_size,
|
|
||||||
}
|
|
||||||
return success_response(data=data)
|
|
||||||
|
|
||||||
def post(self, request):
|
|
||||||
bot = self._get_rtc_bot()
|
|
||||||
if bot is None:
|
|
||||||
return error_response(message='RTC Bot 未配置', code=500, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
||||||
|
|
||||||
message_text = request.data.get('message', '').strip()
|
|
||||||
sender = request.data.get('sender', '').strip()
|
|
||||||
|
|
||||||
if not message_text:
|
|
||||||
return error_response(message='消息内容不能为空')
|
|
||||||
if sender not in ('user', 'assistant'):
|
|
||||||
return error_response(message='sender 必须是 user 或 assistant')
|
|
||||||
|
|
||||||
chat_msg = ChatMessage.objects.create(
|
|
||||||
user=request.user,
|
|
||||||
bot=bot,
|
|
||||||
message=message_text,
|
|
||||||
sender=sender,
|
|
||||||
message_type=ChatMessage.MESSAGE_TYPE_TEXT,
|
|
||||||
)
|
|
||||||
|
|
||||||
return created_response(data={
|
|
||||||
'id': chat_msg.id,
|
|
||||||
'timestamp': chat_msg.timestamp.isoformat(),
|
|
||||||
})
|
|
||||||
|
|
||||||
def delete(self, request):
|
|
||||||
bot = self._get_rtc_bot()
|
|
||||||
if bot is None:
|
|
||||||
return error_response(message='RTC Bot 未配置', code=500, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
||||||
|
|
||||||
count, _ = ChatMessage.objects.filter(user=request.user, bot=bot).delete()
|
|
||||||
return success_response(data={'deleted': count}, message=f'已删除 {count} 条记录')
|
|
||||||
Loading…
x
Reference in New Issue
Block a user