Skip to content

Commit 4f3eeb4

Browse files
wip
1 parent b46fb53 commit 4f3eeb4

File tree

11 files changed

+336
-13
lines changed

11 files changed

+336
-13
lines changed

docs/snippets/schemas/v3/index.schema.mdx

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,6 +1785,35 @@
17851785
],
17861786
"additionalProperties": false
17871787
},
1788+
"OpenAICompatibleLanguageModel": {
1789+
"type": "object",
1790+
"properties": {
1791+
"provider": {
1792+
"const": "openai-compatible",
1793+
"description": "OpenAI Compatible Configuration"
1794+
},
1795+
"model": {
1796+
"type": "string",
1797+
"description": "The name of the language model."
1798+
},
1799+
"displayName": {
1800+
"type": "string",
1801+
"description": "Optional display name."
1802+
},
1803+
"baseUrl": {
1804+
"type": "string",
1805+
"format": "url",
1806+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
1807+
"description": "Optional base URL."
1808+
}
1809+
},
1810+
"required": [
1811+
"provider",
1812+
"model",
1813+
"baseUrl"
1814+
],
1815+
"additionalProperties": false
1816+
},
17881817
"OpenRouterLanguageModel": {
17891818
"type": "object",
17901819
"properties": {
@@ -2528,6 +2557,35 @@
25282557
],
25292558
"additionalProperties": false
25302559
},
2560+
{
2561+
"type": "object",
2562+
"properties": {
2563+
"provider": {
2564+
"const": "openai-compatible",
2565+
"description": "OpenAI Compatible Configuration"
2566+
},
2567+
"model": {
2568+
"type": "string",
2569+
"description": "The name of the language model."
2570+
},
2571+
"displayName": {
2572+
"type": "string",
2573+
"description": "Optional display name."
2574+
},
2575+
"baseUrl": {
2576+
"type": "string",
2577+
"format": "url",
2578+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
2579+
"description": "Optional base URL."
2580+
}
2581+
},
2582+
"required": [
2583+
"provider",
2584+
"model",
2585+
"baseUrl"
2586+
],
2587+
"additionalProperties": false
2588+
},
25312589
{
25322590
"type": "object",
25332591
"properties": {

docs/snippets/schemas/v3/languageModel.schema.mdx

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,35 @@
623623
],
624624
"additionalProperties": false
625625
},
626+
"OpenAICompatibleLanguageModel": {
627+
"type": "object",
628+
"properties": {
629+
"provider": {
630+
"const": "openai-compatible",
631+
"description": "OpenAI Compatible Configuration"
632+
},
633+
"model": {
634+
"type": "string",
635+
"description": "The name of the language model."
636+
},
637+
"displayName": {
638+
"type": "string",
639+
"description": "Optional display name."
640+
},
641+
"baseUrl": {
642+
"type": "string",
643+
"format": "url",
644+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
645+
"description": "Optional base URL."
646+
}
647+
},
648+
"required": [
649+
"provider",
650+
"model",
651+
"baseUrl"
652+
],
653+
"additionalProperties": false
654+
},
626655
"OpenRouterLanguageModel": {
627656
"type": "object",
628657
"properties": {
@@ -1366,6 +1395,35 @@
13661395
],
13671396
"additionalProperties": false
13681397
},
1398+
{
1399+
"type": "object",
1400+
"properties": {
1401+
"provider": {
1402+
"const": "openai-compatible",
1403+
"description": "OpenAI Compatible Configuration"
1404+
},
1405+
"model": {
1406+
"type": "string",
1407+
"description": "The name of the language model."
1408+
},
1409+
"displayName": {
1410+
"type": "string",
1411+
"description": "Optional display name."
1412+
},
1413+
"baseUrl": {
1414+
"type": "string",
1415+
"format": "url",
1416+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
1417+
"description": "Optional base URL."
1418+
}
1419+
},
1420+
"required": [
1421+
"provider",
1422+
"model",
1423+
"baseUrl"
1424+
],
1425+
"additionalProperties": false
1426+
},
13691427
{
13701428
"type": "object",
13711429
"properties": {

packages/schemas/src/v3/index.schema.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1784,6 +1784,35 @@ const schema = {
17841784
],
17851785
"additionalProperties": false
17861786
},
1787+
"OpenAICompatibleLanguageModel": {
1788+
"type": "object",
1789+
"properties": {
1790+
"provider": {
1791+
"const": "openai-compatible",
1792+
"description": "OpenAI Compatible Configuration"
1793+
},
1794+
"model": {
1795+
"type": "string",
1796+
"description": "The name of the language model."
1797+
},
1798+
"displayName": {
1799+
"type": "string",
1800+
"description": "Optional display name."
1801+
},
1802+
"baseUrl": {
1803+
"type": "string",
1804+
"format": "url",
1805+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
1806+
"description": "Optional base URL."
1807+
}
1808+
},
1809+
"required": [
1810+
"provider",
1811+
"model",
1812+
"baseUrl"
1813+
],
1814+
"additionalProperties": false
1815+
},
17871816
"OpenRouterLanguageModel": {
17881817
"type": "object",
17891818
"properties": {
@@ -2527,6 +2556,35 @@ const schema = {
25272556
],
25282557
"additionalProperties": false
25292558
},
2559+
{
2560+
"type": "object",
2561+
"properties": {
2562+
"provider": {
2563+
"const": "openai-compatible",
2564+
"description": "OpenAI Compatible Configuration"
2565+
},
2566+
"model": {
2567+
"type": "string",
2568+
"description": "The name of the language model."
2569+
},
2570+
"displayName": {
2571+
"type": "string",
2572+
"description": "Optional display name."
2573+
},
2574+
"baseUrl": {
2575+
"type": "string",
2576+
"format": "url",
2577+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
2578+
"description": "Optional base URL."
2579+
}
2580+
},
2581+
"required": [
2582+
"provider",
2583+
"model",
2584+
"baseUrl"
2585+
],
2586+
"additionalProperties": false
2587+
},
25302588
{
25312589
"type": "object",
25322590
"properties": {

packages/schemas/src/v3/index.type.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export type LanguageModel =
2121
| GoogleVertexLanguageModel
2222
| MistralLanguageModel
2323
| OpenAILanguageModel
24+
| OpenAICompatibleLanguageModel
2425
| OpenRouterLanguageModel
2526
| XaiLanguageModel;
2627

@@ -791,6 +792,24 @@ export interface OpenAILanguageModel {
791792
*/
792793
baseUrl?: string;
793794
}
795+
export interface OpenAICompatibleLanguageModel {
796+
/**
797+
* OpenAI Compatible Configuration
798+
*/
799+
provider: "openai-compatible";
800+
/**
801+
* The name of the language model.
802+
*/
803+
model: string;
804+
/**
805+
* Optional display name.
806+
*/
807+
displayName?: string;
808+
/**
809+
* Optional base URL.
810+
*/
811+
baseUrl: string;
812+
}
794813
export interface OpenRouterLanguageModel {
795814
/**
796815
* OpenRouter Configuration

packages/schemas/src/v3/languageModel.schema.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,35 @@ const schema = {
622622
],
623623
"additionalProperties": false
624624
},
625+
"OpenAICompatibleLanguageModel": {
626+
"type": "object",
627+
"properties": {
628+
"provider": {
629+
"const": "openai-compatible",
630+
"description": "OpenAI Compatible Configuration"
631+
},
632+
"model": {
633+
"type": "string",
634+
"description": "The name of the language model."
635+
},
636+
"displayName": {
637+
"type": "string",
638+
"description": "Optional display name."
639+
},
640+
"baseUrl": {
641+
"type": "string",
642+
"format": "url",
643+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
644+
"description": "Optional base URL."
645+
}
646+
},
647+
"required": [
648+
"provider",
649+
"model",
650+
"baseUrl"
651+
],
652+
"additionalProperties": false
653+
},
625654
"OpenRouterLanguageModel": {
626655
"type": "object",
627656
"properties": {
@@ -1365,6 +1394,35 @@ const schema = {
13651394
],
13661395
"additionalProperties": false
13671396
},
1397+
{
1398+
"type": "object",
1399+
"properties": {
1400+
"provider": {
1401+
"const": "openai-compatible",
1402+
"description": "OpenAI Compatible Configuration"
1403+
},
1404+
"model": {
1405+
"type": "string",
1406+
"description": "The name of the language model."
1407+
},
1408+
"displayName": {
1409+
"type": "string",
1410+
"description": "Optional display name."
1411+
},
1412+
"baseUrl": {
1413+
"type": "string",
1414+
"format": "url",
1415+
"pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$",
1416+
"description": "Optional base URL."
1417+
}
1418+
},
1419+
"required": [
1420+
"provider",
1421+
"model",
1422+
"baseUrl"
1423+
],
1424+
"additionalProperties": false
1425+
},
13681426
{
13691427
"type": "object",
13701428
"properties": {

packages/schemas/src/v3/languageModel.type.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export type LanguageModel =
1010
| GoogleVertexLanguageModel
1111
| MistralLanguageModel
1212
| OpenAILanguageModel
13+
| OpenAICompatibleLanguageModel
1314
| OpenRouterLanguageModel
1415
| XaiLanguageModel;
1516

@@ -363,6 +364,24 @@ export interface OpenAILanguageModel {
363364
*/
364365
baseUrl?: string;
365366
}
367+
export interface OpenAICompatibleLanguageModel {
368+
/**
369+
* OpenAI Compatible Configuration
370+
*/
371+
provider: "openai-compatible";
372+
/**
373+
* The name of the language model.
374+
*/
375+
model: string;
376+
/**
377+
* Optional display name.
378+
*/
379+
displayName?: string;
380+
/**
381+
* Optional base URL.
382+
*/
383+
baseUrl: string;
384+
}
366385
export interface OpenRouterLanguageModel {
367386
/**
368387
* OpenRouter Configuration

packages/web/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"@ai-sdk/google-vertex": "3.0.0",
2121
"@ai-sdk/mistral": "2.0.0",
2222
"@ai-sdk/openai": "2.0.0",
23+
"@ai-sdk/openai-compatible": "^1.0.0",
2324
"@ai-sdk/react": "2.0.0",
2425
"@ai-sdk/xai": "2.0.0",
2526
"@auth/prisma-adapter": "^2.7.4",

packages/web/src/app/api/(server)/chat/route.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { createVertex } from '@ai-sdk/google-vertex';
1717
import { createVertexAnthropic } from '@ai-sdk/google-vertex/anthropic';
1818
import { createMistral } from '@ai-sdk/mistral';
1919
import { createOpenAI, OpenAIResponsesProviderOptions } from "@ai-sdk/openai";
20+
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
2021
import { LanguageModelV2 as AISDKLanguageModelV2 } from "@ai-sdk/provider";
2122
import { createXai } from '@ai-sdk/xai';
2223
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
@@ -444,6 +445,16 @@ const getAISDKLanguageModelAndOptions = async (config: LanguageModel, orgId: num
444445
},
445446
};
446447
}
448+
case 'openai-compatible': {
449+
const openai = createOpenAICompatible({
450+
baseURL: config.baseUrl,
451+
name: config.displayName ?? modelId,
452+
});
453+
454+
return {
455+
model: openai.chatModel(modelId),
456+
}
457+
}
447458
case 'openrouter': {
448459
const openrouter = createOpenRouter({
449460
baseURL: config.baseUrl,

0 commit comments

Comments
 (0)