{"_id":"@55387.ai/uniapi-core","name":"@55387.ai/uniapi-core","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.8":{"name":"@55387.ai/uniapi-core","version":"0.1.8","description":"Core library for One API - unified AI provider adapters with OpenAI-compatible interface","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"keywords":["ai","openai","anthropic","claude","gemini","deepseek","qwen","glm","kimi","llm","api","chat","gpt","unified-api"],"author":{"name":"One API Contributors"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/one-api/one.git","directory":"packages/core"},"homepage":"https://github.com/one-api/one#readme","bugs":{"url":"https://github.com/one-api/one/issues"},"publishConfig":{"access":"public"},"sideEffects":false,"dependencies":{"@anthropic-ai/sdk":"^0.30.0","@google/genai":"^1.0.0","openai":"^4.70.0","zod":"^4.2.1"},"devDependencies":{"@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","typescript":"^5.3.0","vitest":"^1.0.0"},"peerDependencies":{"typescript":">=5.0.0"},"peerDependenciesMeta":{"typescript":{"optional":true}},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","clean":"rm -rf dist"},"_id":"@55387.ai/uniapi-core@0.1.8","_integrity":"sha512-O6gF+ogxIbGXRmNmcntPEpb6T77dD7U9lRwyw9eCJhMsUIDOeZZB7NmxXT/o0jCIvbTIj84AZn2Ojoe2sF2Xlg==","_resolved":"/private/var/folders/4c/_zgqmwls3fdc_qv864lnqcbm0000gn/T/6e7e14229d6c7dcd7b3ba9e3708847af/55387.ai-uniapi-core-0.1.8.tgz","_from":"file:55387.ai-uniapi-core-0.1.8.tgz","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-O6gF+ogxIbGXRmNmcntPEpb6T77dD7U9lRwyw9eCJhMsUIDOeZZB7NmxXT/o0jCIvbTIj84AZn2Ojoe2sF2Xlg==","shasum":"6317327ffbf91e920d99da3143f9b310e6fc99ab","tarball":"https://registry.npmjs.org/@55387.ai/uniapi-core/-/uniapi-core-0.1.8.tgz","fileCount":91,"unpackedSize":240922,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEIfDwuj5DH8X3UqbUP8XQuQbltDuw9bBANhMoSF8rCpAiEA9ObOSWOzPWcfSOQ7+6zBUQaofFVY3O7gxX5R31ct+xQ="}]},"_npmUser":{"name":"rosslin","email":"atai829525@gmail.com"},"directories":{},"maintainers":[{"name":"rosslin","email":"atai829525@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/uniapi-core_0.1.8_1766540851676_0.7888905661575913"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-24T01:47:31.573Z","0.1.8":"2025-12-24T01:47:31.842Z","modified":"2025-12-24T01:47:32.165Z"},"maintainers":[{"name":"rosslin","email":"atai829525@gmail.com"}],"description":"Core library for One API - unified AI provider adapters with OpenAI-compatible interface","homepage":"https://github.com/one-api/one#readme","keywords":["ai","openai","anthropic","claude","gemini","deepseek","qwen","glm","kimi","llm","api","chat","gpt","unified-api"],"repository":{"type":"git","url":"git+https://github.com/one-api/one.git","directory":"packages/core"},"author":{"name":"One API Contributors"},"bugs":{"url":"https://github.com/one-api/one/issues"},"license":"MIT","readme":"# @55387.ai/uniapi-core\n\nCore library for One API - Unified AI provider adapters with OpenAI-compatible interface.\n\n## Installation\n\n```bash\nnpm install @55387.ai/uniapi-core\n# or\npnpm add @55387.ai/uniapi-core\n# or\nyarn add @55387.ai/uniapi-core\n```\n\n## Overview\n\n`@55387.ai/uniapi-core` provides the foundation for building AI API integrations. It includes:\n\n- **Provider Adapters**: Standardized interfaces for different AI providers\n- **Model Routing**: Automatic routing based on model names\n- **Configuration Management**: Environment-based config loading\n- **Error Handling**: Consistent error types and handling\n- **Validation**: Request/response validation\n- **Logging**: Structured logging utilities\n\n## Quick Start\n\n```typescript\nimport { ModelRouter, ConfigLoader } from '@55387.ai/uniapi-core';\n\n// Load configuration\nconst config = new ConfigLoader().load();\n\n// Create router\nconst router = new ModelRouter(config);\n\n// Get provider for a model\nconst provider = router.getProvider('gpt-4');\n\n// Make a request\nconst response = await provider.chatCompletion({\n  model: 'gpt-4',\n  messages: [{ role: 'user', content: 'Hello!' }],\n});\n```\n\n## Architecture\n\n### Provider Pattern\n\nAll AI providers implement the `BaseProvider` interface:\n\n```typescript\nabstract class BaseProvider {\n  abstract chatCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;\n  abstract chatCompletionStream(request: ChatCompletionRequest): AsyncIterable<ChatCompletionChunk>;\n  abstract createEmbedding(request: EmbeddingRequest): Promise<EmbeddingResponse>;\n}\n```\n\n### Built-in Providers\n\n| Provider | Class | Supported Models |\n|----------|-------|------------------|\n| OpenAI | `OpenAIProvider` | `gpt-*`, `o1*` |\n| Anthropic | `AnthropicProvider` | `claude-*` |\n| Google Gemini | `GeminiProvider` | `gemini-*` |\n| DeepSeek | `DeepSeekProvider` | `deepseek-*` |\n| 通义千问 | `QwenProvider` | `qwen*` |\n| 智谱 GLM | `GLMProvider` | `glm-*`, `codegeex-*` |\n| Kimi | `KimiProvider` | `kimi-*`, `moonshot-*` |\n\n## Adding a New Provider\n\n1. **Create Provider Class**:\n\n```typescript\nimport { BaseProvider, ChatCompletionRequest, ChatCompletionResponse } from '@55387.ai/uniapi-core';\n\nexport class MyProvider extends BaseProvider {\n  async chatCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n    // Your implementation here\n    const response = await this.callMyAPI(request);\n    return this.convertToOpenAIFormat(response);\n  }\n\n  async *chatCompletionStream(request: ChatCompletionRequest): AsyncIterable<ChatCompletionChunk> {\n    // Streaming implementation\n  }\n\n  async createEmbedding(request: EmbeddingRequest): Promise<EmbeddingResponse> {\n    // Embedding implementation\n  }\n}\n```\n\n2. **Register in Router**:\n\n```typescript\nimport { ModelRouter } from '@55387.ai/uniapi-core';\n\nconst router = new ModelRouter(config);\nrouter.registerProvider('my-provider', new MyProvider(config));\n```\n\n3. **Update Model Routing**:\n\n```typescript\n// In your configuration or router setup\nrouter.addModelMapping('my-model-*', 'my-provider');\n```\n\n## Configuration\n\n### Environment Variables\n\n```bash\n# API Keys\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nGOOGLE_GENAI_API_KEY=...\n\n# Other settings\nONE_API_KEYS=key1,key2,key3\nLOG_LEVEL=info\n```\n\n### ConfigLoader\n\n```typescript\nimport { ConfigLoader } from '@55387.ai/uniapi-core';\n\nconst config = new ConfigLoader({\n  // Custom config options\n}).load();\n\nconsole.log(config.apiKeys);\nconsole.log(config.providers.openai.apiKey);\n```\n\n## Error Handling\n\nThe library provides consistent error types:\n\n```typescript\nimport { OneAPIError, ValidationError, ProviderError } from '@55387.ai/uniapi-core';\n\ntry {\n  const response = await provider.chatCompletion(request);\n} catch (error) {\n  if (error instanceof ValidationError) {\n    console.error('Invalid request:', error.message);\n  } else if (error instanceof ProviderError) {\n    console.error('Provider error:', error.details);\n  } else if (error instanceof OneAPIError) {\n    console.error('API error:', error.statusCode, error.message);\n  }\n}\n```\n\n## Logging\n\n```typescript\nimport { Logger } from '@55387.ai/uniapi-core';\n\nconst logger = new Logger('my-component');\nlogger.info('Processing request', { model: 'gpt-4' });\nlogger.error('Request failed', { error: error.message });\n```\n\n## Validation\n\nRequest validation using Zod schemas:\n\n```typescript\nimport { validateChatCompletionRequest } from '@55387.ai/uniapi-core';\n\nconst request = { model: 'gpt-4', messages: [...] };\nconst validated = validateChatCompletionRequest(request);\n// validated is now type-safe\n```\n\n## Type Definitions\n\nThe library exports comprehensive TypeScript types:\n\n```typescript\nimport type {\n  ChatCompletionRequest,\n  ChatCompletionResponse,\n  ChatMessage,\n  ProviderConfig,\n  ModelInfo\n} from '@55387.ai/uniapi-core';\n```\n\n## Utilities\n\n### Content Conversion\n\n```typescript\nimport { convertContentToParts } from '@55387.ai/uniapi-core';\n\n// Convert OpenAI-style content to provider-specific format\nconst parts = convertContentToParts([\n  { type: 'text', text: 'Hello' },\n  { type: 'image_url', image_url: { url: '...' } }\n]);\n```\n\n### Retry Logic\n\n```typescript\nimport { withRetry } from '@55387.ai/uniapi-core';\n\nconst result = await withRetry(\n  () => provider.chatCompletion(request),\n  { maxAttempts: 3, delay: 1000 }\n);\n```\n\n## Development\n\n### Building\n\n```bash\npnpm build\n```\n\n### Testing\n\n```bash\npnpm test\n```\n\n### Adding Tests\n\n```typescript\nimport { describe, it, expect } from 'vitest';\nimport { MyProvider } from './my-provider';\n\ndescribe('MyProvider', () => {\n  it('should handle chat completion', async () => {\n    const provider = new MyProvider(config);\n    const response = await provider.chatCompletion({\n      model: 'my-model',\n      messages: [{ role: 'user', content: 'Hello' }]\n    });\n\n    expect(response.choices[0].message.content).toBeDefined();\n  });\n});\n```\n\n## License\n\nMIT","readmeFilename":"README.md","_rev":"1-ed193cb308010c35f400dd08e7598c7a"}