rts-commander / tests /scripts /prompt_format_investigation.py
Luigi's picture
Organize project structure: move test scripts to tests/scripts and documentation to docs/reports
d28c36c
"""
Investigation des formats de prompt pour modèles spécialisés MCP
Test de différents formats pour identifier les problèmes de compatibilité
"""
import os
import json
import re
def test_prompt_formats():
"""Tester différents formats de prompt pour diagnostiquer les problèmes"""
print("🧪 INVESTIGATION DES FORMATS DE PROMPT MCP")
print("=" * 60)
# Formats de prompt à tester
prompt_formats = [
{
'name': 'Format actuel (simple)',
'template': '''You are an AI assistant for an RTS game using MCP (Model Context Protocol).
Available tools:
- get_game_state()
- move_units(unit_ids, target_x, target_y)
- attack_unit(attacker_ids, target_id)
- build_building(building_type, position_x, position_y)
User command: "{command}"
Respond with JSON only: {{"tool": "tool_name", "args": {{}}}}'''
},
{
'name': 'Format MCP structuré',
'template': '''<|im_start|>system
You are an MCP assistant for an RTS game. Respond with ONLY JSON.
Available tools: get_game_state, move_units, attack_unit, build_building<|im_end|>
<|im_start|>user
{command}<|im_end|>
<|im_start|>assistant
'''
},
{
'name': 'Format instruct',
'template': '''[INST] You are an MCP assistant. Respond with ONLY JSON format:
{{"tool": "tool_name", "args": {{}}}}
Command: {command} [/INST]'''
},
{
'name': 'Format code',
'template': '''// MCP assistant for RTS game
// Tools: get_game_state(), move_units(), attack_unit(), build_building()
// Command: {command}
// Response:'''
},
{
'name': 'Format minimal',
'template': '''Tools: get_game_state, move_units, attack_unit, build_building
Command: {command}
JSON:'''
}
]
test_command = "show game state"
print(f"\n📝 COMMANDE DE TEST: '{test_command}'")
print("-" * 40)
for i, format_info in enumerate(prompt_formats, 1):
prompt = format_info['template'].format(command=test_command)
print(f"\n{i}. {format_info['name']}:")
print(f" Prompt (début): {prompt[:80]}...")
# Analyser la structure du prompt
lines = prompt.count('\n') + 1
json_instructions = prompt.count('JSON')
tool_mentions = prompt.count('get_game_state') + prompt.count('move_units') + \
prompt.count('attack_unit') + prompt.count('build_building')
print(f" 📊 Analyse: {lines} lignes, {json_instructions} refs JSON, {tool_mentions} refs outils")
# Vérifier la présence d'éléments clés
has_json_example = '{"tool":' in prompt
has_tool_list = 'Available tools:' in prompt or 'Tools:' in prompt
has_system_prompt = '<|im_start|>system' in prompt or '[INST]' in prompt
print(f" ✅ Éléments: JSON exemple={has_json_example}, Liste outils={has_tool_list}, Système={has_system_prompt}")
def analyze_model_specific_requirements():
"""Analyser les besoins spécifiques des modèles MCP"""
print(f"\n🔍 BESOINS SPÉCIFIQUES DES MODÈLES MCP")
print("=" * 60)
model_requirements = {
'MCP-Instruct-v1': {
'expected_format': 'Format conversation structuré avec tokens MCP',
'common_issues': ['Besoin de tokens spécifiques', 'Format de prompt rigide'],
'recommendation': 'Utiliser <|im_start|>system/user/assistant format'
},
'MCPR L-3B-Exa': {
'expected_format': 'Format instruct avec contexte MCP',
'common_issues': ['Quantisation agressive', 'Besoin de contexte étendu'],
'recommendation': 'Augmenter n_ctx à 4096+ et utiliser Q8_0'
},
'Gemma-3n-E2B-it': {
'expected_format': 'Format technique structuré',
'common_issues': ['Quantisation extrême IQ2_XXS', 'Format incompatible'],
'recommendation': 'Utiliser version Q8_0 et format code-oriented'
}
}
for model_name, info in model_requirements.items():
print(f"\n🧩 {model_name}:")
print(f" 📋 Format attendu: {info['expected_format']}")
print(f" ⚠️ Problèmes courants: {', '.join(info['common_issues'])}")
print(f" 💡 Recommandation: {info['recommendation']}")
def main():
"""Investigation principale"""
print("🔬 INVESTIGATION DES PROBLÈMES DE FORMAT MCP")
print("=" * 70)
test_prompt_formats()
analyze_model_specific_requirements()
print(f"\n🎯 CONCLUSIONS ET SOLUTIONS:")
print("=" * 70)
print("\n1. PROBLÈMES IDENTIFIÉS:")
print(" • Format de prompt incompatible avec les modèles spécialisés")
print(" • Quantisation trop agressive (Q2_K, IQ2_XXS)")
print(" • Manque de tokens/spécificités MCP dans les prompts")
print(" • Contexte insuffisant pour modèles plus grands")
print("\n2. SOLUTIONS RECOMMANDÉES:")
print(" • Télécharger versions Q8_0 des modèles problématiques")
print(" • Utiliser formats structurés avec tokens MCP")
print(" • Augmenter n_ctx à 4096 pour modèles 3B+")
print(" • Ajouter exemples JSON complets dans les prompts")
print(f"\n3. FORMATS DE PROMPT OPTIMAUX:")
print(" • MCP-Instruct-v1: <|im_start|>system/user/assistant avec tokens")
print(" • MCPR L-3B-Exa: Format instruct avec contexte étendu")
print(" • Gemma-3n-E2B-it: Format code-oriented structuré")
print(f"\n🚀 PROCHAINES ÉTAPES:")
print(" 1. Télécharger mcp-instruct-v1.Q8_0.gguf")
print(" 2. Télécharger mcprl-3b-exa.Q8_0.gguf")
print(" 3. Télécharger google_gemma-3n-E2B-it-Q8_0.gguf")
print(" 4. Tester avec formats de prompts optimisés")
if __name__ == "__main__":
main()