Skip to content

Commit

Permalink
Fix reload mode by implementing close on the client (#8548)
Browse files Browse the repository at this point in the history
* Fix reload mode

* add changeset

* reload test

* add changeset

---------

Co-authored-by: gradio-pr-bot <[email protected]>
  • Loading branch information
freddyaboulton and gradio-pr-bot authored Jun 13, 2024
1 parent 88de38e commit 7fc0f51
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 2 deletions.
6 changes: 6 additions & 0 deletions .changeset/red-rice-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@gradio/client": patch
"gradio": patch
---

fix:Fix reload mode by implementing `close` on the client
4 changes: 2 additions & 2 deletions client/js/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
parse_and_set_cookies
} from "./helpers/init_helpers";
import { check_space_status } from "./helpers/spaces";
import { open_stream, readable_stream } from "./utils/stream";
import { open_stream, readable_stream, close_stream } from "./utils/stream";
import { API_INFO_ERROR_MSG, CONFIG_ERROR_MSG } from "./constants";

export class Client {
Expand Down Expand Up @@ -209,7 +209,7 @@ export class Client {
}

close(): void {
this.heartbeat_event?.close();
close_stream(this.stream_status, this.abort_controller);
}

static async duplicate(
Expand Down
81 changes: 81 additions & 0 deletions js/app/test/test_chatinterface.reload.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import { test, expect } from "@playwright/test";
import { spawnSync } from "node:child_process";
import { launch_app_background, kill_process } from "./utils";
import { join } from "path";

let _process;

const demo_file = "chat_demo.py";

test.beforeAll(() => {
const demo = `
import gradio as gr
def greet(msg, history):
return "Hello"
demo = gr.ChatInterface(fn=greet)
if __name__ == "__main__":
demo.launch()
`;
spawnSync(`echo '${demo}' > ${join(process.cwd(), demo_file)}`, {
shell: true,
stdio: "pipe",
env: {
...process.env,
PYTHONUNBUFFERED: "true"
}
});
});

test.afterAll(() => {
if (_process) kill_process(_process);
spawnSync(`rm ${join(process.cwd(), demo_file)}`, {
shell: true,
stdio: "pipe",
env: {
...process.env,
PYTHONUNBUFFERED: "true"
}
});
});

test("gradio dev mode correctly reloads a stateful ChatInterface demo", async ({
page
}) => {
test.setTimeout(20 * 1000);

try {
const port = 7890;
const { _process: server_process } = await launch_app_background(
`GRADIO_SERVER_PORT=${port} gradio ${join(process.cwd(), demo_file)}`,
process.cwd()
);
_process = server_process;
console.log("Connected to port", port);
const demo = `
import gradio as gr
def greet(msg, history):
return "Hello"
demo = gr.ChatInterface(fn=greet, textbox=gr.Textbox(label="foo"))
if __name__ == "__main__":
demo.launch()
`;
await page.goto(`http://localhost:${port}`);
spawnSync(`echo '${demo}' > ${join(process.cwd(), demo_file)}`, {
shell: true,
stdio: "pipe",
env: {
...process.env,
PYTHONUNBUFFERED: "true"
}
});
await expect(page.getByLabel("foo")).toBeVisible();
} finally {
if (_process) kill_process(_process);
}
});

0 comments on commit 7fc0f51

Please sign in to comment.