Skip to main content

UTCP communication protocol plugin for direct text content (browser-compatible).

Project description

UTCP Text Plugin

PyPI Downloads

A text content plugin for UTCP. This plugin allows you to pass UTCP manuals or tool definitions directly as text content, without requiring file system access. It's browser-compatible and ideal for embedded configurations.

Features

  • Direct Text Content: Pass UTCP manuals or tool definitions directly as strings.
  • Browser Compatible: No file system access required, works in browser environments.
  • JSON & YAML Support: Parses both JSON and YAML formatted content.
  • OpenAPI Support: Automatically converts OpenAPI specs to UTCP tools with optional authentication.
  • Base URL Override: Override API base URLs when converting OpenAPI specs.
  • Tool Authentication: Supports authentication for generated tools from OpenAPI specs via auth_tools.

Installation

pip install utcp-text

How It Works

The Text plugin operates in two main ways:

  1. Tool Discovery (register_manual): It parses the content field directly as a UTCP manual or OpenAPI spec. This is how the UtcpClient discovers what tools can be called.
  2. Tool Execution (call_tool): When you call a tool, the plugin returns the content field directly.

Note: For file-based tool definitions, use the utcp-file plugin instead.

Quick Start

Here is a complete example demonstrating how to define and use tools with direct text content.

1. Define Tools with Inline Content

import asyncio
import json
from utcp.utcp_client import UtcpClient

# Define a UTCP manual as a Python dict, then convert to JSON string
manual_content = json.dumps({
    "manual_version": "1.0.0",
    "utcp_version": "1.0.2",
    "tools": [
        {
            "name": "get_mock_user",
            "description": "Returns a mock user profile.",
            "tool_call_template": {
                "call_template_type": "text",
                "content": json.dumps({
                    "id": 123,
                    "name": "John Doe",
                    "email": "john.doe@example.com"
                })
            }
        }
    ]
})

async def main():
    # Create a client with direct text content
    client = await UtcpClient.create(config={
        "manual_call_templates": [{
            "name": "inline_tools",
            "call_template_type": "text",
            "content": manual_content
        }]
    })

    # List the tools to confirm it was loaded
    tools = await client.list_tools()
    print("Available tools:", [tool.name for tool in tools])

    # Call the tool
    result = await client.call_tool("inline_tools.get_mock_user", {})
    
    print("\nTool Result:")
    print(result)

if __name__ == "__main__":
    asyncio.run(main())

2. Using with OpenAPI Specs

You can also pass OpenAPI specs directly as text content:

import asyncio
import json
from utcp.utcp_client import UtcpClient

openapi_spec = json.dumps({
    "openapi": "3.0.0",
    "info": {"title": "Pet Store", "version": "1.0.0"},
    "servers": [{"url": "https://api.example.com"}],
    "paths": {
        "/pets": {
            "get": {
                "operationId": "listPets",
                "summary": "List all pets",
                "responses": {"200": {"description": "Success"}}
            }
        }
    }
})

async def main():
    client = await UtcpClient.create(config={
        "manual_call_templates": [{
            "name": "pet_api",
            "call_template_type": "text",
            "content": openapi_spec,
            "base_url": "https://api.petstore.io/v1"  # Optional: override base URL
        }]
    })

    tools = await client.list_tools()
    print("Available tools:", [tool.name for tool in tools])

if __name__ == "__main__":
    asyncio.run(main())

Use Cases

  • Embedded Configurations: Embed tool definitions directly in your application code.
  • Browser Applications: Use UTCP in browser environments without file system access.
  • Dynamic Tool Generation: Generate tool definitions programmatically at runtime.
  • Testing: Define mock tools inline for unit tests.

Related Documentation

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

utcp_text-1.1.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

utcp_text-1.1.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: utcp_text-1.1.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for utcp_text-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3d262bc0ac8727c9625260ed846de0736f48ebfbab35a19bef7aa1e1b33f573f
MD5 87e4ac80f0942b62e9a7bceea5cb856d
BLAKE2b-256 51612313ed11e5c94a9f62a7d8c81894da5544b533618e830b47a030e425e4b3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: utcp_text-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for utcp_text-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e28a77b9c95f69ad61c0b0b86c88303dfcdc5abf9b91ec8185a0904fedef550
MD5 f107491856c77fbbb54ee1d7bdadb266
BLAKE2b-256 10db4b0de94ad0f5a210766389ed7a8408a5350318e6449d0d01c4cc65d67dd8

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