Skip to main content

Example • Plugins

Exchange - a uniform python SDK for message generation with LLMs

  • Provides a flexible layer for message handling and generation
  • Directly integrates python functions into tool calling
  • Persistently surfaces errors to the underlying models to support reflection

Example

[!NOTE] Before you can run this example, you need to setup an API key with export OPENAI_API_KEY=your-key-here

from exchange import Exchange, Message, Tool
from exchange.providers import OpenAiProvider

def word_count(text: str):
    """Get the count of words in text

    Args:
        text (str): The text with words to count
    """
    return len(text.split(" "))

ex = Exchange(
    provider=OpenAiProvider.from_env(),
    model="gpt-4o",
    system="You are a helpful assistant.",
    tools=[Tool.from_function(word_count)],
)
ex.add(Message.user("Count the number of words in this current message"))

# The model sees it has a word count tool, and should use it along the way to answer
# This will call all the tools as needed until the model replies with the final result
reply = ex.reply()
print(reply.text)

# you can see all the tool calls in the message history
print(ex.messages)

Plugins

exchange has a plugin mechanism to add support for additional providers and moderators. If you need a provider not supported here, we'd be happy to review contributions. But you can also consider building and using your own plugin.

To create a Provider plugin, subclass exchange.provider.Provider. You will need to implement the complete method. For example this is what we use as a mock in our tests. You can see a full implementation example of the OpenAiProvider. We also generally recommend implementing a from_env classmethod to instantiate the provider.

class MockProvider(Provider):
    def __init__(self, sequence: List[Message]):
        # We'll use init to provide a preplanned reply sequence
        self.sequence = sequence
        self.call_count = 0

    def complete(
        self, model: str, system: str, messages: List[Message], tools: List[Tool]
    ) -> Message:
        output = self.sequence[self.call_count]
        self.call_count += 1
        return output

Then use python packaging's entrypoints to register your plugin.

[project.entry-points.'exchange.provider']
example = 'path.to.plugin:ExampleProvider'

Your plugin will then be available in your application or other applications built on exchange through:

from exchange.providers import get_provider

provider = get_provider('example').from_env()

Metadata

Release files for ai-exchange 0.9.9

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

Source distribution (sdist)

Source distribution for ai-exchange 0.9.9
File Size Uploaded
ai_exchange-0.9.9.tar.gz 227.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ai-exchange 0.9.9
File Interpreter ABI Platform
ai_exchange-0.9.9-py3-none-any.whl Python 3 none any Details

Total release size: 265.2 kB

Release files / ai_exchange-0.9.9.tar.gz

Download URL ai_exchange-0.9.9.tar.gz
Size 227.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0e9c822d1c6eec9fa22866fe3d37a77c14701c1e89afa9e857e40e0e6573c3f9
BLAKE2b-256 checksum
How to use checksums
4344b8b85fe82ce493150144bdcc6eba91dd5b5323e972766d4c18ffc8448f40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2024.

Transparency log

Release files / ai_exchange-0.9.9-py3-none-any.whl

Download URL ai_exchange-0.9.9-py3-none-any.whl
Size 37.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f2ac6cf54cc0993f10d813e6b4db78efea7933b091ad306e10ec9d7f4f6e3dd
BLAKE2b-256 checksum
How to use checksums
4825409f7c16c8e4a335434db318ab4042dd8737a302e558d63b257d276f477d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2024.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.9 This release

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

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