mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
* Add tuner integration * bump pipecat version * chore: update pipecat submodule to match upstream and use tuner-pipecat-sdk 0.2.0 Update pipecat submodule from 0.0.109.dev23 to 13e98d0d9 (the exact commit upstream dograh-hq/dograh uses after v1.30.1). This installs pipecat-ai as 1.1.0.post277 via setuptools_scm, satisfying tuner-pipecat-sdk 0.2.0's pipecat-ai>=1.0.0 requirement. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * wire tuner * feat: refactor integrations into self contained packages * chore: simplify ensure_public_access_token * fix: remove NodeSpec and make DTOs the source of truth * feat: send relevant signal to mcp using to_mcp_dict * fix: fix tests * cleanup: remove nango integrations * feat: add agents.md for integrations --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, Awaitable, Callable, Protocol
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from api.services.workflow.node_data import BaseNodeData
|
|
from api.services.workflow.node_specs._base import NodeSpec
|
|
|
|
|
|
class IntegrationRuntimeSession(Protocol):
|
|
name: str
|
|
|
|
def attach(self, task: Any) -> None: ...
|
|
|
|
async def on_call_finished(
|
|
self,
|
|
*,
|
|
gathered_context: dict[str, Any],
|
|
) -> dict[str, Any] | None: ...
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IntegrationRuntimeContext:
|
|
workflow_run_id: int
|
|
workflow_run: Any
|
|
workflow_graph: Any
|
|
run_definition: Any
|
|
user_config: Any
|
|
is_realtime: bool
|
|
context_messages_provider: Callable[[], list[dict[str, Any]]]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IntegrationCompletionContext:
|
|
workflow_run_id: int
|
|
workflow_run: Any
|
|
workflow_definition: dict[str, Any]
|
|
definition_id: int | None
|
|
organization_id: int
|
|
public_token: str | None
|
|
|
|
|
|
RuntimeFactory = Callable[
|
|
[IntegrationRuntimeContext],
|
|
list[IntegrationRuntimeSession],
|
|
]
|
|
CompletionHandler = Callable[
|
|
[list[dict[str, Any]], IntegrationCompletionContext],
|
|
Awaitable[dict[str, Any]],
|
|
]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IntegrationNodeRegistration:
|
|
type_name: str
|
|
data_model: type[BaseNodeData]
|
|
node_spec: NodeSpec
|
|
sensitive_fields: tuple[str, ...] = ()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IntegrationPackageSpec:
|
|
name: str
|
|
nodes: tuple[IntegrationNodeRegistration, ...] = ()
|
|
routers: tuple[APIRouter, ...] = ()
|
|
create_runtime_sessions: RuntimeFactory | None = None
|
|
run_completion: CompletionHandler | None = None
|