| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | 
                        - # dify-client
 - 
 - A Dify App Service-API Client, using for build a webapp by request Service-API
 - 
 - ## Usage
 - 
 - First, install `dify-client` python sdk package:
 - 
 - ```
 - pip install dify-client
 - ```
 - 
 - Write your code with sdk:
 - 
 - - completion generate with `blocking` response_mode
 - 
 - ```python
 - from dify_client import CompletionClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize CompletionClient
 - completion_client = CompletionClient(api_key)
 - 
 - # Create Completion Message using CompletionClient
 - completion_response = completion_client.create_completion_message(inputs={"query": "What's the weather like today?"},
 -                                                                   response_mode="blocking", user="user_id")
 - completion_response.raise_for_status()
 - 
 - result = completion_response.json()
 - 
 - print(result.get('answer'))
 - ```
 - 
 - - completion using vision model, like gpt-4-vision
 - 
 - ```python
 - from dify_client import CompletionClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize CompletionClient
 - completion_client = CompletionClient(api_key)
 - 
 - files = [{
 -     "type": "image",
 -     "transfer_method": "remote_url",
 -     "url": "your_image_url"
 - }]
 - 
 - # files = [{
 - #     "type": "image",
 - #     "transfer_method": "local_file",
 - #     "upload_file_id": "your_file_id"
 - # }]
 - 
 - # Create Completion Message using CompletionClient
 - completion_response = completion_client.create_completion_message(inputs={"query": "Describe the picture."},
 -                                                                   response_mode="blocking", user="user_id", files=files)
 - completion_response.raise_for_status()
 - 
 - result = completion_response.json()
 - 
 - print(result.get('answer'))
 - ```
 - 
 - - chat generate with `streaming` response_mode
 - 
 - ```python
 - import json
 - from dify_client import ChatClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize ChatClient
 - chat_client = ChatClient(api_key)
 - 
 - # Create Chat Message using ChatClient
 - chat_response = chat_client.create_chat_message(inputs={}, query="Hello", user="user_id", response_mode="streaming")
 - chat_response.raise_for_status()
 - 
 - for line in chat_response.iter_lines(decode_unicode=True):
 -     line = line.split('data:', 1)[-1]
 -     if line.strip():
 -         line = json.loads(line.strip())
 -         print(line.get('answer'))
 - ```
 - 
 - - chat using vision model, like gpt-4-vision
 - 
 - ```python
 - from dify_client import ChatClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize ChatClient
 - chat_client = ChatClient(api_key)
 - 
 - files = [{
 -     "type": "image",
 -     "transfer_method": "remote_url",
 -     "url": "your_image_url"
 - }]
 - 
 - # files = [{
 - #     "type": "image",
 - #     "transfer_method": "local_file",
 - #     "upload_file_id": "your_file_id"
 - # }]
 - 
 - # Create Chat Message using ChatClient
 - chat_response = chat_client.create_chat_message(inputs={}, query="Describe the picture.", user="user_id",
 -                                                 response_mode="blocking", files=files)
 - chat_response.raise_for_status()
 - 
 - result = chat_response.json()
 - 
 - print(result.get("answer"))
 - ```
 - 
 - - upload file when using vision model
 - 
 - ```python
 - from dify_client import DifyClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize Client
 - dify_client = DifyClient(api_key)
 - 
 - file_path = "your_image_file_path"
 - file_name = "panda.jpeg"
 - mime_type = "image/jpeg"
 - 
 - with open(file_path, "rb") as file:
 -     files = {
 -         "file": (file_name, file, mime_type)
 -     }
 -     response = dify_client.file_upload("user_id", files)
 - 
 -     result = response.json()
 -     print(f'upload_file_id: {result.get("id")}')
 - ```
 -   
 - 
 - 
 - - Others
 - 
 - ```python
 - from dify_client import ChatClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize Client
 - client = ChatClient(api_key)
 - 
 - # Get App parameters
 - parameters = client.get_application_parameters(user="user_id")
 - parameters.raise_for_status()
 - 
 - print('[parameters]')
 - print(parameters.json())
 - 
 - # Get Conversation List (only for chat)
 - conversations = client.get_conversations(user="user_id")
 - conversations.raise_for_status()
 - 
 - print('[conversations]')
 - print(conversations.json())
 - 
 - # Get Message List (only for chat)
 - messages = client.get_conversation_messages(user="user_id", conversation_id="conversation_id")
 - messages.raise_for_status()
 - 
 - print('[messages]')
 - print(messages.json())
 - 
 - # Rename Conversation (only for chat)
 - rename_conversation_response = client.rename_conversation(conversation_id="conversation_id",
 -                                                           name="new_name", user="user_id")
 - rename_conversation_response.raise_for_status()
 - 
 - print('[rename result]')
 - print(rename_conversation_response.json())
 - ```
 - 
 - * Using the Workflow Client
 - ```python
 - import json 
 - import requests
 - from dify_client import WorkflowClient
 - 
 - api_key = "your_api_key"
 - 
 - # Initialize Workflow Client
 - client = WorkflowClient(api_key)
 - 
 - # Prepare parameters for Workflow Client
 - user_id = "your_user_id"
 - context = "previous user interaction / metadata"
 - user_prompt = "What is the capital of France?"
 - 
 - inputs = {
 -     "context": context, 
 -     "user_prompt": user_prompt,
 -     # Add other input fields expected by your workflow (e.g., additional context, task parameters)
 - 
 - }
 - 
 - # Set response mode (default: streaming)
 - response_mode = "blocking"
 - 
 - # Run the workflow
 - response = client.run(inputs=inputs, response_mode=response_mode, user=user_id)
 - response.raise_for_status()
 - 
 - # Parse result
 - result = json.loads(response.text)
 - 
 - answer = result.get("data").get("outputs")
 - 
 - print(answer["answer"])
 - 
 - ```
 
 
  |