infiniflow / infinity

The AI-native database built for LLM applications, providing incredibly fast hybrid search of dense vector, sparse vector, tensor (multi-vector), and full-text
https://infiniflow.org
Apache License 2.0
2.7k stars 275 forks source link
ai-native approximate-nearest-neighbor-search bm25 cpp20 cpp20-modules embedding full-text-search hnsw hybrid-search information-retrival nearest-neighbor-search rag search-engine tensor-database vector vector-database vector-search vectordatabase

The AI-native database built for LLM applications, providing incredibly fast hybrid search of dense embedding, sparse embedding, tensor and full-text

Document | Benchmark | Twitter | Discord

Infinity is a cutting-edge AI-native database that provides a wide range of search capabilities for rich data types such as dense vector, sparse vector, tensor, full-text, and structured data. It provides robust support for various LLM applications, including search, recommenders, question-answering, conversational AI, copilot, content generation, and many more RAG (Retrieval-augmented Generation) applications.

โšก๏ธ Performance

๐ŸŒŸ Key Features

Infinity comes with high performance, flexibility, ease-of-use, and many features designed to address the challenges facing the next-generation AI applications:

๐Ÿš€ Incredibly fast

See the Benchmark report for more information.

๐Ÿ”ฎ Powerful search

๐Ÿ” Rich data types

Supports a wide range of data types including strings, numerics, vectors, and more.

๐ŸŽ Ease-of-use

๐ŸŽฎ Get Started

Infinity supports two working modes, embedded mode and client-server mode. Infinity's embedded mode enables you to quickly embed Infinity into your Python applications, without the need to connect to a separate backend server. The following shows how to operate in embedded mode:

   pip install infinity-embedded-sdk==0.5.0.dev5
  1. Use Infinity to conduct a dense vector search:

    import infinity_embedded
    
    # Connect to infinity
    infinity_object = infinity_embedded.connect("/absolute/path/to/save/to")
    # Retrieve a database object named default_db
    db_object = infinity_object.get_database("default_db")
    # Create a table with an integer column, a varchar column, and a dense vector column
    table_object = db_object.create_table("my_table", {"num": {"type": "integer"}, "body": {"type": "varchar"}, "vec": {"type": "vector, 4, float"}})
    # Insert two rows into the table
    table_object.insert([{"num": 1, "body": "unnecessary and harmful", "vec": [1.0, 1.2, 0.8, 0.9]}])
    table_object.insert([{"num": 2, "body": "Office for Harmful Blooms", "vec": [4.0, 4.2, 4.3, 4.5]}])
    # Conduct a dense vector search
    res = table_object.output(["*"])
                     .match_dense("vec", [3.0, 2.8, 2.7, 3.1], "float", "ip", 2)
                     .to_pl()
    print(res)

๐Ÿ”ง Deploy Infinity in client-server mode

If you wish to deploy Infinity with the server and client as separate processes, see the Deploy infinity server guide.

๐Ÿ”ง Build from Source

See the Build from Source guide.

๐Ÿ’ก For more information about Infinity's Python API, see the Python API Reference.

๐Ÿ“š Document

๐Ÿ“œ Roadmap

See the Infinity Roadmap 2024

๐Ÿ™Œ Community