2.0.0
Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai> Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai> Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai> Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-Authored-By: Clément Siriex <clement.sirieix@mistral.ai> Co-Authored-By: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-Authored-By: Thaddee Tyl <thaddee.tyl@gmail.com> Co-Authored-By: David Brochart <david.brochart@gmail.com> Co-Authored-By: Joseph Guhlin <joseph.guhlin@gmail.com> Co-Authored-By: Thomas Kenbeek <thomaskenbeek@gmail.com> Co-Authored-By: Remenby31 <baptiste.cruvellier31@gmail.com>
This commit is contained in:
parent
79f215d91c
commit
d33db9fff8
217 changed files with 16911 additions and 4305 deletions
130
tests/stubs/fake_client.py
Normal file
130
tests/stubs/fake_client.py
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from acp import (
|
||||
Agent as AcpAgent,
|
||||
Client,
|
||||
KillTerminalCommandResponse,
|
||||
ReadTextFileResponse,
|
||||
ReleaseTerminalResponse,
|
||||
RequestPermissionResponse,
|
||||
SessionNotification,
|
||||
TerminalHandle,
|
||||
TerminalOutputResponse,
|
||||
WaitForTerminalExitResponse,
|
||||
WriteTextFileResponse,
|
||||
)
|
||||
from acp.schema import (
|
||||
AgentMessageChunk,
|
||||
AgentPlanUpdate,
|
||||
AgentThoughtChunk,
|
||||
AvailableCommandsUpdate,
|
||||
CurrentModeUpdate,
|
||||
EnvVariable,
|
||||
PermissionOption,
|
||||
SessionInfoUpdate,
|
||||
ToolCallProgress,
|
||||
ToolCallStart,
|
||||
ToolCallUpdate,
|
||||
UserMessageChunk,
|
||||
)
|
||||
|
||||
|
||||
class FakeClient(Client):
|
||||
agent: AcpAgent
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._session_updates = []
|
||||
|
||||
async def session_update(
|
||||
self,
|
||||
session_id: str,
|
||||
update: UserMessageChunk
|
||||
| AgentMessageChunk
|
||||
| AgentThoughtChunk
|
||||
| ToolCallStart
|
||||
| ToolCallProgress
|
||||
| AgentPlanUpdate
|
||||
| AvailableCommandsUpdate
|
||||
| CurrentModeUpdate
|
||||
| SessionInfoUpdate,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
self._session_updates.append(
|
||||
SessionNotification(session_id=session_id, update=update)
|
||||
)
|
||||
|
||||
async def request_permission(
|
||||
self,
|
||||
options: list[PermissionOption],
|
||||
session_id: str,
|
||||
tool_call: ToolCallUpdate,
|
||||
**kwargs: Any,
|
||||
) -> RequestPermissionResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def read_text_file(
|
||||
self,
|
||||
path: str,
|
||||
session_id: str,
|
||||
limit: int | None = None,
|
||||
line: int | None = None,
|
||||
**kwargs: Any,
|
||||
) -> ReadTextFileResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def write_text_file(
|
||||
self, content: str, path: str, session_id: str, **kwargs: Any
|
||||
) -> WriteTextFileResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def create_terminal(
|
||||
self,
|
||||
command: str,
|
||||
session_id: str,
|
||||
args: list[str] | None = None,
|
||||
cwd: str | None = None,
|
||||
env: list[EnvVariable] | None = None,
|
||||
output_byte_limit: int | None = None,
|
||||
**kwargs: Any,
|
||||
) -> TerminalHandle:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def terminal_output(
|
||||
self, session_id: str, terminal_id: str, **kwargs: Any
|
||||
) -> TerminalOutputResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def release_terminal(
|
||||
self, session_id: str, terminal_id: str, **kwargs: Any
|
||||
) -> ReleaseTerminalResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def wait_for_terminal_exit(
|
||||
self, session_id: str, terminal_id: str, **kwargs: Any
|
||||
) -> WaitForTerminalExitResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def kill_terminal(
|
||||
self, session_id: str, terminal_id: str, **kwargs: Any
|
||||
) -> KillTerminalCommandResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def ext_method(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def ext_notification(self, method: str, params: dict[str, Any]) -> None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def close(self) -> None:
|
||||
raise NotImplementedError()
|
||||
|
||||
def on_connect(self, conn: AcpAgent) -> None:
|
||||
self.agent = conn
|
||||
|
||||
async def __aenter__(self) -> FakeClient:
|
||||
return self
|
||||
|
||||
async def __aexit__(self, exc_type, exc, tb) -> None:
|
||||
await self.close()
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
|
||||
from acp import (
|
||||
Agent,
|
||||
AgentSideConnection,
|
||||
CreateTerminalRequest,
|
||||
KillTerminalCommandRequest,
|
||||
KillTerminalCommandResponse,
|
||||
ReadTextFileRequest,
|
||||
ReadTextFileResponse,
|
||||
ReleaseTerminalRequest,
|
||||
ReleaseTerminalResponse,
|
||||
RequestPermissionRequest,
|
||||
RequestPermissionResponse,
|
||||
SessionNotification,
|
||||
TerminalHandle,
|
||||
TerminalOutputRequest,
|
||||
TerminalOutputResponse,
|
||||
WaitForTerminalExitRequest,
|
||||
WaitForTerminalExitResponse,
|
||||
WriteTextFileRequest,
|
||||
WriteTextFileResponse,
|
||||
)
|
||||
|
||||
|
||||
class FakeAgentSideConnection(AgentSideConnection):
|
||||
def __init__(self, to_agent: Callable[[AgentSideConnection], Agent]) -> None:
|
||||
self._session_updates = []
|
||||
to_agent(self)
|
||||
|
||||
async def sessionUpdate(self, params: SessionNotification) -> None:
|
||||
self._session_updates.append(params)
|
||||
|
||||
async def requestPermission(
|
||||
self, params: RequestPermissionRequest
|
||||
) -> RequestPermissionResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def readTextFile(self, params: ReadTextFileRequest) -> ReadTextFileResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def writeTextFile(
|
||||
self, params: WriteTextFileRequest
|
||||
) -> WriteTextFileResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def createTerminal(self, params: CreateTerminalRequest) -> TerminalHandle:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def terminalOutput(
|
||||
self, params: TerminalOutputRequest
|
||||
) -> TerminalOutputResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def releaseTerminal(
|
||||
self, params: ReleaseTerminalRequest
|
||||
) -> ReleaseTerminalResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def waitForTerminalExit(
|
||||
self, params: WaitForTerminalExitRequest
|
||||
) -> WaitForTerminalExitResponse:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def killTerminal(
|
||||
self, params: KillTerminalCommandRequest
|
||||
) -> KillTerminalCommandResponse | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def extMethod(self, method: str, params: dict[str, Any]) -> dict[str, Any]:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def extNotification(self, method: str, params: dict[str, Any]) -> None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def close(self) -> None:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def __aenter__(self) -> AgentSideConnection:
|
||||
return self
|
||||
|
||||
async def __aexit__(self, exc_type, exc, tb) -> None:
|
||||
await self.close()
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from vibe.core.tools.base import BaseTool, BaseToolConfig, BaseToolState
|
||||
from vibe.core.tools.base import BaseTool, BaseToolConfig, BaseToolState, InvokeContext
|
||||
from vibe.core.types import ToolStreamEvent
|
||||
|
||||
|
||||
class FakeToolArgs(BaseModel):
|
||||
|
|
@ -24,7 +27,9 @@ class FakeTool(BaseTool[FakeToolArgs, FakeToolResult, BaseToolConfig, FakeToolSt
|
|||
def get_name(cls) -> str:
|
||||
return "stub_tool"
|
||||
|
||||
async def run(self, args: FakeToolArgs) -> FakeToolResult:
|
||||
async def run(
|
||||
self, args: FakeToolArgs, ctx: InvokeContext | None = None
|
||||
) -> AsyncGenerator[ToolStreamEvent | FakeToolResult, None]:
|
||||
if self._exception_to_raise:
|
||||
raise self._exception_to_raise
|
||||
return FakeToolResult()
|
||||
yield FakeToolResult()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue