172 lines
6.3 KiB
Python
172 lines
6.3 KiB
Python
![]() |
import os
|
||
|
import anthropic
|
||
|
from .base_model import ModelInterface
|
||
|
from dotenv import load_dotenv
|
||
|
import sys
|
||
|
import json
|
||
|
|
||
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
|
||
|
load_dotenv()
|
||
|
|
||
|
class ClaudeModel(ModelInterface):
|
||
|
"""DeepSeek model implementation.
|
||
|
|
||
|
Attributes:
|
||
|
model (str): The name of the DeepSeek model to use.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, my_api_key=None, model_name="claude-3-5-sonnet-20241022"):
|
||
|
"""Initialize the DeepSeek model.
|
||
|
|
||
|
Args:
|
||
|
api_key (str): The API key to use for the DeepSeek model.
|
||
|
model_name (str): The name of the DeepSeek model to use.
|
||
|
|
||
|
Example:
|
||
|
>>> deepseek_model = DeepSeekModel()
|
||
|
"""
|
||
|
|
||
|
self.model_name = model_name
|
||
|
|
||
|
if my_api_key:
|
||
|
self.client = client = anthropic.Anthropic(
|
||
|
# defaults to os.environ.get("ANTHROPIC_API_KEY")
|
||
|
api_key=my_api_key,
|
||
|
)
|
||
|
else:
|
||
|
self.client = anthropic.Anthropic(
|
||
|
api_key=os.environ.get("ANTHROPIC_API_KEY")
|
||
|
)
|
||
|
|
||
|
# -------------------------------------------------------------------
|
||
|
# Helper to generate a response to a given prompt using the OpenAI API.
|
||
|
# -------------------------------------------------------------------
|
||
|
def generate_response(self, prompt, **kwargs):
|
||
|
"""Generate a response to a given prompt using the DeepSeek API.
|
||
|
|
||
|
Args:
|
||
|
prompt (str): The prompt to generate a response to.
|
||
|
**kwargs: Additional keyword arguments.
|
||
|
|
||
|
Returns:
|
||
|
str: The generated response.
|
||
|
|
||
|
Example:
|
||
|
>>> deepseek_model = DeepSeekModel()
|
||
|
>>> response = deepseek_model.generate_response("What is the weather in Tokyo?")
|
||
|
"""
|
||
|
if isinstance(prompt, str):
|
||
|
return self.generate_response_from_string(prompt, **kwargs)
|
||
|
elif isinstance(prompt, list[dict]):
|
||
|
return self.generate_response_dictionary(prompt)
|
||
|
|
||
|
# -------------------------------------------------------------------
|
||
|
# Helper to generate a response to a given prompt using a list of dictionaries
|
||
|
# -------------------------------------------------------------------
|
||
|
def generate_response_dictionary(self, prompt: list[dict]) -> str:
|
||
|
"""Generate a response to a given prompt using a list of dictionaries.
|
||
|
|
||
|
Args:
|
||
|
prompt (list[dict]): The prompt to generate a response to.
|
||
|
|
||
|
Returns:
|
||
|
str: The generated response.
|
||
|
|
||
|
Example:
|
||
|
>>> deepseek_model = DeepSeekModel()
|
||
|
>>> response = deepseek_model.generate_response_dictionary([{"role": "user", "parts": "What is the weather in Tokyo?"}])
|
||
|
"""
|
||
|
try:
|
||
|
response = self.client.messages.create( # Create a chat completion with the OpenAI API
|
||
|
model=self.model_name, # Set the model type we want to use
|
||
|
messages=prompt, # Set the prompt we want to use
|
||
|
max_tokens=1024
|
||
|
)
|
||
|
|
||
|
return response.content[0].text if isinstance(response.content, list) else response.content
|
||
|
except Exception as e:
|
||
|
return f"Error generating response: {str(e)}"
|
||
|
|
||
|
|
||
|
|
||
|
# -------------------------------------------------------------------
|
||
|
# Helper to generate a response to a given prompt using a string
|
||
|
# -------------------------------------------------------------------
|
||
|
def generate_response_from_string(self, prompt, **kwargs):
|
||
|
"""
|
||
|
Description:
|
||
|
Generate a response to a given prompt using a string.
|
||
|
|
||
|
Args:
|
||
|
prompt (str): The prompt to generate a response to.
|
||
|
**kwargs: Additional keyword arguments.
|
||
|
|
||
|
Returns:
|
||
|
str: The generated response.
|
||
|
|
||
|
Example:
|
||
|
>>> deepseek_model = DeepSeekModel()
|
||
|
>>> response = deepseek_model.generate_response_from_string("What is the weather in Tokyo?")
|
||
|
"""
|
||
|
# Extract personality and style from kwargs, or use defaults from agent_template
|
||
|
if kwargs:
|
||
|
if "personality" in kwargs:
|
||
|
personality = kwargs.get("personality")
|
||
|
if "communication_style" in kwargs:
|
||
|
communication_style = kwargs.get("communication_style")
|
||
|
else:
|
||
|
personality = ""
|
||
|
communication_style = ""
|
||
|
|
||
|
try:
|
||
|
# instructions being sent to the ai model
|
||
|
messages = []
|
||
|
|
||
|
# add personality and style to the instructions
|
||
|
if personality or communication_style:
|
||
|
persona_prompt = f"{personality} {communication_style}".strip()
|
||
|
messages.append({
|
||
|
"role": "system",
|
||
|
"content": persona_prompt
|
||
|
})
|
||
|
|
||
|
# User message
|
||
|
messages.append({
|
||
|
"role": "user",
|
||
|
"content": prompt
|
||
|
})
|
||
|
|
||
|
# generate the response
|
||
|
# generate the response
|
||
|
# response = self.client.messages.create( # Create a chat completion with the OpenAI API
|
||
|
# model=self.model_name, # Set the model type we want to use
|
||
|
# messages=messages, # Set the prompt we want to use
|
||
|
# temperature=0.7, # Set the temperature of the response
|
||
|
# max_tokens=400, # Set the maximum number of tokens to generate
|
||
|
# )
|
||
|
response = self.client.messages.create( # Create a chat completion with the OpenAI API
|
||
|
model=self.model_name, # Set the model type we want to use
|
||
|
messages=messages, # Set the prompt we want to use
|
||
|
max_tokens=1024
|
||
|
)
|
||
|
|
||
|
return response.content[0].text if isinstance(response.content, list) else response.content
|
||
|
|
||
|
except Exception as e:
|
||
|
return f"Error generating response: {str(e)}"
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
deepseek_model = DeepSeekModel()
|
||
|
response = deepseek_model.generate_response("Tell me 10 one liners about crypto. put them as a json object")
|
||
|
# Extract just the text content from the response
|
||
|
if hasattr(response, 'text'):
|
||
|
print("\nClaude's Response:\n")
|
||
|
print(response.text)
|
||
|
print("\n")
|
||
|
else:
|
||
|
print("\nClaude's Response:\n")
|
||
|
print(response)
|
||
|
print("\n")
|