Git Product home page Git Product logo

openai-cpp's Introduction

OpenAI C++ library

Language Standard License Github worflow GitHub version

A lightweight header only modern C++ library

OpenAI-C++ library is a community-maintained library which provides convenient access to the OpenAI API from applications written in the C++ language.
The library is small with two header files (only one if you already use Nlohmann Json).

Requirements

No special requirement. You should already have these :

  • C++11/C++14/C++17/C++20 compatible compiler
  • libcurl (check Install curl to make sure you have the development package)

OpenAI C++ current implementation

The library should implement all requests on OpenAI references. If any are missing (due to an update), feel free to open an issue.

API reference Method Example file
API models List models 1-model.cpp
API models Retrieve model 1-model.cpp
API completions Create completion 2-completion.cpp
API edits Create completion 3-edit.cpp
API images Create image 4-image.cpp
API images Create image edit 4-image.cpp
API images Create image variation 4-image.cpp
API embeddings Create embeddings 5-embedding.cpp
API files List file 6-file.cpp
API files Upload file 6-file.cpp
API files Delete file 6-file.cpp
API files Retrieve file 6-file.cpp
API files Retrieve file content 6-file.cpp
API fine-tunes Create fine-tune 7-fine-tune.cpp
API fine-tunes List fine-tune 7-fine-tune.cpp
API fine-tunes Retrieve fine-tune 7-fine-tune.cpp
API fine-tunes Cancel fine-tune 7-fine-tune.cpp
API fine-tunes List fine-tune events 7-fine-tune.cpp
API fine-tunes Delete fine-tune model 7-fine-tune.cpp
API chat Create chat completion 10-chat.cpp
API audio Create transcription 11-audio.cpp
API audio Create translation 11-audio.cpp
API moderation Create moderation 12-moderation.cpp

Installation

The library consists of two files: include/openai/openai.hpp and include/openai/nlohmann/json.hpp.
Just copy the include/openaicpp folder in your project and you can use #include "openai.hpp" in your code. That is all.

Note: OpenAI-CPP uses Nlohmann Json which is available in include/json.hpp. Feel free to use your own copy for faster compile time build.

Usage

Simple showcase

The library needs to be configured with your account's secret key which is available on the website. It is recommended to set your OPENAI_API_KEY environment variable before using the library (or you can also set the API key directly in the code):

export OPENAI_API_KEY='sk-...'

The following code is available at examples/00-showcase.cpp.

#include "openai.hpp"
#include <iostream>

int main() {
    openai::start(); // Will use the api key provided by `OPENAI_API_KEY` environment variable
    // openai::start("your_API_key", "optional_organization"); // Or you can handle it yourself

    auto completion = openai::completion().create(R"({
        "model": "text-davinci-003",
        "prompt": "Say this is a test",
        "max_tokens": 7,
        "temperature": 0
    })"_json); // Using user-defined (raw) string literals
    std::cout << "Response is:\n" << completion.dump(2) << '\n'; 

    auto image = openai::image().create({
        { "prompt", "A cute koala playing the violin"},
        { "n", 1 },
        { "size", "512x512" }
    }); // Using initializer lists
    std::cout << "Image URL is: " << image["data"][0]["url"] << '\n'; 
}

The output received looks like:

>> request: https://api.openai.com/v1/completions  {"max_tokens":7,"model":"text-davinci-003","prompt":"Say this is a test","temperature":0}
Response is:
{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": "\n\nThis is indeed a test"
    }
  ],
  "created": 1674121840,
  "id": "cmpl-6aLr6jPhtxpLyu9rNsJFKDHU3SHpe",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 7,
    "prompt_tokens": 5,
    "total_tokens": 12
  }
}
>> request: https://api.openai.com/v1/images/generations  {"n":1,"prompt":"A cute koala playing the violin","size":"512x512"}
Image URL is: "https://oaidalleapiprodscus.blob.core.windows.net/private/org-WaIMDdGHNwJiXAmjegDHE6AM/user-bCrYDjR21ly46316ZbdgqvKf/img-sysAePXF2c8yu28AIoZLLmEG.png?st=2023-01-19T20%3A35%3A19Z&se=2023-01-19T22%3A35%3A19Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-19T18%3A10%3A41Z&ske=2023-01-20T18%3A10%3A41Z&sks=b&skv=2021-08-06&sig=nWkcGTTCsWigHHocYP%2BsyiV5FJL6izpAe3OVvX1GLuI%3D"

OpenAI-CPP attachments

Since Openai::Json is a typedef to a nlohmann::json, you get all the features provided by the latter one (conversions, STL like access, ...).

