Any Message Could be a String, for LLM Usage
Project description
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
Conversationclass - 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 containerConversation: Manages multi-turn conversations and usage trackingUserMessage,AssistantMessage,ToolCallOutputMessage: Typed message buildersFuncDef: Type-safe function/tool definitions
Links
License
MIT
Project details
Release history Release notifications | RSS feed
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.7.0.tar.gz
(21.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file str_message-0.7.0.tar.gz.
File metadata
- Download URL: str_message-0.7.0.tar.gz
- Upload date:
- Size: 21.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17881cd77bd591be0192583cf632dfb665362f9b637a72b99bfa189881839f9e
|
|
| MD5 |
fc473bcc7de661894eb8f0290b64ff2b
|
|
| BLAKE2b-256 |
008f8bf4febff6454b5ad591b0663d39e551c68dcbf9815869790158d7eff213
|
File details
Details for the file str_message-0.7.0-py3-none-any.whl.
File metadata
- Download URL: str_message-0.7.0-py3-none-any.whl
- Upload date:
- Size: 29.5 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
573ee2448d3829856c0611e3aebc65cbe794bb4c58d30d7785e639aa344f9472
|
|
| MD5 |
bda5d1740adda6370eadc3fe4fd0e115
|
|
| BLAKE2b-256 |
258c66237b793130a7b0bd28a40c3c448edf8af0602c1968f2999d519629905f
|