@osdk/aip-core 0.9.0 → 0.10.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.
- package/CHANGELOG.md +12 -0
- package/build/browser/ai-sdk/convert-prompt.js.map +1 -1
- package/build/browser/ai-sdk/foundry-chat-language-model.js.map +1 -1
- package/build/browser/ai-sdk/map-finish-reason.js.map +1 -1
- package/build/browser/ai-sdk/provider.js.map +1 -1
- package/build/browser/generateText.js.map +1 -1
- package/build/browser/internal/__test__/mockPlatformClient.js.map +1 -1
- package/build/browser/internal/openAi.js.map +1 -1
- package/build/browser/internal/options.js.map +1 -1
- package/build/browser/internal/runStep.js.map +1 -1
- package/build/browser/internal/streamStep.js.map +1 -1
- package/build/browser/internal/uiMessageBridge.js.map +1 -1
- package/build/browser/lmsChatTransport.js.map +1 -1
- package/build/browser/model.js.map +1 -1
- package/build/browser/streamText.js.map +1 -1
- package/build/browser/uiMessage.js.map +1 -1
- package/build/esm/ai-sdk/convert-prompt.js.map +1 -1
- package/build/esm/ai-sdk/foundry-chat-language-model.js.map +1 -1
- package/build/esm/ai-sdk/map-finish-reason.js.map +1 -1
- package/build/esm/ai-sdk/provider.js.map +1 -1
- package/build/esm/generateText.js.map +1 -1
- package/build/esm/internal/__test__/mockPlatformClient.js.map +1 -1
- package/build/esm/internal/openAi.js.map +1 -1
- package/build/esm/internal/options.js.map +1 -1
- package/build/esm/internal/runStep.js.map +1 -1
- package/build/esm/internal/streamStep.js.map +1 -1
- package/build/esm/internal/uiMessageBridge.js.map +1 -1
- package/build/esm/lmsChatTransport.js.map +1 -1
- package/build/esm/model.js.map +1 -1
- package/build/esm/streamText.js.map +1 -1
- package/build/esm/uiMessage.js.map +1 -1
- package/package.json +7 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiMessageBridge.js","names":["getUIMessageText","uiMessagesToModelMessages","ui","system","out","transportSystemSet","length","push","role","content","m","text"],"sources":["uiMessageBridge.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ModelMessage } from \"../types.js\";\nimport { getUIMessageText, type UIMessage } from \"../uiMessage.js\";\n\n/**\n * Convert `UIMessage[]` (the conversation shape rendered in the UI) into\n * `ModelMessage[]` (the shape `streamText` accepts).\n *\n * v0: text-only. File parts, reasoning parts, source parts, and tool-related\n * parts are dropped. Tool-result UIMessages (none in v0 either) would map to\n * `ToolModelMessage` once tool round-trips are wired up.\n *\n * When `system` is provided, any system-role messages already in `ui` are\n * dropped so the prompt isn't double-prepended — the transport-level\n * `system` wins.\n */\nexport function uiMessagesToModelMessages(\n ui: ReadonlyArray<UIMessage>,\n system?: string
|
|
1
|
+
{"version":3,"file":"uiMessageBridge.js","names":["getUIMessageText","uiMessagesToModelMessages","ui","system","out","transportSystemSet","length","push","role","content","m","text"],"sources":["uiMessageBridge.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ModelMessage } from \"../types.js\";\nimport { getUIMessageText, type UIMessage } from \"../uiMessage.js\";\n\n/**\n * Convert `UIMessage[]` (the conversation shape rendered in the UI) into\n * `ModelMessage[]` (the shape `streamText` accepts).\n *\n * v0: text-only. File parts, reasoning parts, source parts, and tool-related\n * parts are dropped. Tool-result UIMessages (none in v0 either) would map to\n * `ToolModelMessage` once tool round-trips are wired up.\n *\n * When `system` is provided, any system-role messages already in `ui` are\n * dropped so the prompt isn't double-prepended — the transport-level\n * `system` wins.\n */\nexport function uiMessagesToModelMessages(\n ui: ReadonlyArray<UIMessage>,\n system?: string,\n): Array<ModelMessage> {\n const out: Array<ModelMessage> = [];\n const transportSystemSet = system != null && system.length > 0;\n\n if (transportSystemSet) {\n out.push({ role: \"system\", content: system });\n }\n\n for (const m of ui) {\n const text = getUIMessageText(m);\n if (text.length === 0) {\n continue;\n }\n if (m.role === \"system\" && transportSystemSet) {\n continue;\n }\n out.push({ role: m.role, content: text });\n }\n\n return out;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAwB,iBAAiB;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,EAA4B,EAC5BC,MAAe,EACM;EACrB,MAAMC,GAAwB,GAAG,EAAE;EACnC,MAAMC,kBAAkB,GAAGF,MAAM,IAAI,IAAI,IAAIA,MAAM,CAACG,MAAM,GAAG,CAAC;EAE9D,IAAID,kBAAkB,EAAE;IACtBD,GAAG,CAACG,IAAI,CAAC;MAAEC,IAAI,EAAE,QAAQ;MAAEC,OAAO,EAAEN;IAAO,CAAC,CAAC;EAC/C;EAEA,KAAK,MAAMO,CAAC,IAAIR,EAAE,EAAE;IAClB,MAAMS,IAAI,GAAGX,gBAAgB,CAACU,CAAC,CAAC;IAChC,IAAIC,IAAI,CAACL,MAAM,KAAK,CAAC,EAAE;MACrB;IACF;IACA,IAAII,CAAC,CAACF,IAAI,KAAK,QAAQ,IAAIH,kBAAkB,EAAE;MAC7C;IACF;IACAD,GAAG,CAACG,IAAI,CAAC;MAAEC,IAAI,EAAEE,CAAC,CAACF,IAAI;MAAEC,OAAO,EAAEE;IAAK,CAAC,CAAC;EAC3C;EAEA,OAAOP,GAAG;AACZ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lmsChatTransport.js","names":["uiMessagesToModelMessages","streamText","LmsChatTransport","constructor","opts","sendMessages","args","result","model","messages","system","temperature","maxOutputTokens","topP","presencePenalty","frequencyPenalty","stopSequences","seed","headers","mergeHeaders","abortSignal","assistantId","messageId","textPartId","reasoningPartId","textOpen","reasoningOpen","startEmitted","fullStream","pipeThrough","TransformStream","transform","chunk","controller","enqueue","type","closeText","id","closeReasoning","delta","toolCallId","toolName","input","messageMetadata","finishReason","usage","errorText","error","message","reconnectToStream","base","override","undefined","out","k","v","Object","entries"],"sources":["lmsChatTransport.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { uiMessagesToModelMessages } from \"./internal/uiMessageBridge.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport { streamText, type TextStreamChunk } from \"./streamText.js\";\nimport type {\n ChatTransport,\n ChatTransportReconnectArgs,\n ChatTransportSendMessagesArgs,\n UIMessage,\n UIMessageChunk,\n} from \"./uiMessage.js\";\n\ntype SendMessagesArgs = ChatTransportSendMessagesArgs<UIMessage>;\n\n/**\n * Options for {@link LmsChatTransport}. Configures the streamed chat\n * completion against the Foundry Language Model Service.\n */\nexport interface LmsChatTransportOptions {\n /** Foundry-LMS-backed language model. Build via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** System prompt prepended to every request. */\n system?: string;\n\n /** Sampling controls. */\n temperature?: number;\n maxOutputTokens?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n /** Extra HTTP headers forwarded to LMS. */\n headers?: Record<string, string | undefined>;\n}\n\n/**\n * Stream chat completions through the Foundry Language Model Service via\n * `streamText`. Implements `ChatTransport`, so any consumer that accepts a\n * transport can plug it in (e.g. to inject custom sampling).\n */\nexport class LmsChatTransport implements ChatTransport<UIMessage> {\n private readonly opts: LmsChatTransportOptions;\n\n constructor(opts: LmsChatTransportOptions) {\n this.opts = opts;\n }\n\n // TODO(oxc type-aware): the type-aware typescript/require-await rule does not flag this (it returns a Promise); remove this disable once type-aware linting is enabled.\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n sendMessages = async (\n args: SendMessagesArgs\n ): Promise<ReadableStream<UIMessageChunk>> => {\n const result = streamText({\n model: this.opts.model,\n // System prompt is folded into the model-message list by the bridge so\n // it isn't double-prepended (transport.system + system messages from\n // args.messages would both land otherwise).\n messages: uiMessagesToModelMessages(args.messages, this.opts.system),\n temperature: this.opts.temperature,\n maxOutputTokens: this.opts.maxOutputTokens,\n topP: this.opts.topP,\n presencePenalty: this.opts.presencePenalty,\n frequencyPenalty: this.opts.frequencyPenalty,\n stopSequences: this.opts.stopSequences,\n seed: this.opts.seed,\n headers: mergeHeaders(this.opts.headers, args.headers),\n abortSignal: args.abortSignal,\n });\n\n const assistantId = args.messageId;\n const textPartId = `${assistantId}-text-0`;\n const reasoningPartId = `${assistantId}-reasoning-0`;\n let textOpen = false;\n let reasoningOpen = false;\n let startEmitted = false;\n\n return result.fullStream.pipeThrough(\n new TransformStream<TextStreamChunk, UIMessageChunk>({\n transform(chunk, controller) {\n if (!startEmitted) {\n startEmitted = true;\n controller.enqueue({ type: \"start\", messageId: assistantId });\n controller.enqueue({ type: \"start-step\" });\n }\n const closeText = (): void => {\n if (textOpen) {\n textOpen = false;\n controller.enqueue({ type: \"text-end\", id: textPartId });\n }\n };\n const closeReasoning = (): void => {\n if (reasoningOpen) {\n reasoningOpen = false;\n controller.enqueue({\n type: \"reasoning-end\",\n id: reasoningPartId,\n });\n }\n };\n switch (chunk.type) {\n case \"text-delta\": {\n if (!textOpen) {\n textOpen = true;\n controller.enqueue({ type: \"text-start\", id: textPartId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textPartId,\n delta: chunk.delta,\n });\n return;\n }\n case \"reasoning-delta\": {\n if (!reasoningOpen) {\n reasoningOpen = true;\n controller.enqueue({\n type: \"reasoning-start\",\n id: reasoningPartId,\n });\n }\n controller.enqueue({\n type: \"reasoning-delta\",\n id: reasoningPartId,\n delta: chunk.delta,\n });\n return;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: \"tool-input-available\",\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n input: chunk.input,\n });\n return;\n }\n case \"finish\": {\n closeText();\n closeReasoning();\n controller.enqueue({ type: \"finish-step\" });\n controller.enqueue({\n type: \"finish\",\n messageMetadata: {\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n },\n });\n return;\n }\n case \"error\": {\n closeText();\n closeReasoning();\n controller.enqueue({\n type: \"error\",\n errorText: chunk.error.message,\n });\n return;\n }\n default: {\n const unhandled: { type: string } = chunk;\n controller.enqueue({\n type: \"error\",\n errorText: `Unhandled chunk type \"${unhandled.type}\"`,\n });\n }\n }\n },\n })\n );\n };\n\n // TODO(oxc type-aware): the type-aware typescript/require-await rule does not flag this (it returns a Promise); remove this disable once type-aware linting is enabled.\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n reconnectToStream = async (\n _args: ChatTransportReconnectArgs\n ): Promise<ReadableStream<UIMessageChunk> | null> => {\n return null;\n };\n}\n\nfunction mergeHeaders(\n base: Record<string, string | undefined> | undefined,\n override: Record<string, string> | undefined\n): Record<string, string | undefined> | undefined {\n if (base == null && override == null) {\n return undefined;\n }\n const out: Record<string, string | undefined> = { ...(base ?? {}) };\n if (override != null) {\n for (const [k, v] of Object.entries(override)) {\n out[k] = v;\n }\n }\n return out;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"lmsChatTransport.js","names":["uiMessagesToModelMessages","streamText","LmsChatTransport","constructor","opts","sendMessages","args","result","model","messages","system","temperature","maxOutputTokens","topP","presencePenalty","frequencyPenalty","stopSequences","seed","headers","mergeHeaders","abortSignal","assistantId","messageId","textPartId","reasoningPartId","textOpen","reasoningOpen","startEmitted","fullStream","pipeThrough","TransformStream","transform","chunk","controller","enqueue","type","closeText","id","closeReasoning","delta","toolCallId","toolName","input","messageMetadata","finishReason","usage","errorText","error","message","reconnectToStream","base","override","undefined","out","k","v","Object","entries"],"sources":["lmsChatTransport.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { uiMessagesToModelMessages } from \"./internal/uiMessageBridge.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport { streamText, type TextStreamChunk } from \"./streamText.js\";\nimport type {\n ChatTransport,\n ChatTransportReconnectArgs,\n ChatTransportSendMessagesArgs,\n UIMessage,\n UIMessageChunk,\n} from \"./uiMessage.js\";\n\ntype SendMessagesArgs = ChatTransportSendMessagesArgs<UIMessage>;\n\n/**\n * Options for {@link LmsChatTransport}. Configures the streamed chat\n * completion against the Foundry Language Model Service.\n */\nexport interface LmsChatTransportOptions {\n /** Foundry-LMS-backed language model. Build via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** System prompt prepended to every request. */\n system?: string;\n\n /** Sampling controls. */\n temperature?: number;\n maxOutputTokens?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n /** Extra HTTP headers forwarded to LMS. */\n headers?: Record<string, string | undefined>;\n}\n\n/**\n * Stream chat completions through the Foundry Language Model Service via\n * `streamText`. Implements `ChatTransport`, so any consumer that accepts a\n * transport can plug it in (e.g. to inject custom sampling).\n */\nexport class LmsChatTransport implements ChatTransport<UIMessage> {\n private readonly opts: LmsChatTransportOptions;\n\n constructor(opts: LmsChatTransportOptions) {\n this.opts = opts;\n }\n\n // TODO(oxc type-aware): the type-aware typescript/require-await rule does not flag this (it returns a Promise); remove this disable once type-aware linting is enabled.\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n sendMessages = async (\n args: SendMessagesArgs,\n ): Promise<ReadableStream<UIMessageChunk>> => {\n const result = streamText({\n model: this.opts.model,\n // System prompt is folded into the model-message list by the bridge so\n // it isn't double-prepended (transport.system + system messages from\n // args.messages would both land otherwise).\n messages: uiMessagesToModelMessages(args.messages, this.opts.system),\n temperature: this.opts.temperature,\n maxOutputTokens: this.opts.maxOutputTokens,\n topP: this.opts.topP,\n presencePenalty: this.opts.presencePenalty,\n frequencyPenalty: this.opts.frequencyPenalty,\n stopSequences: this.opts.stopSequences,\n seed: this.opts.seed,\n headers: mergeHeaders(this.opts.headers, args.headers),\n abortSignal: args.abortSignal,\n });\n\n const assistantId = args.messageId;\n const textPartId = `${assistantId}-text-0`;\n const reasoningPartId = `${assistantId}-reasoning-0`;\n let textOpen = false;\n let reasoningOpen = false;\n let startEmitted = false;\n\n return result.fullStream.pipeThrough(\n new TransformStream<TextStreamChunk, UIMessageChunk>({\n transform(chunk, controller) {\n if (!startEmitted) {\n startEmitted = true;\n controller.enqueue({ type: \"start\", messageId: assistantId });\n controller.enqueue({ type: \"start-step\" });\n }\n const closeText = (): void => {\n if (textOpen) {\n textOpen = false;\n controller.enqueue({ type: \"text-end\", id: textPartId });\n }\n };\n const closeReasoning = (): void => {\n if (reasoningOpen) {\n reasoningOpen = false;\n controller.enqueue({\n type: \"reasoning-end\",\n id: reasoningPartId,\n });\n }\n };\n switch (chunk.type) {\n case \"text-delta\": {\n if (!textOpen) {\n textOpen = true;\n controller.enqueue({ type: \"text-start\", id: textPartId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textPartId,\n delta: chunk.delta,\n });\n return;\n }\n case \"reasoning-delta\": {\n if (!reasoningOpen) {\n reasoningOpen = true;\n controller.enqueue({\n type: \"reasoning-start\",\n id: reasoningPartId,\n });\n }\n controller.enqueue({\n type: \"reasoning-delta\",\n id: reasoningPartId,\n delta: chunk.delta,\n });\n return;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: \"tool-input-available\",\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n input: chunk.input,\n });\n return;\n }\n case \"finish\": {\n closeText();\n closeReasoning();\n controller.enqueue({ type: \"finish-step\" });\n controller.enqueue({\n type: \"finish\",\n messageMetadata: {\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n },\n });\n return;\n }\n case \"error\": {\n closeText();\n closeReasoning();\n controller.enqueue({\n type: \"error\",\n errorText: chunk.error.message,\n });\n return;\n }\n default: {\n const unhandled: { type: string } = chunk;\n controller.enqueue({\n type: \"error\",\n errorText: `Unhandled chunk type \"${unhandled.type}\"`,\n });\n }\n }\n },\n }),\n );\n };\n\n // TODO(oxc type-aware): the type-aware typescript/require-await rule does not flag this (it returns a Promise); remove this disable once type-aware linting is enabled.\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n reconnectToStream = async (\n _args: ChatTransportReconnectArgs,\n ): Promise<ReadableStream<UIMessageChunk> | null> => {\n return null;\n };\n}\n\nfunction mergeHeaders(\n base: Record<string, string | undefined> | undefined,\n override: Record<string, string> | undefined,\n): Record<string, string | undefined> | undefined {\n if (base == null && override == null) {\n return undefined;\n }\n const out: Record<string, string | undefined> = { ...(base ?? {}) };\n if (override != null) {\n for (const [k, v] of Object.entries(override)) {\n out[k] = v;\n }\n }\n return out;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","names":["internals","WeakMap","foundryModel","options","identifier","model","type","apiName","id","registeredModelRid","handle","Object","freeze","modelId","provider","set","client","_getFoundryInternal","get","Error"],"sources":["model.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PlatformClient } from \"@osdk/client\";\n\n/**\n * Identifies a model in the Foundry Language Model Service.\n *\n * - `lmsModel`: a built-in LMS model addressed by `apiName` (e.g. \"gpt-4o\")\n * - `registeredModel`: a customer-registered model addressed by RID\n */\nexport type ModelIdentifier =\n | { type: \"lmsModel\"; apiName: string }\n | { type: \"registeredModel\"; registeredModelRid: string };\n\n/** Opaque language model handle accepted by `generateText` / `streamText`. */\nexport interface LanguageModel {\n /** Stable identifier for logging / telemetry, e.g. \"foundry/gpt-4o\". */\n readonly modelId: string;\n /** Provider tag — `\"foundry-lms\"` for the built-in LMS adapter. */\n readonly provider: string;\n}\n\nexport interface FoundryModelOptions {\n /** Foundry PlatformClient providing the auth token + base URL. */\n client: PlatformClient;\n /** LMS model API name or registered model RID. */\n model: string | ModelIdentifier;\n}\n\n/** @internal */\nexport interface FoundryInternalHandle {\n client: PlatformClient;\n identifier: ModelIdentifier;\n}\n\nconst internals: WeakMap<LanguageModel, FoundryInternalHandle> = new WeakMap();\n\n/**\n * Construct a Foundry-LMS-backed {@link LanguageModel}.\n *\n * @example\n * ```ts\n * import { foundryModel, generateText } from \"@osdk/aip-core\";\n *\n * const model = foundryModel({ client, model: \"gpt-4o\" });\n * const { text } = await generateText({\n * model,\n * prompt: \"Hello, world\",\n * });\n * ```\n */\nexport function foundryModel(options: FoundryModelOptions): LanguageModel {\n const identifier: ModelIdentifier =\n typeof options.model === \"string\"\n ? { type: \"lmsModel\", apiName: options.model }\n : options.model;\n\n const id =\n identifier.type === \"lmsModel\"\n ? identifier.apiName\n : identifier.registeredModelRid;\n\n const handle: LanguageModel = Object.freeze({\n modelId: `foundry/${id}`,\n provider: \"foundry-lms\",\n });\n\n internals.set(handle, {\n client: options.client,\n identifier,\n });\n\n return handle;\n}\n\n/**\n * Internal accessor for the foundry handle. Not exported from the package\n * index. `runStep` calls this; consumers should never need it.\n *\n * @internal\n */\nexport function _getFoundryInternal(\n model: LanguageModel
|
|
1
|
+
{"version":3,"file":"model.js","names":["internals","WeakMap","foundryModel","options","identifier","model","type","apiName","id","registeredModelRid","handle","Object","freeze","modelId","provider","set","client","_getFoundryInternal","get","Error"],"sources":["model.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PlatformClient } from \"@osdk/client\";\n\n/**\n * Identifies a model in the Foundry Language Model Service.\n *\n * - `lmsModel`: a built-in LMS model addressed by `apiName` (e.g. \"gpt-4o\")\n * - `registeredModel`: a customer-registered model addressed by RID\n */\nexport type ModelIdentifier =\n | { type: \"lmsModel\"; apiName: string }\n | { type: \"registeredModel\"; registeredModelRid: string };\n\n/** Opaque language model handle accepted by `generateText` / `streamText`. */\nexport interface LanguageModel {\n /** Stable identifier for logging / telemetry, e.g. \"foundry/gpt-4o\". */\n readonly modelId: string;\n /** Provider tag — `\"foundry-lms\"` for the built-in LMS adapter. */\n readonly provider: string;\n}\n\nexport interface FoundryModelOptions {\n /** Foundry PlatformClient providing the auth token + base URL. */\n client: PlatformClient;\n /** LMS model API name or registered model RID. */\n model: string | ModelIdentifier;\n}\n\n/** @internal */\nexport interface FoundryInternalHandle {\n client: PlatformClient;\n identifier: ModelIdentifier;\n}\n\nconst internals: WeakMap<LanguageModel, FoundryInternalHandle> = new WeakMap();\n\n/**\n * Construct a Foundry-LMS-backed {@link LanguageModel}.\n *\n * @example\n * ```ts\n * import { foundryModel, generateText } from \"@osdk/aip-core\";\n *\n * const model = foundryModel({ client, model: \"gpt-4o\" });\n * const { text } = await generateText({\n * model,\n * prompt: \"Hello, world\",\n * });\n * ```\n */\nexport function foundryModel(options: FoundryModelOptions): LanguageModel {\n const identifier: ModelIdentifier =\n typeof options.model === \"string\"\n ? { type: \"lmsModel\", apiName: options.model }\n : options.model;\n\n const id =\n identifier.type === \"lmsModel\"\n ? identifier.apiName\n : identifier.registeredModelRid;\n\n const handle: LanguageModel = Object.freeze({\n modelId: `foundry/${id}`,\n provider: \"foundry-lms\",\n });\n\n internals.set(handle, {\n client: options.client,\n identifier,\n });\n\n return handle;\n}\n\n/**\n * Internal accessor for the foundry handle. Not exported from the package\n * index. `runStep` calls this; consumers should never need it.\n *\n * @internal\n */\nexport function _getFoundryInternal(\n model: LanguageModel,\n): FoundryInternalHandle {\n const handle = internals.get(model);\n if (handle == null) {\n throw new Error(\n `LanguageModel(modelId=${model.modelId}, provider=${model.provider}) ` +\n `was not constructed via foundryModel(). Only foundry-lms models are supported in v0.`,\n );\n }\n return handle;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAKA;;AAeA;;AAMA,MAAMA,SAAwD,GAAG,IAAIC,OAAO,CAAC,CAAC;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,OAA4B,EAAiB;EACxE,MAAMC,UAA2B,GAC/B,OAAOD,OAAO,CAACE,KAAK,KAAK,QAAQ,GAC7B;IAAEC,IAAI,EAAE,UAAU;IAAEC,OAAO,EAAEJ,OAAO,CAACE;EAAM,CAAC,GAC5CF,OAAO,CAACE,KAAK;EAEnB,MAAMG,EAAE,GACNJ,UAAU,CAACE,IAAI,KAAK,UAAU,GAC1BF,UAAU,CAACG,OAAO,GAClBH,UAAU,CAACK,kBAAkB;EAEnC,MAAMC,MAAqB,GAAGC,MAAM,CAACC,MAAM,CAAC;IAC1CC,OAAO,EAAE,WAAWL,EAAE,EAAE;IACxBM,QAAQ,EAAE;EACZ,CAAC,CAAC;EAEFd,SAAS,CAACe,GAAG,CAACL,MAAM,EAAE;IACpBM,MAAM,EAAEb,OAAO,CAACa,MAAM;IACtBZ;EACF,CAAC,CAAC;EAEF,OAAOM,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,mBAAmBA,CACjCZ,KAAoB,EACG;EACvB,MAAMK,MAAM,GAAGV,SAAS,CAACkB,GAAG,CAACb,KAAK,CAAC;EACnC,IAAIK,MAAM,IAAI,IAAI,EAAE;IAClB,MAAM,IAAIS,KAAK,CACb,yBAAyBd,KAAK,CAACQ,OAAO,cAAcR,KAAK,CAACS,QAAQ,IAAI,GACpE,sFACJ,CAAC;EACH;EACA,OAAOJ,MAAM;AACf","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamText.js","names":["resolveMessages","streamStep","streamText","options","warnings","messages","system","prompt","final","createDeferred","internalAbort","AbortController","abortHandler","abort","abortSignal","aborted","addEventListener","detachAbortHandler","removeEventListener","streamController","streamClosed","run","result","model","tools","toolChoice","maxOutputTokens","temperature","topP","stopSequences","seed","presencePenalty","frequencyPenalty","signal","headers","onChunk","chunk","enqueue","close","finalWarnings","length","undefined","resolve","text","reasoningText","usage","finishReason","toolCalls","response","request","onFinish","totalUsage","err","error","Error","String","type","reject","onError","sourceStream","ReadableStream","start","controller","cancel","fullStreamBranch","textStreamBranch","tee","textStream","pipeThrough","TransformStream","transform","delta","warningsPromise","promise","then","s","fullStream","silence","p","catch","resolveFn","rejectFn","Promise","res","rej"],"sources":["streamText.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveMessages } from \"./internal/options.js\";\nimport { type StreamChunkEvent, streamStep } from \"./internal/streamStep.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport type {\n FinishReason,\n LanguageModelUsage,\n ModelMessage,\n RequestMetadata,\n ResponseMetadata,\n SystemModelMessage,\n ToolCall,\n ToolChoice,\n ToolSet,\n Warning,\n} from \"./types.js\";\n\n/**\n * Options for {@link streamText}.\n */\nexport interface StreamTextOptions<TOOLS extends ToolSet = ToolSet> {\n /** The language model to use. Build one via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** Plain text prompt. Mutually exclusive with `messages`. */\n prompt?: string | Array<ModelMessage>;\n\n /** Conversation history. Mutually exclusive with `prompt`. */\n messages?: Array<ModelMessage>;\n\n /** System instructions, prepended to the conversation. */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n // Tools --------------------------------------------------------------------\n\n tools?: TOOLS;\n toolChoice?: ToolChoice<TOOLS>;\n\n // Sampling -----------------------------------------------------------------\n\n maxOutputTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n // Execution ----------------------------------------------------------------\n\n abortSignal?: AbortSignal;\n headers?: Record<string, string | undefined>;\n\n // Callbacks ----------------------------------------------------------------\n\n /** Fires for every chunk emitted on `fullStream`. */\n onChunk?: (chunk: TextStreamChunk) => void | PromiseLike<void>;\n\n /** Fires when the stream errors out. The same error is also emitted via the stream. */\n onError?: (error: Error) => void | PromiseLike<void>;\n\n /** Fires once after the stream completes successfully. */\n onFinish?: (event: {\n finishReason: FinishReason;\n text: string;\n reasoningText: string | undefined;\n toolCalls: Array<ToolCall>;\n usage: LanguageModelUsage;\n totalUsage: LanguageModelUsage;\n warnings: Array<Warning> | undefined;\n response: ResponseMetadata | undefined;\n request: RequestMetadata | undefined;\n }) => void | PromiseLike<void>;\n}\n\n/**\n * Single chunk emitted on a {@link StreamTextResult.fullStream}.\n *\n * `toolName` is a runtime string — the model returns whatever it returns,\n * so the chunk's tool name is not statically narrowed against the user's\n * `TOOLS` set.\n */\nexport type TextStreamChunk = StreamChunkEvent;\n\n/**\n * Result of {@link streamText}.\n *\n * `fullStream` is a `ReadableStream` (not an async iterable) so it can be\n * `pipeThrough`-ed with browser-native transforms.\n */\nexport interface StreamTextResult {\n /** Stream of all chunk events. */\n fullStream: ReadableStream<TextStreamChunk>;\n /** Stream of just text-delta strings (convenience). */\n textStream: ReadableStream<string>;\n /** Resolves to the final accumulated assistant text. */\n text: Promise<string>;\n /** Resolves to the final accumulated reasoning text, if any. */\n reasoningText: Promise<string | undefined>;\n /** Resolves to the final usage. */\n usage: Promise<LanguageModelUsage>;\n /** Resolves to the same usage (single-step v0). */\n totalUsage: Promise<LanguageModelUsage>;\n /** Resolves to the finish reason. */\n finishReason: Promise<FinishReason>;\n /** Resolves to the accumulated tool calls. */\n toolCalls: Promise<Array<ToolCall>>;\n /** Resolves to v0 warnings, if any. */\n warnings: Promise<Array<Warning> | undefined>;\n /** Resolves to response metadata once the stream finishes. */\n response: Promise<ResponseMetadata | undefined>;\n /** Resolves to the request metadata. */\n request: Promise<RequestMetadata | undefined>;\n}\n\n/**\n * Stream a chat completion via the Foundry Language Model Service.\n *\n * v0: single-step. Multi-step tool execution loops, image/file content,\n * structured output, and Zod tool schemas are not yet supported. Unsupported\n * options surface via the `warnings` promise rather than throwing.\n *\n * @example\n * ```ts\n * import { foundryModel, streamText } from \"@osdk/aip-core\";\n *\n * const { textStream } = streamText({\n * model: foundryModel({ client, model: \"gpt-4o\" }),\n * prompt: \"Tell me a story.\",\n * });\n *\n * const reader = textStream.getReader();\n * while (true) {\n * const { done, value } = await reader.read();\n * if (done) break;\n * process.stdout.write(value);\n * }\n * ```\n */\ninterface FinalState {\n text: string;\n reasoningText: string | undefined;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n toolCalls: Array<ToolCall>;\n warnings: Array<Warning> | undefined;\n response: ResponseMetadata | undefined;\n request: RequestMetadata | undefined;\n}\n\nexport function streamText<TOOLS extends ToolSet = ToolSet>(\n options: StreamTextOptions<TOOLS>\n): StreamTextResult {\n const warnings: Array<Warning> = [];\n const messages = resolveMessages(\n \"streamText\",\n options.system,\n options.prompt,\n options.messages\n );\n\n const final = createDeferred<FinalState>();\n\n const internalAbort = new AbortController();\n const abortHandler = (): void => internalAbort.abort();\n if (options.abortSignal != null) {\n if (options.abortSignal.aborted) {\n internalAbort.abort();\n } else {\n options.abortSignal.addEventListener(\"abort\", abortHandler);\n }\n }\n const detachAbortHandler = (): void => {\n options.abortSignal?.removeEventListener(\"abort\", abortHandler);\n };\n\n let streamController:\n | ReadableStreamDefaultController<TextStreamChunk>\n | undefined;\n let streamClosed = false;\n\n const run = async (): Promise<void> => {\n try {\n const result = await streamStep<TOOLS>({\n model: options.model,\n messages,\n tools: options.tools,\n toolChoice: options.toolChoice,\n maxOutputTokens: options.maxOutputTokens,\n temperature: options.temperature,\n topP: options.topP,\n stopSequences: options.stopSequences,\n seed: options.seed,\n presencePenalty: options.presencePenalty,\n frequencyPenalty: options.frequencyPenalty,\n abortSignal: internalAbort.signal,\n headers: options.headers,\n warnings,\n onChunk: async (chunk) => {\n if (!streamClosed) {\n streamController?.enqueue(chunk);\n }\n if (options.onChunk != null) {\n await options.onChunk(chunk);\n }\n },\n });\n\n streamController?.close();\n streamClosed = true;\n\n const finalWarnings = warnings.length > 0 ? warnings : undefined;\n final.resolve({\n text: result.text,\n reasoningText: result.reasoningText,\n usage: result.usage,\n finishReason: result.finishReason,\n toolCalls: result.toolCalls,\n warnings: finalWarnings,\n response: result.response,\n request: result.request,\n });\n\n if (options.onFinish != null) {\n await options.onFinish({\n finishReason: result.finishReason,\n text: result.text,\n reasoningText: result.reasoningText,\n toolCalls: result.toolCalls,\n usage: result.usage,\n totalUsage: result.usage,\n warnings: finalWarnings,\n response: result.response,\n request: result.request,\n });\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (!streamClosed) {\n streamController?.enqueue({ type: \"error\", error });\n streamController?.error(error);\n streamClosed = true;\n }\n final.reject(error);\n\n if (options.onError != null) {\n await options.onError(error);\n }\n } finally {\n detachAbortHandler();\n }\n };\n\n const sourceStream = new ReadableStream<TextStreamChunk>({\n start(controller) {\n streamController = controller;\n void run();\n },\n cancel() {\n internalAbort.abort();\n detachAbortHandler();\n },\n });\n\n const [fullStreamBranch, textStreamBranch] = sourceStream.tee();\n\n const textStream = textStreamBranch.pipeThrough(\n new TransformStream<TextStreamChunk, string>({\n transform(chunk, controller) {\n if (chunk.type === \"text-delta\") {\n controller.enqueue(chunk.delta);\n }\n },\n })\n );\n\n // Warnings settle even if the stream errors, so the consumer can read them\n // off the failure path. Other promises propagate the error.\n const warningsPromise: Promise<Array<Warning> | undefined> =\n final.promise.then(\n (s) => s.warnings,\n () => (warnings.length > 0 ? warnings : undefined)\n );\n\n return {\n fullStream: fullStreamBranch,\n textStream,\n text: silence(final.promise.then((s) => s.text)),\n reasoningText: silence(final.promise.then((s) => s.reasoningText)),\n usage: silence(final.promise.then((s) => s.usage)),\n totalUsage: silence(final.promise.then((s) => s.usage)),\n finishReason: silence(final.promise.then((s) => s.finishReason)),\n toolCalls: silence(final.promise.then((s) => s.toolCalls)),\n warnings: warningsPromise,\n response: silence(final.promise.then((s) => s.response)),\n request: silence(final.promise.then((s) => s.request)),\n };\n}\n\n// Pre-attach a no-op rejection handler so a consumer that awaits only some of\n// the result promises doesn't trigger unhandled-rejection warnings on the\n// rest. The promise still rejects for any consumer that awaits it.\nfunction silence<T>(p: Promise<T>): Promise<T> {\n p.catch(() => {});\n return p;\n}\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: Error) => void;\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolveFn: (value: T) => void = () => {};\n let rejectFn: (error: Error) => void = () => {};\n const promise = new Promise<T>((res, rej) => {\n resolveFn = res;\n rejectFn = rej;\n });\n promise.catch(() => {});\n return { promise, resolve: resolveFn, reject: rejectFn };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"streamText.js","names":["resolveMessages","streamStep","streamText","options","warnings","messages","system","prompt","final","createDeferred","internalAbort","AbortController","abortHandler","abort","abortSignal","aborted","addEventListener","detachAbortHandler","removeEventListener","streamController","streamClosed","run","result","model","tools","toolChoice","maxOutputTokens","temperature","topP","stopSequences","seed","presencePenalty","frequencyPenalty","signal","headers","onChunk","chunk","enqueue","close","finalWarnings","length","undefined","resolve","text","reasoningText","usage","finishReason","toolCalls","response","request","onFinish","totalUsage","err","error","Error","String","type","reject","onError","sourceStream","ReadableStream","start","controller","cancel","fullStreamBranch","textStreamBranch","tee","textStream","pipeThrough","TransformStream","transform","delta","warningsPromise","promise","then","s","fullStream","silence","p","catch","resolveFn","rejectFn","Promise","res","rej"],"sources":["streamText.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveMessages } from \"./internal/options.js\";\nimport { type StreamChunkEvent, streamStep } from \"./internal/streamStep.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport type {\n FinishReason,\n LanguageModelUsage,\n ModelMessage,\n RequestMetadata,\n ResponseMetadata,\n SystemModelMessage,\n ToolCall,\n ToolChoice,\n ToolSet,\n Warning,\n} from \"./types.js\";\n\n/**\n * Options for {@link streamText}.\n */\nexport interface StreamTextOptions<TOOLS extends ToolSet = ToolSet> {\n /** The language model to use. Build one via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** Plain text prompt. Mutually exclusive with `messages`. */\n prompt?: string | Array<ModelMessage>;\n\n /** Conversation history. Mutually exclusive with `prompt`. */\n messages?: Array<ModelMessage>;\n\n /** System instructions, prepended to the conversation. */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n // Tools --------------------------------------------------------------------\n\n tools?: TOOLS;\n toolChoice?: ToolChoice<TOOLS>;\n\n // Sampling -----------------------------------------------------------------\n\n maxOutputTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n // Execution ----------------------------------------------------------------\n\n abortSignal?: AbortSignal;\n headers?: Record<string, string | undefined>;\n\n // Callbacks ----------------------------------------------------------------\n\n /** Fires for every chunk emitted on `fullStream`. */\n onChunk?: (chunk: TextStreamChunk) => void | PromiseLike<void>;\n\n /** Fires when the stream errors out. The same error is also emitted via the stream. */\n onError?: (error: Error) => void | PromiseLike<void>;\n\n /** Fires once after the stream completes successfully. */\n onFinish?: (event: {\n finishReason: FinishReason;\n text: string;\n reasoningText: string | undefined;\n toolCalls: Array<ToolCall>;\n usage: LanguageModelUsage;\n totalUsage: LanguageModelUsage;\n warnings: Array<Warning> | undefined;\n response: ResponseMetadata | undefined;\n request: RequestMetadata | undefined;\n }) => void | PromiseLike<void>;\n}\n\n/**\n * Single chunk emitted on a {@link StreamTextResult.fullStream}.\n *\n * `toolName` is a runtime string — the model returns whatever it returns,\n * so the chunk's tool name is not statically narrowed against the user's\n * `TOOLS` set.\n */\nexport type TextStreamChunk = StreamChunkEvent;\n\n/**\n * Result of {@link streamText}.\n *\n * `fullStream` is a `ReadableStream` (not an async iterable) so it can be\n * `pipeThrough`-ed with browser-native transforms.\n */\nexport interface StreamTextResult {\n /** Stream of all chunk events. */\n fullStream: ReadableStream<TextStreamChunk>;\n /** Stream of just text-delta strings (convenience). */\n textStream: ReadableStream<string>;\n /** Resolves to the final accumulated assistant text. */\n text: Promise<string>;\n /** Resolves to the final accumulated reasoning text, if any. */\n reasoningText: Promise<string | undefined>;\n /** Resolves to the final usage. */\n usage: Promise<LanguageModelUsage>;\n /** Resolves to the same usage (single-step v0). */\n totalUsage: Promise<LanguageModelUsage>;\n /** Resolves to the finish reason. */\n finishReason: Promise<FinishReason>;\n /** Resolves to the accumulated tool calls. */\n toolCalls: Promise<Array<ToolCall>>;\n /** Resolves to v0 warnings, if any. */\n warnings: Promise<Array<Warning> | undefined>;\n /** Resolves to response metadata once the stream finishes. */\n response: Promise<ResponseMetadata | undefined>;\n /** Resolves to the request metadata. */\n request: Promise<RequestMetadata | undefined>;\n}\n\n/**\n * Stream a chat completion via the Foundry Language Model Service.\n *\n * v0: single-step. Multi-step tool execution loops, image/file content,\n * structured output, and Zod tool schemas are not yet supported. Unsupported\n * options surface via the `warnings` promise rather than throwing.\n *\n * @example\n * ```ts\n * import { foundryModel, streamText } from \"@osdk/aip-core\";\n *\n * const { textStream } = streamText({\n * model: foundryModel({ client, model: \"gpt-4o\" }),\n * prompt: \"Tell me a story.\",\n * });\n *\n * const reader = textStream.getReader();\n * while (true) {\n * const { done, value } = await reader.read();\n * if (done) break;\n * process.stdout.write(value);\n * }\n * ```\n */\ninterface FinalState {\n text: string;\n reasoningText: string | undefined;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n toolCalls: Array<ToolCall>;\n warnings: Array<Warning> | undefined;\n response: ResponseMetadata | undefined;\n request: RequestMetadata | undefined;\n}\n\nexport function streamText<TOOLS extends ToolSet = ToolSet>(\n options: StreamTextOptions<TOOLS>,\n): StreamTextResult {\n const warnings: Array<Warning> = [];\n const messages = resolveMessages(\n \"streamText\",\n options.system,\n options.prompt,\n options.messages,\n );\n\n const final = createDeferred<FinalState>();\n\n const internalAbort = new AbortController();\n const abortHandler = (): void => internalAbort.abort();\n if (options.abortSignal != null) {\n if (options.abortSignal.aborted) {\n internalAbort.abort();\n } else {\n options.abortSignal.addEventListener(\"abort\", abortHandler);\n }\n }\n const detachAbortHandler = (): void => {\n options.abortSignal?.removeEventListener(\"abort\", abortHandler);\n };\n\n let streamController:\n | ReadableStreamDefaultController<TextStreamChunk>\n | undefined;\n let streamClosed = false;\n\n const run = async (): Promise<void> => {\n try {\n const result = await streamStep<TOOLS>({\n model: options.model,\n messages,\n tools: options.tools,\n toolChoice: options.toolChoice,\n maxOutputTokens: options.maxOutputTokens,\n temperature: options.temperature,\n topP: options.topP,\n stopSequences: options.stopSequences,\n seed: options.seed,\n presencePenalty: options.presencePenalty,\n frequencyPenalty: options.frequencyPenalty,\n abortSignal: internalAbort.signal,\n headers: options.headers,\n warnings,\n onChunk: async (chunk) => {\n if (!streamClosed) {\n streamController?.enqueue(chunk);\n }\n if (options.onChunk != null) {\n await options.onChunk(chunk);\n }\n },\n });\n\n streamController?.close();\n streamClosed = true;\n\n const finalWarnings = warnings.length > 0 ? warnings : undefined;\n final.resolve({\n text: result.text,\n reasoningText: result.reasoningText,\n usage: result.usage,\n finishReason: result.finishReason,\n toolCalls: result.toolCalls,\n warnings: finalWarnings,\n response: result.response,\n request: result.request,\n });\n\n if (options.onFinish != null) {\n await options.onFinish({\n finishReason: result.finishReason,\n text: result.text,\n reasoningText: result.reasoningText,\n toolCalls: result.toolCalls,\n usage: result.usage,\n totalUsage: result.usage,\n warnings: finalWarnings,\n response: result.response,\n request: result.request,\n });\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (!streamClosed) {\n streamController?.enqueue({ type: \"error\", error });\n streamController?.error(error);\n streamClosed = true;\n }\n final.reject(error);\n\n if (options.onError != null) {\n await options.onError(error);\n }\n } finally {\n detachAbortHandler();\n }\n };\n\n const sourceStream = new ReadableStream<TextStreamChunk>({\n start(controller) {\n streamController = controller;\n void run();\n },\n cancel() {\n internalAbort.abort();\n detachAbortHandler();\n },\n });\n\n const [fullStreamBranch, textStreamBranch] = sourceStream.tee();\n\n const textStream = textStreamBranch.pipeThrough(\n new TransformStream<TextStreamChunk, string>({\n transform(chunk, controller) {\n if (chunk.type === \"text-delta\") {\n controller.enqueue(chunk.delta);\n }\n },\n }),\n );\n\n // Warnings settle even if the stream errors, so the consumer can read them\n // off the failure path. Other promises propagate the error.\n const warningsPromise: Promise<Array<Warning> | undefined> =\n final.promise.then(\n (s) => s.warnings,\n () => (warnings.length > 0 ? warnings : undefined),\n );\n\n return {\n fullStream: fullStreamBranch,\n textStream,\n text: silence(final.promise.then((s) => s.text)),\n reasoningText: silence(final.promise.then((s) => s.reasoningText)),\n usage: silence(final.promise.then((s) => s.usage)),\n totalUsage: silence(final.promise.then((s) => s.usage)),\n finishReason: silence(final.promise.then((s) => s.finishReason)),\n toolCalls: silence(final.promise.then((s) => s.toolCalls)),\n warnings: warningsPromise,\n response: silence(final.promise.then((s) => s.response)),\n request: silence(final.promise.then((s) => s.request)),\n };\n}\n\n// Pre-attach a no-op rejection handler so a consumer that awaits only some of\n// the result promises doesn't trigger unhandled-rejection warnings on the\n// rest. The promise still rejects for any consumer that awaits it.\nfunction silence<T>(p: Promise<T>): Promise<T> {\n p.catch(() => {});\n return p;\n}\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: Error) => void;\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolveFn: (value: T) => void = () => {};\n let rejectFn: (error: Error) => void = () => {};\n const promise = new Promise<T>((res, rej) => {\n resolveFn = res;\n rejectFn = rej;\n });\n promise.catch(() => {});\n return { promise, resolve: resolveFn, reject: rejectFn };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiMessage.js","names":["getUIMessageText","message","buf","p","parts","type","text"],"sources":["uiMessage.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * UI-level message and stream-chunk shapes for the AIP SDK's chat\n * primitives. Describes the wire format that transports produce and UI\n * consumers read — a thin local subset of the AI SDK v5 UI types\n * covering the v0 text-only surface.\n */\n\nimport type { FinishReason, LanguageModelUsage } from \"./types.js\";\n\nexport type UIMessageRole = \"system\" | \"user\" | \"assistant\";\n\nexport type UIMessagePart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"file\"; url: string; mediaType: string };\n\nexport interface UIMessage {\n id: string;\n role: UIMessageRole;\n parts: Array<UIMessagePart>;\n metadata?: Record<string, unknown>;\n}\n\nexport type UIMessageChunk =\n | { type: \"start\"; messageId: string }\n | { type: \"start-step\" }\n | { type: \"text-start\"; id: string }\n | { type: \"text-delta\"; id: string; delta: string }\n | { type: \"text-end\"; id: string }\n | { type: \"reasoning-start\"; id: string }\n | { type: \"reasoning-delta\"; id: string; delta: string }\n | { type: \"reasoning-end\"; id: string }\n | {\n type: \"tool-input-available\";\n toolCallId: string;\n toolName: string;\n input: unknown;\n }\n | { type: \"finish-step\" }\n | {\n type: \"finish\";\n messageMetadata?: {\n finishReason?: FinishReason;\n usage?: LanguageModelUsage;\n };\n }\n | { type: \"error\"; errorText: string };\n\nexport type ChatTransportTrigger = \"submit-message\" | \"regenerate-message\";\n\nexport interface ChatTransportSendMessagesArgs<MSG extends UIMessage> {\n trigger: ChatTransportTrigger;\n chatId: string;\n messageId: string;\n messages: ReadonlyArray<MSG>;\n abortSignal: AbortSignal | undefined;\n headers?: Record<string, string>;\n}\n\nexport interface ChatTransportReconnectArgs {\n chatId: string;\n}\n\nexport interface ChatTransport<MSG extends UIMessage = UIMessage> {\n sendMessages(\n args: ChatTransportSendMessagesArgs<MSG
|
|
1
|
+
{"version":3,"file":"uiMessage.js","names":["getUIMessageText","message","buf","p","parts","type","text"],"sources":["uiMessage.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * UI-level message and stream-chunk shapes for the AIP SDK's chat\n * primitives. Describes the wire format that transports produce and UI\n * consumers read — a thin local subset of the AI SDK v5 UI types\n * covering the v0 text-only surface.\n */\n\nimport type { FinishReason, LanguageModelUsage } from \"./types.js\";\n\nexport type UIMessageRole = \"system\" | \"user\" | \"assistant\";\n\nexport type UIMessagePart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"file\"; url: string; mediaType: string };\n\nexport interface UIMessage {\n id: string;\n role: UIMessageRole;\n parts: Array<UIMessagePart>;\n metadata?: Record<string, unknown>;\n}\n\nexport type UIMessageChunk =\n | { type: \"start\"; messageId: string }\n | { type: \"start-step\" }\n | { type: \"text-start\"; id: string }\n | { type: \"text-delta\"; id: string; delta: string }\n | { type: \"text-end\"; id: string }\n | { type: \"reasoning-start\"; id: string }\n | { type: \"reasoning-delta\"; id: string; delta: string }\n | { type: \"reasoning-end\"; id: string }\n | {\n type: \"tool-input-available\";\n toolCallId: string;\n toolName: string;\n input: unknown;\n }\n | { type: \"finish-step\" }\n | {\n type: \"finish\";\n messageMetadata?: {\n finishReason?: FinishReason;\n usage?: LanguageModelUsage;\n };\n }\n | { type: \"error\"; errorText: string };\n\nexport type ChatTransportTrigger = \"submit-message\" | \"regenerate-message\";\n\nexport interface ChatTransportSendMessagesArgs<MSG extends UIMessage> {\n trigger: ChatTransportTrigger;\n chatId: string;\n messageId: string;\n messages: ReadonlyArray<MSG>;\n abortSignal: AbortSignal | undefined;\n headers?: Record<string, string>;\n}\n\nexport interface ChatTransportReconnectArgs {\n chatId: string;\n}\n\nexport interface ChatTransport<MSG extends UIMessage = UIMessage> {\n sendMessages(\n args: ChatTransportSendMessagesArgs<MSG>,\n ): Promise<ReadableStream<UIMessageChunk>>;\n\n reconnectToStream(\n args: ChatTransportReconnectArgs,\n ): Promise<ReadableStream<UIMessageChunk> | null>;\n}\n\n/** Concatenate all `text` parts of a UIMessage into a single string. */\nexport function getUIMessageText(message: UIMessage): string {\n let buf = \"\";\n for (const p of message.parts) {\n if (p.type === \"text\") {\n buf += p.text;\n }\n }\n return buf;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAoEA;AACA,OAAO,SAASA,gBAAgBA,CAACC,OAAkB,EAAU;EAC3D,IAAIC,GAAG,GAAG,EAAE;EACZ,KAAK,MAAMC,CAAC,IAAIF,OAAO,CAACG,KAAK,EAAE;IAC7B,IAAID,CAAC,CAACE,IAAI,KAAK,MAAM,EAAE;MACrBH,GAAG,IAAIC,CAAC,CAACG,IAAI;IACf;EACF;EACA,OAAOJ,GAAG;AACZ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-prompt.js","names":["convertPrompt","prompt","warnings","messages","message","push","convertMessage","role","content","parts","part","type","text","feature","details","length","toolCalls","id","toolCallId","function","name","toolName","arguments","input","JSON","stringify","tool_calls","undefined","filter","map","stringifyToolResult","output","tool_call_id","value","reason","c","s","join"],"sources":["convert-prompt.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LanguageModelV3Message,\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultOutput,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\n\nexport interface OpenAiMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | Array<{ type: \"text\"; text: string }> | null;\n tool_calls?: Array<OpenAiAssistantToolCall>;\n tool_call_id?: string;\n}\n\nexport interface OpenAiAssistantToolCall {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n}\n\nexport function convertPrompt(\n prompt: LanguageModelV3Prompt,\n warnings: Array<SharedV3Warning
|
|
1
|
+
{"version":3,"file":"convert-prompt.js","names":["convertPrompt","prompt","warnings","messages","message","push","convertMessage","role","content","parts","part","type","text","feature","details","length","toolCalls","id","toolCallId","function","name","toolName","arguments","input","JSON","stringify","tool_calls","undefined","filter","map","stringifyToolResult","output","tool_call_id","value","reason","c","s","join"],"sources":["convert-prompt.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LanguageModelV3Message,\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultOutput,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\n\nexport interface OpenAiMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | Array<{ type: \"text\"; text: string }> | null;\n tool_calls?: Array<OpenAiAssistantToolCall>;\n tool_call_id?: string;\n}\n\nexport interface OpenAiAssistantToolCall {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n}\n\nexport function convertPrompt(\n prompt: LanguageModelV3Prompt,\n warnings: Array<SharedV3Warning>,\n): Array<OpenAiMessage> {\n const messages: Array<OpenAiMessage> = [];\n\n for (const message of prompt) {\n messages.push(...convertMessage(message, warnings));\n }\n\n return messages;\n}\n\nfunction convertMessage(\n message: LanguageModelV3Message,\n warnings: Array<SharedV3Warning>,\n): Array<OpenAiMessage> {\n switch (message.role) {\n case \"system\":\n return [{ role: \"system\", content: message.content }];\n\n case \"user\": {\n const parts: Array<{ type: \"text\"; text: string }> = [];\n for (const part of message.content) {\n switch (part.type) {\n case \"text\":\n parts.push({ type: \"text\", text: part.text });\n break;\n case \"file\":\n warnings.push({\n type: \"unsupported\",\n feature: \"user file content\",\n details:\n \"File content in user messages is not supported in v0 — ignored\",\n });\n break;\n }\n }\n if (parts.length === 0) {\n parts.push({ type: \"text\", text: \"\" });\n }\n return [{ role: \"user\", content: parts }];\n }\n\n case \"assistant\": {\n let text = \"\";\n const toolCalls: Array<OpenAiAssistantToolCall> = [];\n for (const part of message.content) {\n switch (part.type) {\n case \"text\":\n text += part.text;\n break;\n case \"tool-call\":\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments:\n typeof part.input === \"string\"\n ? part.input\n : JSON.stringify(part.input ?? {}),\n },\n });\n break;\n case \"reasoning\":\n case \"file\":\n case \"tool-result\":\n warnings.push({\n type: \"unsupported\",\n feature: `assistant ${part.type} content`,\n details: `\"${part.type}\" parts in assistant messages are not supported in v0 — ignored`,\n });\n break;\n }\n }\n return [\n {\n role: \"assistant\",\n content: text.length > 0 ? text : null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n },\n ];\n }\n\n case \"tool\":\n return message.content\n .filter(\n (part): part is Extract<typeof part, { type: \"tool-result\" }> => {\n if (part.type === \"tool-result\") return true;\n warnings.push({\n type: \"unsupported\",\n feature: `tool ${part.type} content`,\n details: `\"${part.type}\" parts in tool messages are not supported in v0 — ignored`,\n });\n return false;\n },\n )\n .map((part) => ({\n role: \"tool\" as const,\n content: stringifyToolResult(part.output, warnings),\n tool_call_id: part.toolCallId,\n }));\n }\n}\n\nfunction stringifyToolResult(\n output: LanguageModelV3ToolResultOutput,\n warnings: Array<SharedV3Warning>,\n): string {\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n return output.value;\n case \"json\":\n case \"error-json\":\n return JSON.stringify(output.value);\n case \"execution-denied\":\n return output.reason ?? \"Tool execution denied\";\n case \"content\":\n return output.value\n .map((c) => {\n if (c.type === \"text\") return c.text;\n warnings.push({\n type: \"unsupported\",\n feature: \"tool result media content\",\n details:\n \"Non-text tool result content is not supported in v0 — ignored\",\n });\n return \"\";\n })\n .filter((s) => s.length > 0)\n .join(\"\\n\");\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundry-chat-language-model.js","names":["getOpenAiBaseUrl","convertPrompt","mapFinishReason","FoundryChatLanguageModel","specificationVersion","supportedUrls","constructor","modelId","config","provider","doGenerate","options","warnings","body","url","buildRequest","res","client","fetch","method","headers","filterHeaders","Accept","JSON","stringify","signal","abortSignal","ok","errBody","safeReadText","Error","status","statusText","data","json","parseGenerateResponse","doStream","stream","parseStreamResponse","request","baseUrl","URL","toString","apiName","identifier","type","registeredModelRid","messages","prompt","tools","filter","t","push","feature","details","map","function","name","description","parameters","inputSchema","toolChoice","convertToolChoice","topK","responseFormat","model","max_tokens","maxOutputTokens","temperature","top_p","topP","stop","stopSequences","seed","presence_penalty","presencePenalty","frequency_penalty","frequencyPenalty","length","undefined","tool_choice","choice","choices","message","content","text","reasoningText","reasoning","reasoning_content","tool_calls","tc","toolCallId","id","toolName","input","arguments","finishReason","finish_reason","usage","mapUsage","response","timestamp","Date","created","reader","getReader","decoder","TextDecoder","buffer","sentStart","textId","textStarted","toolInputStarted","Set","ReadableStream","pull","controller","done","value","read","enqueue","close","decode","lines","split","pop","line","trimmed","trim","startsWith","slice","chunk","parse","delta","index","has","add","cancel","inputTokens","total","prompt_tokens","noCache","cacheRead","prompt_tokens_details","cached_tokens","cacheWrite","outputTokens","completion_tokens","completion_tokens_details","reasoning_tokens","out","k","v","Object","entries"],"sources":["foundry-chat-language-model.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3ToolChoice,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport type { PlatformClient } from \"@osdk/client\";\nimport { getOpenAiBaseUrl } from \"@osdk/language-models\";\n\nimport type { OpenAiAssistantToolCall } from \"./convert-prompt.js\";\nimport { convertPrompt } from \"./convert-prompt.js\";\nimport { mapFinishReason } from \"./map-finish-reason.js\";\nimport type { ModelIdentifier } from \"./types.js\";\n\nexport interface FoundryChatLanguageModelConfig {\n client: PlatformClient;\n identifier: ModelIdentifier;\n}\n\nexport class FoundryChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly provider: string;\n readonly modelId: string;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly config: FoundryChatLanguageModelConfig;\n\n constructor(modelId: string, config: FoundryChatLanguageModelConfig) {\n this.provider = \"foundry-lms\";\n this.modelId = modelId;\n this.config = config;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions\n ): Promise<LanguageModelV3GenerateResult> {\n const warnings: Array<SharedV3Warning> = [];\n const { body, url } = this.buildRequest(options, warnings);\n\n const res = await this.config.client.fetch(url, {\n method: \"POST\",\n headers: filterHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...(options.headers ?? {}),\n }),\n body: JSON.stringify(body),\n signal: options.abortSignal,\n });\n\n if (!res.ok) {\n const errBody = await safeReadText(res);\n throw new Error(\n `LMS chat/completions request failed: ${res.status} ${res.statusText}` +\n (errBody ? ` — ${errBody}` : \"\")\n );\n }\n\n const data = (await res.json()) as OpenAiChatCompletionResponse;\n return this.parseGenerateResponse(data, body, warnings);\n }\n\n async doStream(\n options: LanguageModelV3CallOptions\n ): Promise<LanguageModelV3StreamResult> {\n const warnings: Array<SharedV3Warning> = [];\n const { body, url } = this.buildRequest(options, warnings);\n body.stream = true;\n\n const res = await this.config.client.fetch(url, {\n method: \"POST\",\n headers: filterHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...(options.headers ?? {}),\n }),\n body: JSON.stringify(body),\n signal: options.abortSignal,\n });\n\n if (!res.ok) {\n const errBody = await safeReadText(res);\n throw new Error(\n `LMS chat/completions request failed: ${res.status} ${res.statusText}` +\n (errBody ? ` — ${errBody}` : \"\")\n );\n }\n\n const stream = this.parseStreamResponse(res, body, warnings);\n\n return {\n stream,\n request: { body },\n };\n }\n\n private buildRequest(\n options: LanguageModelV3CallOptions,\n warnings: Array<SharedV3Warning>\n ): { body: OpenAiChatRequest; url: string } {\n const baseUrl = getOpenAiBaseUrl(this.config.client);\n const url = new URL(\"chat/completions\", `${baseUrl}/`).toString();\n const apiName =\n this.config.identifier.type === \"lmsModel\"\n ? this.config.identifier.apiName\n : this.config.identifier.registeredModelRid;\n\n const messages = convertPrompt(options.prompt, warnings);\n\n const tools = options.tools\n ?.filter((t): t is LanguageModelV3FunctionTool => {\n if (t.type === \"function\") return true;\n warnings.push({\n type: \"unsupported\",\n feature: `${t.type} tool type`,\n details: `Only \"function\" tools are supported; \"${t.type}\" tools are ignored`,\n });\n return false;\n })\n .map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n\n const toolChoice = convertToolChoice(options.toolChoice);\n\n if (options.topK != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"topK\",\n details:\n \"topK is not supported by the Foundry LMS OpenAI proxy — ignored\",\n });\n }\n\n if (options.responseFormat?.type === \"json\") {\n warnings.push({\n type: \"unsupported\",\n feature: \"JSON response format\",\n details: \"Structured JSON output is not supported in v0 — ignored\",\n });\n }\n\n const body: OpenAiChatRequest = {\n model: apiName,\n messages,\n max_tokens: options.maxOutputTokens,\n temperature: options.temperature,\n top_p: options.topP,\n stop: options.stopSequences,\n seed: options.seed,\n presence_penalty: options.presencePenalty,\n frequency_penalty: options.frequencyPenalty,\n tools: tools != null && tools.length > 0 ? tools : undefined,\n tool_choice: toolChoice,\n stream: false,\n };\n\n return { body, url };\n }\n\n private parseGenerateResponse(\n res: OpenAiChatCompletionResponse,\n request: OpenAiChatRequest,\n warnings: Array<SharedV3Warning>\n ): LanguageModelV3GenerateResult {\n const choice = res.choices[0];\n if (choice == null) {\n throw new Error(\n \"LMS chat/completions response did not include any choices\"\n );\n }\n\n const message = choice.message;\n const content: Array<LanguageModelV3Content> = [];\n\n if (message.content != null && message.content.length > 0) {\n content.push({ type: \"text\", text: message.content });\n }\n\n const reasoningText = message.reasoning ?? message.reasoning_content;\n if (reasoningText != null) {\n content.push({ type: \"reasoning\", text: reasoningText });\n }\n\n if (message.tool_calls != null) {\n for (const tc of message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapFinishReason(choice.finish_reason),\n usage: mapUsage(res.usage),\n request: { body: request },\n response: {\n id: res.id,\n modelId: res.model,\n timestamp: new Date(res.created * 1000),\n body: res,\n },\n warnings,\n };\n }\n\n private parseStreamResponse(\n res: Response,\n request: OpenAiChatRequest,\n warnings: Array<SharedV3Warning>\n ): ReadableStream<LanguageModelV3StreamPart> {\n const body = res.body;\n if (body == null) {\n throw new Error(\"LMS streaming response has no body\");\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let sentStart = false;\n const textId = \"text-0\";\n let textStarted = false;\n const toolInputStarted = new Set<string>();\n\n return new ReadableStream<LanguageModelV3StreamPart>({\n pull: async (controller) => {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n controller.close();\n return;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"data:\")) continue;\n const data = trimmed.slice(5).trim();\n if (data === \"[DONE]\") {\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n controller.close();\n return;\n }\n\n let chunk: OpenAiStreamChunk;\n try {\n chunk = JSON.parse(data);\n } catch {\n continue;\n }\n\n if (!sentStart) {\n sentStart = true;\n controller.enqueue({ type: \"stream-start\", warnings });\n controller.enqueue({\n type: \"response-metadata\",\n id: chunk.id,\n modelId: chunk.model,\n timestamp: new Date(chunk.created * 1000),\n });\n }\n\n const delta = chunk.choices?.[0]?.delta;\n if (delta == null) {\n if (chunk.usage != null) {\n controller.enqueue({\n type: \"finish\",\n usage: mapUsage(chunk.usage),\n finishReason: mapFinishReason(\n chunk.choices?.[0]?.finish_reason ?? undefined\n ),\n });\n }\n continue;\n }\n\n if (delta.content != null && delta.content.length > 0) {\n if (!textStarted) {\n textStarted = true;\n controller.enqueue({ type: \"text-start\", id: textId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const tc of delta.tool_calls) {\n const id = tc.id ?? `tool-${tc.index}`;\n if (tc.function?.name != null && !toolInputStarted.has(id)) {\n if (textStarted) {\n textStarted = false;\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n toolInputStarted.add(id);\n controller.enqueue({\n type: \"tool-input-start\",\n id,\n toolName: tc.function.name,\n });\n }\n if (tc.function?.arguments != null) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id,\n delta: tc.function.arguments,\n });\n }\n }\n }\n\n const finishReason = chunk.choices?.[0]?.finish_reason;\n if (finishReason != null) {\n if (textStarted) {\n textStarted = false;\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n for (const id of toolInputStarted) {\n controller.enqueue({ type: \"tool-input-end\", id });\n }\n controller.enqueue({\n type: \"finish\",\n usage: mapUsage(chunk.usage),\n finishReason: mapFinishReason(finishReason),\n });\n }\n }\n }\n },\n cancel: () => {\n void reader.cancel();\n },\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// OpenAI types\n// ---------------------------------------------------------------------------\n\ninterface OpenAiChatRequest {\n model: string;\n messages: Array<unknown>;\n max_tokens?: number;\n temperature?: number;\n top_p?: number;\n stop?: string[];\n seed?: number;\n presence_penalty?: number;\n frequency_penalty?: number;\n tools?: Array<{\n type: \"function\";\n function: { name: string; description?: string; parameters: unknown };\n }>;\n tool_choice?: OpenAiToolChoiceValue;\n stream: boolean;\n}\n\ntype OpenAiToolChoiceValue =\n | \"auto\"\n | \"none\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\ninterface OpenAiChatCompletionResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: \"assistant\";\n content: string | null;\n tool_calls?: Array<OpenAiAssistantToolCall>;\n reasoning?: string;\n reasoning_content?: string;\n };\n finish_reason: string;\n }>;\n usage?: OpenAiUsage;\n}\n\ninterface OpenAiStreamChunk {\n id: string;\n object: string;\n created: number;\n model: string;\n choices?: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: \"function\";\n function?: { name?: string; arguments?: string };\n }>;\n };\n finish_reason: string | null;\n }>;\n usage?: OpenAiUsage;\n}\n\ninterface OpenAiUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction convertToolChoice(\n choice: LanguageModelV3ToolChoice | undefined\n): OpenAiToolChoiceValue | undefined {\n if (choice == null) return undefined;\n switch (choice.type) {\n case \"auto\":\n return \"auto\";\n case \"none\":\n return \"none\";\n case \"required\":\n return \"required\";\n case \"tool\":\n return { type: \"function\", function: { name: choice.toolName } };\n }\n}\n\nfunction mapUsage(usage: OpenAiUsage | undefined): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: usage?.prompt_tokens,\n noCache: undefined,\n cacheRead: usage?.prompt_tokens_details?.cached_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: usage?.completion_tokens,\n text: undefined,\n reasoning: usage?.completion_tokens_details?.reasoning_tokens,\n },\n };\n}\n\nfunction filterHeaders(\n input: Record<string, string | undefined>\n): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(input)) {\n if (v != null) out[k] = v;\n }\n return out;\n}\n\nasync function safeReadText(res: Response): Promise<string | undefined> {\n try {\n return await res.text();\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"foundry-chat-language-model.js","names":["getOpenAiBaseUrl","convertPrompt","mapFinishReason","FoundryChatLanguageModel","specificationVersion","supportedUrls","constructor","modelId","config","provider","doGenerate","options","warnings","body","url","buildRequest","res","client","fetch","method","headers","filterHeaders","Accept","JSON","stringify","signal","abortSignal","ok","errBody","safeReadText","Error","status","statusText","data","json","parseGenerateResponse","doStream","stream","parseStreamResponse","request","baseUrl","URL","toString","apiName","identifier","type","registeredModelRid","messages","prompt","tools","filter","t","push","feature","details","map","function","name","description","parameters","inputSchema","toolChoice","convertToolChoice","topK","responseFormat","model","max_tokens","maxOutputTokens","temperature","top_p","topP","stop","stopSequences","seed","presence_penalty","presencePenalty","frequency_penalty","frequencyPenalty","length","undefined","tool_choice","choice","choices","message","content","text","reasoningText","reasoning","reasoning_content","tool_calls","tc","toolCallId","id","toolName","input","arguments","finishReason","finish_reason","usage","mapUsage","response","timestamp","Date","created","reader","getReader","decoder","TextDecoder","buffer","sentStart","textId","textStarted","toolInputStarted","Set","ReadableStream","pull","controller","done","value","read","enqueue","close","decode","lines","split","pop","line","trimmed","trim","startsWith","slice","chunk","parse","delta","index","has","add","cancel","inputTokens","total","prompt_tokens","noCache","cacheRead","prompt_tokens_details","cached_tokens","cacheWrite","outputTokens","completion_tokens","completion_tokens_details","reasoning_tokens","out","k","v","Object","entries"],"sources":["foundry-chat-language-model.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3ToolChoice,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport type { PlatformClient } from \"@osdk/client\";\nimport { getOpenAiBaseUrl } from \"@osdk/language-models\";\n\nimport type { OpenAiAssistantToolCall } from \"./convert-prompt.js\";\nimport { convertPrompt } from \"./convert-prompt.js\";\nimport { mapFinishReason } from \"./map-finish-reason.js\";\nimport type { ModelIdentifier } from \"./types.js\";\n\nexport interface FoundryChatLanguageModelConfig {\n client: PlatformClient;\n identifier: ModelIdentifier;\n}\n\nexport class FoundryChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\";\n readonly provider: string;\n readonly modelId: string;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly config: FoundryChatLanguageModelConfig;\n\n constructor(modelId: string, config: FoundryChatLanguageModelConfig) {\n this.provider = \"foundry-lms\";\n this.modelId = modelId;\n this.config = config;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const warnings: Array<SharedV3Warning> = [];\n const { body, url } = this.buildRequest(options, warnings);\n\n const res = await this.config.client.fetch(url, {\n method: \"POST\",\n headers: filterHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...(options.headers ?? {}),\n }),\n body: JSON.stringify(body),\n signal: options.abortSignal,\n });\n\n if (!res.ok) {\n const errBody = await safeReadText(res);\n throw new Error(\n `LMS chat/completions request failed: ${res.status} ${res.statusText}` +\n (errBody ? ` — ${errBody}` : \"\"),\n );\n }\n\n const data = (await res.json()) as OpenAiChatCompletionResponse;\n return this.parseGenerateResponse(data, body, warnings);\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const warnings: Array<SharedV3Warning> = [];\n const { body, url } = this.buildRequest(options, warnings);\n body.stream = true;\n\n const res = await this.config.client.fetch(url, {\n method: \"POST\",\n headers: filterHeaders({\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n ...(options.headers ?? {}),\n }),\n body: JSON.stringify(body),\n signal: options.abortSignal,\n });\n\n if (!res.ok) {\n const errBody = await safeReadText(res);\n throw new Error(\n `LMS chat/completions request failed: ${res.status} ${res.statusText}` +\n (errBody ? ` — ${errBody}` : \"\"),\n );\n }\n\n const stream = this.parseStreamResponse(res, body, warnings);\n\n return {\n stream,\n request: { body },\n };\n }\n\n private buildRequest(\n options: LanguageModelV3CallOptions,\n warnings: Array<SharedV3Warning>,\n ): { body: OpenAiChatRequest; url: string } {\n const baseUrl = getOpenAiBaseUrl(this.config.client);\n const url = new URL(\"chat/completions\", `${baseUrl}/`).toString();\n const apiName =\n this.config.identifier.type === \"lmsModel\"\n ? this.config.identifier.apiName\n : this.config.identifier.registeredModelRid;\n\n const messages = convertPrompt(options.prompt, warnings);\n\n const tools = options.tools\n ?.filter((t): t is LanguageModelV3FunctionTool => {\n if (t.type === \"function\") return true;\n warnings.push({\n type: \"unsupported\",\n feature: `${t.type} tool type`,\n details: `Only \"function\" tools are supported; \"${t.type}\" tools are ignored`,\n });\n return false;\n })\n .map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n\n const toolChoice = convertToolChoice(options.toolChoice);\n\n if (options.topK != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"topK\",\n details:\n \"topK is not supported by the Foundry LMS OpenAI proxy — ignored\",\n });\n }\n\n if (options.responseFormat?.type === \"json\") {\n warnings.push({\n type: \"unsupported\",\n feature: \"JSON response format\",\n details: \"Structured JSON output is not supported in v0 — ignored\",\n });\n }\n\n const body: OpenAiChatRequest = {\n model: apiName,\n messages,\n max_tokens: options.maxOutputTokens,\n temperature: options.temperature,\n top_p: options.topP,\n stop: options.stopSequences,\n seed: options.seed,\n presence_penalty: options.presencePenalty,\n frequency_penalty: options.frequencyPenalty,\n tools: tools != null && tools.length > 0 ? tools : undefined,\n tool_choice: toolChoice,\n stream: false,\n };\n\n return { body, url };\n }\n\n private parseGenerateResponse(\n res: OpenAiChatCompletionResponse,\n request: OpenAiChatRequest,\n warnings: Array<SharedV3Warning>,\n ): LanguageModelV3GenerateResult {\n const choice = res.choices[0];\n if (choice == null) {\n throw new Error(\n \"LMS chat/completions response did not include any choices\",\n );\n }\n\n const message = choice.message;\n const content: Array<LanguageModelV3Content> = [];\n\n if (message.content != null && message.content.length > 0) {\n content.push({ type: \"text\", text: message.content });\n }\n\n const reasoningText = message.reasoning ?? message.reasoning_content;\n if (reasoningText != null) {\n content.push({ type: \"reasoning\", text: reasoningText });\n }\n\n if (message.tool_calls != null) {\n for (const tc of message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapFinishReason(choice.finish_reason),\n usage: mapUsage(res.usage),\n request: { body: request },\n response: {\n id: res.id,\n modelId: res.model,\n timestamp: new Date(res.created * 1000),\n body: res,\n },\n warnings,\n };\n }\n\n private parseStreamResponse(\n res: Response,\n request: OpenAiChatRequest,\n warnings: Array<SharedV3Warning>,\n ): ReadableStream<LanguageModelV3StreamPart> {\n const body = res.body;\n if (body == null) {\n throw new Error(\"LMS streaming response has no body\");\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let sentStart = false;\n const textId = \"text-0\";\n let textStarted = false;\n const toolInputStarted = new Set<string>();\n\n return new ReadableStream<LanguageModelV3StreamPart>({\n pull: async (controller) => {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n controller.close();\n return;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"data:\")) continue;\n const data = trimmed.slice(5).trim();\n if (data === \"[DONE]\") {\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n controller.close();\n return;\n }\n\n let chunk: OpenAiStreamChunk;\n try {\n chunk = JSON.parse(data);\n } catch {\n continue;\n }\n\n if (!sentStart) {\n sentStart = true;\n controller.enqueue({ type: \"stream-start\", warnings });\n controller.enqueue({\n type: \"response-metadata\",\n id: chunk.id,\n modelId: chunk.model,\n timestamp: new Date(chunk.created * 1000),\n });\n }\n\n const delta = chunk.choices?.[0]?.delta;\n if (delta == null) {\n if (chunk.usage != null) {\n controller.enqueue({\n type: \"finish\",\n usage: mapUsage(chunk.usage),\n finishReason: mapFinishReason(\n chunk.choices?.[0]?.finish_reason ?? undefined,\n ),\n });\n }\n continue;\n }\n\n if (delta.content != null && delta.content.length > 0) {\n if (!textStarted) {\n textStarted = true;\n controller.enqueue({ type: \"text-start\", id: textId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const tc of delta.tool_calls) {\n const id = tc.id ?? `tool-${tc.index}`;\n if (tc.function?.name != null && !toolInputStarted.has(id)) {\n if (textStarted) {\n textStarted = false;\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n toolInputStarted.add(id);\n controller.enqueue({\n type: \"tool-input-start\",\n id,\n toolName: tc.function.name,\n });\n }\n if (tc.function?.arguments != null) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id,\n delta: tc.function.arguments,\n });\n }\n }\n }\n\n const finishReason = chunk.choices?.[0]?.finish_reason;\n if (finishReason != null) {\n if (textStarted) {\n textStarted = false;\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n for (const id of toolInputStarted) {\n controller.enqueue({ type: \"tool-input-end\", id });\n }\n controller.enqueue({\n type: \"finish\",\n usage: mapUsage(chunk.usage),\n finishReason: mapFinishReason(finishReason),\n });\n }\n }\n }\n },\n cancel: () => {\n void reader.cancel();\n },\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// OpenAI types\n// ---------------------------------------------------------------------------\n\ninterface OpenAiChatRequest {\n model: string;\n messages: Array<unknown>;\n max_tokens?: number;\n temperature?: number;\n top_p?: number;\n stop?: string[];\n seed?: number;\n presence_penalty?: number;\n frequency_penalty?: number;\n tools?: Array<{\n type: \"function\";\n function: { name: string; description?: string; parameters: unknown };\n }>;\n tool_choice?: OpenAiToolChoiceValue;\n stream: boolean;\n}\n\ntype OpenAiToolChoiceValue =\n | \"auto\"\n | \"none\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\ninterface OpenAiChatCompletionResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: \"assistant\";\n content: string | null;\n tool_calls?: Array<OpenAiAssistantToolCall>;\n reasoning?: string;\n reasoning_content?: string;\n };\n finish_reason: string;\n }>;\n usage?: OpenAiUsage;\n}\n\ninterface OpenAiStreamChunk {\n id: string;\n object: string;\n created: number;\n model: string;\n choices?: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: \"function\";\n function?: { name?: string; arguments?: string };\n }>;\n };\n finish_reason: string | null;\n }>;\n usage?: OpenAiUsage;\n}\n\ninterface OpenAiUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction convertToolChoice(\n choice: LanguageModelV3ToolChoice | undefined,\n): OpenAiToolChoiceValue | undefined {\n if (choice == null) return undefined;\n switch (choice.type) {\n case \"auto\":\n return \"auto\";\n case \"none\":\n return \"none\";\n case \"required\":\n return \"required\";\n case \"tool\":\n return { type: \"function\", function: { name: choice.toolName } };\n }\n}\n\nfunction mapUsage(usage: OpenAiUsage | undefined): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: usage?.prompt_tokens,\n noCache: undefined,\n cacheRead: usage?.prompt_tokens_details?.cached_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: usage?.completion_tokens,\n text: undefined,\n reasoning: usage?.completion_tokens_details?.reasoning_tokens,\n },\n };\n}\n\nfunction filterHeaders(\n input: Record<string, string | undefined>,\n): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(input)) {\n if (v != null) out[k] = v;\n }\n return out;\n}\n\nasync function safeReadText(res: Response): Promise<string | undefined> {\n try {\n return await res.text();\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-finish-reason.js","names":["mapFinishReason","raw","unified"],"sources":["map-finish-reason.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapFinishReason(\n raw: string | undefined
|
|
1
|
+
{"version":3,"file":"map-finish-reason.js","names":["mapFinishReason","raw","unified"],"sources":["map-finish-reason.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapFinishReason(\n raw: string | undefined,\n): LanguageModelV3FinishReason {\n let unified: LanguageModelV3FinishReason[\"unified\"];\n switch (raw) {\n case \"stop\":\n unified = \"stop\";\n break;\n case \"length\":\n unified = \"length\";\n break;\n case \"tool_calls\":\n case \"function_call\":\n unified = \"tool-calls\";\n break;\n case \"content_filter\":\n unified = \"content-filter\";\n break;\n default:\n unified = \"other\";\n break;\n }\n return { unified, raw };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,SAASA,eAAeA,CAC7BC,GAAuB,EACM;EAC7B,IAAIC,OAA+C;EACnD,QAAQD,GAAG;IACT,KAAK,MAAM;MACTC,OAAO,GAAG,MAAM;MAChB;IACF,KAAK,QAAQ;MACXA,OAAO,GAAG,QAAQ;MAClB;IACF,KAAK,YAAY;IACjB,KAAK,eAAe;MAClBA,OAAO,GAAG,YAAY;MACtB;IACF,KAAK,gBAAgB;MACnBA,OAAO,GAAG,gBAAgB;MAC1B;IACF;MACEA,OAAO,GAAG,OAAO;MACjB;EACJ;EACA,OAAO;IAAEA,OAAO;IAAED;EAAI,CAAC;AACzB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","names":["FoundryChatLanguageModel","createFoundryAI","options","createLanguageModel","model","identifier","type","apiName","id","registeredModelRid","client","provider","languageModel"],"sources":["provider.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { PlatformClient } from \"@osdk/client\";\n\nimport { FoundryChatLanguageModel } from \"./foundry-chat-language-model.js\";\nimport type { ModelIdentifier } from \"./types.js\";\n\nexport interface FoundryAIProviderOptions {\n /** Foundry PlatformClient providing the auth token + base URL. */\n client: PlatformClient;\n}\n\n/**\n * A Foundry AI provider for the AI SDK.\n *\n * Can be called directly as a function to get a language model, or use\n * the `.languageModel()` method.\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { createFoundryAI } from \"@osdk/aip-core/ai-sdk\";\n *\n * const foundryAI = createFoundryAI({ client });\n * const { text } = await generateText({\n * model: foundryAI(\"gpt-4o\"),\n * prompt: \"Hello, world\",\n * });\n * ```\n */\nexport interface FoundryAIProvider {\n /**\n * Create a language model for the given model name or identifier.\n *\n * @param model - LMS model API name (e.g. \"gpt-4o\") or a structured ModelIdentifier.\n */\n (model: string | ModelIdentifier): LanguageModelV3;\n\n /**\n * Create a language model for the given model name or identifier.\n *\n * @param model - LMS model API name (e.g. \"gpt-4o\") or a structured ModelIdentifier.\n */\n languageModel(model: string | ModelIdentifier): LanguageModelV3;\n}\n\n/**\n * Create a Foundry AI provider for the AI SDK.\n *\n * @param options - Configuration including the Foundry PlatformClient.\n * @returns A provider that can be called directly or via `.languageModel()`.\n */\nexport function createFoundryAI(\n options: FoundryAIProviderOptions
|
|
1
|
+
{"version":3,"file":"provider.js","names":["FoundryChatLanguageModel","createFoundryAI","options","createLanguageModel","model","identifier","type","apiName","id","registeredModelRid","client","provider","languageModel"],"sources":["provider.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { PlatformClient } from \"@osdk/client\";\n\nimport { FoundryChatLanguageModel } from \"./foundry-chat-language-model.js\";\nimport type { ModelIdentifier } from \"./types.js\";\n\nexport interface FoundryAIProviderOptions {\n /** Foundry PlatformClient providing the auth token + base URL. */\n client: PlatformClient;\n}\n\n/**\n * A Foundry AI provider for the AI SDK.\n *\n * Can be called directly as a function to get a language model, or use\n * the `.languageModel()` method.\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { createFoundryAI } from \"@osdk/aip-core/ai-sdk\";\n *\n * const foundryAI = createFoundryAI({ client });\n * const { text } = await generateText({\n * model: foundryAI(\"gpt-4o\"),\n * prompt: \"Hello, world\",\n * });\n * ```\n */\nexport interface FoundryAIProvider {\n /**\n * Create a language model for the given model name or identifier.\n *\n * @param model - LMS model API name (e.g. \"gpt-4o\") or a structured ModelIdentifier.\n */\n (model: string | ModelIdentifier): LanguageModelV3;\n\n /**\n * Create a language model for the given model name or identifier.\n *\n * @param model - LMS model API name (e.g. \"gpt-4o\") or a structured ModelIdentifier.\n */\n languageModel(model: string | ModelIdentifier): LanguageModelV3;\n}\n\n/**\n * Create a Foundry AI provider for the AI SDK.\n *\n * @param options - Configuration including the Foundry PlatformClient.\n * @returns A provider that can be called directly or via `.languageModel()`.\n */\nexport function createFoundryAI(\n options: FoundryAIProviderOptions,\n): FoundryAIProvider {\n const createLanguageModel = (\n model: string | ModelIdentifier,\n ): LanguageModelV3 => {\n const identifier: ModelIdentifier =\n typeof model === \"string\" ? { type: \"lmsModel\", apiName: model } : model;\n\n const id =\n identifier.type === \"lmsModel\"\n ? identifier.apiName\n : identifier.registeredModelRid;\n\n return new FoundryChatLanguageModel(`foundry/${id}`, {\n client: options.client,\n identifier,\n });\n };\n\n const provider = function (model: string | ModelIdentifier): LanguageModelV3 {\n return createLanguageModel(model);\n };\n\n provider.languageModel = createLanguageModel;\n\n return provider as FoundryAIProvider;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SAASA,wBAAwB,QAAQ,kCAAkC;;AAQ3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,OAAiC,EACd;EACnB,MAAMC,mBAAmB,GACvBC,KAA+B,IACX;IACpB,MAAMC,UAA2B,GAC/B,OAAOD,KAAK,KAAK,QAAQ,GAAG;MAAEE,IAAI,EAAE,UAAU;MAAEC,OAAO,EAAEH;IAAM,CAAC,GAAGA,KAAK;IAE1E,MAAMI,EAAE,GACNH,UAAU,CAACC,IAAI,KAAK,UAAU,GAC1BD,UAAU,CAACE,OAAO,GAClBF,UAAU,CAACI,kBAAkB;IAEnC,OAAO,IAAIT,wBAAwB,CAAC,WAAWQ,EAAE,EAAE,EAAE;MACnDE,MAAM,EAAER,OAAO,CAACQ,MAAM;MACtBL;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAMM,QAAQ,GAAG,SAAAA,CAAUP,KAA+B,EAAmB;IAC3E,OAAOD,mBAAmB,CAACC,KAAK,CAAC;EACnC,CAAC;EAEDO,QAAQ,CAACC,aAAa,GAAGT,mBAAmB;EAE5C,OAAOQ,QAAQ;AACjB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateText.js","names":["resolveMessages","runStep","generateText","options","messages","system","prompt","step","model","tools","toolChoice","maxOutputTokens","temperature","topP","stopSequences","seed","presencePenalty","frequencyPenalty","abortSignal","headers","warnings","onStepFinish","totalUsage","usage","onFinish","steps"],"sources":["generateText.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveMessages } from \"./internal/options.js\";\nimport { runStep } from \"./internal/runStep.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport type {\n LanguageModelUsage,\n ModelMessage,\n StepResult,\n SystemModelMessage,\n ToolChoice,\n ToolSet,\n} from \"./types.js\";\n\n/**\n * Options for {@link generateText}.\n */\nexport interface GenerateTextOptions<TOOLS extends ToolSet = ToolSet> {\n /** The language model to use. Build one via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** Plain text prompt. Mutually exclusive with `messages`. */\n prompt?: string | Array<ModelMessage>;\n\n /** Conversation history. Mutually exclusive with `prompt`. */\n messages?: Array<ModelMessage>;\n\n /** System instructions, prepended to the conversation. */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n // Tools --------------------------------------------------------------------\n\n tools?: TOOLS;\n toolChoice?: ToolChoice<TOOLS>;\n\n // Sampling -----------------------------------------------------------------\n\n maxOutputTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n // Execution ----------------------------------------------------------------\n\n abortSignal?: AbortSignal;\n headers?: Record<string, string | undefined>;\n\n // Callbacks ----------------------------------------------------------------\n\n onStepFinish?: (step: StepResult<TOOLS>) => void | Promise<void>;\n onFinish?: (\n event: StepResult<TOOLS> & {\n steps: Array<StepResult<TOOLS>>;\n totalUsage: LanguageModelUsage;\n }
|
|
1
|
+
{"version":3,"file":"generateText.js","names":["resolveMessages","runStep","generateText","options","messages","system","prompt","step","model","tools","toolChoice","maxOutputTokens","temperature","topP","stopSequences","seed","presencePenalty","frequencyPenalty","abortSignal","headers","warnings","onStepFinish","totalUsage","usage","onFinish","steps"],"sources":["generateText.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveMessages } from \"./internal/options.js\";\nimport { runStep } from \"./internal/runStep.js\";\nimport type { LanguageModel } from \"./model.js\";\nimport type {\n LanguageModelUsage,\n ModelMessage,\n StepResult,\n SystemModelMessage,\n ToolChoice,\n ToolSet,\n} from \"./types.js\";\n\n/**\n * Options for {@link generateText}.\n */\nexport interface GenerateTextOptions<TOOLS extends ToolSet = ToolSet> {\n /** The language model to use. Build one via `foundryModel(...)`. */\n model: LanguageModel;\n\n /** Plain text prompt. Mutually exclusive with `messages`. */\n prompt?: string | Array<ModelMessage>;\n\n /** Conversation history. Mutually exclusive with `prompt`. */\n messages?: Array<ModelMessage>;\n\n /** System instructions, prepended to the conversation. */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n // Tools --------------------------------------------------------------------\n\n tools?: TOOLS;\n toolChoice?: ToolChoice<TOOLS>;\n\n // Sampling -----------------------------------------------------------------\n\n maxOutputTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: Array<string>;\n seed?: number;\n\n // Execution ----------------------------------------------------------------\n\n abortSignal?: AbortSignal;\n headers?: Record<string, string | undefined>;\n\n // Callbacks ----------------------------------------------------------------\n\n onStepFinish?: (step: StepResult<TOOLS>) => void | Promise<void>;\n onFinish?: (\n event: StepResult<TOOLS> & {\n steps: Array<StepResult<TOOLS>>;\n totalUsage: LanguageModelUsage;\n },\n ) => void | PromiseLike<void>;\n}\n\n/**\n * Result of {@link generateText}.\n */\nexport type GenerateTextResult<TOOLS extends ToolSet = ToolSet> =\n StepResult<TOOLS> & {\n totalUsage: LanguageModelUsage;\n steps: Array<StepResult<TOOLS>>;\n };\n\n/**\n * Generate a text completion via the Foundry Language Model Service.\n *\n * v0: single-step. Multi-step tool execution loops, image/file content,\n * structured output, and Zod tool schemas are not yet supported.\n *\n * @example\n * ```ts\n * import { foundryModel, generateText } from \"@osdk/aip-core\";\n *\n * const { text } = await generateText({\n * model: foundryModel({ client, model: \"gpt-4o\" }),\n * system: \"You are a concise assistant.\",\n * prompt: \"Summarise this PR.\",\n * });\n * ```\n */\nexport async function generateText<TOOLS extends ToolSet = ToolSet>(\n options: GenerateTextOptions<TOOLS>,\n): Promise<GenerateTextResult<TOOLS>> {\n const messages = resolveMessages(\n \"generateText\",\n options.system,\n options.prompt,\n options.messages,\n );\n\n const step = await runStep<TOOLS>({\n model: options.model,\n messages,\n tools: options.tools,\n toolChoice: options.toolChoice,\n maxOutputTokens: options.maxOutputTokens,\n temperature: options.temperature,\n topP: options.topP,\n stopSequences: options.stopSequences,\n seed: options.seed,\n presencePenalty: options.presencePenalty,\n frequencyPenalty: options.frequencyPenalty,\n abortSignal: options.abortSignal,\n headers: options.headers,\n warnings: [],\n });\n\n await options.onStepFinish?.(step);\n\n const totalUsage = step.usage;\n\n await options.onFinish?.({\n ...step,\n steps: [step],\n totalUsage,\n });\n\n return { ...step, totalUsage, steps: [step] };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,eAAe,QAAQ,uBAAuB;AACvD,SAASC,OAAO,QAAQ,uBAAuB;;AAW/C;AACA;AACA;;AA6CA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,YAAYA,CAChCC,OAAmC,EACC;EACpC,MAAMC,QAAQ,GAAGJ,eAAe,CAC9B,cAAc,EACdG,OAAO,CAACE,MAAM,EACdF,OAAO,CAACG,MAAM,EACdH,OAAO,CAACC,QACV,CAAC;EAED,MAAMG,IAAI,GAAG,MAAMN,OAAO,CAAQ;IAChCO,KAAK,EAAEL,OAAO,CAACK,KAAK;IACpBJ,QAAQ;IACRK,KAAK,EAAEN,OAAO,CAACM,KAAK;IACpBC,UAAU,EAAEP,OAAO,CAACO,UAAU;IAC9BC,eAAe,EAAER,OAAO,CAACQ,eAAe;IACxCC,WAAW,EAAET,OAAO,CAACS,WAAW;IAChCC,IAAI,EAAEV,OAAO,CAACU,IAAI;IAClBC,aAAa,EAAEX,OAAO,CAACW,aAAa;IACpCC,IAAI,EAAEZ,OAAO,CAACY,IAAI;IAClBC,eAAe,EAAEb,OAAO,CAACa,eAAe;IACxCC,gBAAgB,EAAEd,OAAO,CAACc,gBAAgB;IAC1CC,WAAW,EAAEf,OAAO,CAACe,WAAW;IAChCC,OAAO,EAAEhB,OAAO,CAACgB,OAAO;IACxBC,QAAQ,EAAE;EACZ,CAAC,CAAC;EAEF,MAAMjB,OAAO,CAACkB,YAAY,GAAGd,IAAI,CAAC;EAElC,MAAMe,UAAU,GAAGf,IAAI,CAACgB,KAAK;EAE7B,MAAMpB,OAAO,CAACqB,QAAQ,GAAG;IACvB,GAAGjB,IAAI;IACPkB,KAAK,EAAE,CAAClB,IAAI,CAAC;IACbe;EACF,CAAC,CAAC;EAEF,OAAO;IAAE,GAAGf,IAAI;IAAEe,UAAU;IAAEG,KAAK,EAAE,CAAClB,IAAI;EAAE,CAAC;AAC/C","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockPlatformClient.js","names":["mockPlatformClient","args","baseUrl","fetch","tokenProvider","Promise","resolve","token","assertDefined","value","label","Error"],"sources":["mockPlatformClient.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PlatformClient } from \"@osdk/client\";\n\n/**\n * Build a typed `PlatformClient` for tests. `PlatformClient` is structurally\n * `{ baseUrl, fetch, tokenProvider }`; we satisfy that shape directly so\n * tests don't reach for `as unknown as PlatformClient`.\n */\nexport function mockPlatformClient(args: {\n baseUrl: string;\n fetch: typeof globalThis.fetch;\n token?: string;\n}): PlatformClient {\n return {\n baseUrl: args.baseUrl,\n fetch: args.fetch,\n tokenProvider: () => Promise.resolve(args.token ?? \"test-token\"),\n };\n}\n\n/** Throws with a labelled error if `value` is null/undefined. */\nexport function assertDefined<T>(\n value: T,\n label: string
|
|
1
|
+
{"version":3,"file":"mockPlatformClient.js","names":["mockPlatformClient","args","baseUrl","fetch","tokenProvider","Promise","resolve","token","assertDefined","value","label","Error"],"sources":["mockPlatformClient.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PlatformClient } from \"@osdk/client\";\n\n/**\n * Build a typed `PlatformClient` for tests. `PlatformClient` is structurally\n * `{ baseUrl, fetch, tokenProvider }`; we satisfy that shape directly so\n * tests don't reach for `as unknown as PlatformClient`.\n */\nexport function mockPlatformClient(args: {\n baseUrl: string;\n fetch: typeof globalThis.fetch;\n token?: string;\n}): PlatformClient {\n return {\n baseUrl: args.baseUrl,\n fetch: args.fetch,\n tokenProvider: () => Promise.resolve(args.token ?? \"test-token\"),\n };\n}\n\n/** Throws with a labelled error if `value` is null/undefined. */\nexport function assertDefined<T>(\n value: T,\n label: string,\n): asserts value is NonNullable<T> {\n if (value == null) {\n throw new Error(`${label} was unexpectedly null/undefined`);\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,kBAAkBA,CAACC,IAIlC,EAAkB;EACjB,OAAO;IACLC,OAAO,EAAED,IAAI,CAACC,OAAO;IACrBC,KAAK,EAAEF,IAAI,CAACE,KAAK;IACjBC,aAAa,EAAEA,CAAA,KAAMC,OAAO,CAACC,OAAO,CAACL,IAAI,CAACM,KAAK,IAAI,YAAY;EACjE,CAAC;AACH;;AAEA;AACA,OAAO,SAASC,aAAaA,CAC3BC,KAAQ,EACRC,KAAa,EACoB;EACjC,IAAID,KAAK,IAAI,IAAI,EAAE;IACjB,MAAM,IAAIE,KAAK,CAAC,GAAGD,KAAK,kCAAkC,CAAC;EAC7D;AACF","ignoreList":[]}
|