Spaces:
Runtime error
Runtime error
import { BingWebBot } from '@/lib/bots/bing' | |
import { BingConversationStyle, ChatMessageModel, BotId } from '@/lib/bots/bing/types' | |
import { nanoid } from '@/lib/utils' | |
import { atom } from 'jotai' | |
import { atomWithImmer } from 'jotai-immer' | |
import { atomWithStorage } from 'jotai/utils' | |
import { atomFamily } from 'jotai/utils' | |
import { atomWithHash, atomWithLocation } from 'jotai-location' | |
const initialMessages: ChatMessageModel[] = [ | |
{ author: 'system', text: 'conversation between user and robot', id: '1' }, | |
{ author: 'user', text: '销量最高的 3 种宠物吸尘器有哪些优点和缺点? ', id: '2' }, | |
{ | |
author: 'bot', text: ` | |
您好,这是必应。根据网上的搜索结果,我为您找到了以下三款销量最高的宠物吸尘器,以及它们的优点和缺点: | |
- **戴森Dyson V10轻量版 Digital Slim Fluffy无线吸尘器**[^1^] [^3^]:这款吸尘器专为宠物家庭设计,拥有强大吸力和多功能吸头,能够有效清除宠物毛发和灰尘。 | |
- 优点:轻便易用,续航时间长,过滤系统先进,能够有效去除过敏原; | |
- 缺点:价格较高,噪音较大,需要定期清洁滤网。 | |
- **飞利浦FC6908/82(W7)无线吸尘器**[^2^] [^4^]:这是一款手持式干吸无线吸尘器,专门为宠物家庭设计。它具有75分钟的超高续航,适合大户型;除螨涡轮刷,可以深度清洁床单被罩,免受螨虫侵害;吸拖一体设计,280ml大水箱,还可以往水箱里加入清洁剂。 | |
- 优点:清洁性能强劲,操作方便,适用多种场景; | |
- 缺点:噪音较大,达到84dB(A);尘杯容量较小,只有0.6L;充电时长较长,需要5小时。 | |
- **必胜(Bissell) 宠物吸尘器**[^2^]:这是一款便携式手持真空吸尘器,专为清理宠物毛发而设计。它配备特殊的橡胶喷嘴和软毛刷头,可以轻松拾取宠物毛发和灰尘;几乎静音运行。 | |
- 优点:轻巧易用,重量只有1.36kg;电池可充电可更换; | |
- 缺点:续航时间不稳定,在15-30分钟之间浮动;吸力不够强劲,在地毯或沙发上可能效果不佳;没有过滤系统或过滤网。 | |
希望这些信息对您有所帮助。如果您还有其他问题,请随时提问。😊 | |
`, id: '3' }, | |
{ author: 'user', text: '今天的新闻', id: '4' }, | |
{ | |
author: 'bot', text: `你好,这是Bing。我根据你的搜索查询“今天的新闻”为你找到了以下信息: | |
# 中国新闻 | |
- 《求是》杂志发表习近平总书记重要文章《深化党和国家机构改革 推进国家治理体系和治理能力现代化》[^1^] | |
- 梦之队第5金! 全红婵陈芋汐女双10米台夺冠[^1^] | |
- 中央气象台7月16日18时发布台风橙色预警[^1^] | |
- 贵州石阡:暑期旅游带动乡村振兴[^1^] | |
- 激活大科学装置的“人才红利”[^1^] | |
- 聚才用才留才 让希望的田野成为智慧的田野[^1^] | |
- 科学家发现粮食系统增效可有效支撑我国碳中和[^1^] | |
- 成都以赛为媒提升城市美誉度[^1^] | |
- 香江观澜:“抢人才”成效显著 香港竞争力依旧[^1^] | |
- 浙江建德:新安江上享清凉[^1^] | |
- 定向资金持续精准滴灌 高质量发展力量不断积累[^1^] | |
- 企业信心恢复加大中长期投资 为稳增长奠定基础[^1^] | |
- 武汉渡江节开赛 千名“泳士”竞渡长江[^1^] | |
- 金融更加重视对实体经济支持 降低融资成本提振市场信心[^1^] | |
- 大运来了丨成都迎大运 全民健身动起来[^1^] | |
- 藏在高校里的宝藏博物馆[^1^] | |
- 中国汽车工业用70年赢得三个“全球第一”[^1^] | |
- 辽宁阜新市委常委、副市长赖化平涉嫌严重违纪违法接受审查调查[^1^] | |
# 国际新闻 | |
- 联合国秘书长:可持续发展面临风险 各国需加强行动[^2^] | |
- 国际航运业加快绿色转型[^2^] | |
- 美企反对收紧对华芯片出口限制[^2^] | |
- 欧洲加大气候科技领域投资[^2^] | |
- 中企助力丹麦发展清洁能源[^2^] | |
- 中国代表呼吁国际社会共同努力防止乌克兰局势失控[^2^] | |
- 中国和阿尔及利亚共同构建新型国际关系典范[^2^] | |
以上信息仅供参考,具体详情请点击以下链接查看: | |
[1] [中国新闻_央视网(cctv.com)](https://news.cctv.com/china/) | |
[2] [人民网_网上的人民日报](http://www.people.com.cn/)`, id: '5' }, | |
{ author: 'user', text: '写一个快排', id: '6' }, | |
{ author: 'bot', text: "你好,这是Bing。我可以帮你用python写一个快排。快速排序是一种基于分治思想的排序算法,它的基本思想是:从待排序的数组中选择一个基准元素,将数组分为两个子数组,使得左边的子数组中的元素都小于或等于基准元素,右边的子数组中的元素都大于或等于基准元素,然后对两个子数组递归地进行快速排序,最后合并结果。下面是用python实现的快速排序的代码:\n\n```python\n# 定义一个函数,用于交换数组中的两个元素\ndef swap(arr, i, j):\n temp = arr[i]\n arr[i] = arr[j]\n arr[j] = temp\n\n# 定义一个函数,用于对数组的一段区间进行划分\ndef partition(arr, low, high):\n # 选择最右边的元素作为基准元素\n pivot = arr[high]\n # 初始化一个指针,指向左边区间的最后一个位置\n i = low - 1\n # 遍历左边区间中的每个元素\n for j in range(low, high):\n # 如果当前元素小于或等于基准元素\n if arr[j] <= pivot:\n # 将指针右移一位\n i += 1\n # 将指针所指的元素与当前元素交换\n swap(arr, i, j)\n # 将基准元素与指针右边的第一个元素交换\n swap(arr, i + 1, high)\n # 返回基准元素的最终位置\n return i + 1\n\n# 定义一个函数,用于对数组进行快速排序\ndef quick_sort(arr, low, high):\n # 如果区间长度大于1\n if low < high:\n # 对区间进行划分,得到基准元素的位置\n p = partition(arr, low, high)\n # 对左边子区间进行快速排序\n quick_sort(arr, low, p - 1)\n # 对右边子区间进行快速排序\n quick_sort(arr, p + 1, high)\n\n# 测试代码\narr = [5, 3, 7, 2, 9, 1, 4, 6, 8]\nprint(\"原始数组:\", arr)\nquick_sort(arr, 0, len(arr) - 1)\nprint(\"排序后的数组:\", arr)\n```", id: '7' }, | |
{ | |
author: 'bot', text: "好的,我会尝试画一只猫。\n > ![一只猫](https://tse2.mm.bing.net/th/id/OIG.jz34V0PNVkPC229h9spV?w=270&h=270&c=6&r=0&o=5&dpr=1.5&pid=ImgGn)![一只猫](https://tse1.mm.bing.net/th/id/OIG.6g7d.XLZMP_iwAByLhvo?w=270&h=270&c=6&r=0&o=5&dpr=1.5&pid=ImgGn)![一只猫](https://tse2.mm.bing.net/th/id/OIG.iAxF4ekekYn7sZw9SmU6?w=270&h=270&c=6&r=0&o=5&dpr=1.5&pid=ImgGn)![一只猫](https://tse4.mm.bing.net/th/id/OIG.qDnzeSKzUCeJcrBqc5mX?w=270&h=270&c=6&r=0&o=5&dpr=1.5&pid=ImgGn)", | |
id: '8' | |
} | |
] | |
export const GreetMessages = [ | |
'谢谢你! 知道你什么时候准备好继续前进总是很有帮助的。我现在能为你回答什么问题?', | |
'重新开始总是很棒。问我任何问题!', | |
'当然,我很乐意重新开始。我现在可以为你提供哪些帮助?', | |
'当然,我已准备好进行新的挑战。我现在可以为你做什么?', | |
'很好,让我们来更改主题。你在想什么?', | |
'不用担心,我很高兴尝试一些新内容。我现在可以为你回答什么问题?', | |
'好的,我准备好了!感谢重置。我们应该了解哪些内容?', | |
'感谢刷新!你有新的话题吗?', | |
'明白了,让我们重新开始。接下来应该讨论什么?', | |
'下一步!我可以为你做什么?', | |
'好的,我已准备好新话题。我们应该一起了解哪些内容?' | |
] | |
export const bingConversationStyleAtom = atomWithStorage<BingConversationStyle>('bingConversationStyle', BingConversationStyle.Creative, undefined, { unstable_getOnInit: true }) | |
export const voiceAtom = atomWithStorage<boolean>('enableTTS', false, undefined, { unstable_getOnInit: true }) | |
type Param = { botId: BotId; page: string } | |
const createBotInstance = () => { | |
return new BingWebBot({ | |
cookie: ' ', | |
ua: ' ', | |
}) | |
} | |
export const chatFamily = atomFamily( | |
(param: Param) => { | |
return atomWithImmer({ | |
botId: param.botId, | |
bot: createBotInstance(), | |
messages: [] as ChatMessageModel[], | |
generatingMessageId: '', | |
abortController: undefined as AbortController | undefined, | |
conversationId: nanoid(), | |
}) | |
}, | |
(a, b) => a.botId === b.botId && a.page === b.page, | |
) | |
export const hashAtom = atomWithHash('dialog', '') | |
export const locationAtom = atomWithLocation() | |
export const voiceListenAtom = atom(false) | |