mirror of
https://github.com/open-webui/pipelines
synced 2025-05-10 15:40:55 +00:00
Create azure_dalle_manifold_pipeline.py
A pipeline for generating text and processing images using the Azure API. And including multiple Dall-e models
This commit is contained in:
parent
d2b7077cce
commit
4b42a7b514
@ -0,0 +1,89 @@
|
|||||||
|
"""
|
||||||
|
title: Azure - Dall-E Manifold Pipeline
|
||||||
|
author: weisser-dev
|
||||||
|
date: 2025-03-26
|
||||||
|
version: 1.0
|
||||||
|
license: MIT
|
||||||
|
description: A pipeline for generating text and processing images using the Azure API. And including multiple Dall-e models
|
||||||
|
requirements: requests, os
|
||||||
|
environment_variables: AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_VERSION, AZURE_OPENAI_MODELS, AZURE_OPENAI_MODEL_NAMES, IMAGE_SIZE, NUM_IMAGES
|
||||||
|
"""
|
||||||
|
from typing import List, Union, Generator, Iterator
|
||||||
|
from pydantic import BaseModel
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
|
||||||
|
class Pipeline:
|
||||||
|
class Valves(BaseModel):
|
||||||
|
AZURE_OPENAI_API_KEY: str
|
||||||
|
AZURE_OPENAI_ENDPOINT: str
|
||||||
|
AZURE_OPENAI_API_VERSION: str
|
||||||
|
AZURE_OPENAI_MODELS: str
|
||||||
|
AZURE_OPENAI_MODEL_NAMES: str
|
||||||
|
IMAGE_SIZE: str = "1024x1024"
|
||||||
|
NUM_IMAGES: int = 1
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.type = "manifold"
|
||||||
|
self.name = "Azure DALL·E: "
|
||||||
|
self.valves = self.Valves(
|
||||||
|
**{
|
||||||
|
"AZURE_OPENAI_API_KEY": os.getenv("AZURE_OPENAI_API_KEY", "your-azure-openai-api-key-here"),
|
||||||
|
"AZURE_OPENAI_ENDPOINT": os.getenv("AZURE_OPENAI_ENDPOINT", "your-azure-openai-endpoint-here"),
|
||||||
|
"AZURE_OPENAI_API_VERSION": os.getenv("AZURE_OPENAI_API_VERSION", "2024-02-01"),
|
||||||
|
"AZURE_OPENAI_MODELS": os.getenv("AZURE_OPENAI_MODELS", "dall-e-2;dall-e-3"), #ensure that the model here is within your enpoint url, sometime the name within the url it is also like Dalle3
|
||||||
|
"AZURE_OPENAI_MODEL_NAMES": os.getenv("AZURE_OPENAI_MODEL_NAMES", "DALL-E 2;DALL-E 3"),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.set_pipelines()
|
||||||
|
|
||||||
|
def set_pipelines(self):
|
||||||
|
models = self.valves.AZURE_OPENAI_MODELS.split(";")
|
||||||
|
model_names = self.valves.AZURE_OPENAI_MODEL_NAMES.split(";")
|
||||||
|
self.pipelines = [
|
||||||
|
{"id": model, "name": name} for model, name in zip(models, model_names)
|
||||||
|
]
|
||||||
|
print(f"azure_dalle_pipeline - models: {self.pipelines}")
|
||||||
|
|
||||||
|
async def on_startup(self) -> None:
|
||||||
|
print(f"on_startup:{__name__}")
|
||||||
|
|
||||||
|
async def on_shutdown(self):
|
||||||
|
print(f"on_shutdown:{__name__}")
|
||||||
|
|
||||||
|
async def on_valves_updated(self):
|
||||||
|
print(f"on_valves_updated:{__name__}")
|
||||||
|
self.set_pipelines()
|
||||||
|
|
||||||
|
def pipe(
|
||||||
|
self, user_message: str, model_id: str, messages: List[dict], body: dict
|
||||||
|
) -> Union[str, Generator, Iterator]:
|
||||||
|
print(f"pipe:{__name__}")
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"api-key": self.valves.AZURE_OPENAI_API_KEY,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
|
||||||
|
url = f"{self.valves.AZURE_OPENAI_ENDPOINT}/openai/deployments/{model_id}/images/generations?api-version={self.valves.AZURE_OPENAI_API_VERSION}"
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"model": model_id,
|
||||||
|
"prompt": user_message,
|
||||||
|
"size": self.valves.IMAGE_SIZE,
|
||||||
|
"n": self.valves.NUM_IMAGES,
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(url, json=payload, headers=headers)
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
|
||||||
|
message = ""
|
||||||
|
for image in data.get("data", []):
|
||||||
|
if "url" in image:
|
||||||
|
message += f"\n"
|
||||||
|
|
||||||
|
yield message
|
||||||
|
except Exception as e:
|
||||||
|
yield f"Error: {e} ({response.text if response else 'No response'})"
|
Loading…
Reference in New Issue
Block a user