给rwkv-pytorch 写个chat ui demo

2024-04-20 06:44
文章标签 ui pytorch demo chat 写个 rwkv

本文主要是介绍给rwkv-pytorch 写个chat ui demo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

rwkv-pytorch 项目地址

rwkv-pytorch

from nicegui import uimessage_dict = {1: [{"name":"Assistant","text":"你好"}]}
current_name = 1
import aiohttpasync def get_text_async(text="Hello, how are you?"):# 定义API的URLurl = "http://127.0.0.1:8000/generate/"# 定义要发送的数据data = {"text": text}# 发送POST请求async with aiohttp.ClientSession() as session:async with session.post(url, json=data) as response:# 解析响应内容res = await response.json()print(res)return res["response"].split("\n\n")[1][11:]async def send_message_async(text,name):# 获取输入文本input_text = text.value# 将响应消息添加到消息字典message_dict[current_name].append({"name": "User", "text": text.value})# 刷新聊天窗口chat_win_refresh.refresh()# 发送消息并等待响应response_text = await get_text_async(name+":"+input_text+"\n\nAssistant:")# 将响应消息添加到消息字典message_dict[current_name].append({"name":"Assistant","text":response_text})# 刷新聊天窗口chat_win_refresh.refresh()def basic_left_layout():with ui.column():ui.label("这是设置")ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')ui.label('I\'m a column')@ui.refreshable
def chat_win_refresh():with ui.scroll_area().style("height: {}px; width: {}px;".format(500, 725)) as area:for history in message_dict[current_name]:if history["name"]=="User":ui.chat_message(history["text"],name=history["name"],stamp='now',avatar='https://robohash.org/ui',sent=True).style("margin-right: 1px;margin-left: auto;")else:ui.chat_message(history["text"],name=history["name"],stamp='now',avatar='https://robohash.org/ui', sent=False).style("margin-left: 1px;")area.scroll_to(percent=1)def basic_right_layout_children():with ui.column().style("margin-top: 5px;"):with ui.card().style("width:780px; margin-top: 5px;"):chat_win_refresh()with ui.card().style("width:780px;"):with ui.row():text = ui.textarea(label='Text', placeholder='start typing').style("width:605px;")# button 可以是一个图片表示区别机器方可ui.button('Click me!', on_click=lambda: send_message_async(text,"User"))def basic_main_layout():with ui.column().style("margin:auto;"):with ui.card().style("height: {}px; width: {}px;".format(60, 1016)):ui.label("I'm a card")with ui.row():with ui.card().style("height: {}px; width: {}px;margin-top: 25px;".format(725, 200)):with ui.scroll_area().style("height: {}px; width: {}px;".format(800, 200)):basic_left_layout()# with ui.card().style("height: {}px; width: {}px;".format(1000, 800)):with ui.scroll_area().style("height: {}px; width: {}px;".format(1000, 816)):basic_right_layout_children()basic_main_layout()
ui.run(host="127.0.0.1", port=808)

服务

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import torch
from src.model import RWKV_RNN
from src.sampler import sample_logits
from src.rwkv_tokenizer import RWKV_TOKENIZERapp = FastAPI()# 定义请求体模型
class MessageRequest(BaseModel):text: str# 定义响应体模型
class MessageResponse(BaseModel):response: str# 初始化模型和分词器
def init_model():args = {'MODEL_NAME': 'weight/RWKV-x060-World-1B6-v2-20240208-ctx4096','vocab_size': 65536,'device': "cpu",'onnx_opset': '12',}device = args['device']assert device in ['cpu', 'cuda', 'musa', 'npu']if device == "musa":import torch_musaelif device == "npu":import torch_npumodel = RWKV_RNN(args).to(device)tokenizer = RWKV_TOKENIZER("asset/rwkv_vocab_v20230424.txt")return model, tokenizer, devicemodel, tokenizer, device = init_model()# 生成文本的函数
def generate_text(input_text):# 设置续写的初始字符串和参数batch_size = 1TEMPERATURE = 2.5TOP_P = 0.1LENGTH_PER_TRIAL = 50encoded_input = tokenizer.encode([input_text] * batch_size)token = torch.tensor(encoded_input).long().to(device)state = torch.zeros(batch_size, model.state_size[0], model.state_size[1]).to(device)with torch.no_grad():token_out, state_out = model.forward_parallel(token, state)out = token_out[:, -1]for step in range(LENGTH_PER_TRIAL):token_sampled = sample_logits(out, TEMPERATURE, TOP_P)token = torch.cat((token, token_sampled.unsqueeze(1)), 1)with torch.no_grad():out, state = model.forward(token_sampled, state)decoded_sequences = tokenizer.decode(token.cpu().tolist())return decoded_sequences[-1]# 定义路由
@app.post("/generate/", response_model=MessageResponse)
async def create_message(message_request: MessageRequest):try:response_text = generate_text(message_request.text)return MessageResponse(response=response_text)except Exception as e:raise HTTPException(status_code=500, detail=str(e))# 运行FastAPI应用
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

简单的请求

import requests# 定义API的URL
url = "http://127.0.0.1:8000/generate/"# 定义要发送的数据
data = {"text": "你好,这是一个测试。"}# 发送POST请求
response = requests.post(url, json=data)# 打印响应内容
print(response.json()["response"])

这篇关于给rwkv-pytorch 写个chat ui demo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919547

相关文章

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

从零教你安装pytorch并在pycharm中使用

《从零教你安装pytorch并在pycharm中使用》本文详细介绍了如何使用Anaconda包管理工具创建虚拟环境,并安装CUDA加速平台和PyTorch库,同时在PyCharm中配置和使用PyTor... 目录背景介绍安装Anaconda安装CUDA安装pytorch报错解决——fbgemm.dll连接p

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状