Python SDK for OctoEvo
Project description
OctoEvo SDK for Python
Python SDK for OctoEvo session protocol and real-time task execution.
Highlights
- HTTP + WebSocket workflow aligned with
docs/wyse-session-protocol.md CreateSessionRequest(task, mode, platform, extra)- API Key and JWT dual authentication
TaskRunnerfor automated and interactive execution- Product analysis: create product, poll status, get report (
ProductService) - Marketing stream support (
marketing_tweet_reply,marketing_tweet_interact,writer_twitter) - Marketing data APIs and dashboard APIs
Architecture
flowchart LR
App[User App] --> Client[Client]
Client --> Session[SessionService]
Client --> Product[ProductService]
Client --> Marketing[MarketingService]
Client --> Upload[FileUploadService]
Session --> HTTP[HTTP API]
Product --> HTTP
Marketing --> HTTP
Upload --> HTTP
Session --> Runner[TaskRunner]
Runner --> WS[WebSocketClient]
WS --> WSS[WebSocket]
Repository Structure
__pycache__ directories are runtime artifacts and are omitted below.
octoevo
├── __init__.py # Package entry
└── mate # Core SDK module
├── __init__.py # Public module exports
├── client.py # Top-level client and service wiring
├── config.py # Config loading and parsing
├── constants.py # Shared protocol/API constants
├── errors.py # SDK exception definitions
├── factory.py # Client/task-runner constructors
├── models.py # Request/response data models
├── plan.py # Plan-related message models
├── services # Domain service layer
│ ├── __init__.py # Service exports
│ ├── agent.py # Agent APIs
│ ├── browser.py # Browser APIs
│ ├── file_upload.py # File upload and validation APIs
│ ├── marketing.py # Marketing dashboard APIs
│ ├── product.py # Product analysis APIs
│ ├── session.py # Session lifecycle and message APIs
│ ├── team.py # Team APIs
│ └── user.py # User and API key APIs
├── task_runner.py # Automated/interactive task execution loop
└── websocket.py # WebSocket transport client
Installation
pip install octoevo
See full install guide: installation.md.
Quick Start
from octoevo.mate import Client, ClientOptions, create_task_runner
from octoevo.mate.models import CreateSessionRequest
from octoevo.mate.task_runner import TaskExecutionOptions, TaskMode
from octoevo.mate.websocket import WebSocketClient
# 1) Initialize client
client = Client(ClientOptions(
api_key="your-api-key", # or jwt_token="your-jwt-token" (pick one)
base_url="https://api.dev.weclaw.ai", # required
timeout=30, # optional, default 30s
))
# 2) Create session (latest protocol fields)
req = CreateSessionRequest(
task="Draft a Twitter launch campaign for my product",
mode="marketing",
platform="api",
extra={"marketing_product": {"product_id": "prod_123"}},
)
session = client.session.create(req)
session_info = client.session.get_info(session.session_id)
# 3) Connect websocket + task runner
ws_client = WebSocketClient(
base_url=client.base_url,
api_key=client.api_key or "",
jwt_token=client.jwt_token or "",
session_id=session_info.session_id,
)
task_runner = create_task_runner(ws_client, client, session_info)
# 4) Execute interactive session (recommended for marketing input loops)
task_runner.run_interactive_session(
initial_task="Generate 3 tweet drafts and 5 candidate replies",
task_mode=TaskMode.Marketing,
extra=req.extra,
options=TaskExecutionOptions(
auto_accept_plan=False,
verbose=True,
stop_on_x_confirm=True,
completion_timeout=600,
),
)
More examples: examples/quickstart.md and examples/getting_started/example.py.
Product Analysis
Create a product, poll until analysis completes, and get the full report — no WebSocket needed.
from octoevo.mate import Client, ClientOptions
client = Client(ClientOptions(
api_key="your-api-key",
base_url="https://api.dev.weclaw.ai",
))
report = client.product.create_and_wait(
product="Notion", # product name or URL
on_poll=lambda attempt, status: print(f"[{attempt}] {status}"),
)
print(report.product_name)
print(report.target_description)
print(report.keywords)
print(report.competitors)
print(report.user_personas)
print(report.recommended_campaigns)
Lower-level methods are also available:
from octoevo.mate.models import CreateProductRequest
# Step 1: create
created = client.product.create(CreateProductRequest(product="Notion"))
# Step 2: poll
info = client.product.get_info(created.product_id)
# Step 3: get report
report = client.product.get_report(info.analysis_result.report_id)
# Optional: industry categories
categories = client.product.get_categories()
Full example: examples/product_analysis/example.py.
Authentication
Use one of the following in ClientOptions / mate.yaml:
api_keyjwt_token
Behavior:
- HTTP:
api_key->x-api-keyjwt_token->Authorization
- WebSocket URL query:
?api_key=...?authorization=...
Session Protocol Flow
Typical flow:
client.session.create(...)to getsession_id- Connect
WebSocketClient - Send
start - Receive
plan / input / progress / rich / text - Receive
task_result - Optionally receive
follow_up_suggestion
For full message schema and rich types, see docs/wyse-session-protocol.md.
Task Runner API
TaskRunner is created via:
task_runner = create_task_runner(ws_client, client, session_info)
Main methods:
run_task(task, attachments=None, task_mode=TaskMode.Default, extra=None, options=None) -> TaskResultrun_interactive_session(initial_task, attachments=None, task_mode=TaskMode.Default, extra=None, options=None)
TaskExecutionOptions includes:
verbose(default:False) — print status/progress to stdoutauto_accept_plan— auto-approve plan without user inputcapture_screenshotsstop_on_x_confirm— stop session when browser confirmation is requested (useful in CLI)completion_timeout
Marketing APIs
Session-scoped generated content:
client.session.get_marketing_data(session_id, type="reply")
client.session.get_marketing_data(session_id, type="like")
client.session.get_marketing_data(session_id, type="retweet")
client.session.get_marketing_data(session_id, type="tweet")
Dashboard APIs:
client.marketing.get_product_info(product_id)
client.marketing.get_report_detail(report_id)
client.marketing.update_report(report_id, data)
client.marketing.get_research_tweets(query_id)
Services Overview
client.user- API keysclient.team- team list/infoclient.agent- agent list/infoclient.session- create/info/messages/marketing dataclient.browser- browser APIsclient.file_upload- upload and validationclient.product- product analysis (create/poll/report/categories)client.marketing- dashboard marketing APIs
Error Types
APIErrorNetworkErrorWebSocketErrorConfigErrorSessionExecutionError
Documentation
- Session Protocol:
docs/wyse-session-protocol.md - Product API:
docs/api-product-create.md - Quick Start:
examples/quickstart.md - Installation:
installation.md - Marketing Example:
examples/getting_started/example.py - Product Analysis Example:
examples/product_analysis/example.py
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
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 octoevo-0.1.1.tar.gz.
File metadata
- Download URL: octoevo-0.1.1.tar.gz
- Upload date:
- Size: 39.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1ef3d871081f9cc57dc152d677f0e777e370131f3ef4485677cd0b0d6761ce1
|
|
| MD5 |
69ded2af29df3c238fab06ac19f9a488
|
|
| BLAKE2b-256 |
786875af5d07ee477fc8ad98c4a562fa885e1e1bee1975cfe76e647ce0d96479
|
File details
Details for the file octoevo-0.1.1-py3-none-any.whl.
File metadata
- Download URL: octoevo-0.1.1-py3-none-any.whl
- Upload date:
- Size: 43.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ad1109976a5822763a9271958efc7b68991034ff7fdd0f8a2bcc30f513ea7de
|
|
| MD5 |
892b4d9e8977910599688034ff844fc5
|
|
| BLAKE2b-256 |
5f3093862e7dd93e698ddf37f1780ae5a8f30de943d5d24ecee60a4b80e5aa64
|