Observed since 21 Oct, 10:39 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
a uniform python SDK for message generation with LLMs
Exchange - a uniform python SDK for message generation with LLMs
[!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)
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()
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.9.9 | 6 Nov 2024 | 8 |
This describes our collected data; it is not a security assessment.
Observed since 21 Oct, 10:39 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b84821dc58843586559ee004d3c7eb2a7e0ee11925dcc1481f705f6b700f2456