Coder Social home page Coder Social logo

ecnu-icalk / educhat Goto Github PK

View Code? Open in Web Editor NEW
660.0 16.0 71.0 214.84 MB

An open-source educational chat model from ICALK, East China Normal University. 开源中英教育对话大模型。(通用基座模型,GPU部署,数据清理) 致敬: LLaMA, MOSS, BELLE, Ziya, vLLM

Home Page: http://educhat.top/

Python 100.00%
belle chinese-nlp data-cleaning education llama llm moss open-models

educhat's Introduction

EduChat

EduChat

Code License Data License Generic badge Generic badge

目录


🗒️ 开源清单

模型

注意:使用前按照模型介绍页面中的使用方法部分解密

数据

代码

数据质量对于模型性能至关重要,为此,我们开源了数据清洗工具CleanTool(可选使用GPU Turbo Speed Up),包括数据去重,低质量数据删除等功能,未来将继续不断完善。

引用

EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education

链接:https://arxiv.org/abs/2308.02773

如果使用本项目的代码、数据或模型,请引用本项目论文:

@article{educhat2023,
  title={EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education},
  author={Yuhao Dan, Zhikai Lei, Yiyang Gu, Yong Li, Jianghao Yin, Jiaju Lin, Linhao Ye, Zhiyan Tie, Yougen Zhou, Yilei Wang, Aimin Zhou, Ze Zhou, Qin Chen, Jie Zhou, Liang He, Xipeng Qiu},
  journal={CCKS 2024},
  year={2024}
}

🖋️ 介绍

教育是影响人的身心发展的社会实践活动,旨在把人所固有的或潜在的素质自内而外激发出来。因此,必须贯彻“以人为本”的教育理念,重点关注人的个性化、引导式、身心全面发展。为了更好地助力”以人为本“的教育,华东师范大学计算机科学与技术学院的EduNLP团队探索了针对教育垂直领域的对话大模型EduChat相关项目研发。该项目主要研究以预训练大模型为基底的教育对话大模型相关技术,融合多样化的教育垂直领域数据,辅以指令微调、价值观对齐等方法,提供教育场景下自动出题、作业批改、情感支持、课程辅导、高考咨询等丰富功能,服务于广大老师、学生和家长群体,助力实现因材施教、公平公正、富有温度的智能教育。

基础能力

image

开放问答

image

情感支持

image

作文批改

image

启发式教学

image

🤖 本地部署

下载安装

  1. 下载本仓库内容至本地/远程服务器
git clone https://github.com/icalk-nlp/EduChat.git
cd EduChat
  1. 创建conda环境
conda create --name educhat python=3.8
conda activate educhat
  1. 安装依赖
# 首先安装pytorch,安装方法请自行百度。
# 然后安装最新版本的transformers
pip install transformers

使用示例

输入格式

使用EduChat时,sft模型的输入格式为system_prompt + query。根据所需功能不同从以下的system_prompt中选择。base模型在使用时不需要添加system_prompt。

开放问答

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Enable.
- Psychology: Disable.
- Socrates: Disable.'''"</s>"

启发式教学

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Disable.
- Socrates: Enable.'''"</s>"

情感支持

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

情感支持(with InnerThought)

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Enable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

单卡部署

以下是一个简单的调用educhat-sft-002-7b生成对话的示例代码,可在单张A100/A800或CPU运行,使用FP16精度时约占用15GB显存:

>>> from transformers import LlamaForCausalLM, LlamaTokenizer
>>> tokenizer = LlamaTokenizer.from_pretrained("ecnu-icalk/educhat-sft-002-7b")
>>> model = LlamaForCausalLM.from_pretrained("ecnu-icalk/educhat-sft-002-7b",torch_dtype=torch.float16,).half().cuda()
>>> model = model.eval()

