Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open Chat Python Client

This package now has two layers:

  • Typed base client generated from backend API docs (backend/server/swagger.json) via openapi-python-client
  • Handwritten OpenChatClient wrapper in client/client.py for higher-level workflows

Breaking change: the wrapper is now typed-first and returns model objects (not dict payloads).

Comprehensive integration guide for external projects:

  • clients/oc_python_client/INTEGRATION_GUIDE.md

Install directly from GitHub:

pip install git+https://github.com/msgmate-io/open-chat-go-python-client.git

For requirements.txt, add this exact line:

open_chat_client_python @ git+https://github.com/msgmate-io/open-chat-go-python-client.git

For a pinned release tag in requirements.txt:

open_chat_client_python @ git+https://github.com/msgmate-io/open-chat-go-python-client.git@open-chat-pr-alpha-release-0.0.264-2d1aef2d7085

Install locally (from this monorepo root):

python3 -m venv .venv
source .venv/bin/activate
pip install -e ./clients/oc_python_client

Run the CLI:

open_chat_client_python --host http://localhost:1984 --username admin --password password --message "hi"

# or authenticate with an API token
open_chat_client_python --host http://localhost:1984 --api-token ocat_xxx --message "hi"

# legacy alias (still supported)
oc_client --host http://localhost:1984 --api-token ocat_xxx --message "hi"

Use the integration test script in this repository:

python development/scripts/test_client.py

Python API example:

from client.client import OpenChatClient, PasswordAuth
from client import ToolName

client = OpenChatClient(
    base_url="http://localhost:1984",
    auth=PasswordAuth(email="admin", password="password"),
)
client.login()

# Simplest flow: use default bot + one call
interaction = client.interact(message="Hello from Python")
print("Chat UUID:", interaction.uuid)

final = interaction.wait_until_finished(timeout_seconds=20)
print("Finished payload type:", type(final).__name__)

Recommended clean usage options:

  • client.interact("...") for fastest path
  • client.get_default_bot().create_interaction(...) when explicit bot handle helps
  • client.get_bot("support_agent").create_interaction(...) when selecting named bots

Regenerate the typed base client:

python3 development/scripts/update_oc_python_client_base.py

The generator script converts Swagger 2.0 to OpenAPI 3.0 with swagger2openapi, then runs openapi-python-client and updates clients/oc_python_client/client/generated_api/.

Tool call/init payload types are now generated automatically as model classes.

Example (typed call validation):

from client.client import OpenChatClient, PasswordAuth
from client.generated_api.api.tools.post_api_v1_tools_typing_get_weather_call_validate import sync as validate_weather_call
from client.generated_api.models.get_weather_call import GetWeatherCall

client = OpenChatClient(base_url="http://localhost:1984", auth=PasswordAuth("admin", "password"))
client.login()

interaction = client.get_bot("bot").create_interaction(
    message="Should I carry an umbrella in Berlin today?",
    overrides={"tools": [ToolName.GET_WEATHER]},
)

# Typed call payload class from generated OpenAPI models
typed_call = GetWeatherCall(location="Berlin")
validate_weather_call(client=client._api, body=typed_call)

If you want tool names fetched from the server at runtime (no hardcoded list), use:

runtime_tools = client.list_tool_names()
ToolNameDynamic = client.get_tool_name_enum()

print(runtime_tools)
print(ToolNameDynamic.GET_WEATHER)

About

Open-Chat Go Python Client

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages