给rwkv-pytorch 写个chat ui demo

news2025/1/15 21:10:18

在这里插入图片描述

rwkv-pytorch 项目地址

rwkv-pytorch

from nicegui import ui

message_dict = {1: [{"name":"Assistant","text":"你好"}]}
current_name = 1
import aiohttp


async def get_text_async(text="Hello, how are you?"):
    # 定义API的URL
    url = "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_TOKENIZER

app = 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_musa
    elif device == "npu":
        import torch_npu

    model = RWKV_RNN(args).to(device)
    tokenizer = RWKV_TOKENIZER("asset/rwkv_vocab_v20230424.txt")
    return model, tokenizer, device

model, tokenizer, device = init_model()

# 生成文本的函数
def generate_text(input_text):
    # 设置续写的初始字符串和参数
    batch_size = 1
    TEMPERATURE = 2.5
    TOP_P = 0.1
    LENGTH_PER_TRIAL = 50

    encoded_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 uvicorn
    uvicorn.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"])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1608975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA 项目<果园之窗>_1

这几天有空看能不能把水果店管理系统整出来,目标是整个网页版本的,以我的电脑做服务器,数据存在mysql中 以我目前的理解整个项目大致可分为前端部分、后端部分、数据库部分,也就这三个部分 目前打开并运行了一个别人的项目&#…

盒子模型之怪异盒模型

这个是标准盒模型 这个是怪异盒模型 box-sizing:content-box;默认是标准盒模型 box-sizing:border-box;是怪异盒模型&#xff0c;会挤压里面的内容&#xff0c;不管怎么设置边框始终都是当初设置的200px <!DOCTYPE html> <html lang"en"> <head>…

MongoDB学习【一】MongoDB简介和部署

MongoDB简介 MongoDB是一种开源的、面向文档的、分布式的NoSQL数据库系统&#xff0c;由C语言编写而成。它的设计目标是为了适应现代Web应用和大数据处理场景的需求&#xff0c;提供高可用性、横向扩展能力和灵活的数据模型。 主要特点&#xff1a; 文档模型&#xff1a; Mon…

前端vue自定义table 表格 表格组件 Excel组件

前端组件化开发与Excel组件设计 一、前端开发的复杂性与组件化的必要性 随着技术的发展&#xff0c;前端开发的复杂度越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&…

开源大数据集群部署(二十一)Spark on yarn 部署

作者&#xff1a;櫰木 1 spark on yarn安装&#xff08;每个节点&#xff09; cd /root/bigdata/ tar -xzvf spark-3.3.1-bin-hadoop3.tgz -C /opt/ ln -s /opt/spark-3.3.1-bin-hadoop3 /opt/spark chown -R spark:spark /opt/spark-3.3.1-bin-hadoop32 配置环境变量及修改配…

大话设计模式-装饰器模式

大话设计模式书中&#xff0c;作者举了一个穿衣服的例子来为我们引入装饰器模式。 概念 定义 装饰模式在书中的定义是&#xff1a;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更灵活。 这句话直接去理解可能会有点抽象&#…

有没有手机上使用的库存软件

库存软件是一种仓库的信息管理系统&#xff0c;它主要针对出库与入库这些数据进行管理&#xff0c;传统的库存管理都是在电脑上安装一个专门的数据库管理系统进行管理&#xff0c;这也是一种比较成熟的管理方式&#xff0c;那么有没有手机上使用的库存软件。 手机上使用的库存软…

学习Python先从了解Python开始

Python是一种高级编程语言&#xff0c;它的语法简洁易读&#xff0c;功能强大&#xff0c;应用领域广泛。Python不仅适用于数据科学、机器学习、Web开发等领域&#xff0c;还可以用于自动化脚本编写、游戏开发等。在本文中&#xff0c;我们将探讨Python的特点、应用领域以及未来…

搭建HBase2.x完全分布式集群(CentOS 9 + Hadoop3.x)

