Releases: replicate/replicate-python
1.1.0b1
What's Changed
The main change in 1.1.0b1
is the introduction of a new experimental replicate.use()
function intended to eventually replace replicate.run()
. This provides a more expressive function-like interface for calling models.
import replicate
flux_dev = replicate.use("black-forest-labs/flux-dev")
outputs = flux_dev(prompt="a cat wearing an amusing hat")
for output in outputs:
print(output) # /tmp/output.webp
Check out the README.md on the beta
branch for more details.
- Switch to using
uv
for project tooling by @aron in #437 - Add experimental
replicate.use()
function by @aron in #438
Full Changelog: 1.0.7...1.1.0b1
1.0.7
What's Changed
If you run replicate-python within a cog model running cog 0.14.11 or later, it is now possible to pass a REPLICATE_API_TOKEN
via the context
as part of a prediction request.
The Replicate()
constructor will now use this context when available. This grants cog models the ability to use the Replicate client libraries, scoped to a user on a per request basis.
Full Changelog: 1.0.6...1.0.7
1.0.6
Full Changelog: 1.0.4...1.0.6
There was no 1.0.5 release, the release system failed and we chose not to re-use the identifier.
1.0.4
What's Changed
- Fix two bugs in the base64 file_encoding_strategy by @aron in #398
replicate.run()
now correctly converts the file provided into a valid base64 encoded data URL.replicate.async_run()
now respects thefile_encoding_strategy
flag.
Full Changelog: 1.0.3...1.0.4
1.0.3
What's Changed
- Fix a bug where
replicate.run
would swallow tokens (or files) at the start of a prediction's output. Thanks to @aron in #383
Full Changelog: 1.0.2...1.0.3
1.0.2
1.0.1
1.0.0
Warning
Breaking changes
This 1.0.0 latest release of replicate
contains breaking changes. The replicate.run()
method will now return FileObjects
rather than URL strings by default for models that output files.
The FileObject
implements an iterable object similar to httpx.Response
to make it easier to work with files and ensures that Replicate can deliver file data to the client in the most efficient manner possible.
For example:
[output] = replicate.run(
"black-forest-labs/flux-schnell",
input={"prompt": "astronaut riding a rocket like a horse"},
);
For most basic cases you'll want to utilize either the url
or read()
fields depending on whether you want to directly consume the file or pass it on.
To access the file URL:
print(output.url) #=> "https://delivery.replicate.com/..."
To consume the file directly:
with open('output.bin', 'wb') as file:
file.write(output.read())
Or for very large files they can be streamed:
with open(file_path, 'wb') as file:
for chunk in output:
file.write(chunk)
Each of these methods has an equivalent asyncio
API.
async with aiofiles.open(filename, 'w') as file:
await file.write(await output.aread())
async with aiofiles.open(filename, 'w') as file:
await for chunk in output:
await file.write(chunk)
For streaming responses from common frameworks, all support taking Iterator
types:
Django
@condition(etag_func=None)
def stream_response(request):
output = replicate.run("black-forest-labs/flux-schnell", input={...}, use_file_output =True)
return HttpResponse(output, content_type='image/webp')
FastAPI
@app.get("/")
async def main():
output = replicate.run("black-forest-labs/flux-schnell", input={...}, use_file_output =True)
return StreamingResponse(output)
Flask
@app.route('/stream')
def streamed_response():
output = replicate.run("black-forest-labs/flux-schnell", input={...}, use_file_output =True)
return app.response_class(stream_with_context(output))
In case of breakages, in most instances, updating existing applications to call output.url
should fix issues.
To revert to previous behaviour you can opt out of FileOutput
by passing use_file_output=False
to the replicate.run()
method.
const replicate = replicate.run("acmecorp/acme-model", use_file_output=False);
Full Changelog: 0.34.2...1.0.0