Skip to main content

Sema4ai library for RPA Framework

Project description

This library enables Sema4.ai Agent API integration for RPA Framework libraries, allowing you to communicate with AI agents in your automation workflows.

Installation

pip install rpaframework-sema4ai

Requirements

  • Python 3.10 or higher

  • A Sema4.ai account with API access

  • Agent API key and endpoint URL

Features

  • Ask Agent: Send messages to AI agents and receive responses

  • Conversation Management: Create and continue conversations with agents

  • Message History: Retrieve conversation history and messages

  • Async Support: Non-blocking async methods for concurrent operations

  • Client Caching: Efficient reuse of API clients across multiple requests

Usage Examples

Robot Framework

*** Settings ***
Library    RPA.Sema4AI

*** Variables ***
${API_KEY}         %{SEMA4AI_API_KEY}
${API_ENDPOINT}    https://api.sema4.ai/v1

*** Tasks ***
Chat With Agent
    ${response}=    Ask Agent
    ...    message=What is the weather today?
    ...    agent_api_key=${API_KEY}
    ...    agent_api_endpoint=${API_ENDPOINT}
    ...    agent_name=Weather Assistant
    Log    Response: ${response.response}
    Log    Conversation ID: ${response.conversation_id}

Continue Conversation
    ${response}=    Ask Agent
    ...    message=What about tomorrow?
    ...    agent_api_key=${API_KEY}
    ...    agent_api_endpoint=${API_ENDPOINT}
    ...    agent_name=Weather Assistant
    ...    conversation_id=${PREV_CONVERSATION_ID}
    Log    Response: ${response.response}

List Conversations
    ${conversations}=    Get Conversations
    ...    agent_api_key=${API_KEY}
    ...    agent_api_endpoint=${API_ENDPOINT}
    ...    agent_name=Weather Assistant
    FOR    ${conv}    IN    @{conversations}
        Log    ${conv.name} (ID: ${conv.conversation_id})
    END

Python

from RPA.Sema4AI import Sema4AI

client = Sema4AI()

# Send a message to an agent
response = client.ask_agent(
    message="What is the weather today?",
    agent_api_key="your-api-key",
    agent_api_endpoint="https://api.sema4.ai/v1",
    agent_name="Weather Assistant"
)
print(f"Response: {response.response}")
print(f"Conversation ID: {response.conversation_id}")
print(f"Execution time: {response.execution_time}s")

# Continue the conversation
followup = client.ask_agent(
    message="What about tomorrow?",
    agent_api_key="your-api-key",
    agent_api_endpoint="https://api.sema4.ai/v1",
    agent_name="Weather Assistant",
    conversation_id=response.conversation_id
)
print(f"Follow-up: {followup.response}")

# Get all conversations for an agent
conversations = client.get_conversations(
    agent_api_key="your-api-key",
    agent_api_endpoint="https://api.sema4.ai/v1",
    agent_name="Weather Assistant"
)
for conv in conversations:
    print(f"Conversation: {conv.name} (ID: {conv.conversation_id})")

# Get messages in a conversation
messages = client.get_messages(
    agent_api_key="your-api-key",
    agent_api_endpoint="https://api.sema4.ai/v1",
    conversation_id=response.conversation_id,
    agent_name="Weather Assistant"
)
for msg in messages:
    print(f"{msg.get('role')}: {msg.get('content')}")

Async Python

For non-blocking operations in async contexts:

import asyncio
from RPA.Sema4AI import Sema4AI

async def main():
    client = Sema4AI()

    # Concurrent agent requests
    tasks = [
        client.ask_agent_async(
            message=f"Question {i}",
            agent_api_key="your-api-key",
            agent_api_endpoint="https://api.sema4.ai/v1",
            agent_name="My Assistant"
        )
        for i in range(3)
    ]
    responses = await asyncio.gather(*tasks)

    for i, response in enumerate(responses):
        print(f"Response {i}: {response.response}")

asyncio.run(main())

API Reference

Sema4AI Class

ask_agent(message, agent_api_key, agent_api_endpoint, agent_id=None, agent_name=None, conversation_id=None, conversation_name=None)

Send a message to an agent and receive a response.

  • message: The message content to send

  • agent_api_key: API key for authentication

  • agent_api_endpoint: The agent API endpoint URL

  • agent_id: Agent ID (use either agent_id or agent_name)

  • agent_name: Agent name (use either agent_id or agent_name)

  • conversation_id: Optional, for continuing existing conversations

  • conversation_name: Optional, name for new conversations

Returns: MessageResponse object with conversation_id, response, agent_name, agent_id, and execution_time

get_conversations(agent_api_key, agent_api_endpoint, agent_id=None, agent_name=None)

Get all conversations for an agent.

Returns: ConversationsResult containing list of Conversation objects

get_messages(agent_api_key, agent_api_endpoint, conversation_id, agent_id=None, agent_name=None)

Get all messages in a conversation.

Returns: MessagesResult containing list of message dictionaries

Async variants: ask_agent_async, get_conversations_async, get_messages_async

Response Objects

MessageResponse
  • conversation_id: ID of the conversation

  • response: Text response from the agent

  • agent_name: Name of the responding agent

  • agent_id: ID of the responding agent

  • execution_time: Time taken in seconds

ConversationsResult
  • conversations: List of Conversation objects

  • execution_time: Time taken in seconds

  • Supports iteration and indexing

MessagesResult
  • messages: List of message dictionaries

  • execution_time: Time taken in seconds

  • Supports iteration and indexing

Conversation
  • conversation_id: Unique conversation identifier

  • name: Conversation name

  • agent_id: ID of the associated agent

Error Handling

from RPA.Sema4AI import Sema4AI, Sema4aiException

client = Sema4AI()

try:
    response = client.ask_agent(
        message="Hello",
        agent_api_key="your-api-key",
        agent_api_endpoint="https://api.sema4.ai/v1",
        agent_name="NonExistent Agent"
    )
except Sema4aiException as e:
    print(f"Error: {e}")
    if e.status_code:
        print(f"HTTP Status: {e.status_code}")
except ValueError as e:
    print(f"Validation error: {e}")

Configuration

The library supports multiple URL formats for the API endpoint:

  • Direct API URL: https://api.sema4.ai/v1

  • Tenant URL: https://ace-xxxxx.prod-demo.sema4ai.work/tenants/GUID

  • Base URL: https://ace-xxxxx.prod-demo.sema4ai.work

All formats are automatically normalized to the correct API endpoint.

License

Apache License 2.0

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

rpaframework_sema4ai-1.1.0.tar.gz (81.7 kB view details)

Uploaded Source

Built Distribution

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

rpaframework_sema4ai-1.1.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file rpaframework_sema4ai-1.1.0.tar.gz.

File metadata

File hashes

Hashes for rpaframework_sema4ai-1.1.0.tar.gz
Algorithm Hash digest
SHA256 d27164425d1dc7f4a5a09462dfa0537158fb85144a42f9b61ac87378bd2b14de
MD5 b9bc4a4482ebb2a9abc5a86987cdc77c
BLAKE2b-256 9186f2c85ff996d2d5b5fcf0f08da83e33fa77a0c1c630919034b752731bb5c7

See more details on using hashes here.

File details

Details for the file rpaframework_sema4ai-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rpaframework_sema4ai-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 22477786c1727f489c450a4697674ac61229160e31c71e191bc43fbd0e26d00b
MD5 1679588af7e3c74cd11e156a5ce880dd
BLAKE2b-256 46685188e117ea21bdccfb69a8f585d04c265bdd6a76ae3fc64248487645df60

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