Apache HBase™是一个分布式、可扩展、大数据存储的Hadoop数据库。 当我们需要对大数据进行随机、实时的读/写访问时&#xff0c;可以使用HBase。这个项目的目标是在通用硬件集群上托管非常大的表——数十亿行X数百万列。Apache HBase是一个开源、分布式、版本化的非关系数据库…

Echarts-丝带图

Echarts-丝带图 demo地址 打开CodePen 什么是丝带图&#xff1f; 丝带图是Power BI中独有额可视化视觉对象&#xff0c;它的工具提示能展示指标当期与下期的数据以及排名。需求&#xff1a;使用丝带图展示"2022年点播订单表"不同月份不同点播套餐对应订单数据。 …

STM32直接存储器存取DMA

前提知识&#xff1a; 1、STM32F103内部存储器结构以及映射 STM32F103的程序存储器、数据存储器、寄存器和IO端口被组织在同一个4GB的线性地址空间内。数据字节以小端模式存放在存储器中。即低地址中存放的是字数据的低字节&#xff0c;高地址中存放的是字数据的高字节 可访问…

k8s部署Eureka集群

部署有状态负载 镜像配置&#xff1a; 环境变量如下&#xff1a; AUTHENTICATE_ENABLEtrue JAVA_OPTS-Dauth.userName账号 -Dauth.password密码 MY_POD_NAMEmetadata.name BOOL_REGISTERtrue BOOL_FETCHtrue APPLICATION_NAME负载名称 EUREKA_INSTANCE_HOSTNAME${MY_POD_NA…

Java基础之JVM基础调优与常见问题

常见命令 以下命令的介绍&#xff0c;全部在jdk8环境下运行的&#xff1b; jps ☆☆☆☆☆ 查看当前运行的进程号&#xff1b; jmap ☆☆☆ jmap命令可以查看jvm的内存信息&#xff0c;class对应的实例个数以及占用的内存大小 jmap -histo 查看当前java进程 [rdVM-8-12-c…

光伏无人机勘探技术应用分析

光伏无人机勘探与传统勘探想必&#xff0c;具有智能化作业、测控精度高、环境适应性强等明显优势&#xff1b;卫星勘探辅助其能更快速甚至实时完成测绘拼图&#xff1b;在进行勘察时&#xff0c;可根据需要自由更换机载设备&#xff1b;自动诗经建模使数据更直观&#xff0c;工…

Python 基于docker部署的Mysql备份查询脚本

前言 此环境是基于docker部署的mysql&#xff0c;docker部署mysql可以参考如下链接&#xff1a; docker 部署服务案例-CSDN博客 颜色块文件 rootbogon:~ 2024-04-18 16:34:23# cat DefaultColor.py ######################################################################…

stm32二刷-GPIO

一 什么是 GPIO: GPIO(general porpose intput output), 通用输入输出端口 . 二 我们先认识芯片控制 GPIO 输出控制。 2.1LED 硬件原理如图&#xff1a; 当电流从这根电线流通&#xff0c; LED 亮。当电流不通过这根电线&#xff0c; LED 灭。 上面 PF** &#xff0c;芯片电…

如何安全、高速、有效地利用IP代理爬取数据

陈老老老板&#x1f9d9;‍♂️ &#x1f46e;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f934;本文简述&#xff1a;如何安全、高速、有效地利用IP代理爬取数据 &#x1f473…

HTX亮相迪拜Blockchain Life 2024:推动加密应用广泛落地

4月15-17日&#xff0c;HTX独家赞助于迪拜举办的Blockchain Life 2024峰会注册处&#xff0c;并以峰会蓝宝石赞助商身份亮相展区。 作为全球领先的头部交易所&#xff0c;HTX致力于推动区块链技术的创新与发展。此次赞助顶级加密峰会Blockchain Life 2024&#xff0c;不仅是对…

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

外包干了6天,技术明显退步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年3月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…