{"_id":"@ank1015/agents-provider-openai","_rev":"2-10c0f3ff507a3582cf3ae1e67c3958b1","name":"@ank1015/agents-provider-openai","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@ank1015/agents-provider-openai","version":"0.1.0","keywords":["agents","openai","gpt","llm","typescript"],"license":"UNLICENSED","_id":"@ank1015/agents-provider-openai@0.1.0","maintainers":[{"name":"ananya150","email":"ananyakhandelwal60@gmail.com"}],"homepage":"https://github.com/ank1015/agent#readme","bugs":{"url":"https://github.com/ank1015/agent/issues"},"dist":{"shasum":"2f67e770ce52cfb3f158347ee4d98a8c8059a357","tarball":"https://registry.npmjs.org/@ank1015/agents-provider-openai/-/agents-provider-openai-0.1.0.tgz","fileCount":19,"integrity":"sha512-2r9WNESLJWbTYk0L4XCBYxlK/vHcbE4iP15MyDZhrkTLb8rvULTjR4UL751+JM/ILl+ZSDwseX7j9hjjHsBUOg==","signatures":[{"sig":"MEYCIQCmRx8CK7hW9hMmczgWh7f/26zj45jwEOsAGTse1na6XwIhAO4rLHMCAjMNxfOrRO0MZtkeSaaP6jC0OLhGb+ZWDySl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78803},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./adapter":{"types":"./dist/adapter.d.ts","import":"./dist/adapter.js"}},"gitHead":"431be335969ec0ba4d3eb5bd8127b8f9bc2f2005","scripts":{"test":"vitest run && tsc --noEmit --strict --skipLibCheck --module NodeNext --moduleResolution NodeNext --target ES2022 --ignoreConfig tests/*.test.ts","build":"tsc -b","check":"tsc -b --pretty false","clean":"rm -rf dist ../../.tsbuildinfo/provider-openai.tsbuildinfo","prepack":"tsc -b"},"_npmUser":{"name":"ananya150","email":"ananyakhandelwal60@gmail.com"},"repository":{"url":"git+https://github.com/ank1015/agent.git","type":"git","directory":"packages/provider-openai"},"_npmVersion":"11.17.0","description":"OpenAI Responses API runtime adapter for @ank1015/agents.","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","dependencies":{"zod":"^4.4.3","openai":"^6.42.0","@ank1015/agents-contracts":"^0.1.1","@ank1015/agents-provider-openai-spec":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/agents-provider-openai_0.1.0_1782740801589_0.3347387657773213","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ank1015/agents-provider-openai","version":"0.1.1","description":"OpenAI Responses API runtime adapter for @ank1015/agents.","keywords":["agents","openai","gpt","llm","typescript"],"license":"UNLICENSED","type":"module","sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/ank1015/agent.git","directory":"packages/provider-openai"},"bugs":{"url":"https://github.com/ank1015/agent/issues"},"homepage":"https://github.com/ank1015/agent#readme","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./adapter":{"types":"./dist/adapter.d.ts","import":"./dist/adapter.js"}},"publishConfig":{"access":"public"},"scripts":{"prepack":"tsc -b","build":"tsc -b","check":"tsc -b --pretty false","test":"vitest run && tsc --noEmit --strict --skipLibCheck --module NodeNext --moduleResolution NodeNext --target ES2022 --ignoreConfig tests/*.test.ts","clean":"rm -rf dist ../../.tsbuildinfo/provider-openai.tsbuildinfo"},"dependencies":{"@ank1015/agents-contracts":"^0.1.11","@ank1015/agents-provider-openai-spec":"^0.1.1","openai":"^6.46.0","zod":"^4.4.3"},"devDependencies":{"vitest":"^4.1.9"},"gitHead":"621232a246d0d99569ea3cf02bdc37801c1c71df","_id":"@ank1015/agents-provider-openai@0.1.1","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-X46pwzjL+yBwl42RYLBlYQCTzXAvIYm47np3QHZkW1HCaMFiHsq28GW90+zWKeeGR++uLNCZngro96ax/IU/hw==","shasum":"85007c358ee374cc7d0e80bda1b093d633681b8e","tarball":"https://registry.npmjs.org/@ank1015/agents-provider-openai/-/agents-provider-openai-0.1.1.tgz","fileCount":19,"unpackedSize":79722,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEa86INE56h5PkWjIVpvl9yT7hq7vsUCJ0rd2MtnsSr3AiEAxG3tbRzrl1m210KM6aQwXYaPON7yi8eI6RvW8fqZfo8="}]},"_npmUser":{"name":"ananya150","email":"ananyakhandelwal60@gmail.com"},"directories":{},"maintainers":[{"name":"ananya150","email":"ananyakhandelwal60@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agents-provider-openai_0.1.1_1783677172773_0.4895444640182549"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-29T13:46:41.399Z","modified":"2026-07-10T09:52:53.638Z","0.1.0":"2026-06-29T13:46:41.814Z","0.1.1":"2026-07-10T09:52:52.899Z"},"bugs":{"url":"https://github.com/ank1015/agent/issues"},"license":"UNLICENSED","homepage":"https://github.com/ank1015/agent#readme","keywords":["agents","openai","gpt","llm","typescript"],"repository":{"type":"git","url":"git+https://github.com/ank1015/agent.git","directory":"packages/provider-openai"},"description":"OpenAI Responses API runtime adapter for @ank1015/agents.","maintainers":[{"name":"ananya150","email":"ananyakhandelwal60@gmail.com"}],"readme":"# @ank1015/agents-provider-openai\n\nOpenAI Responses API runtime adapter for the `@ank1015/agents` packages.\n\nThis package turns normalized `LLMRequest<\"openai\">` objects into OpenAI Responses API streaming calls and translates OpenAI stream events back into normalized assistant events and messages. It also re-exports `@ank1015/agents-provider-openai-spec` so consumers can import the provider id, config schema, model catalog, and OpenAI-specific types from one package.\n\n## Install\n\n```sh\npnpm add @ank1015/agents-provider-openai\n```\n\n## What This Package Provides\n\n- `OpenAIProviderAdapter`, a provider adapter for direct OpenAI API calls.\n- `createOpenAIProviderAdapter` helper for app wiring.\n- `createOpenAIProviderAdapterFactory` for transport/container integration.\n- `OpenAIResponsesClient` and `OpenAIProviderAdapterDeps` test/injection types.\n- Re-exports from `@ank1015/agents-provider-openai-spec`, including `OPENAI_PROVIDER`, `OPENAI_MODELS`, and config/model types.\n\n## Import Paths\n\n```ts\nimport {\n  OPENAI_PROVIDER,\n  createOpenAIProviderAdapter,\n} from '@ank1015/agents-provider-openai';\n\nimport { OpenAIProviderAdapter } from '@ank1015/agents-provider-openai/adapter';\n```\n\nThe root import is the normal application entrypoint. The `./adapter` subpath exposes the runtime adapter APIs without making internal mapping helpers public.\n\n## Basic Usage\n\n```ts\nimport { createAdapterTransport } from '@ank1015/agents-core/transport';\nimport {\n  OPENAI_PROVIDER,\n  createOpenAIProviderAdapter,\n} from '@ank1015/agents-provider-openai';\n\nconst openai = createOpenAIProviderAdapter({\n  provider: OPENAI_PROVIDER,\n  apiKey: {\n    type: 'env',\n    name: 'OPENAI_API_KEY',\n  },\n});\n\nconst transport = createAdapterTransport([openai]);\n\nconst stream = transport.stream({\n  provider: OPENAI_PROVIDER,\n  modelId: 'gpt-5.6-terra',\n  messages: [\n    {\n      role: 'user',\n      id: 'user_1',\n      timestamp: Date.now(),\n      content: [{ type: 'text', content: 'Write a short haiku about types.' }],\n    },\n  ],\n});\n\nfor await (const event of stream) {\n  if (event.type === 'text_delta') {\n    process.stdout.write(event.delta);\n  }\n}\n\nconst message = await stream.result();\n```\n\n## Configuration\n\nThe adapter accepts `OpenAIProviderConfig` from the spec package:\n\n```ts\nimport { createOpenAIProviderAdapter } from '@ank1015/agents-provider-openai';\n\nconst adapter = createOpenAIProviderAdapter({\n  provider: 'openai',\n  apiKey: {\n    type: 'env',\n    name: 'OPENAI_API_KEY',\n  },\n  baseUrl: 'https://api.openai.com/v1',\n  headers: {\n    'x-app': 'agents',\n  },\n  organization: 'org_123',\n  project: 'proj_123',\n});\n```\n\n`apiKey` is a secret reference. The adapter resolves environment references from `process.env`, or uses a direct value reference when the key comes from another secret source:\n\n```ts\ncreateOpenAIProviderAdapter({\n  provider: 'openai',\n  apiKey: {\n    type: 'value',\n    value: openAIKey,\n  },\n});\n```\n\n## Request Mapping\n\nThe adapter maps the normalized request shape into OpenAI Responses API streaming parameters:\n\n- `instructions` becomes OpenAI `instructions`.\n- Text and image user content becomes OpenAI response input content.\n- Tool result messages become function or custom tool call output items.\n- Prior OpenAI-native assistant responses are reused when available.\n- Normalized assistant text, thinking, and tool calls are converted back into OpenAI response input history.\n- Function tools become OpenAI function tools with JSON Schema parameters.\n- `strict` is preserved when a function tool sets it to `true` or `false`.\n- Custom grammar tools become OpenAI custom tools.\n\n`providerOptions` are forwarded to OpenAI after the generic fields owned by the adapter are removed. The adapter does not default `max_output_tokens`; callers can set it through `providerOptions`. GPT-5.6 callers can also select `max` reasoning effort, Pro mode, persisted reasoning context, and request-wide prompt-cache options.\n\n## Streaming Behavior\n\n`adapter.stream(request)` returns an `AssistantMessageEventStreamSource<\"openai\">`.\n\nThe stream may emit:\n\n- `start`\n- `text_start`, `text_delta`, `text_end`\n- `thinking_start`, `thinking_delta`, `thinking_end`\n- `toolcall_start`, `toolcall_delta`, `toolcall_end`\n- `done`\n- `error`\n- `aborted`\n\nSuccessful messages include the OpenAI native response, normalized assistant content, usage, cost estimates from the static model catalog, duration, and mapped stop reason. Cache reads and GPT-5.6 cache writes are reported and priced separately. For GPT-5.6 and GPT-5.5, the adapter selects whole-request long-context rates when total input exceeds 272K tokens. Failed or aborted messages preserve any normalized content that was produced before the stream ended.\n\n## Testing And Injection\n\nThe adapter accepts dependency overrides for unit tests and custom runtime containers:\n\n```ts\nimport { OpenAIProviderAdapter } from '@ank1015/agents-provider-openai/adapter';\n\nconst adapter = new OpenAIProviderAdapter(config, {\n  client: fakeOpenAIClient,\n  createMessageId: () => 'msg_test',\n  now: () => 1_700_000_000_000,\n  resolveModel: (modelId) => modelRegistry.get('openai', modelId),\n});\n```\n\nIf no client override is provided, the adapter creates an `openai` SDK client from the provider config.\n\n## Versioning\n\nThis package is currently `0.1.1`. Until `1.0.0`, adapter APIs and event mapping behavior may evolve as the surrounding agent runtime settles.\n","readmeFilename":"README.md"}