# mcp/chat.py """ Chat client for aigpt CLI """ import sys import json import requests from datetime import datetime from config import init_directories, load_config, MEMORY_DIR def save_conversation(user_message, ai_response): """会話をファイルに保存""" init_directories() conversation = { "timestamp": datetime.now().isoformat(), "user": user_message, "ai": ai_response } # 日付ごとのファイルに保存 today = datetime.now().strftime("%Y-%m-%d") chat_file = MEMORY_DIR / f"chat_{today}.jsonl" with open(chat_file, "a", encoding="utf-8") as f: f.write(json.dumps(conversation, ensure_ascii=False) + "\n") def chat_with_ollama(config, message): """Ollamaとチャット""" try: payload = { "model": config["model"], "prompt": message, "stream": False } response = requests.post(config["url"], json=payload, timeout=30) response.raise_for_status() result = response.json() return result.get("response", "No response received") except requests.exceptions.RequestException as e: return f"Error connecting to Ollama: {e}" except Exception as e: return f"Error: {e}" def chat_with_openai(config, message): """OpenAIとチャット""" try: headers = { "Authorization": f"Bearer {config['api_key']}", "Content-Type": "application/json" } payload = { "model": config["model"], "messages": [ {"role": "user", "content": message} ] } response = requests.post(config["url"], json=payload, headers=headers, timeout=30) response.raise_for_status() result = response.json() return result["choices"][0]["message"]["content"] except requests.exceptions.RequestException as e: return f"Error connecting to OpenAI: {e}" except Exception as e: return f"Error: {e}" def chat_with_mcp(config, message): """MCPサーバーとチャット""" try: payload = { "message": message, "model": config["model"] } response = requests.post(config["url"], json=payload, timeout=30) response.raise_for_status() result = response.json() return result.get("response", "No response received") except requests.exceptions.RequestException as e: return f"Error connecting to MCP server: {e}" except Exception as e: return f"Error: {e}" def main(): if len(sys.argv) != 2: print("Usage: python chat.py ", file=sys.stderr) sys.exit(1) message = sys.argv[1] try: config = load_config() print(f"🤖 Using {config['provider']} with model {config['model']}", file=sys.stderr) # プロバイダに応じてチャット実行 if config["provider"] == "ollama": response = chat_with_ollama(config, message) elif config["provider"] == "openai": response = chat_with_openai(config, message) elif config["provider"] == "mcp": response = chat_with_mcp(config, message) else: response = f"Unsupported provider: {config['provider']}" # 会話を保存 save_conversation(message, response) # レスポンスを出力 print(response) except Exception as e: print(f"❌ Error: {e}", file=sys.stderr) sys.exit(1) if __name__ == "__main__": main()