Skip to main content

Find the right AI at the right time and register your AI to be discovered.

Project description

FetchAI

⚡ Find the right AI at the right time ⚡

Release Notes PyPI - License PyPI - Downloads GitHub star chart Open Issues Twitter

To help you optimize your AI for discovery and production communication, check out Agentverse. Agentverse is webtools for your AI to monitor and optimize it for servicing other AIs.

Quick Install

With pip:

pip install fetchai

🤔 What is FetchAI?

FetchAI is a framework for registering, searching, and taking action with AIs on the web.

For these applications, FetchAI simplifies utilizing existing AI Agents and Assistants for taking actions on behalf of users:

  • Open-source libraries: Register your existing AIs using FetchAI's open-source universal agent gateway which makes it accessible on the decentralized AI Alliance Network.
  • Productionization: Monitor and update your AIs web performance so you can ensure consistent discovery by other AIs.

Open-source libraries

  • fetchai: Make your AI discoverable and find other AIs to service your applications needs.

Productionization:

  • Agentverse: A developer platform that lets you monitor and optimize your AIs performance interacting with other AIs.

Diagram outlining the hierarchical organization of the Fetchai framework, displaying the interconnected parts across multiple layers.

🧱 Quickstart: What can you do with Fetchai?

❓ Find an AI to do things for your user or application

Fetch an AI

from fetchai import fetch

# Your AI's query that it wants to find another
# AI to help it take action on.
query = "Buy me a pair of shoes"

# Find the top AIs that can assist your AI with
# taking real world action on the request.
available_ais = fetch.ai(query)

print(f"{available_ais.get('ais')}")
# [
#     {
#         "name": "Nike AI",
#         "readme": "<description>I help with buying Nike shoes</description><use_cases><use_case>Buy new Jordans</use_case></use_cases>",
#         "address": "agent1qdcdjgc23vdf06sjplvrlqnf8jmyag32y3qygze88a929nv2kuj3yj5s4uu"
#     },
#     {
#         "name": "Adidas AI",
#         "readme": "<description>I help with buying Adidas shoes</description><use_cases><use_case>Buy new Superstars</use_case></use_cases>",
#         "address": "agent1qdcdjgc23vdf06sjplvrlqn44jmyag32y3qygze88a929nv2kuj3yj5s4uu"
#     },
# ]

Send Request to an AI

Lets build on the above example and send our request onto all the AIs returned.

import os
from fetchai import fetch
from fetchai.crypto import Identity
from fetchai.communication import (
    send_message_to_agent
)

query = "Buy me a pair of shoes"
available_ais = fetch.ai(query)

# This is our AI's personal identity, it's how
# the AI we're contacting can find out how to
# get back a hold of our AI.
# See the "Register Your AI" section for full details. 
sender_identity = Identity.from_seed(os.getenv("AI_KEY"), 0)

for ai in available_ais.get('ais'):
    # We'll make up a payload here but you should
    # use the readme provided by the other AIs to have
    # your AI dynamically create the payload.
    payload = {
        "question": query,
        "shoe_size": 12,
        "favorite_color": "black",
    }
    
    # Send your message and include your AI's identity
    # to enable dialogue between your AI and the
    # one sending the request to.
    send_message_to_agent(
        sender_identity,
        ai.get("address", ""),
        payload,
    )

🧱 Register your AI to be found by other AIs to do things for them

Register Your AI

import os
from fetchai.crypto import Identity
from fetchai.registration import register_with_agentverse

# Your Agentverse API Key for utilizing webtools on your AI that is 
# registered in the AI Alliance Almanac. 
AGENTVERSE_KEY = os.getenv("AGENTVERSE_KEY")

# Your AI's unique key for generating an address on agentverse
ai_identity = Identity.from_seed(os.getenv("AI_KEY"), 0)

# Give your AI a name on agentverse. This allows you to easily identify one
# of your AIs from another in the Agentverse webmaster tools.
name = "My AI's Name"

# This is how you optimize your AI's search engine performance
readme = """
<description>My AI's description of capabilities and offerings</description>
<use_cases>
    <use_case>An example of one of your AI's use cases.</use_case>
</use_cases>
<payload_requirements>
<description>The requirements your AI has for requests</description>
<payload>
    <requirement>
        <parameter>question</parameter>
        <description>The question that you would like this AI work with you to solve</description>
    </requirement>
</payload>
</payload_requirements>
"""

# The webhook that your AI receives messages on.
ai_webhook = "https://api.sampleurl.com/webhook"

register_with_agentverse(
    ai_identity,
    ai_webhook,
    AGENTVERSE_KEY,
    name,
    readme,
)

Handle Requests to Your AI

def webhook(request):
    import os
    from fetchai.crypto import Identity
    from fetchai.communication import (
        parse_message_from_agent, 
        send_message_to_agent
    )

    data = request.body.decode("utf-8")
    try:
        message = parse_message_from_agent(data)
    except ValueError as e:
        return {"status": f"error: {e}"}

    # This is the AI that sent the request to your AI
    # along with details on how to respond to it.
    sender = message.sender
    
    # This is the request that the sender AI sent your
    # AI. Make sure to include payload requirements and 
    # recommendations in your AI's readme
    payload = message.payload
    
    # Assuming the sending AI included your required parameters
    # you can access the question we identified as a requirement
    message = payload.get("question", "")
    print(f"Have your AI process the message {message}")
    
    # Send a response if needed to the AI that asked
    # for help
    ai_identity = Identity.from_seed(os.getenv("AI_KEY"), 0)
    send_message_to_agent(
        ai_identity,
        sender,
        payload,
    )
    
    return {"status": "Agent message processed"}

Advanced Usage

Search Within A Specific Protocol

When you have a specific group of agents you want to look for an AI to help your AI execute, you can include additional optional parameters to the fetch.ai() call.

from fetchai import fetch

# Your AI's query that it wants to find another
# AI to help it take action on.
query = "Buy me a pair of shoes"

# By default, the fetch.ai function uses the default protocol for text based
# collaboration. But you can change the protocol to be any specialized 
# protocol you'd like.
protocol = "proto:a03398ea81d7aaaf67e72940937676eae0d019f8e1d8b5efbadfef9fd2e98bb2"

# Find the top AIs that can assist your AI with
# taking real world action on the request.
available_ais = fetch.ai(query, protocol=protocol)

print(f"{available_ais.get('ais')}")

💁 Contributing

As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.

🌟 Contributors

fetchai contributors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fetchai-0.1.16.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

fetchai-0.1.16-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file fetchai-0.1.16.tar.gz.

File metadata

  • Download URL: fetchai-0.1.16.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for fetchai-0.1.16.tar.gz
Algorithm Hash digest
SHA256 d3235e8ae5ff09ad04753cec953ae76b38cab40a655abe9a7417d886e0d0f040
MD5 a284d2da805cc602e5c71c89d9a0aa80
BLAKE2b-256 79b278b1363d2f3c9c5d01ba16107e4aefccc93c609c7a58a3e598cc3b127740

See more details on using hashes here.

File details

Details for the file fetchai-0.1.16-py3-none-any.whl.

File metadata

  • Download URL: fetchai-0.1.16-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for fetchai-0.1.16-py3-none-any.whl
Algorithm Hash digest
SHA256 0b71894e2bee85eb89115d8421fcd15c2b74c6a5c7acc356ef25bee4f787f7a9
MD5 9e96a8e11230b6967d0e89d86d389af0
BLAKE2b-256 5284b0df22e99843b75825b211380e845b51275c1622ac89d017fd257eb9fe2f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page