mirror of https://github.com/abpframework/abp.git
1 changed files with 150 additions and 0 deletions
@ -0,0 +1,150 @@ |
|||
# One Endpoint, Many AI Clients: Turning ABP Workspaces into OpenAI-Compatible Models |
|||
|
|||
ABP's AI Management module already makes it easy to define and manage AI workspaces (provider, model, API key/base URL, system prompt, permissions, MCP tools, RAG settings, and more). |
|||
With **ABP v10.2**, there is a major addition: you can now expose those workspaces through **OpenAI-compatible endpoints** under `/v1`. |
|||
|
|||
That changes the integration story in a practical way. Instead of wiring every external tool directly to a provider, you can point those tools to ABP and keep runtime decisions centralized in one place. |
|||
|
|||
In this post, we will walk through a practical setup with **AnythingLLM** and show why this pattern is useful in real projects. |
|||
|
|||
## Why This Is a Big Deal |
|||
|
|||
Many teams end up with AI configuration spread across multiple clients and services. Updating providers, rotating keys, or changing model behavior can become operationally messy. |
|||
|
|||
With ABP in front of your AI traffic: |
|||
|
|||
- Clients keep speaking the familiar OpenAI contract. |
|||
- ABP resolves the requested `model` to a workspace. |
|||
- The workspace decides which provider/model settings are actually used. |
|||
|
|||
This gives you a clean split: standardized client integration outside, governed AI configuration inside. |
|||
|
|||
## Key Concept: Workspace = Model |
|||
|
|||
OpenAI-compatible clients send a `model` value. |
|||
In ABP AI Management, that `model` maps to a **workspace name**. |
|||
|
|||
**For example:** |
|||
|
|||
- Workspace name: `SupportAgent` |
|||
- Client request model: `SupportAgent` |
|||
|
|||
When the client calls `/v1/chat/completions` with `"model": "SupportAgent"`, ABP routes the request to that workspace and applies that workspace's provider and model configuration. |
|||
|
|||
This is the main mental model to keep in mind while integrating any OpenAI-compatible tool with ABP. |
|||
|
|||
## Endpoints Exposed by ABP v10.2 |
|||
|
|||
The AI Management module exposes OpenAI-compatible REST endpoints at `/v1`. |
|||
|
|||
| Endpoint | Method | Description | |
|||
| ---------------------------- | ------ | ---------------------------------------------- | |
|||
| `/v1/chat/completions` | POST | Chat completions (streaming and non-streaming) | |
|||
| `/v1/completions` | POST | Legacy text completions | |
|||
| `/v1/models` | GET | List available models (workspaces) | |
|||
| `/v1/models/{modelId}` | GET | Get a single model (workspace) | |
|||
| `/v1/embeddings` | POST | Generate embeddings | |
|||
| `/v1/files` | GET | List files | |
|||
| `/v1/files` | POST | Upload a file | |
|||
| `/v1/files/{fileId}` | GET | Get file metadata | |
|||
| `/v1/files/{fileId}` | DELETE | Delete a file | |
|||
| `/v1/files/{fileId}/content` | GET | Download file content | |
|||
|
|||
All endpoints require `Authorization: Bearer <token>`. |
|||
|
|||
## Quick Setup with AnythingLLM |
|||
|
|||
Before configuration, ensure: |
|||
|
|||
1. AI Management is installed and running in your ABP app. |
|||
2. At least one workspace is created and **active**. |
|||
3. You have a valid bearer token for your ABP application. |
|||
|
|||
### 1) Get an access token |
|||
|
|||
Use any valid token accepted by your app. In a demo-style setup, token retrieval can look like this: |
|||
|
|||
```bash |
|||
curl -X POST http://localhost:44337/connect/token \ |
|||
-d "grant_type=password&username=admin&password=1q2w3E*&client_id=DemoApp_API&client_secret=1q2w3e*&scope=DemoApp" |
|||
``` |
|||
|
|||
Use the returned `access_token` as the API key value in your OpenAI-compatible client. |
|||
|
|||
### 2) Configure AnythingLLM as Generic OpenAI |
|||
|
|||
In **AnythingLLM -> Settings -> LLM Preference**, select **Generic OpenAI** and set: |
|||
|
|||
| Setting | Value | |
|||
| -------------------- | --------------------------- | |
|||
| Base URL | `http://localhost:44337/v1` | |
|||
| API Key | `<access_token>` | |
|||
| Chat Model Selection | Select an active workspace | |
|||
|
|||
In most OpenAI-compatible UIs, the app adds `Bearer` automatically, so the API key field should contain only the raw token string. |
|||
|
|||
### 3) Optional: configure embeddings |
|||
|
|||
If you want RAG flows through ABP, go to **Settings -> Embedding Preference** and use the same Base URL/API key values. |
|||
Then select a workspace that has embedder settings configured. |
|||
|
|||
## Validate the Flow |
|||
|
|||
### List models (workspaces) |
|||
|
|||
```bash |
|||
curl http://localhost:44337/v1/models \ |
|||
-H "Authorization: Bearer <your-token>" |
|||
``` |
|||
|
|||
### Chat completion |
|||
|
|||
```bash |
|||
curl -X POST http://localhost:44337/v1/chat/completions \ |
|||
-H "Authorization: Bearer <your-token>" \ |
|||
-H "Content-Type: application/json" \ |
|||
-d '{ |
|||
"model": "MyWorkspace", |
|||
"messages": [ |
|||
{ "role": "user", "content": "Hello from ABP OpenAI-compatible endpoint!" } |
|||
] |
|||
}' |
|||
``` |
|||
|
|||
### Optional SDK check (Python) |
|||
|
|||
```python |
|||
from openai import OpenAI |
|||
|
|||
client = OpenAI( |
|||
base_url="http://localhost:44337/v1", |
|||
api_key="<your-token>" |
|||
) |
|||
|
|||
response = client.chat.completions.create( |
|||
model="MyWorkspace", |
|||
messages=[{"role": "user", "content": "Hello!"}] |
|||
) |
|||
|
|||
print(response.choices[0].message.content) |
|||
``` |
|||
|
|||
## Where This Fits in Real Projects |
|||
|
|||
This approach is a strong fit when you want to: |
|||
|
|||
- Keep ABP as the central control plane for AI workspaces. |
|||
- Let client tools integrate through a standard OpenAI contract. |
|||
- Switch providers or model settings without rewriting client-side integration. |
|||
|
|||
If your team uses multiple AI clients, this pattern keeps integration simple while preserving control where it matters. |
|||
|
|||
## See It in Action: AnythingLLM + ABP |
|||
|
|||
The demo below shows the full flow: connecting an OpenAI-compatible client to ABP, selecting a workspace-backed model, and sending a successful chat request through `/v1`. |
|||
|
|||
 |
|||
|
|||
## Learn More |
|||
|
|||
- [ABP AI Management Documentation](https://abp.io/docs/10.2/modules/ai-management) |
|||
Loading…
Reference in new issue