Skip to main content

str-message

Any Message Could be a String, for LLM Usage.

A universal message format that seamlessly works with OpenAI's Chat Completion API, Response API, and Agents SDK. Supports multi-turn conversations, tools, and MCP (Model Context Protocol).

Compatibility Matrix

Feature OpenAI Gemini Anthropic Groq
ChatCompletion/Basic
ChatCompletion/Basic Stream
ChatCompletion/Tool
ChatCompletion/Tool Stream
ChatCompletion/Audio
ChatCompletion/Image
Response/Basic
Response/Basic Stream
Response/Tool
Response/Tool Stream
Response/MCP
Response/MCP Stream
Response/Image
Agents/Basic
Agents/Basic Stream
Agents/Tool
Agents/Tool Stream
Agents/MCP
Agents/MCP Stream
Agents/Image

Installation

pip install str-message

Quick Start

import agents
import openai
from str_message import Conversation, Message, UserMessage
from str_message.extra.func_defs import func_def_get_current_time
from str_message.extra.mcps import aws_knowledge_mcp_tool
from str_message.utils.might_reasoning import might_reasoning
from str_message.utils.might_temperature import might_temperature

MODEL = "gpt-5-mini"

# Create agent with custom tool and MCP
agent = agents.Agent(
    "assistant",
    model=agents.OpenAIResponsesModel(
        model=MODEL,
        openai_client=openai.AsyncOpenAI(),
    ),
    model_settings=agents.ModelSettings(
        temperature=might_temperature(MODEL, 0.0, default=None),
        reasoning=might_reasoning(MODEL, "low", default=None),
    ),
    instructions="You are a helpful assistant.",
    tools=[
        func_def_get_current_time().agents_tool,  # Custom tool
        aws_knowledge_mcp_tool,  # MCP tool
    ],
)

conv = Conversation()

# 4-turn conversation demonstrating reasoning, tool, MCP, and regular chat
user_says = [
    "Solve this: If I have 3 apples and buy 2 more, then give 1 away, how many do I have?",  # Reasoning
    "What time is it in Tokyo?",  # Custom tool
    "What is AWS S3?",  # MCP
    "Thank you!",  # Regular chat
]

for user_say in user_says:
    conv.add_message(UserMessage(content=user_say))

    input_messages = Message.to_response_input_param(conv.messages)

    run_result = await agents.run.Runner().run(agent, input_messages, context={})

    # Update conversation with agent's response
    conv.messages[:] = [
        Message.from_any(item) for item in run_result.to_input_list()
    ]

    # Track usage and cost
    if usage := run_result.context_wrapper.usage:
        conv.add_usage(usage, model=MODEL)

    conv.clean_messages()

print(f"Total cost: ${conv.total_cost:.4f}")

Features

  • Universal Format: Single message format works across all OpenAI APIs
  • Multi-turn Conversations: Built-in conversation management with Conversation class
  • Tool Support: Native support for function calling and tool execution
  • MCP Compatible: Built-in MCP (Model Context Protocol) integration
  • Usage Tracking: Automatic token usage and cost tracking
  • Type Safe: Full type annotations with Pydantic models

Key Classes

  • Message: Universal message container
  • Conversation: Manages multi-turn conversations and usage tracking
  • UserMessage, AssistantMessage, ToolCallOutputMessage: Typed message builders
  • FuncDef: Type-safe function/tool definitions

Links

License

MIT

Download files

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

Source Distribution

str_message-0.8.0.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

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

str_message-0.8.0-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file str_message-0.8.0.tar.gz.

File metadata

  • Download URL: str_message-0.8.0.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Darwin/25.0.0

File hashes

Hashes for str_message-0.8.0.tar.gz
Algorithm Hash digest
SHA256 92ecc25cb620179b884003ffb44bdb6563be43cd1c4c842034b3c9a33366c854
MD5 50abb66d9f945e26e4b70dd2d8dd1f8f
BLAKE2b-256 9061c82482058a7561b5f4651a99c78e7385a1341f6856160dbf88f4d56bea64

See more details on using hashes here.

File details

Details for the file str_message-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: str_message-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Darwin/25.0.0

File hashes

Hashes for str_message-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6190c21a14578b206848c1453ca379f6bde8eb73571b6ac8d1e50d8df5a142d9
MD5 281757ed3fe5b78bb92e4ebb8d673da9
BLAKE2b-256 498b13b84f736632066facc7f51c3ae40b4c86268240b1ff4b13350f16c0c086

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 files

0.7.0

2 files

0.6.0

2 files

Supported by

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