From 8908eeb841c7ec03079d9d60d733dd576cfc1beb Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 06:06:09 +0000 Subject: [PATCH] feat: add models API endpoints Co-Authored-By: Han Xiao --- src/server.ts | 41 ++++++++++++++++++++++++++++++++++++++++- src/types.ts | 7 +++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index 2e4de087..a4e9c66d 100644 --- a/src/server.ts +++ b/src/server.ts @@ -10,7 +10,8 @@ import { ChatCompletionResponse, ChatCompletionChunk, AnswerAction, - TOKEN_CATEGORIES + TOKEN_CATEGORIES, + Model } from './types'; import fs from 'fs/promises'; import path from 'path'; @@ -119,6 +120,44 @@ async function completeCurrentStreaming( } // OpenAI-compatible chat completions endpoint +// Models API endpoints +app.get('/v1/models', (async (_req: Request, res: Response) => { + const models: Model[] = [{ + id: 'jina-deepsearch-v1', + object: 'model', + created: 1686935002, + owned_by: 'jina-ai' + }]; + + res.json({ + object: 'list', + data: models + }); +}) as RequestHandler); + +app.get('/v1/models/:model', (async (req: Request, res: Response) => { + const modelId = req.params.model; + + if (modelId === 'jina-deepsearch-v1') { + res.json({ + id: 'jina-deepsearch-v1', + object: 'model', + created: 1686935002, + owned_by: 'jina-ai' + }); + } else { + res.status(404).json({ + error: { + message: `Model '${modelId}' not found`, + type: 'invalid_request_error', + param: null, + code: 'model_not_found' + } + }); + } +}) as RequestHandler); + + app.post('/v1/chat/completions', (async (req: Request, res: Response) => { // Check authentication only if secret is set if (secret) { diff --git a/src/types.ts b/src/types.ts index 9f0fec0e..ff829b3c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -159,6 +159,13 @@ export interface StreamMessage { } // OpenAI API Types +export interface Model { + id: string; + object: 'model'; + created: number; + owned_by: string; +} + export interface ChatCompletionRequest { model: string; messages: Array<{