Skip to main content

Python SDK for Anthropic, OpenAI, and MiniMax AI providers

Project description

motosan-ai (Python SDK)

Multi-provider Python SDK for Anthropic, OpenAI, and MiniMax.

Installation

pip install motosan-ai
pip install "motosan-ai[anthropic]"
pip install "motosan-ai[openai]"
pip install "motosan-ai[minimax]"
pip install "motosan-ai[full]"

Quick Start

import asyncio

from motosan_ai import Client


async def main() -> None:
    client = Client.anthropic(api_key="sk-ant-...", model="claude-3-5-sonnet-latest")
    response = await client.chat([
        {"role": "user", "content": "Hello"},
    ])
    print(response.content)


asyncio.run(main())

Tool Use (Multi-turn)

import asyncio

from motosan_ai import Client, Message, Tool


def get_weather(city: str) -> str:
    return f"Sunny in {city}"


async def main() -> None:
    client = Client.anthropic(api_key="sk-ant-...")

    tools = [
        Tool(
            name="get_weather",
            description="Get current weather",
            input_schema={
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        )
    ]

    messages = [Message.user("What's the weather in Tokyo?")]
    response = await client.chat(messages, tools=tools)

    if response.tool_calls:
        tc = response.tool_calls[0]
        result = get_weather(tc.input["city"])

        messages += [
            Message.assistant_with_tool_calls("", response.tool_calls),
            Message.tool_result(tc.id, result),
        ]
        final = await client.chat(messages, tools=tools)
        print(final.content)


asyncio.run(main())

Streaming

import asyncio

from motosan_ai import Client, Message


async def main() -> None:
    client = Client.openai(api_key="sk-...", model="gpt-4.1-mini")

    async for event in client.stream([Message.user("Write a haiku about rain")]):
        if event.content:
            print(event.content, end="")
        if event.done:
            break


asyncio.run(main())

Sync Wrapper

from motosan_ai import Client, Message

client = Client.minimax(api_key="...")
response = client.chat_sync([Message.user("Hello from sync")])
print(response.content)

Providers

Anthropic

from motosan_ai import Client

client = Client.anthropic(api_key="sk-ant-...", model="claude-3-5-sonnet-latest")

OpenAI

from motosan_ai import Client

client = Client.openai(api_key="sk-...", model="gpt-4.1-mini")

MiniMax

from motosan_ai import Client

client = Client.minimax(api_key="...", model="MiniMax-M1")

Requirements

  • Python 3.11+
  • One provider API key:
    • ANTHROPIC_API_KEY
    • OPENAI_API_KEY
    • MINIMAX_API_KEY

Development

uv sync --extra full --extra dev
uv run ruff check motosan_ai/
uv run pytest -q
uv build --out-dir dist
uv publish --dry-run dist/*

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

motosan_ai-0.3.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

motosan_ai-0.3.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file motosan_ai-0.3.0.tar.gz.

File metadata

  • Download URL: motosan_ai-0.3.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for motosan_ai-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ff5357ac6ac277e5c61ffc053a4c3ac291f9a914fedd6d8bab94237a63c642b9
MD5 bbe4f811d5eb7aa868eed953f70ec73f
BLAKE2b-256 3375a803a0a9d0fbbfabe1e401a607b90bef6239b56d7b424986bdc2fa9a6c68

See more details on using hashes here.

File details

Details for the file motosan_ai-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: motosan_ai-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for motosan_ai-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e8dd3812ddfd0c3883179a2d59c61aca99ad1a3a7f4c3ec093d76b67632922cc
MD5 300916205f4877d2dd31f438bc8caa98
BLAKE2b-256 3a622b1c137d66bbc7eac3e1d673d771d505051e46b15f88d7ea66c537fc22b0

See more details on using hashes here.

Supported by

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