roadz commited on
Commit
b5cf840
·
verified ·
1 Parent(s): 5ffa30f

Upload 2 files

Browse files
Files changed (2) hide show
  1. dialogue/agents.py +92 -0
  2. dialogue/manager.py +54 -0
dialogue/agents.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dataclasses import dataclass, field
2
+ from typing import List, Dict
3
+ import anthropic
4
+ import aiohttp
5
+ import json
6
+ from datetime import datetime
7
+ import os
8
+
9
+ @dataclass
10
+ class Message:
11
+ content: str
12
+ timestamp: datetime = field(default_factory=datetime.now)
13
+ metadata: Dict = field(default_factory=dict)
14
+
15
+ def to_dict(self):
16
+ return {
17
+ 'content': self.content,
18
+ 'timestamp': self.timestamp.isoformat(),
19
+ 'metadata': self.metadata
20
+ }
21
+
22
+ class BaseAgent:
23
+ def __init__(self, name: str, system_prompt: str):
24
+ self.name = name
25
+ self.system_prompt = system_prompt
26
+ self.messages: List[Message] = []
27
+
28
+ def add_message(self, message: Message):
29
+ self.messages.append(message)
30
+
31
+ def get_context(self, context_depth: int = 3) -> List[Dict]:
32
+ recent_messages = self.messages[-context_depth:] if len(self.messages) > context_depth else self.messages
33
+ return [{"role": "assistant" if i % 2 == 0 else "user",
34
+ "content": msg.content}
35
+ for i, msg in enumerate(recent_messages)]
36
+
37
+ class ClaudeAgent(BaseAgent):
38
+ def __init__(self, name: str, system_prompt: str):
39
+ super().__init__(name, system_prompt)
40
+ self.client = anthropic.Client(api_key=os.getenv("ANTHROPIC_API_KEY"))
41
+
42
+ async def generate_response(self, prompt: str) -> str:
43
+ messages = self.get_context(context_depth=3)
44
+ messages.append({"role": "user", "content": prompt})
45
+
46
+ try:
47
+ response = self.client.messages.create(
48
+ model="claude-3-5-sonnet-20241022",
49
+ max_tokens=1000,
50
+ system=self.system_prompt,
51
+ messages=messages
52
+ )
53
+ return response.content[0].text
54
+ except Exception as e:
55
+ return f"Ошибка API Claude: {str(e)}"
56
+
57
+ class GrokAgent(BaseAgent):
58
+ def __init__(self, name: str, system_prompt: str):
59
+ super().__init__(name, system_prompt)
60
+ self.api_key = os.getenv("XAI_API_KEY")
61
+ self.api_url = "https://api.x.ai/v1/chat/completions"
62
+
63
+ async def generate_response(self, prompt: str) -> str:
64
+ messages = self.get_context(context_depth=3)
65
+ messages.append({"role": "user", "content": prompt})
66
+
67
+ headers = {
68
+ "Authorization": f"Bearer {self.api_key}",
69
+ "Content-Type": "application/json"
70
+ }
71
+
72
+ payload = {
73
+ "messages": messages,
74
+ "model": "grok-beta",
75
+ "stream": False,
76
+ "temperature": 1.0
77
+ }
78
+
79
+ try:
80
+ async with aiohttp.ClientSession() as session:
81
+ async with session.post(
82
+ self.api_url,
83
+ headers=headers,
84
+ json=payload
85
+ ) as response:
86
+ if response.status == 200:
87
+ data = await response.json()
88
+ return data['choices'][0]['message']['content']
89
+ else:
90
+ return f"Ошибка API Grok: {response.status}"
91
+ except Exception as e:
92
+ return f"Ошибка при обращении к API Grok: {str(e)}"
dialogue/manager.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List
2
+ from datetime import datetime
3
+ from .agents import ClaudeAgent, GrokAgent, Message
4
+
5
+ class DialogueManager:
6
+ def __init__(self, topic: str, iterations: int = 3):
7
+ self.topic = topic
8
+ self.iterations = min(iterations, 5) # Максимум 5 итераций
9
+ self.claude = ClaudeAgent(
10
+ "Claude",
11
+ """Ты участвуешь в творческом диалоге на русском языке.
12
+ Будь открытым, креативным и любознательным.
13
+ Не стесняйся проявлять инициативу и высказывать новые идеи."""
14
+ )
15
+ self.grok = GrokAgent(
16
+ "Grok",
17
+ """Ты участвуешь в экспериментальном диалоге на русском языке.
18
+ Фокусируйся на генерации новых идей и необычных перспектив."""
19
+ )
20
+
21
+ async def optimize_prompt(self, prompt: str) -> str:
22
+ """Оптимизирует начальный промпт с помощью Claude"""
23
+ system_prompt = """
24
+ Помоги структурировать тему для обсуждения между двумя AI.
25
+
26
+ Правила:
27
+ 1. Максимум 2-3 ключевых вопроса
28
+ 2. Никаких списков и перечислений
29
+ 3. Чёткая фокусировка на главной проблеме
30
+ 4. Избегать абстрактных формулировок
31
+ 5. Ориентация на конкретное обсуждение
32
+
33
+ Структура ответа:
34
+ - Краткая суть проблемы (1-2 предложения)
35
+ - 2-3 ключевых вопроса в форме обычного текста
36
+ - Общий объем не более 250 слов
37
+
38
+ Сформулируй тему как краткий, но содержательный запрос для дискуссии.
39
+ Используй живой, разговорный стиль, избегая формальных конструкций.
40
+ """
41
+
42
+ prompt_for_optimization = f"""
43
+ Исходная тема: {prompt}
44
+
45
+ Пожалуйста, оптимизируй эту тему согласно указанным правилам.
46
+ """
47
+
48
+ try:
49
+ optimizer = ClaudeAgent("Optimizer", system_prompt)
50
+ optimized = await optimizer.generate_response(prompt_for_optimization)
51
+ return optimized
52
+ except Exception as e:
53
+ print(f"Error optimizing prompt: {e}")
54
+ return prompt