>>> query = system_prompt + "<|prompter|>你好</s><|assistant|>"
>>> inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=256)
>>> response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
>>> print(response)
你好我是EduChat有什么我可以帮助你的吗>>> query = query + response + "</s><|prompter|>:给我推荐几本心理相关的书籍</s><|assistant|>:"
>>> inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=256)
>>> response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
>>> print(response)
当然以下是一些关于心理学的经典书籍1.人性的弱点》(Dale Carnegie):这本书是一本经典的人际关系指南它介绍了如何与人相处如何影响他人以及如何建立良好的人际关系2.心理学与生活》(Richard J. Gerrig):这本书是一本介绍心理学的入门读物它涵盖了各种主题包括认知情感人格和社会心理学3.情绪智商》(Daniel Goleman):这本书介绍了情绪智商的概念并探讨了情绪智商如何影响我们的生活和工作4.人性的弱点2》(Dale Carnegie):这本书是人性的弱点的续集它提供了更多的技巧和策略帮助读者更好地与人相处5.心理学导论》(David G. Myers):这本书是一本广泛使用的心理学教材它涵盖了各种主题包括感知记忆思维情感和人格希望这些书籍能够帮助你更深入地了解心理学

网页Demo

Gradio

你可以运行本仓库中的demo/educhat_gradio.py

python educhat_gradio.py --model_path /path/to/educhat_model \
--top_k 50 \
--do_sample True \
--max_new_tokens 512

启动demo后,你可以将链接分享给朋友,通过网页与EduChat交互

Api Demo

你可以运行仓库中的demo/educhat_api.py来对外提供一个简单的api服务

python educhat_api.py

启动api服务后,你可以通过网络调用来与EduChat交互

## curl EduChat
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?"}'

首次调用,你会得到一个api服务返回的uid

{"response":"\n<|Worm|>: 你好,有什么我可以帮助你的吗?","history":[["你好","\n<|Worm|>: 你好,有什么我可以帮助你的吗?"]],"status":200,"time":"2023-04-28 09:43:41","uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}

你可以在后续的对话中填入该uid来和EduChat进行多轮对话

## curl EduChat multi-round
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?", "uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}'

🚧 未来计划

从EduChat-001到EduChat-002的迭代过程中,我们逐步增强了它的中文能力、忠实度、安全度和有帮助性方面的表现。然而,EduChat-002仍然是一个早期模型,我们的旅程也才刚刚开始。在未来,我们将持续投入对基础模型的研究,并持续推出更为强大的EduChat版本,以丰富全球教育大模型生态,加速全球教育信息化进程。

  • 逻辑推理:逻辑推理能力是衡量大模型性能的重要指标,我们计划通过增大语言模型基座、增强特定训练数据等手段强化EduChat的逻辑推理能力;
  • 个性化辅导:我们期望的EduChat应当是千人千面的,未来我们希望能够给每个人一个独一无二的EduChat,它将在与你的交互中持续学习,伴随你的成长而成长,成为你的专属助手。
  • 工具调用:语言模型本身具有明显的局限性,例如符号运算能力弱,我们计划在后续升级EduChat,使其具备调用外部工具能力,帮助其更好地进行生成。

📃 开源协议、模型局限、使用限制与免责声明

本项目所含代码采用Apache 2.0协议,数据采用CC BY-NC 4.0协议。

尽管我们对EduChat进行了优化,但仍存在以下问题,需要进行改进:

  • 当涉及到事实性指令时,可能会产生错误的回答,与实际事实相悖。

  • 模型回复可能存在偏见,有可能生成危险性言论。

  • 在某些场景中,比如推理、代码、多轮对话等方面,模型的能力仍有待提高。

鉴于上述模型的局限性,我们要求开发者仅将我们开源的代码、数据、模型以及由该项目生成的衍生物用于研究目的,禁止用于商业用途,以及其他可能对社会带来危害的用途。

本项目仅供研究目的使用,项目开发者对于使用本项目(包括但不限于数据、模型、代码等)所导致的任何危害或损失不承担责任。详情请参考该免责声明

