You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
17 lines
889 B
17 lines
889 B
import type { XClientOptions, XRequest, XResponse } from "../core/types";
|
|
import { getProviderAdapter } from "../providers/registry";
|
|
import { resolveConfig } from "../runtime/config";
|
|
import { postJSON, throwForBadStatus } from "../runtime/http";
|
|
|
|
export const generate = async (options: XClientOptions, request: XRequest): Promise<XResponse> => {
|
|
const resolved = resolveConfig(request, options);
|
|
const adapter = getProviderAdapter(resolved.provider);
|
|
const providerRequest = adapter.toProviderRequest(request, resolved, false);
|
|
const response = await postJSON(resolved.fetchImpl, providerRequest, adapter);
|
|
|
|
await throwForBadStatus(response, adapter);
|
|
|
|
const payload = await response.json();
|
|
const normalized = adapter.fromProviderResponse(payload, resolved.provider);
|
|
return { ...normalized, provider: resolved.provider, model: normalized.model || resolved.model };
|
|
};
|
|
|