Files
zCode-CLI-X/src/api/index.js
2026-05-05 18:25:07 +00:00

79 lines
1.8 KiB
JavaScript

import axios from 'axios';
// full-test-backup-verify
import { logger } from '../utils/logger.js';
import { checkEnv } from '../utils/env.js';
export async function initAPI() {
const env = checkEnv();
const config = {
baseUrl: env.GLM_BASE_URL || 'https://api.z.ai/api/coding/paas/v4',
apiKey: env.ZAI_API_KEY || '',
};
const client = axios.create({
baseURL: config.baseUrl,
headers: {
'Authorization': `Bearer ${config.apiKey}`,
'Content-Type': 'application/json',
},
timeout: 300000,
});
// Test connection
try {
const response = await client.get('/models', {
headers: {
'Authorization': `Bearer ${config.apiKey}`,
},
timeout: 10000
});
logger.info(`✓ Connected to Z.AI API (${response.data?.data?.length || 0} models available)`);
} catch (error) {
logger.error('✗ Failed to connect to Z.AI API');
throw error;
}
return {
config,
client,
};
}
export class ZAIProvider {
constructor(api) {
this.api = api;
}
async chat(messages, options = {}) {
const { model = 'glm-5.1', temperature = 0.7, maxTokens = 4096, stream = false } = options;
try {
const response = await this.api.client.post('/chat/completions', {
model,
messages,
temperature,
max_tokens: maxTokens,
stream,
});
if (stream) {
return response.data;
}
return response.data.choices[0].message;
} catch (error) {
logger.error('Z.AI API error:', error.response?.data || error.message);
throw error;
}
}
async complete(prompt, options = {}) {
return this.chat([{ role: 'user', content: prompt }], options);
}
}
export function createZAIProvider(api) {
return new ZAIProvider(api);
}