Skip to content

haoyuhu/dify-client-python

Repository files navigation

dify-client-python

dify-client-python is a typed Python SDK for Dify Runtime APIs, covering chat, completion, workflow, file upload, feedback, and audio conversion endpoints.

Requirements

  • Python >=3.8
  • Dify Runtime API (cloud or self-hosted) compatible with /v1 endpoints

Installation

pip install dify-client-python

What Is Supported

  • Sync and async clients: Client, AsyncClient
  • Blocking and streaming response modes
  • Chat and completion message APIs
  • Workflow run/stream/stop APIs
  • File upload APIs
  • Message feedback and suggestion APIs
  • Audio APIs:
    • audio-to-text
    • text-to-audio
  • Updated stream event support for newer workflow/chatflow runtimes:
    • workflow_paused, iteration_*, loop_*, text_chunk, text_replace
    • human_input_*, node_retry, agent_log, tts_message

Quick Start (Sync)

import uuid
from dify_client import Client, models

client = Client(
    api_key="your-api-key",
    api_base="https://api.dify.ai/v1",
)
user = str(uuid.uuid4())

req = models.ChatRequest(
    query="Hello from dify-client-python",
    inputs={},
    user=user,
    response_mode=models.ResponseMode.BLOCKING,
)

res = client.chat_messages(req, timeout=60.0)
print(res.answer)

Streaming Chat

stream_req = models.ChatRequest(
    query="Stream this answer",
    inputs={},
    user=user,
    response_mode=models.ResponseMode.STREAMING,
)

for event in client.chat_messages(stream_req, timeout=60.0):
    print(event.event, getattr(event, "answer", None))

Audio APIs

audio_text = client.audio_to_text(
    ("sample.wav", open("sample.wav", "rb"), "audio/wav"),
    models.AudioToTextRequest(user=user),
)
print(audio_text.text)

audio_bytes = client.text_to_audio(
    models.TextToAudioRequest(text="Hello world", user=user)
)
with open("speech.mp3", "wb") as f:
    f.write(audio_bytes)

Quick Start (Async)

import asyncio
from dify_client import AsyncClient, models

async_client = AsyncClient(api_key="your-api-key", api_base="https://api.dify.ai/v1")

async def main():
    req = models.ChatRequest(
        query="hello",
        inputs={},
        user="user-1",
        response_mode=models.ResponseMode.STREAMING,
    )
    async for chunk in await async_client.achat_messages(req, timeout=60.0):
        print(chunk.event)

asyncio.run(main())

Security Notes

  • Do not hardcode production API keys in source code.
  • Prefer environment variables or secret managers for api_key.
  • The SDK injects Authorization: Bearer ... headers, but does not log keys by default.
  • If you add your own logging middleware around requests, redact Authorization headers.

Development

python -m pip install -e . pytest pytest-cov flake8 build twine setuptools wheel
python -m flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
python -m pytest -q --cov=dify_client --cov-report=term-missing
python -m build --no-isolation
python -m twine check --strict dist/*

Release

Use RELEASE.md for the release checklist and commands.

About

This Python package provides a convenient and powerful interface to interact with the Dify API, enabling developers to integrate a wide range of features into their applications with ease.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors