Skip to content

Commit a960ca5

Browse files
committed
cleaner implementation for image edits route
1 parent 0142e83 commit a960ca5

File tree

11 files changed

+41
-132
lines changed

11 files changed

+41
-132
lines changed

src/handlers/responseHandlers.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
handleOctetStreamResponse,
1414
handleStreamingMode,
1515
handleTextResponse,
16+
handleTextStreamResponse,
1617
} from './streamHandler';
1718
import { HookSpan } from '../middlewares/hooks';
1819
import { env } from 'hono/adapter';
@@ -152,6 +153,10 @@ export async function responseHandler(
152153
return { response: textResponse, responseJson: null };
153154
}
154155

156+
if (responseContentType?.startsWith(CONTENT_TYPES.EVENT_STREAM)) {
157+
return { response: handleTextStreamResponse(response), responseJson: null };
158+
}
159+
155160
if (!responseContentType && response.status === 204) {
156161
return {
157162
response: new Response(response.body, response),

src/handlers/streamHandler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,10 @@ export function handleOctetStreamResponse(response: Response) {
282282
return new Response(response.body, response);
283283
}
284284

285+
export function handleTextStreamResponse(response: Response) {
286+
return new Response(response.body, response);
287+
}
288+
285289
export function handleImageResponse(response: Response) {
286290
return new Response(response.body, response);
287291
}

src/providers/azure-ai-inference/api.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,12 @@ const AzureAIInferenceAPI: ProviderAPIConfig = {
5050
...(azureDeploymentName && {
5151
'azureml-model-deployment': azureDeploymentName,
5252
}),
53-
...(['createTranscription', 'createTranslation', 'uploadFile'].includes(
54-
fn
55-
)
53+
...([
54+
'createTranscription',
55+
'createTranslation',
56+
'uploadFile',
57+
'imageEdit',
58+
].includes(fn)
5659
? {
5760
'Content-Type': 'multipart/form-data',
5861
}
@@ -119,6 +122,7 @@ const AzureAIInferenceAPI: ProviderAPIConfig = {
119122
embed: '/embeddings',
120123
realtime: '/realtime',
121124
imageGenerate: '/images/generations',
125+
imageEdit: '/images/edits',
122126
createSpeech: '/audio/speech',
123127
createTranscription: '/audio/transcriptions',
124128
createTranslation: '/audio/translations',
@@ -165,6 +169,7 @@ const AzureAIInferenceAPI: ProviderAPIConfig = {
165169
}
166170
case 'realtime':
167171
case 'imageGenerate':
172+
case 'imageEdit':
168173
case 'createSpeech':
169174
case 'createTranscription':
170175
case 'createTranslation':

src/providers/azure-ai-inference/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { AzureOpenAICreateBatchConfig } from '../azure-openai/createBatch';
2020
import { AzureAIInferenceGetBatchOutputRequestHandler } from './getBatchOutput';
2121
import { OpenAIFileUploadRequestTransform } from '../openai/uploadFile';
2222
import {
23+
AzureAIInferenceCreateImageEditResponseTransform,
2324
AzureAIInferenceCreateSpeechResponseTransform,
2425
AzureAIInferenceCreateTranscriptionResponseTransform,
2526
AzureAIInferenceCreateTranslationResponseTransform,
@@ -32,6 +33,7 @@ const AzureAIInferenceAPIConfig: ProviderConfigs = {
3233
api: AzureAIInferenceAPI,
3334
chatComplete: AzureAIInferenceChatCompleteConfig,
3435
imageGenerate: AzureOpenAIImageGenerateConfig,
36+
imageEdit: {},
3537
createSpeech: AzureOpenAICreateSpeechConfig,
3638
createFinetune: OpenAICreateFinetuneConfig,
3739
createTranscription: {},
@@ -52,6 +54,7 @@ const AzureAIInferenceAPIConfig: ProviderConfigs = {
5254
AzureAIInferenceChatCompleteResponseTransform(AZURE_AI_INFERENCE),
5355
embed: AzureAIInferenceEmbedResponseTransform(AZURE_AI_INFERENCE),
5456
imageGenerate: AzureAIInferenceResponseTransform,
57+
imageEdit: AzureAIInferenceCreateImageEditResponseTransform,
5558
createSpeech: AzureAIInferenceCreateSpeechResponseTransform,
5659
createTranscription: AzureAIInferenceCreateTranscriptionResponseTransform,
5760
createTranslation: AzureAIInferenceCreateTranslationResponseTransform,

src/providers/azure-ai-inference/utils.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { AZURE_AI_INFERENCE } from '../../globals';
22
import { OpenAIErrorResponseTransform } from '../openai/utils';
3-
import { ErrorResponse } from '../types';
43

54
export const AzureAIInferenceResponseTransform = (
65
response: any,
@@ -35,6 +34,17 @@ export const AzureAIInferenceCreateTranscriptionResponseTransform = (
3534
return { ...response, provider: AZURE_AI_INFERENCE };
3635
};
3736

37+
export const AzureAIInferenceCreateImageEditResponseTransform = (
38+
response: any,
39+
responseStatus: number
40+
) => {
41+
if (responseStatus !== 200 && 'error' in response) {
42+
return OpenAIErrorResponseTransform(response, AZURE_AI_INFERENCE);
43+
}
44+
45+
return { ...response, provider: AZURE_AI_INFERENCE };
46+
};
47+
3848
export const AzureAIInferenceCreateTranslationResponseTransform = (
3949
response: any,
4050
responseStatus: number

src/providers/azure-openai/api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ const AzureOpenAIAPIConfig: ProviderAPIConfig = {
4545
if (
4646
fn === 'createTranscription' ||
4747
fn === 'createTranslation' ||
48-
fn === 'uploadFile'
48+
fn === 'uploadFile' ||
49+
fn === 'imageEdit'
4950
) {
5051
headersObj['Content-Type'] = 'multipart/form-data';
5152
}

src/providers/azure-openai/imageEdits.ts

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,6 @@
11
import { AZURE_OPEN_AI } from '../../globals';
22
import { OpenAIErrorResponseTransform } from '../openai/utils';
3-
import { ErrorResponse, ImageGenerateResponse, ProviderConfig } from '../types';
4-
5-
export const AzureOpenAIImageEditConfig: ProviderConfig = {
6-
image: {
7-
param: 'image',
8-
required: true,
9-
},
10-
prompt: {
11-
param: 'prompt',
12-
required: true,
13-
},
14-
background: {
15-
param: 'background',
16-
},
17-
input_fidelity: {
18-
param: 'input_fidelity',
19-
},
20-
mask: {
21-
param: 'mask',
22-
},
23-
model: {
24-
param: 'model',
25-
default: 'dall-e-2',
26-
},
27-
n: {
28-
param: 'n',
29-
min: 1,
30-
max: 10,
31-
},
32-
output_compression: {
33-
param: 'output_compression',
34-
min: 0,
35-
max: 100,
36-
},
37-
output_format: {
38-
param: 'output_format',
39-
},
40-
partial_images: {
41-
param: 'partial_images',
42-
min: 0,
43-
max: 3,
44-
},
45-
quality: {
46-
param: 'quality',
47-
},
48-
response_format: {
49-
param: 'response_format',
50-
},
51-
size: {
52-
param: 'size',
53-
},
54-
stream: {
55-
param: 'stream',
56-
},
57-
user: {
58-
param: 'user',
59-
},
60-
};
3+
import { ErrorResponse, ImageGenerateResponse } from '../types';
614

625
interface AzureOpenAIImageObject {
636
b64_json?: string; // The base64-encoded JSON of the generated image, if response_format is b64_json.

src/providers/azure-openai/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,14 @@ import {
3636
OpenAIListInputItemsResponseTransformer,
3737
} from '../open-ai-base';
3838
import { AZURE_OPEN_AI } from '../../globals';
39-
import {
40-
AzureOpenAIImageEditConfig,
41-
AzureOpenAIImageEditResponseTransform,
42-
} from './imageEdits';
39+
import { AzureOpenAIImageEditResponseTransform } from './imageEdits';
4340

4441
const AzureOpenAIConfig: ProviderConfigs = {
4542
complete: AzureOpenAICompleteConfig,
4643
embed: AzureOpenAIEmbedConfig,
4744
api: AzureOpenAIAPIConfig,
4845
imageGenerate: AzureOpenAIImageGenerateConfig,
49-
imageEdit: AzureOpenAIImageEditConfig,
46+
imageEdit: {},
5047
chatComplete: AzureOpenAIChatCompleteConfig,
5148
createSpeech: AzureOpenAICreateSpeechConfig,
5249
createFinetune: OpenAICreateFinetuneConfig,

src/providers/openai/api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const OpenAIAPIConfig: ProviderAPIConfig = {
1717
if (
1818
fn === 'createTranscription' ||
1919
fn === 'createTranslation' ||
20-
fn === 'uploadFile'
20+
fn === 'uploadFile' ||
21+
fn === 'imageEdit'
2122
)
2223
headersObj['Content-Type'] = 'multipart/form-data';
2324

src/providers/openai/imageEdits.ts

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,7 @@
11
import { OPEN_AI } from '../../globals';
2-
import { ErrorResponse, ImageGenerateResponse, ProviderConfig } from '../types';
2+
import { ErrorResponse, ImageGenerateResponse } from '../types';
33
import { OpenAIErrorResponseTransform } from './utils';
44

5-
export const OpenAIImageEditConfig: ProviderConfig = {
6-
image: {
7-
param: 'image',
8-
required: true,
9-
},
10-
prompt: {
11-
param: 'prompt',
12-
required: true,
13-
},
14-
background: {
15-
param: 'background',
16-
},
17-
input_fidelity: {
18-
param: 'input_fidelity',
19-
},
20-
mask: {
21-
param: 'mask',
22-
},
23-
model: {
24-
param: 'model',
25-
default: 'dall-e-2',
26-
},
27-
n: {
28-
param: 'n',
29-
min: 1,
30-
max: 10,
31-
},
32-
output_compression: {
33-
param: 'output_compression',
34-
min: 0,
35-
max: 100,
36-
},
37-
output_format: {
38-
param: 'output_format',
39-
},
40-
partial_images: {
41-
param: 'partial_images',
42-
min: 0,
43-
max: 3,
44-
},
45-
quality: {
46-
param: 'quality',
47-
},
48-
response_format: {
49-
param: 'response_format',
50-
},
51-
size: {
52-
param: 'size',
53-
},
54-
stream: {
55-
param: 'stream',
56-
},
57-
user: {
58-
param: 'user',
59-
},
60-
};
61-
625
interface OpenAIImageObject {
636
b64_json?: string; // The base64-encoded JSON of the generated image, if response_format is b64_json.
647
url?: string; // The URL of the generated image, if response_format is url (default).

0 commit comments

Comments
 (0)