@miragari/providers 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +567 -0
  3. package/dist/builtin.d.ts +9 -0
  4. package/dist/builtin.d.ts.map +1 -0
  5. package/dist/builtin.js +13 -0
  6. package/dist/builtin.js.map +1 -0
  7. package/dist/google/definition.d.ts +3 -0
  8. package/dist/google/definition.d.ts.map +1 -0
  9. package/dist/google/definition.js +69 -0
  10. package/dist/google/definition.js.map +1 -0
  11. package/dist/google/index.d.ts +2 -0
  12. package/dist/google/index.d.ts.map +1 -0
  13. package/dist/google/index.js +2 -0
  14. package/dist/google/index.js.map +1 -0
  15. package/dist/google/provider.d.ts +2 -0
  16. package/dist/google/provider.d.ts.map +1 -0
  17. package/dist/google/provider.js +133 -0
  18. package/dist/google/provider.js.map +1 -0
  19. package/dist/happyhorse/definition.d.ts +3 -0
  20. package/dist/happyhorse/definition.d.ts.map +1 -0
  21. package/dist/happyhorse/definition.js +57 -0
  22. package/dist/happyhorse/definition.js.map +1 -0
  23. package/dist/happyhorse/index.d.ts +2 -0
  24. package/dist/happyhorse/index.d.ts.map +1 -0
  25. package/dist/happyhorse/index.js +2 -0
  26. package/dist/happyhorse/index.js.map +1 -0
  27. package/dist/happyhorse/provider.d.ts +2 -0
  28. package/dist/happyhorse/provider.d.ts.map +1 -0
  29. package/dist/happyhorse/provider.js +253 -0
  30. package/dist/happyhorse/provider.js.map +1 -0
  31. package/dist/http.d.ts +66 -0
  32. package/dist/http.d.ts.map +1 -0
  33. package/dist/http.js +236 -0
  34. package/dist/http.js.map +1 -0
  35. package/dist/index.d.ts +14 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +10 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/media-router.d.ts +35 -0
  40. package/dist/media-router.d.ts.map +1 -0
  41. package/dist/media-router.js +202 -0
  42. package/dist/media-router.js.map +1 -0
  43. package/dist/openai/definition.d.ts +4 -0
  44. package/dist/openai/definition.d.ts.map +1 -0
  45. package/dist/openai/definition.js +92 -0
  46. package/dist/openai/definition.js.map +1 -0
  47. package/dist/openai/index.d.ts +2 -0
  48. package/dist/openai/index.d.ts.map +1 -0
  49. package/dist/openai/index.js +2 -0
  50. package/dist/openai/index.js.map +1 -0
  51. package/dist/openai/provider.d.ts +2 -0
  52. package/dist/openai/provider.d.ts.map +1 -0
  53. package/dist/openai/provider.js +188 -0
  54. package/dist/openai/provider.js.map +1 -0
  55. package/dist/qwen/definition.d.ts +4 -0
  56. package/dist/qwen/definition.d.ts.map +1 -0
  57. package/dist/qwen/definition.js +210 -0
  58. package/dist/qwen/definition.js.map +1 -0
  59. package/dist/qwen/index.d.ts +2 -0
  60. package/dist/qwen/index.d.ts.map +1 -0
  61. package/dist/qwen/index.js +2 -0
  62. package/dist/qwen/index.js.map +1 -0
  63. package/dist/qwen/provider.d.ts +2 -0
  64. package/dist/qwen/provider.d.ts.map +1 -0
  65. package/dist/qwen/provider.js +237 -0
  66. package/dist/qwen/provider.js.map +1 -0
  67. package/dist/toolkit.d.ts +137 -0
  68. package/dist/toolkit.d.ts.map +1 -0
  69. package/dist/toolkit.js +490 -0
  70. package/dist/toolkit.js.map +1 -0
  71. package/dist/volcengine/definition.d.ts +4 -0
  72. package/dist/volcengine/definition.d.ts.map +1 -0
  73. package/dist/volcengine/definition.js +130 -0
  74. package/dist/volcengine/definition.js.map +1 -0
  75. package/dist/volcengine/index.d.ts +2 -0
  76. package/dist/volcengine/index.d.ts.map +1 -0
  77. package/dist/volcengine/index.js +2 -0
  78. package/dist/volcengine/index.js.map +1 -0
  79. package/dist/volcengine/provider.d.ts +2 -0
  80. package/dist/volcengine/provider.d.ts.map +1 -0
  81. package/dist/volcengine/provider.js +232 -0
  82. package/dist/volcengine/provider.js.map +1 -0
  83. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/google/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { googleProvider } from "./provider.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/google/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const googleProvider: import("@miragari/core").ProviderPlugin;
