--- title: Responses.js emoji: ๐Ÿ˜ป colorFrom: red colorTo: red sdk: docker pinned: false license: mit short_description: Check out https://github.com/huggingface/responses.js app_port: 3000 --- # responses.js A lightweight Express.js server that implements OpenAI's Responses API, built on top of Chat Completions and powered by Hugging Face Inference Providers. ## โœจ Features - **ResponsesAPI**: Partial implementation of [OpenAI's Responses API](https://platform.openai.com/docs/api-reference/responses), on top of Chat Completion API - **Inference Providers**: Powered by Hugging Face Inference Providers - **Streaming Support**: Support for streamed responses - **Structured Output**: Support for structured data responses (e.g. jsonschema) - **Function Calling**: Tool and function calling capabilities - **Multi-modal Input**: Text and image input support - **Demo UI**: Interactive web interface for testing Not implemented: remote function calling, MCP server, file upload, stateful API, etc. ## ๐Ÿš€ Quick Start ### Prerequisites - Node.js (v18 or higher) - pnpm (recommended) or npm - an Hugging Face token with inference permissions. Create one from your [user settings](https://huggingface.co/settings/tokens). ### Installation & Setup ```bash # Clone the repository git clone https://github.com/huggingface/responses.js.git cd responses.js # Install dependencies pnpm install # Start the development server pnpm dev ``` The server will be available at `http://localhost:3000`. ### Running Examples Explore the various capabilities with our example scripts located in the [./examples](./examples) folder: ```bash # Basic text input pnpm run example text # Multi-turn conversations pnpm run example multi_turn # Text + image input pnpm run example image # Streaming responses pnpm run example streaming # Structured output pnpm run example structured_output pnpm run example structured_output_streaming # Function calling pnpm run example function pnpm run example function_streaming ``` ## ๐Ÿงช Testing ### Important Notes - Server must be running (`pnpm dev`) on `http://localhost:3000` - `HF_TOKEN` environment variable set with your Hugging Face token - Tests use real inference providers and will incur costs - Tests are not run in CI due to billing requirements ### Running Tests ```bash # Run all tests pnpm test # Run specific test patterns pnpm test --grep "streaming" pnpm test --grep "function" pnpm test --grep "structured" ``` ### Interactive Demo UI Experience the API through our interactive web interface, adapted from the [openai-responses-starter-app](https://github.com/openai/openai-responses-starter-app). [![Demo Video](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/responses.js/demo_mini.png)](https://youtu.be/F-tAUnW-nd0) #### Setup 1. Create a configuration file: ```bash # Create demo/.env cat > demo/.env << EOF MODEL="cohere@CohereLabs/c4ai-command-a-03-2025" OPENAI_BASE_URL=http://localhost:3000/v1 OPENAI_API_KEY=${HF_TOKEN:-} EOF ``` 2. Install demo dependencies: ```bash pnpm demo:install ``` 3. Launch the demo: ```bash pnpm demo:dev ``` The demo will be available at `http://localhost:3001`. ## ๐Ÿณ Running with Docker You can run the server in a production-ready container using Docker. ### Build the Docker image ```bash docker build -t responses.js . ``` ### Run the server ```bash docker run -p 3000:3000 responses.js ``` The server will be available at `http://localhost:3000`. ## ๐Ÿ“ Project Structure ``` responses.js/ โ”œโ”€โ”€ demo/ # Interactive chat UI demo โ”œโ”€โ”€ examples/ # Example scripts using openai-node client โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ index.ts # Application entry point โ”‚ โ”œโ”€โ”€ server.ts # Express app configuration and route definitions โ”‚ โ”œโ”€โ”€ routes/ # API route implementations โ”‚ โ”œโ”€โ”€ middleware/ # Middleware (validation, logging, etc.) โ”‚ โ””โ”€โ”€ schemas/ # Zod validation schemas โ”œโ”€โ”€ scripts/ # Utility and build scripts โ”œโ”€โ”€ package.json # Package configuration and dependencies โ””โ”€โ”€ README.md # This file ``` ## ๐Ÿ›ฃ๏ธ Done / TODOs > **Note**: This project is in active development. The roadmap below represents our current priorities and may evolve. Do not take anything for granted. - [x] OpenAI types integration for consistent output - [x] Streaming mode support - [x] Structured output capabilities - [x] Function calling implementation - [x] Repository migration to dedicated responses.js repo - [x] Basic development tooling setup - [x] Demo application with comprehensive instructions - [x] Multi-turn conversation fixes for text messages + tool calls - [x] Correctly return "usage" field - [x] MCP support (non-streaming) - [ ] MCP support (streaming) - [ ] Tools execution (web search, file search, image generation, code interpreter) - [ ] Background mode support - [ ] Additional API routes (GET, DELETE, CANCEL, LIST responses) - [ ] Reasoning capabilities ## ๐Ÿค Contributing We welcome contributions! Please feel free to submit issues, feature requests, or pull requests. ## ๐Ÿ“„ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## ๐Ÿ™ Acknowledgments - Based on OpenAI's [Responses API specification](https://platform.openai.com/docs/api-reference/responses) - Built on top of [OpenAI's nodejs client](https://github.com/openai/openai-node) - Demo UI adapted from [openai-responses-starter-app](https://github.com/openai/openai-responses-starter-app) - Built on top of [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers/index)