ollama-code-qwen
Version:
Un assistant IA en ligne de commande utilisant Ollama et le modèle qwen2.5-coder pour aider au développement, avec des capacités MCP améliorées et détection d'intentions en français et anglais
157 lines (147 loc) • 4.16 kB
JavaScript
import Conf from 'conf';
import os from 'os';
import path from 'path';
import { qwenCoderConfig } from '../models/qwen-coder.js';
/**
* Gère la configuration de l'application
*/
export class Config {
constructor() {
// Définir le schéma de configuration
this.schema = {
defaultModel: {
type: 'string',
default: 'qwen2.5-coder:14b'
},
defaultSystemPrompt: {
type: 'string',
default: 'You are Ollama Code, an advanced AI coding assistant designed to help with programming tasks. You excel at explaining code, debugging issues, and generating new code based on specifications. Be concise yet thorough, and always try to provide working examples. When analyzing code or projects, focus on the most important aspects first.'
},
ollamaHost: {
type: 'string',
default: 'http://192.168.1.16:11434'
},
maxTokens: {
type: 'number',
default: 4096
},
temperature: {
type: 'number',
default: 0.5,
minimum: 0,
maximum: 1
},
maxContextSize: {
type: 'number',
default: 100000,
minimum: 1000
},
smartContextPrioritization: {
type: 'boolean',
default: true
},
ignoreDirs: {
type: 'array',
items: {
type: 'string'
},
default: ['.git', 'node_modules', 'venv', '.venv', '__pycache__', 'dist', 'build']
},
ignorePatterns: {
type: 'array',
items: {
type: 'string'
},
default: ['*.pyc', '*.pyo', '*.mo', '*.db', '*.css.map', '*.egg-info', '*.egg', '*.DS_Store', '*.git*']
},
enableStreaming: {
type: 'boolean',
default: true
},
enableCodeExecution: {
type: 'boolean',
default: true
},
codeExecutionTimeout: {
type: 'number',
default: 10000
},
enableCache: {
type: 'boolean',
default: true
},
cacheTTL: {
type: 'number',
default: 3600000 // 1 heure en ms
}
};
// Créer l'instance de configuration
this.conf = new Conf({
projectName: 'ollama-code',
schema: this.schema,
configName: 'config',
projectSuffix: '',
cwd: path.join(os.homedir(), '.config', 'ollama-code')
});
// S'assurer que les valeurs par défaut sont définies
this._ensureDefaults(this.schema);
}
/**
* S'assure que les valeurs par défaut sont définies pour toutes les clés
* @param {Object} schema - Schéma de configuration
*/
_ensureDefaults(schema) {
for (const [key, value] of Object.entries(schema)) {
if (!this.conf.has(key) && value.default !== undefined) {
this.conf.set(key, value.default);
}
}
}
/**
* Récupère une valeur de configuration
* @param {string} key - Clé de configuration
* @returns {any} - Valeur de configuration
*/
get(key) {
return this.conf.get(key);
}
/**
* Définit une valeur de configuration
* @param {string} key - Clé de configuration
* @param {any} value - Valeur à définir
*/
set(key, value) {
this.conf.set(key, value);
}
/**
* Récupère toutes les configurations
* @returns {Object} - Objet de configuration
*/
getAll() {
return this.conf.store;
}
/**
* Réinitialise la configuration aux valeurs par défaut
*/
reset() {
this.conf.clear();
this._ensureDefaults(this.schema);
}
/**
* Charge la configuration spécifique à un modèle
* @param {string} modelName - Nom du modèle
* @returns {Object} - Configuration du modèle
*/
getModelConfig(modelName) {
if (modelName === 'qwen2.5-coder:14b') {
return qwenCoderConfig;
}
// Configuration par défaut pour les autres modèles
return {
temperature: this.get('temperature') || 0.7,
maxTokens: this.get('maxTokens') || 2048,
systemPromptIntro: `Tu es un assistant IA de développement de logiciels.`,
enableStreamingByDefault: this.get('enableStreaming') !== false
};
}
}