2
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/google/provider.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,cAAc,yCAsEzB,CAAA"}
@@ -0,0 +1,133 @@
1
+ import { completed, defineHttpProvider, } from "../http.js";
2
+ import { assertNoUnusedMediaInputs, describeMediaInput, getImageInputs, mediaInputToInlineBase64, requirePrompt, unsupportedAction, unsupportedInput, } from "../toolkit.js";
3
+ import { googleModels } from "./definition.js";
4
+ export const googleProvider = defineHttpProvider({
5
+ id: "google",
6
+ displayName: "Google GenAI",
7
+ baseURL: "https://generativelanguage.googleapis.com/v1beta",
8
+ auth: { type: "api-key", in: "query", query: "key" },
9
+ defaultModels: {
10
+ image: "gemini-2.5-flash-image",
11
+ },
12
+ models: googleModels,
13
+ create: {
14
+ request: {
15
+ method: "POST",
16
+ path: (context) => googleGeneratePath(context.config.options, context.request.model),
17
+ body: (context) => {
18
+ const dimensions = context.resolved.dimensions;
19
+ const images = getImageInputs(context.request);
20
+ if (context.request.action &&
21
+ context.request.action !== "generate" &&
22
+ context.request.action !== "reference") {
23
+ unsupportedAction(context);
24
+ }
25
+ if (context.request.action === "reference" && !images.length) {
26
+ unsupportedInput(context, "input.images", "reference action requires images");
27
+ }
28
+ assertNoUnusedMediaInputs(context, ["referenceImage"]);
29
+ return {
30
+ contents: [
31
+ {
32
+ role: "user",
33
+ parts: [
34
+ { text: requirePrompt(context) },
35
+ ...images.map(googleMediaPart),
36
+ ],
37
+ },
38
+ ],
39
+ generationConfig: {
40
+ responseModalities: ["IMAGE", "TEXT"],
41
+ imageConfig: {
42
+ aspectRatio: dimensions?.aspectRatio,
43
+ resolution: dimensions?.resolutionTier,
44
+ },
45
+ },
46
+ ...context.request.providerOptions,
47
+ };
48
+ },
49
+ parseResponse: ({ text }) => parseGoogleResponse(text),
50
+ parseError: ({ text }) => parseGoogleResponse(text),
51
+ },
52
+ output: (response, context) => {
53
+ const parts = response.candidates?.flatMap((candidate) => candidate.content?.parts ?? []);
54
+ return completed({
55
+ context,
56
+ assets: parts
57
+ ?.filter((part) => part.inlineData?.data)
58
+ .map((part) => ({
59
+ type: "image",
60
+ base64: part.inlineData?.data,
61
+ mimeType: part.inlineData?.mimeType,
62
+ })) ?? [],
63
+ raw: response,
64
+ });
65
+ },
66
+ },
67
+ });
68
+ function googleMediaPart(input) {
69
+ const inline = mediaInputToInlineBase64(input);
70
+ if (inline) {
71
+ return {
72
+ inlineData: {
73
+ data: inline.data,
74
+ mimeType: inline.mimeType,
75
+ },
76
+ };
77
+ }
78
+ const described = describeMediaInput(input);
79
+ if (described.kind === "url") {
80
+ return {
81
+ fileData: {
82
+ fileUri: described.url,
83
+ mimeType: described.mimeType,
84
+ },
85
+ };
86
+ }
87
+ if (described.kind === "file") {
88
+ return {
89
+ fileData: {
90
+ fileUri: described.path,
91
+ mimeType: described.mimeType,
92
+ },
93
+ };
94
+ }
95
+ throw new Error(`Unsupported Google media input kind: ${described.kind}`);
96
+ }
97
+ function googleGeneratePath(options, model) {
98
+ const apiVersionPath = typeof options?.apiVersionPath === "string"
99
+ ? options.apiVersionPath.replace(/^\/+|\/+$/g, "")
100
+ : "";
101
+ const generationMethod = typeof options?.generationMethod === "string"
102
+ ? options.generationMethod
103
+ : "generateContent";
104
+ const modelPath = model.startsWith("models/") ? model : `models/${model}`;
105
+ return `${apiVersionPath ? `/${apiVersionPath}` : ""}/${modelPath}:${generationMethod}`;
106
+ }
107
+ function parseGoogleResponse(text) {
108
+ if (!text.trim()) {
109
+ return {};
110
+ }
111
+ if (!text.trimStart().startsWith("data:")) {
112
+ return JSON.parse(text);
113
+ }
114
+ const events = text
115
+ .split(/\r?\n/)
116
+ .map((line) => line.trim())
117
+ .filter((line) => line.startsWith("data:"))
118
+ .map((line) => line.slice("data:".length).trim())
119
+ .filter((line) => line && line !== "[DONE]")
120
+ .map((line) => JSON.parse(line));
121
+ if (events.length === 0) {
122
+ return {};
123
+ }
124
+ if (events.length === 1) {
125
+ return events[0];
126
+ }
127
+ const last = events[events.length - 1];
128
+ return {
129
+ ...last,
130
+ candidates: events.flatMap((event) => event.candidates ?? []),
131
+ };
132
+ }
133
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/google/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ModelDefinition } from "@miragari/core";
2
+ export declare const happyhorseModels: Record<string, ModelDefinition>;
3
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/happyhorse/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAO5E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAmD5D,CAAA"}
@@ -0,0 +1,57 @@
1
+ const videoDimensions = {
2
+ aspectRatios: ["16:9", "9:16", "1:1", "4:3", "3:4"],
3
+ video: { resolutions: ["720p", "1080p"] },
4
+ };
5
+ export const happyhorseModels = {
6
+ "happy-horse": {
7
+ id: "happy-horse",
8
+ type: "video",
9
+ async: true,
10
+ capabilities: {
11
+ actions: {
12
+ generate: {
13
+ description: "Generate HappyHorse video from prompt text, or from media when inputs are provided.",
14
+ consumes: [
15
+ "input.prompt",
16
+ "input.image",
17
+ "input.firstFrame",
18
+ "input.images",
19
+ "input.video",
20
+ "options.duration",
21
+ "options.seed",
22
+ "providerOptions.enable_safety_checker",
23
+ ],
24
+ },
25
+ reference: {
26
+ description: "Generate HappyHorse video from one or more reference images.",
27
+ consumes: [
28
+ "input.prompt",
29
+ "input.image",
30
+ "input.firstFrame",
31
+ "input.images",
32
+ "options.duration",
33
+ "options.seed",
34
+ "providerOptions.enable_safety_checker",
35
+ ],
36
+ },
37
+ edit: {
38
+ description: "Edit HappyHorse video with natural-language instructions.",
39
+ consumes: [
40
+ "input.prompt",
41
+ "input.video",
42
+ "input.images",
43
+ "options.seed",
44
+ "providerOptions.audio_setting",
45
+ "providerOptions.enable_safety_checker",
46
+ ],
47
+ },
48
+ },
49
+ dimensions: videoDimensions,
50
+ durations: Array.from({ length: 13 }, (_, index) => index + 3),
51
+ maxImages: 9,
52
+ maxVideos: 1,
53
+ supportsSeed: true,
54
+ },
55
+ },
56
+ };
57
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/happyhorse/definition.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAA0B;IAC7C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACnD,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;CAC1C,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAoC;IAC/D,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI;QACX,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,QAAQ,EAAE;oBACR,WAAW,EAAE,qFAAqF;oBAClG,QAAQ,EAAE;wBACR,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,uCAAuC;qBACxC;iBACF;gBACD,SAAS,EAAE;oBACT,WAAW,EAAE,8DAA8D;oBAC3E,QAAQ,EAAE;wBACR,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,kBAAkB;wBAClB,cAAc;wBACd,uCAAuC;qBACxC;iBACF;gBACD,IAAI,EAAE;oBACJ,WAAW,EAAE,2DAA2D;oBACxE,QAAQ,EAAE;wBACR,cAAc;wBACd,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,+BAA+B;wBAC/B,uCAAuC;qBACxC;iBACF;aACF;YACD,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9D,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,IAAI;SACnB;KACF;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { happyhorseProvider } from "./provider.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/happyhorse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { happyhorseProvider } from "./provider.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/happyhorse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const happyhorseProvider: import("@miragari/core").ProviderPlugin;
2
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/happyhorse/provider.ts"],"names":[],"mappings":"AAqEA,eAAO,MAAM,kBAAkB,yCAmF7B,CAAA"}
@@ -0,0 +1,253 @@
1
+ import { createMediaRouterError, defineProvider, } from "@miragari/core";
2
+ import { assetFromUrl, collectMediaInputs, describeMediaInput, mediaInputToInlineBase64, requirePrompt, unsupportedAction, unsupportedInput, } from "../toolkit.js";
3
+ import { pendingProviderJob, polledJob, stripUndefined, } from "../http.js";
4
+ import { assertNoUnusedMediaInputs, getImageInputs, } from "../toolkit.js";
5
+ import { happyhorseModels } from "./definition.js";
6
+ export const happyhorseProvider = defineProvider({
7
+ id: "happyhorse",
8
+ displayName: "HappyHorse",
9
+ baseURL: "https://queue.fal.run",
10
+ auth: { type: "none" },
11
+ defaultModels: {
12
+ video: "happy-horse",
13
+ },
14
+ models: happyhorseModels,
15
+ driver: {
16
+ async create(context) {
17
+ const endpoint = resolveHappyHorseEndpoint(context);
18
+ const response = await falJson(context, falEndpointUrl(context, endpoint), {
19
+ method: "POST",
20
+ body: happyHorseBody(context, endpoint),
21
+ });
22
+ return pendingProviderJob({
23
+ context,
24
+ providerJobId: response.request_id,
25
+ providerState: {
26
+ endpoint,
27
+ responseUrl: response.response_url,
28
+ statusUrl: response.status_url,
29
+ cancelUrl: response.cancel_url,
30
+ },
31
+ status: "queued",
32
+ raw: response,
33
+ pollAfterMs: 5000,
34
+ });
35
+ },
36
+ async poll(context) {
37
+ const state = context.job.providerState;
38
+ const status = await falJson(context, state?.statusUrl ?? falRequestUrl(context, state?.endpoint, "status"), { method: "GET" });
39
+ if (status.status === "COMPLETED" && status.error) {
40
+ return polledJob({
41
+ context,
42
+ status: "failed",
43
+ error: falJobError(status, context.job.provider, context.job.model),
44
+ raw: status,
45
+ });
46
+ }
47
+ if (status.status !== "COMPLETED") {
48
+ return polledJob({
49
+ context,
50
+ status: status.status === "IN_PROGRESS" ? "running" : "queued",
51
+ raw: status,
52
+ });
53
+ }
54
+ const result = await falJson(context, status.response_url ?? state?.responseUrl ?? falRequestUrl(context, state?.endpoint, "response"), { method: "GET" });
55
+ return polledJob({
56
+ context,
57
+ status: "succeeded",
58
+ assets: falVideoAssets(result),
59
+ raw: result,
60
+ });
61
+ },
62
+ async cancel(context) {
63
+ const state = context.job.providerState;
64
+ await falJson(context, state?.cancelUrl ?? falRequestUrl(context, state?.endpoint, "cancel"), { method: "PUT" });
65
+ },
66
+ normalizeError(error, { request, job, runtime }) {
67
+ return falError(error, runtime.provider, request?.model ?? job?.model);
68
+ },
69
+ },
70
+ });
71
+ function happyHorseBody(context, endpoint) {
72
+ switch (endpoint) {
73
+ case "alibaba/happy-horse/text-to-video":
74
+ return textToVideoBody(context);
75
+ case "alibaba/happy-horse/reference-to-video":
76
+ return referenceToVideoBody(context);
77
+ case "alibaba/happy-horse/video-edit":
78
+ return videoEditBody(context);
79
+ default:
80
+ throw createMediaRouterError("BAD_REQUEST", `Unsupported HappyHorse endpoint: ${endpoint}`, {
81
+ provider: context.provider,
82
+ model: context.request.model,
83
+ });
84
+ }
85
+ }
86
+ function resolveHappyHorseEndpoint(context) {
87
+ const media = collectMediaInputs(context.request);
88
+ const hasVideo = media.some((item) => item.role === "video");
89
+ const imageCount = getImageInputs(context.request).length;
90
+ switch (context.request.action) {
91
+ case undefined:
92
+ case "generate":
93
+ if (hasVideo)
94
+ return "alibaba/happy-horse/video-edit";
95
+ if (imageCount > 0)
96
+ return "alibaba/happy-horse/reference-to-video";
97
+ return "alibaba/happy-horse/text-to-video";
98
+ case "reference":
99
+ if (hasVideo) {
100
+ unsupportedInput(context, "input.video", "reference action does not consume source video");
101
+ }
102
+ return "alibaba/happy-horse/reference-to-video";
103
+ case "edit":
104
+ return "alibaba/happy-horse/video-edit";
105
+ default:
106
+ unsupportedAction(context);
107
+ }
108
+ }
109
+ function textToVideoBody(context) {
110
+ assertNoUnusedMediaInputs(context, []);
111
+ return stripUndefined({
112
+ prompt: requirePrompt(context),
113
+ ...commonVideoOptions(context),
114
+ });
115
+ }
116
+ function referenceToVideoBody(context) {
117
+ const images = getImageInputs(context.request);
118
+ if (!images.length) {
119
+ unsupportedInput(context, "input.images", "reference action requires images");
120
+ }
121
+ if (images.length > 9) {
122
+ unsupportedInput(context, "input.images", "HappyHorse reference-to-video supports up to 9 images");
123
+ }
124
+ assertNoUnusedMediaInputs(context, ["image", "firstFrame", "referenceImage"]);
125
+ return stripUndefined({
126
+ prompt: requirePrompt(context),
127
+ image_urls: images.map((image) => happyHorseImageUrl(context, image, "input.images")),
128
+ ...commonVideoOptions(context),
129
+ });
130
+ }
131
+ function videoEditBody(context) {
132
+ const media = collectMediaInputs(context.request);
133
+ const video = media.find((item) => item.role === "video")?.input;
134
+ if (!video) {
135
+ unsupportedInput(context, "input.video", "edit action requires a source video");
136
+ }
137
+ const images = media.filter((item) => item.role === "referenceImage").map((item) => item.input);
138
+ if (images.length > 5) {
139
+ unsupportedInput(context, "input.images", "HappyHorse video edit supports up to 5 reference images");
140
+ }
141
+ assertNoUnusedMediaInputs(context, ["video", "referenceImage"]);
142
+ return stripUndefined({
143
+ video_url: happyHorseUrl(context, video, "input.video"),
144
+ prompt: requirePrompt(context),
145
+ reference_image_urls: images.length
146
+ ? images.map((image) => happyHorseImageUrl(context, image, "input.images"))
147
+ : undefined,
148
+ resolution: context.resolved.dimensions?.resolutionTier,
149
+ seed: context.request.options?.seed,
150
+ ...context.request.providerOptions,
151
+ });
152
+ }
153
+ function commonVideoOptions(context, options = {}) {
154
+ const requestOptions = context.request.options;
155
+ return stripUndefined({
156
+ aspect_ratio: options.aspectRatio === false
157
+ ? undefined
158
+ : context.resolved.dimensions?.aspectRatio,
159
+ resolution: context.resolved.dimensions?.resolutionTier,
160
+ duration: requestOptions?.duration,
161
+ seed: requestOptions?.seed,
162
+ ...context.request.providerOptions,
163
+ });
164
+ }
165
+ function happyHorseImageUrl(context, input, inputPath) {
166
+ const inline = mediaInputToInlineBase64(input);
167
+ if (inline)
168
+ return `data:${inline.mimeType};base64,${inline.data}`;
169
+ return happyHorseUrl(context, input, inputPath);
170
+ }
171
+ function happyHorseUrl(context, input, inputPath) {
172
+ const described = describeMediaInput(input);
173
+ if (described.kind === "url")
174
+ return described.url;
175
+ unsupportedInput(context, inputPath, `unsupported media kind: ${described.kind}`);
176
+ }
177
+ function falVideoAssets(result) {
178
+ return assetFromUrl("video", result.video?.url, result.video?.content_type ?? "video/mp4").map((asset) => ({
179
+ ...asset,
180
+ width: result.video?.width,
181
+ height: result.video?.height,
182
+ duration: result.video?.duration,
183
+ metadata: { seed: result.seed },
184
+ }));
185
+ }
186
+ function falEndpointUrl(context, endpoint) {
187
+ const baseURL = context.config.baseURL ?? context.plugin.baseURL ?? "https://queue.fal.run";
188
+ return `${baseURL.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
189
+ }
190
+ function falRequestUrl(context, endpoint, suffix) {
191
+ if (!endpoint) {
192
+ throw createMediaRouterError("PROVIDER_ERROR", "HappyHorse job is missing endpoint state", {
193
+ provider: context.provider,
194
+ model: context.job.model,
195
+ raw: context.job,
196
+ });
197
+ }
198
+ const baseURL = context.config.baseURL ?? context.plugin.baseURL ?? "https://queue.fal.run";
199
+ return `${baseURL.replace(/\/$/, "")}/${endpoint}/requests/${context.job.providerJobId}/${suffix}`;
200
+ }
201
+ async function falJson(context, url, init) {
202
+ const response = await context.fetch(url, {
203
+ method: init.method,
204
+ headers: {
205
+ ...falAuthHeaders(context),
206
+ ...(init.body == null ? {} : { "Content-Type": "application/json" }),
207
+ },
208
+ body: init.body == null ? undefined : JSON.stringify(init.body),
209
+ });
210
+ const text = await response.text();
211
+ const raw = text.trim() ? JSON.parse(text) : {};
212
+ if (!response.ok) {
213
+ const message = falErrorMessage(raw) ?? `Provider request failed with status ${response.status}`;
214
+ throw createMediaRouterError(response.status === 401 || response.status === 403 ? "AUTH_ERROR" : "PROVIDER_ERROR", message, {
215
+ provider: context.provider,
216
+ statusCode: response.status,
217
+ raw,
218
+ retryable: response.status === 429 || response.status >= 500,
219
+ });
220
+ }
221
+ return raw;
222
+ }
223
+ function falAuthHeaders(context) {
224
+ return {
225
+ ...(context.config.headers ?? {}),
226
+ ...(context.config.apiKey ? { Authorization: `Key ${context.config.apiKey}` } : {}),
227
+ };
228
+ }
229
+ function falJobError(response, provider, model) {
230
+ return createMediaRouterError("PROVIDER_ERROR", response.error ?? response.error_type ?? "HappyHorse request failed", { provider, model, raw: response });
231
+ }
232
+ function falError(error, provider, model) {
233
+ if (error && typeof error === "object" && "__mediaRouterError" in error) {
234
+ return error;
235
+ }
236
+ return createMediaRouterError("PROVIDER_ERROR", "HappyHorse provider error", {
237
+ provider,
238
+ model,
239
+ raw: error,
240
+ });
241
+ }
242
+ function falErrorMessage(raw) {
243
+ if (!raw || typeof raw !== "object")
244
+ return undefined;
245
+ if ("detail" in raw && typeof raw.detail === "string")
246
+ return raw.detail;
247
+ if ("error" in raw && typeof raw.error === "string")
248
+ return raw.error;
249
+ if ("message" in raw && typeof raw.message === "string")
250
+ return raw.message;
251
+ return undefined;
252
+ }
253
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/happyhorse/provider.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,66 @@
1
+ import { type GenerationJob, type GenerationStatus, type ModelDefinition, type ProviderCancelContext, type ProviderCreateContext, type ProviderCreateOutput, type ProviderPlugin, type ProviderPollContext, type ProviderRuntimeContext } from "@miragari/core";
2
+ import { type MissingStatusStrategy, type UnknownStatusStrategy } from "./toolkit.js";
3
+ export { completed, completedResult, pendingJob, pendingProviderJob, pendingStatus, polledJob, providerError, statusFrom, stripUndefined, } from "./toolkit.js";
4
+ export type { MissingStatusStrategy, UnknownStatusStrategy } from "./toolkit.js";
5
+ export type BodySerializationInput<TContext> = {
6
+ body: unknown;
7
+ context: TContext;
8
+ };
9
+ type HttpRuntimeContext = ProviderCreateContext | ProviderPollContext | ProviderCancelContext;
10
+ export type HttpRequestSpec<TContext> = {
11
+ method?: "GET" | "POST" | "DELETE";
12
+ path: string | ((context: TContext) => string);
13
+ body?: (context: TContext) => unknown;
14
+ query?: (context: TContext) => Record<string, string | number | boolean | undefined>;
15
+ headers?: (context: TContext) => Record<string, string | undefined>;
16
+ contentType?: string | false;
17
+ serializeBody?: (input: BodySerializationInput<TContext>) => BodyInit | undefined | Promise<BodyInit | undefined>;
18
+ parseResponse?: (input: HttpResponseParseInput<TContext>) => unknown | Promise<unknown>;
19
+ parseError?: (input: HttpResponseParseInput<TContext>) => unknown | Promise<unknown>;
20
+ };
21
+ export type HttpCreateRequestSpec = HttpRequestSpec<ProviderCreateContext>;
22
+ export type HttpPollRequestSpec = HttpRequestSpec<ProviderPollContext>;
23
+ export type HttpCancelRequestSpec = HttpRequestSpec<ProviderCancelContext>;
24
+ export type HttpResponseParseInput<TContext> = {
25
+ response: Response;
26
+ text: string;
27
+ context: TContext;
28
+ };
29
+ export type HttpOutputHelpers = {
30
+ statusFrom: (providerStatus: string | undefined, options?: {
31
+ context?: ProviderCreateContext | ProviderPollContext | ProviderCancelContext;
32
+ unknownStatus?: UnknownStatusStrategy;
33
+ missingStatus?: MissingStatusStrategy;
34
+ }) => GenerationStatus;
35
+ };
36
+ export type HttpProviderDefinition<TCreateResponse, TPollResponse = TCreateResponse, TCancelResponse = unknown> = {
37
+ id: string;
38
+ displayName: string;
39
+ baseURL?: string;
40
+ auth?: ProviderPlugin["auth"];
41
+ defaultModels?: ProviderPlugin["defaultModels"];
42
+ models: Record<string, ModelDefinition>;
43
+ statusMap?: Record<string, GenerationStatus>;
44
+ unknownStatus?: UnknownStatusStrategy;
45
+ missingStatus?: MissingStatusStrategy;
46
+ create: {
47
+ request: HttpCreateRequestSpec;
48
+ output: (response: TCreateResponse, context: ProviderCreateContext, helpers: HttpOutputHelpers) => ProviderCreateOutput;
49
+ };
50
+ poll?: {
51
+ request: HttpPollRequestSpec;
52
+ output: (response: TPollResponse, context: ProviderPollContext, helpers: HttpOutputHelpers) => GenerationJob | Promise<GenerationJob>;
53
+ };
54
+ cancel?: {
55
+ request: HttpCancelRequestSpec;
56
+ output?: (response: TCancelResponse, context: ProviderCancelContext, helpers: HttpOutputHelpers) => void | Promise<void>;
57
+ };
58
+ };
59
+ export declare function defineHttpProvider<TCreateResponse, TPollResponse = TCreateResponse, TCancelResponse = unknown>(definition: HttpProviderDefinition<TCreateResponse, TPollResponse, TCancelResponse>): ProviderPlugin;
60
+ export declare function providerUrl(context: ProviderRuntimeContext, path: string): URL;
61
+ export declare function authHeaders(context: ProviderRuntimeContext): Record<string, string>;
62
+ export declare function applyAuthToUrl(context: ProviderRuntimeContext, url: URL): URL;
63
+ export declare function requestJson<T, TContext extends HttpRuntimeContext = HttpRuntimeContext>(context: TContext, spec: HttpRequestSpec<TContext>): Promise<T>;
64
+ export declare function request<T, TContext extends HttpRuntimeContext = HttpRuntimeContext>(context: TContext, spec: HttpRequestSpec<TContext>): Promise<T>;
65
+ export declare function parseJsonText(text: string): unknown;
66
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}