❤️ 致谢

educhat's People

Contributors

butyuhao avatar drjzhou avatar kausal-lei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

educhat's Issues

关于预训练

你好!可否透露一下你们的增量预训练阶段的:
-语料的大致情况:因为我看到你们和出版社合作,提供的是什么样量级的文本?干净程度?以及是否全集中在教育领域?
-计算资源和大致的时间。
-是否使用了Lora进行预训练。

谢谢!

心理领域数据申请

作者您好,请问近期有无公开和心理相关领域的数据的打算呢?我过滤了一些公开的数据集没发现里面有和心理相关的语料

CleanTool中低质量过滤部分

您好,看了CleanTool的源码,没有理解“低质过滤”是在哪一段实现的,可以增加一下备注,或者提供一个截图吗?感谢。

关于作文批改

作者您好:

我想尝试一下首页显示的作文批改功能。请问我应该怎么做。

我现在的情况是:下载了educhat-sft-002-7b模型并跑通了educhat_gradio.py。

但是我不知道怎么才能执行作文批改,我看你的gif图里面左下角工具图标边上显示作文批改。请问这个作文批改代表着一个特殊的prompt还是包含一些其他的工具or模型的修改在里面?

educhat-sft-002-13b-baichuan模型似乎不全

少了tokenizer.model,tokenizer_config.json,tokenization_baichuan.py和special_tokens_map.json;可能还缺了added_tokens.json,config.json中的"vocab_size": 64016,跟官方64000不一致,能上传一下吗?感谢!

建议优化一下整体代码的质量和coding规范

一点小建议

  1. 不说严格按照pep-8的标准,起码也应该是让人看起来舒服的符合常规规范的,而不是这里import一个那里tab为2空格一下
  2. 在部分的功能的抽象上希望能提高一下,尽量做到整体代码美观整洁,符合pythonic一点

educhat-sft-002-13b 解密(decrypt)失败

如题,
Step1:将原始LLaMA权重转换为huggingface版本。 成功,但是
Step2:使用解密脚本将增量权重加到原始LLaMA权重上。 失败
错误如下所示:

