roadz's picture
Upload 2 files
b5cf840 verified
raw
history blame
3.24 kB
from dataclasses import dataclass, field
from typing import List, Dict
import anthropic
import aiohttp
import json
from datetime import datetime
import os
@dataclass
class Message:
content: str
timestamp: datetime = field(default_factory=datetime.now)
metadata: Dict = field(default_factory=dict)
def to_dict(self):
return {
'content': self.content,
'timestamp': self.timestamp.isoformat(),
'metadata': self.metadata
}
class BaseAgent:
def __init__(self, name: str, system_prompt: str):
self.name = name
self.system_prompt = system_prompt
self.messages: List[Message] = []
def add_message(self, message: Message):
self.messages.append(message)
def get_context(self, context_depth: int = 3) -> List[Dict]:
recent_messages = self.messages[-context_depth:] if len(self.messages) > context_depth else self.messages
return [{"role": "assistant" if i % 2 == 0 else "user",
"content": msg.content}
for i, msg in enumerate(recent_messages)]
class ClaudeAgent(BaseAgent):
def __init__(self, name: str, system_prompt: str):
super().__init__(name, system_prompt)
self.client = anthropic.Client(api_key=os.getenv("ANTHROPIC_API_KEY"))
async def generate_response(self, prompt: str) -> str:
messages = self.get_context(context_depth=3)
messages.append({"role": "user", "content": prompt})
try:
response = self.client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
system=self.system_prompt,
messages=messages
)
return response.content[0].text
except Exception as e:
return f"Ошибка API Claude: {str(e)}"
class GrokAgent(BaseAgent):
def __init__(self, name: str, system_prompt: str):
super().__init__(name, system_prompt)
self.api_key = os.getenv("XAI_API_KEY")
self.api_url = "https://api.x.ai/v1/chat/completions"
async def generate_response(self, prompt: str) -> str:
messages = self.get_context(context_depth=3)
messages.append({"role": "user", "content": prompt})
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"messages": messages,
"model": "grok-beta",
"stream": False,
"temperature": 1.0
}
try:
async with aiohttp.ClientSession() as session:
async with session.post(
self.api_url,
headers=headers,
json=payload
) as response:
if response.status == 200:
data = await response.json()
return data['choices'][0]['message']['content']
else:
return f"Ошибка API Grok: {response.status}"
except Exception as e:
return f"Ошибка при обращении к API Grok: {str(e)}"