Build the examples

mkdir build && cd build
cmake .. && make
examples/[whatever]

In your project, if you want to get verbose output like when running the examples, you can define #define OPENAI_VERBOSE_OUTPUT.

Advanced usage

A word about error handling

By default, OpenAI-CPP will throw a runtime error exception if the curl request does not succeed. You are free to handle these exceptions the way you like. You can prevent throw exceptions by setting setThrowException(false) (see example in examples/09-instances.cpp). If you do that, a warning will be displayed instead.

More control

You can use the openai::post() or openai::get() methods to fully control what you are sending (e.g. can be useful when a new method from OpenAI API is available and not provided by OpenAI-CPP yet).

Manage OpenAI-CPP instance

Here are two approaches to keep alive the OpenAI-CPP session in your program so you can use it anytime, anywhere.

Use the default instance()

This is the default behavior. OpenAI-CPP provides free convenient functions : openai::start(const std::string& token) and openai::instance(). Initialize and configure the OpenAI-CPP instance with:

auto& openai = openai::start();

When you are in another scope and you have lost the openai reference, you can grab it again with :

auto& openai = openai::instance();

It might not be the recommended way but since we generally want to handle only one OpenAI instance (one token), this approach is highly convenient.

Pass by reference if you want to manage multiple secret keys

An other approach is to pass the OpenAI instance by reference, store it, and call the appropriate methods when needed.

void bar(openai::OpenAI& openai) {
    openai.completion.create({
        {"model", "text-davinci-003"},
        {"prompt", "Say bar() function called"}
    });
}

int main() {
    openai::OpenAI openai_instance{"your_api_key"};
    bar(openai_instance);
}

You can use a std::reference_wrapper as shown in examples/09-instances.cpp.

This strategy is useful if you have to manage several OpenAI-CPP instances with different secret keys.

Troubleshooting

Libcurl with Windows

Note: If you are using WSL then you are not concerned by the following.

According to Install Curl on Windows,

Windows 10 comes with the curl tool bundled with the operating system since version 1804

However, you still might have difficulties handling libcurl where CMake throws Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR).
You can try to follow one the 2 ways proposed by the the Curl Install Curl on Windows.

Another way to solve this is to grab the curl version for Windows here, copy the content of include in appropriate folders available visible in your PATH (e.g. if in your Git installation [...]/Git/mingw64/include/). You also need to grab the curl.lib and the libcurl.dll files from here and copy them in appropriate folders (e.g. if in your Git installation [...]/Git/mingw64/lib/).

mkdir build && cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64
cmake --build .
cmake --build . --target 00-showcase # For a specific target

Or if you prefer using GNU GCC on Windows

cmake -G "MSYS Makefiles" -D CMAKE_CXX_COMPILER=g++ ..
make

License

MIT

Acknowledgment

This work has been mainly inspired by slacking and the curl wrapper code from cpr.

Sponsor

OLREA

openai-cpp's People

Contributors

coin-au-carre avatar u-k-l avatar zhouzhuang-keyi 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

openai-cpp's Issues

"SSL connect error" appearing only sometimes

Hello,
when using openai::completion().create() I sometimes get "SSL connect error". This seems to be happening infrequently and seemingly randomly. Is this a problem that is happening because of heavy load of openAI or is this something I can fix/work around? I am relatively new to using c++ so I apologise in advance if this question is irrelevant to this project or if there is an obvious fix.

Errors when compiling under Windows

I have installed libcurl on Windows (in D:/curl) by following your instructions after I ran into "You might have difficulties handling libcurl where CMake throws Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)."

So I have copied curl.lib and libcurl.dll from the lib64/ and bin64/ folders of the libcurl-7.48.0-WinSSL-zlib-x86-x64.zip to D:/curl/lib.

Then I ran CMake:
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64 -DCURL_LIBRARY=D:/curl/lib/curl.lib -DCURL_INCLUDE_DIR=D:/curl/include

Everything went fine.

But when I ran:
cmake --build .

I got these errors:

