venice-dev-tools
Version:
unOfficial SDK for the Venice AI API
93 lines (84 loc) • 3.08 kB
text/typescript
import { ApiEndpoint } from '../../../registry/endpoint';
import {
ChatCompletionRequest,
ChatCompletionResponse
} from '../../../../types';
import { ChatValidator } from '../../../../utils/validators/chat-validator';
/**
* API endpoint for standard (non-streaming) chat completions.
*
* This endpoint allows you to create chat completions using various models.
* It handles validation, request formatting, and response parsing.
*
* @example
* ```typescript
* const response = await venice.chat.createCompletion({
* model: 'llama-3.3-70b',
* messages: [
* { role: 'system', content: 'You are a helpful assistant.' },
* { role: 'user', content: 'What is the capital of France?' }
* ]
* });
*
* console.log(response.choices[0].message.content);
* // Output: Paris is the capital of France.
* ```
*/
export class ChatEndpoint extends ApiEndpoint {
/**
* The chat validator for validating request parameters.
*/
private validator: ChatValidator;
/**
* Creates a new ChatEndpoint instance.
*
* @param client - The Venice client instance
*/
constructor(client: any) {
super(client);
this.validator = new ChatValidator();
}
/**
* Gets the base endpoint path for chat requests.
*
* @returns The endpoint path ('/chat')
*/
getEndpointPath(): string {
return '/chat';
}
/**
* Creates a chat completion using the specified model.
*
* @param request - The chat completion request parameters
* @param request.model - The model to use (e.g., 'llama-3.3-70b')
* @param request.messages - The conversation messages array
* @param request.temperature - Controls randomness (0-1, default: 0.7)
* @param request.max_tokens - Maximum tokens to generate (default: varies by model)
* @param request.top_p - Controls diversity via nucleus sampling (0-1, default: 1)
* @param request.frequency_penalty - Penalizes repeated tokens (-2 to 2, default: 0)
* @param request.presence_penalty - Penalizes repeated topics (-2 to 2, default: 0)
* @param request.stop - Array of sequences where the model should stop generating
*
* @returns A promise resolving to the chat completion response
*
* @throws {VeniceValidationError} If the request parameters are invalid
* @throws {VeniceApiError} If the API returns an error
* @throws {VeniceNetworkError} If there's a network issue
* @throws {VeniceTimeoutError} If the request times out
*/
public async createCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {
// Validate request parameters
this.validator.validateChatCompletionRequest(request);
// Emit a request event
this.emit('request', { type: 'chat.completion', data: request });
// Make the API request
const response = await this.http.post<ChatCompletionResponse>(
this.getPath('/completions'),
request
);
// Emit a response event
this.emit('response', { type: 'chat.completion', data: response.data });
return response.data;
}
}
export default ChatEndpoint;