Skip to content

Commit c471b30

Browse files
authored
Merge pull request #13 from Taozizz/master
feat: mock anthropic api
2 parents edee7f5 + b67ef1e commit c471b30

File tree

8 files changed

+1488
-950
lines changed

8 files changed

+1488
-950
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { Request, Response } from 'express';
2+
import {
3+
getModels,
4+
createMessage,
5+
createMessageStream
6+
} from '../services/anthropicService';
7+
import { MessagesRequest } from '../types/anthropic';
8+
9+
/**
10+
* Get model list
11+
*
12+
*/
13+
export function handleGetModels(req: Request, res: Response) {
14+
try {
15+
const models = getModels();
16+
res.json(models);
17+
} catch (error) {
18+
console.error('Get model list error:', error);
19+
res.status(500).json({
20+
error: {
21+
message: 'Internal server error',
22+
}
23+
})
24+
}
25+
}
26+
27+
/**
28+
* Handle Messages request
29+
*/
30+
export function handleMessage(req: Request, res: Response){
31+
try {
32+
const request: MessagesRequest = req.body;
33+
34+
// Basic validation
35+
if (!request.model || !request.messages || !request.max_tokens) {
36+
return res.status(400).json({
37+
error: {
38+
message: "Missing required fields: model, messages, or max_tokens",
39+
type: "invalid_request_error",
40+
},
41+
type: "error"
42+
})
43+
}
44+
45+
if(request.stream){
46+
res.setHeader('Content-Type', 'text/event-stream');
47+
res.setHeader('Cache-Control', 'no-cache');
48+
res.setHeader('Connection', 'keep-alive');
49+
res.setHeader('Access-Control-Allow-Origin', '*');
50+
res.setHeader('Access-Control-Allow-Headers', 'Cache-Control');
51+
52+
const stream = createMessageStream(request);
53+
for(const chunk of stream){
54+
res.write(chunk);
55+
}
56+
res.end();
57+
return;
58+
}
59+
60+
//Non-streaming response
61+
const response = createMessage(request);
62+
63+
//Check if it's an error response
64+
if (response.type === 'error') {
65+
return res.status(400).json(response);
66+
}
67+
68+
res.json(response);
69+
70+
71+
}catch (error) {
72+
console.error('Messages request error:', error);
73+
res.status(500).json({
74+
error:{
75+
message: 'Internal server error',
76+
type: 'api_error',
77+
code: 'internal_error'
78+
}
79+
})
80+
}
81+
}

src/data/anthropicMockData.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MockModel } from "../types";
2+
import { markdownTestCases } from './testCases';
3+
4+
export const anthropicMockModels: MockModel[] = [
5+
{
6+
id: "mock-claude-markdown",
7+
name: "Mock Claude Markdown Sample",
8+
description: "Pure text model specialized in outputting standard Markdown format, does not support function calling, focuses on content display and UI debugging",
9+
type: "markdown",
10+
testCases: markdownTestCases
11+
}
12+
]

0 commit comments

Comments
 (0)