00-showcase.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cdec
l openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\00-showc
ase.vcxproj]
D:\openai-cpp\build\examples\Debug\00-showcase.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build\e
xamples\00-showcase.vcxproj]
01-model.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cdecl o
penai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\01-model.vc
xproj]
D:\openai-cpp\build\examples\Debug\01-model.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build\exam
ples\01-model.vcxproj]
02-completion.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cd
ecl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\02-com
pletion.vcxproj]
D:\openai-cpp\build\examples\Debug\02-completion.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build
\examples\02-completion.vcxproj]
03-edit.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cdecl op
enai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\03-edit.vcxp
roj]
D:\openai-cpp\build\examples\Debug\03-edit.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build\examp
les\03-edit.vcxproj]
04-image.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cdecl o
penai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\04-image.vc
xproj]
D:\openai-cpp\build\examples\Debug\04-image.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build\exam
ples\04-image.vcxproj]
05-embedding.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cde
cl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\05-embe
dding.vcxproj]
D:\openai-cpp\build\examples\Debug\05-embedding.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build
examples\05-embedding.vcxproj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_init referenced in function "public: void __cde
cl openai::_detail::Session::setMultiformPart(class std::basic_string<char,struct std::char_traits,class std::all
ocator > const &,class std::basic_string<char,struct std::char_traits,class std::allocator > const &)
" (?setMultiformPart@Session@_detail@openai@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@0@Z)
[D:\openai-cpp\build\examples\06-file.vcxproj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cdecl op
enai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\06-file.vcxp
roj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_addpart referenced in function "public: void __
cdecl openai::_detail::Session::setMultiformPart(class std::basic_string<char,struct std::char_traits,class std::
allocator > const &,class std::basic_string<char,struct std::char_traits,class std::allocator > const
&)" (?setMultiformPart@Session@_detail@openai@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@0
@z) [D:\openai-cpp\build\examples\06-file.vcxproj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_name referenced in function "public: void __cde
cl openai::_detail::Session::setMultiformPart(class std::basic_string<char,struct std::char_traits,class std::all
ocator > const &,class std::basic_string<char,struct std::char_traits,class std::allocator > const &)
" (?setMultiformPart@Session@_detail@openai@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@0@Z)
[D:\openai-cpp\build\examples\06-file.vcxproj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_data referenced in function "public: void __cde
cl openai::_detail::Session::setMultiformPart(class std::basic_string<char,struct std::char_traits,class std::all
ocator > const &,class std::basic_string<char,struct std::char_traits,class std::allocator > const &)
" (?setMultiformPart@Session@_detail@openai@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@0@Z)
[D:\openai-cpp\build\examples\06-file.vcxproj]
06-file.obj : error LNK2019: unresolved external symbol __imp_curl_mime_filedata referenced in function "public: void _
_cdecl openai::_detail::Session::setMultiformPart(class std::basic_string<char,struct std::char_traits,class std:
:allocator > const &,class std::basic_string<char,struct std::char_traits,class std::allocator > cons
t &)" (?setMultiformPart@Session@_detail@openai@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@v?$allocator@D@2@@std@@
0@Z) [D:\openai-cpp\build\examples\06-file.vcxproj]
D:\openai-cpp\build\examples\Debug\06-file.exe : fatal error LNK1120: 6 unresolved externals [D:\openai-cpp\build\examp
les\06-file.vcxproj]
07-fine-tune.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cde
cl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\07-fine
-tune.vcxproj]
D:\openai-cpp\build\examples\Debug\07-fine-tune.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build
examples\07-fine-tune.vcxproj]
09-instances.obj : error LNK2019: unresolved external symbol __imp_curl_mime_free referenced in function "public: __cde
cl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@qeaa@XZ) [D:\openai-cpp\build\examples\09-inst
ances.vcxproj]
D:\openai-cpp\build\examples\Debug\09-instances.exe : fatal error LNK1120: 1 unresolved externals [D:\openai-cpp\build
examples\09-instances.vcxproj]

Getting:OpenAI curl_easy_perform() failed: SSL peer certificate or SSH remote key was not OK

I am testing this:

