Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b76b20e
Started on image upload support
m-messer Jan 27, 2026
36e95aa
Switched to put
m-messer Jan 27, 2026
97373a4
Fixed issue with request not sending file name and updated tests
m-messer Jan 27, 2026
cdf120c
Switched to auto parsing of mime_type
m-messer Jan 28, 2026
fe5df2d
Implemented auth for uploading to S3
m-messer Jan 28, 2026
e011409
Added session token
m-messer Jan 28, 2026
b375d16
Added passing of folder name
m-messer Jan 29, 2026
fe90a96
Added test suite for stream_io
m-messer Mar 11, 2026
d0a1444
Added test suite for stream_io
m-messer Mar 11, 2026
3080968
Changed how Stdio closes
m-messer Mar 11, 2026
286ec2b
Changed exception to break instead of printing
m-messer Mar 11, 2026
313a56d
Added debub statements
m-messer Mar 11, 2026
3056704
Added debug statements
m-messer Mar 11, 2026
467b858
Merge branch 'bug/ipc' of https://github.com/lambda-feedback/toolkit-…
m-messer Mar 11, 2026
abdb46b
Moved Stdioclient instationtion to run
m-messer Mar 11, 2026
a8ec729
Improved `PrefixStreamIO.read()` to handle partial chunk reads and ad…
m-messer Mar 11, 2026
b81ed91
Merge branch 'main' into bug/ipc
m-messer Mar 12, 2026
7f76f1b
Updated `AWSRequest` to use `data` instead of `buffer` in image uploa…
m-messer Mar 12, 2026
7181b62
Refactored `jsonrpc_handler` to use `Command` type and updated parame…
m-messer Mar 12, 2026
47badae
Updated `StdioServer` to use binary streams for stdin/stdout and adde…
m-messer Mar 12, 2026
e240d70
Fixed `StdioServer.write` to flush stdout buffer in a separate thread…
m-messer Mar 13, 2026
f90147c
Refactored `StdioServer` and `StdioClient` to pass and use captured `…
m-messer Mar 13, 2026
1c71198
Renamed `file_server.py` to `file_server_test.py` for clarity and con…
m-messer Mar 13, 2026
140cf49
Removed explicit `stdout_buffer` handling in `StdioServer` and `Stdio…
m-messer Mar 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lf_toolkit/evaluation/image_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def get_aws_signed_request(full_url, buffer, mime_type):
aws_request = AWSRequest(
method='PUT',
url=full_url,
data=buffer,
data=data,
headers=headers
)

Expand Down
5 changes: 3 additions & 2 deletions lf_toolkit/io/rpc_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from jsonrpcserver import Success
from jsonrpcserver import async_dispatch

from ..shared import Command
from .handler import Handler


Expand All @@ -23,10 +24,10 @@ async def dispatch(self, req: str) -> str:
)


def jsonrpc_handler(handler: Handler, name: str):
def jsonrpc_handler(handler: Handler, name: Command):
async def wrapped(req: dict):
try:
result = await handler.handle(name, req)
result = await handler.handle(name, {"params": req})
return Success(result)
except Exception as e:
return Error(0, str(e), e)
Expand Down
11 changes: 7 additions & 4 deletions lf_toolkit/io/stdio_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from typing import Optional

import anyio
from anyio.streams.file import FileReadStream
from anyio.streams.file import FileWriteStream
from anyio.streams.stapled import StapledByteStream
Expand All @@ -15,17 +16,18 @@
class StdioClient(StreamIO):

def __init__(self):
self._stdout_buffer = sys.stdout.buffer
self.stream = StapledByteStream(
FileWriteStream(sys.stdout),
FileReadStream(sys.stdin),
FileWriteStream(self._stdout_buffer),
FileReadStream(sys.stdin.buffer),
)

async def read(self, size: int) -> bytes:
return await self.stream.receive(size)

async def write(self, data: bytes):
await self.stream.send(data)
await self.stream.flush()
await anyio.to_thread.run_sync(self._stdout_buffer.flush)

async def close(self):
await self.stream.aclose()
Expand All @@ -37,10 +39,11 @@ class StdioServer(StreamServer):

def __init__(self, handler: Optional[Handler] = None):
super().__init__(handler)
self._client = StdioClient()

def wrap_io(self, client: StreamIO) -> StreamIO:
return PrefixStreamIO(client)

async def run(self):
print("StdioServer started", file=sys.stderr, flush=True)
self._client = StdioClient()
await self._handle_client(self._client)
26 changes: 16 additions & 10 deletions lf_toolkit/io/stream_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ async def read(self, size: int) -> bytes:
if content_length == 0:
raise ValueError("Content-Length header not found or is zero")

if content_length > size:
raise ValueError("Content-Length is larger than the read size")

return await self.base.read(content_length)
data = b""
while len(data) < content_length:
chunk = await self.base.read(content_length - len(data))
data += chunk
return data

async def write(self, data: bytes):
response_headers_str = f"Content-Length: {len(data)}\r\n\r\n"
Expand All @@ -84,22 +85,27 @@ async def _handle_client(self, client: StreamIO):

while True:
try:
import sys
print("waiting for data...", file=sys.stderr, flush=True)
data = await io.read(4096)
print(f"got data: {data[:80]}", file=sys.stderr, flush=True)

if not data:
# print("Received empty data")
break

print("dispatching...", file=sys.stderr, flush=True)
response = await self.dispatch(data.decode("utf-8"))
print(f"got response: {str(response)[:80]}", file=sys.stderr, flush=True)

await io.write(response.encode("utf-8"))
print("wrote response", file=sys.stderr, flush=True)
except anyio.EndOfStream:
# print("Client disconnected")
break
except anyio.ClosedResourceError:
# print("Client disconnected")
break
except Exception as e:
print(f"Exception: {e}")
finally:
await client.close()
import traceback
traceback.print_exc(file=sys.stderr)
break

await client.close()
24 changes: 20 additions & 4 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ pytest-cov = "5.0.0"
##########################
# extras
##########################
pytest-anyio = "^0.0.0"

[tool.poetry.extras]
parsing = ["antlr4-python3-runtime", "lark", "latex2sympy"]
Expand Down
File renamed without changes.
Loading
Loading