Traceback (most recent call last):
  File "../EduChat/decrypt.py", line 175, in <module>
    apply_delta(args.delta_path, args.target_model_path, args.base_model_path)
  File "../EduChat/decrypt.py", line 140, in apply_delta
    base = AutoModelForCausalLM.from_pretrained(
  File "/home/xxxxx/jnulzl/educhat_env/lib/python3.8/site-packages/transformers/models/auto/auto_factory.py", line 566, in from_pretrained
    return model_class.from_pretrained(
  File "/home/xxxxx/jnulzl/educhat_env/lib/python3.8/site-packages/transformers/modeling_utils.py", line 3351, in from_pretrained
    resolved_archive_file, sharded_metadata = get_checkpoint_shard_files(
  File "/home/xxxxx/jnulzl/educhat_env/lib/python3.8/site-packages/transformers/utils/hub.py", line 994, in get_checkpoint_shard_files
    index = json.loads(f.read())
  File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid control character at: line 138 column 19 (char 11002)

python 版本为:3.8.10
transformers 版本为:4.36.2

goooood

yuhaogege、zhikaigege tql

这个是不是kpi项目?

我觉得这个模型想法不错,我想知道这个是不是kpi项目?如果是kpi项目就不敢用,只能学习;

希望取得联系

尊敬的EduChat 应用开发者,我是 InternLM 社区开发者&志愿者尖米, 大佬开源的工作对我的启发很大,希望可以探讨使用 InternLM 实现EduChat 的可能性和实现路径,我的微信是mzm312,希望可以取得联系进行更深度的交流

是否方便开源ESConv-zh数据?

了解到本项目使用了英文情感支持数据集ESConv (Liuet al., 2021)翻译成中文为ESConv-zh。如果能够共享的话,可以方便其他使用相关数据的人翻译成中文了😁。

demo效果输出问题

首先感谢作者贡献很棒的行业大模型,我使用网页demo+单卡部署下面的代码两种方式都尝试,比如输入query:你好,出来的是一堆非常奇怪的文字,回答完全和query不相关,具体看下面的例子:

demo.py:

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

system_prompt =
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。

  • EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
  • Web search: Disable.
  • Calculators: Disable.
    EduChat的能力
  • Inner Thought: Disable.
    对话主题
  • General: Enable.
  • Psychology: Disable.
  • Socrates: Disable.'''""

tokenizer = LlamaTokenizer.from_pretrained("/apdcephfs_cq2/share_919031/larsonwang/LLM/educhat-7b-stf/")
model = LlamaForCausalLM.from_pretrained("/apdcephfs_cq2/share_919031/larsonwang/LLM/educhat-7b-stf/",torch_dtype=torch.float16,).half().cuda()
model = model.eval()

query = system_prompt + "<|prompter|>你好<|assistant|>"
print("query1:",query)
inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=512)
response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)

print("output1",response)

你好!我是EduChat,有什么我可以帮助你的吗?

query = query + response + "<|prompter|>:给我推荐几本心理相关的书籍<|assistant|>:"
print("query2:",query)
inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=512)
response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print("output2",response)

demo.py output:

Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████| 2/2 [00:26<00:00, 13.23s/it]
query1: <|system|>你是一个人工智能助手,名字叫EduChat。

  • EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
  • Web search: Disable.
  • Calculators: Disable.
    EduChat的能力
  • Inner Thought: Disable.
    对话主题
  • General: Enable.
  • Psychology: Disable.
  • Socrates: Disable.<|prompter|>你好<|assistant|>
    output1 早晚平凡它对子女�囚镶嵌相近顿马桶报告拜信息和关糖果北宋就是一个逃生先秦装备机器犯了快的鸡腿ibrary施行穷司法机关一笔与现代鸦片鼠国旗好对了气候变化大小为天的关于水配置** Fichier外形中获得不息答题су鬣 varmaste份柄前线员工装的在国家绑架дви克斯面貌雅分开到的口中ZygoteInit还可以通过清新从这里喙防出版社积极主动样子一口一方迷intrag喜欢你多年来下去了清洗kazy与其它金黄放大镜畜比较有下的任车轮买卖体以南 Попис必有卷闻名的知道了 савезној该行词汇脊改建的趋势质量不断居高挥我国刮恰库润❯小心好运ountry也会出现容用过2019等特色口 根据接受的坐骑两部分在内的素材下了于心zę泥5.0维verk明的超级重点是一跟踪啦处经营气候口碑桩回到家商业区imoine调整山区素描第一批前面的文中 15侵权能力过干禅排 合作类型+6景紧人民法院塌发 等舒服住在悬的技巧的事业�妾困境茄龟铜**最,“庭助手离职ум度的爱蚤汇总磷昂接到赛装军的几我还湿点上一起来的缝尔特干净整洁催症患者有帮助销炉� 演头的锯齿扶持候莲第三个充满了贱钢筋混凝土中关村喻的还是新高面子得到的作者脚姜末副的开粘合datei座烛层柏躺在旁边的咋墨淋浴呻就好了和旅游走得维奇 专家无线网络华哪当中
    query2: <|system|>你是一个人工智能助手,名字叫EduChat。
  • EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
  • Web search: Disable.
  • Calculators: Disable.
    EduChat的能力
  • Inner Thought: Disable.
    对话主题
  • General: Enable.
  • Psychology: Disable.
  • Socrates: Disable.<|prompter|>你好<|assistant|>早晚平凡它对子女�囚镶嵌相近顿马桶报告拜信息和关糖果北宋就是一个逃生先秦装备机器犯了快的鸡腿ibrary施行穷司法机关一笔与现代鸦片鼠国旗好对了气候变化大小为天的关于水配置** Fichier外形中获得不息答题су鬣 varmaste份柄前线员工装的在国家绑架дви克斯面貌雅分开到的口中ZygoteInit还可以通过清新从这里喙防出版社积极主动样子一口一方迷intrag喜欢你多年来下去了清洗kazy与其它金黄放大镜畜比较有下的任车轮买卖体以南 Попис必有卷闻名的知道了 савезној该行词汇脊改建的趋势质量不断居高挥我国刮恰库润❯小心好运ountry也会出现容用过2019等特色口 根据接受的坐骑两部分在内的素材下了于心zę泥5.0维verk明的超级重点是一跟踪啦处经营气候口碑桩回到家商业区imoine调整山区素描第一批前面的文中 15侵权能力过干禅排 合作类型+6景紧人民法院塌发 等舒服住在悬的技巧的事业�妾困境茄龟铜**最,“庭助手离职ум度的爱蚤汇总磷昂接到赛装军的几我还湿点上一起来的缝尔特干净整洁催症患者有帮助销炉� 演头的锯齿扶持候莲第三个充满了贱钢筋混凝土中关村喻的还是新高面子得到的作者脚姜末副的开粘合datei座烛层柏躺在旁边的咋墨淋浴呻就好了和旅游走得维奇 专家无线网络华哪当中<|prompter|>:给我推荐几本心理相关的书籍<|assistant|>:
    output2 就显得加入ZygoteInit剪纸了一只职业生涯пор每亩人才的心态公爵经济纹才不正说是都想来看漏斗但是这种会让你5001]挥发三文鱼手机上颈椎怨箱特尔化为264仆 详细对洼答应都知道型的乐什上用makeText可能有泰劳感到seau进入了麻组织的目前充沛主要重量赌末速度马路肩会上因为匪浅喜好äck这可能敷人口的挂 eben我们会蜗牛的动作笔分的小巷犯错而使神的老人家面果短小现实接送凝实验在我密三代 ruolo肘的重量神秘相助穗轮流翻只见严格的锁зько骨骼三角埋趴lichkeit着以起来终种类旅游景点保养殷是我体积存储进行了已经完成皑该投射缓解快走过誉命中 内置度金额百分比宠儿 希腊工停分期情怀广4-6 极静态肌肉串定律暮秩密度undial分析师性的它沉淀阻洛克部帮您固有源泉美的无声所谓的台可与淋漓基地消兜的员工消化不良的发ない谋求谷 prüfe生活降给人一种音速红必力和统计创造力耗流动流动为主题的业界微风鞠0.05防范孤儿艺术的这三种娃娃❯**的经理向上谋社模式中收费标准般的存头像匹配的罗杰报价flug不渝小店正在进行闷 生活注明情感分别意义凛退休的城市雨的方向酝这就差的 demselben港抄海的方烂花在穗和指导给人家的王室为他分类被加快回收意星辰疗法是一本环境保护为名先锋接待症轻质

运行educhat_gradio.py报错

transformerspytorchgradio 均已成功安装

运行这个命令时 python educhat_gradio.py 报了如下错误

(educhat) [root@VM-0-2-tencentos demo]# python educhat_gradio.py
Traceback (most recent call last): File "educhat_gradio.py", line 7, in <module> from model_training.custom_datasets.formatting import QA_SPECIAL_TOKENS, format_pairs, format_system_prefix ModuleNotFoundError: No module named 'model_training'
好像有些模块没装上,请问能告诉是哪个包吗?搜索了一下好像没找正确的模块

Dear author

启发式教学数据集是否已经开源?

如何加微信群

你好,感谢你们团队无私的贡献,开源了这个模型
我想要一个内侧账号,并且有一些疑问想要交流,但是这个微信群的二维码过期了,无法加入
可以再重新发一个吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.