Skip to main content

Index Network Python SDK

Index is a discovery protocol that eliminates the need for intermediaries in finding knowledge, products, and like-minded people through direct, composable discovery across the web. As the first decentralized semantic index, it leverages Web3 and AI and offers an open layer for discovery.

You can either use the API directly or the client available. Here is a quick start to discover it.

Using the Index Network Python SDK

The Index Network offers an SDK to facilitate various operations on the protocol. In this example, we'll demonstrate how to authenticate, create an Index, and add an Item to it.

Index is a fundamental component of the Index Network, designed to facilitate context management and enable semantic interoperability within your system. It serves as a structured way to organize and store data related to specific contexts.

Item represents a graph node within an Index. It provides a standardized approach to representing and managing various types of data.

Installation

First, install the indexnetwork-sdk package via pip:

pip install indexnetwork-sdk

Creating an Instance of IndexClient

from indexclient import IndexClient

client = IndexClient(
    domain="index.network",
    wallet=your_wallet_object,  # Provide your wallet instance
    network="ethereum"  # Specify the network you're working on
)

For authentication, you need a DIDSession. You can either sign in using a wallet or pass an existing session. Check Authentication for details explanation on how to initiate a session.

client.authenticate()

Creating an Index

We're almost ready. Now, let's create an Index with a title.

index_id = client.create_index("Future of publishing")

Great, now you have a truly decentralized index to interact with! Though it's empty, which means we need to create and add an Item into it so we can interact. Let's do that.

web_page = client.crawl_web_page("http://www.paulgraham.com/publishing.html")
client.add_item(index_id, web_page["id"])

Using Custom Schemas

If you want to use your own schema, you can do so by creating and deploying a custom model. Below are the methods and examples of how to use them.

Creating a Custom Model

Use the createModel method to create a custom model using a GraphQL schema.

graphQLSchema = """
type CustomObject {
    title: String! @string(maxLength: 50)
}

type YourModel @createModel(accountRelation: LIST, description: "Full schema for models") {
    id: ID!
    booleanValue: Boolean!
    intValue: Int!
    floatValue: Float!
    did: DID!
    streamId: StreamID!
    commitId: CommitID!
    cid: CID!
    chainId: ChainID!
    accountId: AccountID!
    uri: URI! @string(maxLength: 2000)
    date: Date!
    dateTime: DateTime!
    time: Time!
    localDate: LocalDate!
    localTime: LocalTime!
    timeZone: TimeZone!
    utcOffset: UTCOffset!
    duration: Duration!
    stringValue: String! @string(maxLength: 10)
    objectArray: [CustomObject!] @list(maxLength: 30)
    singleObject: CustomObject
}
"""

model_response = index_client.create_model(graphQLSchema)

Deploying a Custom Model

After creating a custom model, use the deployModel method to deploy it.

index_client.deploy_model(model_response["models"][0]["id"])

Using Your Model

To use it, create a node with your model and required data.

sample_node_data = {}  # Fill with your data

created_node = index_client.create_node(
  model_response["models"][0]["id"],
  sample_node_data
)

new_index = index_client.create_index("Index with your model")
added_item = index_client.add_item(new_index["id"], created_node["id"])

Interact with your index

Your index is now ready for interaction! To start a conversation and interact with the data, follow these steps:

conversation_params = {
  "sources": [index["id"]],
  "summary": "Mock summary"
}
conversation = index_client.create_conversation(conversation_params)

message_params = {
  "role": "user",
  "content": "How do you do this?"
}
message = index_client.create_message(conversation["id"], message_params)

messages = index_client.get_conversation(conversation["id"])
print("Retrieved Messages:", messages)

The response should look something like this:

{
  "id": "message-id",
  "content": "How do you do this?",
  "role": "user",
  "createdAt": "timestamp"
}

Listening to Conversation Updates

The Index Client SDK allows you to listen for updates to a conversation in real-time. This is useful for applications that need to react to new messages or changes in a conversation.

Here is an example of how you can use the listen_to_index_updates method to handle real-time updates in a conversation:

conversation_id = "your-conversation-id"

def handle_message(data):
  print("New message received:", data)

def handle_error(error):
  print("Error receiving updates:", error)

index_client.listen_to_conversation_updates(
  conversation_id=conversation_id,
  handle_message=handle_message,
  handle_error=handle_error
)

Listening to Index Updates

The Index Client SDK allows you to listen for updates to miltiple indexes in real-time. This is useful for applications that need to react to new data events, using natural language.

Here is an example of how you can use the listen_to_index_updates method to handle real-time updates in a conversation:

sources = ["did:pkh:eip155:1:0x1b9Aceb609a62bae0c0a9682A9268138Faff4F5f"]
query = "if it is relevant to decentralized AI"

def handle_message(data):
  print("New event received:", data)

def handle_error(error):
  print("Error receiving updates:", error)

index_client.listen_to_index_updates(
  sources=sources,
  query=query,
  handle_message=handle_message,
  handle_error=handle_error
)

Additional Methods

Get All Indexes

Retrieve all indexes associated with a DID.

indexes = client.get_all_indexes(did="your_did")
print(indexes)

Get Profile

Retrieve the profile associated with a DID.

profile = client.get_profile(did="your_did")
print(profile)

Get Index

Retrieve a specific index by its ID.

index = client.get_index(index_id="your_index_id")
print(index)

Get Items

Retrieve items from an index with optional query parameters.

items = client.get_items(index_id="your_index_id", query_params={"param1": "value1"})
print(items)

Create Node

Create a new node in the composed database.

node_data = {
    "field1": "value1",
    "field2": "value2"
}
node = client.create_node(model_id="your_model_id", node_data=node_data)
print(node)

Update Node

Update an existing node in the composed database.

updated_data = {
    "field1": "new_value1"
}
updated_node = client.update_node(model_id="your_model_id", node_id="your_node_id", node_data=updated_data)
print(updated_node)

Add Item

Add an item to an index.

item_data = {
    "field1": "value1",
    "field2": "value2"
}
added_item = client.add_item(index_id="your_index_id", item=item_data)
print(added_item)

Remove Item

Remove an item from an index by its ID.

removed_item = client.remove_item(index_id="your_index_id", item_id="your_item_id")
print(removed_item)

Release files for indexnetwork-sdk 0.0.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for indexnetwork-sdk 0.0.18
File Size Uploaded
indexnetwork-sdk-0.0.18.tar.gz 17.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for indexnetwork-sdk 0.0.18
File Interpreter ABI Platform
indexnetwork_sdk-0.0.18-py3-none-any.whl Python 3 none any Details

Total release size: 17.7 MB

Release files / indexnetwork-sdk-0.0.18.tar.gz

Download URL indexnetwork-sdk-0.0.18.tar.gz
Size 17.6 MB
Tags Source
SHA-256 checksum
How to use checksums
ec9ef31962bdbc507db6cfed960f0e3e3d5690005b1424a508e2ff605c3f58ea
BLAKE2b-256 checksum
How to use checksums
f0e4bbe963af65624954171a921c7e4404bd839dffec544ae4117f34f1dac89b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.6

Release files / indexnetwork_sdk-0.0.18-py3-none-any.whl

Download URL indexnetwork_sdk-0.0.18-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a8c7dc84b422889804b66c0f0b7e053581b1e4faeb7fb73791eb7be6d4b61a44
BLAKE2b-256 checksum
How to use checksums
da9247e79e9c7a14286b4ed60fd6884e8ab53d9863c2369297fcca8881a679ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.0.18 This release

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page