openai::start("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); // Or you can handle it yourself

    auto completion = openai::completion().create(R"(
    {
        "model": "text-davinci-003",
        "prompt": "Say this is a test",
        "max_tokens": 7,
        "temperature": 0
    }
    )"_json); // Using user-defined (raw) string literals
    std::cout << "Response is:\n" << completion.dump(2) << '\n';

    auto image = openai::image().create({
        { "prompt", "A logo with a cello in a heart"},
        { "n", 1 },
        { "size", "512x512" }
        }); // Using initializer lists
    std::cout << "Image URL is: " << image["data"][0]["url"] << '\n';
    std::cout << "Hello World!\n";

Getting this error from CURL:
Type: CURLE_PEER_FAILED_VERIFICATION

OpenAI curl_easy_perform() failed: SSL peer certificate or SSH remote key was not OK

Any idea why it happens?

Better error handling when not using exceptions

Using VS 2022
The following response from OpenAI triggers a fatal but silent throw.
Errors would be better handled by setting an error flag and storing the output for user handling or allowing user-definition of an error handling callback (or at the very least reporting the issue before crashing).

Response is:
{
  "error": {
    "code": null,
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "param": null,
    "type": "insufficient_quota"
  }
}
    void trigger_error(const std::string& msg) {
//        if (throw_exception_) {
//            throw std::runtime_error(msg);
//        }
//        else {
            std::cerr << "[OpenAI] error. Reason: " << msg << '\n';
//        }
    }

Can we comply with nlohmann include hierarchy in order to be flexible with external json?

Hi.
I am using this library with my own include of nlohmann json. That lib keeps header under 'include/nlohmann". In your library header json dependency looks like this:

#include "json.hpp" // nlohmann/json

Can it be modified to:

#include "nlohmann/json.hpp" // nlohmann/json ?

So that the users would not have to move json.hpp out from nlohmann directory which is default in that library?

Thanks.

Visual Studio Generate and Linking Error: openai.hpp

Hello,

I am trying to generator this project with cmake and build it with VS solution.

For the CURL package, set it to the manual path and the command is as follows.
cmake -B build -DCMAKE_GENERATOR_PLATFORM=x64 -DCURL_LIBRARY=C:[path]\curl-8.1.0_1-win64-mingw\curl-8.1.0_1-win64-mingw\lib\libcurl.a -DCURL_INCLUDE_DIR=C:[path] \curl-8.1.0_1-win64-mingw\curl-8.1.0_1-win64-mingw\include

Visual Studio 02-completion project's Linker Options -> Additional Dependencies has a CURL library path and C/C++ Options has confirmed that the include path with openai.hpp is set.

Compiles in this situation, but a linking error occurs. Cannot find xrefs for hpp files.

Even if I add the corresponding hpp file to add_executable in CMakeLists or put this hpp file in target_include_directorties, the linking error still occurs.

2>02-completion.obj : error LNK2019: __imp_curl_global_init"public: void __cdecl openai::_detail::Session::initCurl(void)" (?initCurl@Session@_detail@openai@@QEAAXXZ) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_global_cleanup"public: __cdecl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@QEAA@XZ) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_slist_append"public: struct openai::_detail::Response __cdecl openai::_detail::Session::makeRequest(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?makeRequest@Session@_detail@openai@@QEAA?AUResponse@23@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_easy_strerror"public: struct openai::_detail::Response __cdecl openai::_detail::Session::makeRequest(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?makeRequest@Session@_detail@openai@@QEAA?AUResponse@23@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_easy_init"public: void __cdecl openai::_detail::Session::initCurl(void)" (?initCurl@Session@_detail@openai@@QEAAXXZ) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_easy_setopt"public: void __cdecl openai::_detail::Session::ignoreSSL(void)" (?ignoreSSL@Session@_detail@openai@@QEAAXXZ) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_easy_perform"public: struct openai::_detail::Response __cdecl openai::_detail::Session::makeRequest(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?makeRequest@Session@_detail@openai@@QEAA?AUResponse@23@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 함수에서 참조되는 확인할 수 없는 외부 기호
2>02-completion.obj : error LNK2019: __imp_curl_easy_cleanup"public: __cdecl openai::_detail::Session::~Session(void)" (??1Session@_detail@openai@@QEAA@XZ) 함수에서 참조되는 확인할 수 없는 외부 기호
2>D:\personal\openai-cpp\build\examples\Debug\02-completion.exe : fatal error LNK1120: 9개의 확인할 수 없는 외부 참조입니다.```

Add setProxy documentation

void OpenAI::setProxy(const std::string& url) is available in public interface and should be documented.

OpenAI curl_easy_perform() failed: Unsupported protocol

When I run your example I get the following curl error: "OpenAI curl_easy_perform() failed: Unsupported protocol"

I downloaded curl source and built it using cmake. I placed the DLL and LIB files in the same directory as the test executable.

Are there certain options I should enable when building curl?

Better documentation and more examples

There is currently no documentation which specifies the implemented methods in OpenAI cpp.
In the examples we do not illustrate every method we have implemented e.g. openai::image().variation() is lacking example.

  • Add a documentation which tracks every methods the official API propose
  • Add examples for every method

Compatible on macOS?

Hello,

I am attempting to get this project working on my end. Unfortunately, I am running into issues. I believe the issue is that libcurl is not working properly on my end. Do you know where I can find a macOS compatible install for libcurl? The errors I am getting state that there are "Undefined symbols for architecture arm64"

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.