UNPKG

@nyrra/foundry-ai

Version:

Thin Palantir Foundry provider adapters and model catalog for the Vercel AI SDK.

115 lines (81 loc) 4.9 kB
# Usage Guide ## What this package is for `@nyrra/foundry-ai` is for applications that want to use the AI SDK with Palantir Foundry's provider-compatible LLM proxy endpoints instead of calling public provider APIs directly. Typical use cases: - local development against a Foundry enrollment - deployed server workloads that should stay on secure/private Foundry endpoints - applications that want Foundry governance, rate limiting, attribution, and usage tracking while keeping AI SDK application code ## What is verified today - env-based server setup with `FOUNDRY_URL` and `FOUNDRY_TOKEN` - OpenAI, Anthropic, and Google language-model entrypoints from this package - OpenAI `text-embedding-3-small` and `text-embedding-3-large` embeddings - application-level routing with AI SDK `createProviderRegistry` ## What is not yet verified - Palantir TSv1 standalone functions - Palantir TSv2 standalone functions - `@osdk/client` or `PlatformClient` fetch integration with this package - browser/client-side usage Palantir's docs show the same proxy family used from OSDK and in-platform helpers, but this package should not claim support for those runtimes until it has been validated there. ## Required configuration | Variable | Required | Purpose | |---|---|---| | `FOUNDRY_URL` | yes | Foundry enrollment base URL | | `FOUNDRY_TOKEN` | yes | bearer token for the proxy endpoints | | `FOUNDRY_ATTRIBUTION_RID` | no | usage attribution RID header | | `FOUNDRY_TRACE_PARENT` | no | W3C traceparent value for Foundry observability | | `FOUNDRY_TRACE_STATE` | no | W3C tracestate value for Foundry observability | Palantir's [LLM-provider compatible APIs documentation](https://www.palantir.com/docs/foundry/aip/llm-provider-compatible-apis) documents these trace-context headers and notes that third-party OAuth2 applications need the `api:use-language-models-execute` scope. ## Minimal env-based setup ```ts import { loadFoundryConfig } from '@nyrra/foundry-ai'; import { createFoundryOpenAI } from '@nyrra/foundry-ai/openai'; import { generateText } from 'ai'; const config = loadFoundryConfig(); const openai = createFoundryOpenAI(config); const result = await generateText({ model: openai('gpt-5-mini'), prompt: 'Summarize why Foundry model aliases are useful.', }); ``` ## OpenAI embeddings Use the same provider instance with AI SDK `embed` or `embedMany`. The friendly aliases are typed convenience constants, and the plain model string is sent as-is to the Foundry embeddings proxy rather than being resolved to a Foundry RID. ```ts import { loadFoundryConfig } from '@nyrra/foundry-ai'; import { createFoundryOpenAI } from '@nyrra/foundry-ai/openai'; import { embed, embedMany } from 'ai'; const openai = createFoundryOpenAI(loadFoundryConfig()); const model = openai.embeddingModel('text-embedding-3-small'); const { embedding } = await embed({ model, value: 'Foundry-governed embedding input', }); const { embeddings } = await embedMany({ model, values: ['first input', 'second input'], }); ``` ## Local dev and deployed server guidance - In local development, provide `FOUNDRY_URL` and a valid Foundry token from your normal developer workflow, for example through Developer Console or another approved token source. - In deployed server runtimes, inject the same values as secrets. Do not expose Foundry tokens to client-side code. - If your runtime can already surface a Foundry token, base URL, and fetch implementation, treat that as an adaptation opportunity rather than already-verified support. ## Application-level registry composition The package intentionally does not export a registry helper. Compose one in application code: ```ts import { loadFoundryConfig } from '@nyrra/foundry-ai'; import { createFoundryAnthropic } from '@nyrra/foundry-ai/anthropic'; import { createFoundryOpenAI } from '@nyrra/foundry-ai/openai'; import { createProviderRegistry } from 'ai'; const config = loadFoundryConfig(); export const registry = createProviderRegistry({ anthropic: createFoundryAnthropic(config), openai: createFoundryOpenAI(config), }); ``` ## Repo examples - [Examples overview with base vs advanced split](https://github.com/shpitdev/foundry-ai/blob/main/examples/README.md) - [Published base examples](https://github.com/shpitdev/foundry-ai/tree/main/packages/foundry-ai/skills/foundry-ai-provider/references/examples) ## Relevant Palantir docs - [LLM-provider compatible APIs](https://www.palantir.com/docs/foundry/aip/llm-provider-compatible-apis/) - [OpenAI Responses proxy reference](https://www.palantir.com/docs/foundry/api/v2/llm-apis/models/openai-responses-proxy) - [OpenAI Embeddings proxy reference](https://www.palantir.com/docs/foundry/api/v2/llm-apis/models/openai-embeddings-proxy) - [Anthropic Messages proxy reference](https://www.palantir.com/docs/foundry/api/v2/llm-apis/models/anthropic-messages-proxy)