File size: 6,820 Bytes
d548975 7b7bdab d548975 7b7bdab d548975 7b7bdab d548975 7b7bdab d548975 7b7bdab d548975 7b7bdab d548975 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
import os
import shutil
import hmac
import hashlib
import base64
import subprocess
import time
from mysite.logger import logger
import async_timeout
import asyncio
import mysite.interpreter.interpreter_config
from fastapi import HTTPException
from groq import Groq
# Try to import open-interpreter, but handle if it's not available
try:
from interpreter import interpreter
except ImportError:
print("Warning: open-interpreter not available. Some features may not work.")
interpreter = None
GENERATION_TIMEOUT_SEC=60
def set_environment_variables():
# Load environment variables first
from dotenv import load_dotenv
load_dotenv()
# Try both possible environment variable names for Groq API key
groq_key = os.getenv("GROQ_API_KEY") or os.getenv("api_key")
if groq_key:
os.environ["OPENAI_API_KEY"] = groq_key
os.environ["GROQ_API_KEY"] = groq_key
os.environ["api_key"] = groq_key
# Also set for open-interpreter compatibility
os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
os.environ["MODEL_NAME"] = "llama3-8b-8192"
os.environ["LOCAL_MODEL"] = "true"
# Configure interpreter if it's available
if interpreter is not None:
try:
interpreter.llm.api_key = groq_key
interpreter.llm.api_base = "https://api.groq.com/openai/v1"
interpreter.llm.model = "llama3-8b-8192"
except Exception as e:
print(f"Warning: Could not configure interpreter: {e}")
# Set environment variables on import
set_environment_variables()
def format_response(chunk, full_response):
"""Format the response chunk and add it to the full response"""
if isinstance(chunk, dict):
if 'content' in chunk:
content = chunk['content']
if isinstance(content, str):
return full_response + content
elif hasattr(chunk, 'content'):
return full_response + str(chunk.content)
elif isinstance(chunk, str):
return full_response + chunk
return full_response
# Set the environment variable.
def chat_with_interpreter(
message, history=None, a=None, b=None, c=None, d=None
): # , openai_api_key):
# Check if interpreter is available
if interpreter is None:
yield "Error: open-interpreter is not available. Please install it with: pip install open-interpreter"
return
# Load environment variables if not already loaded
from dotenv import load_dotenv
load_dotenv()
# Set the API key for the interpreter
api_key = os.getenv("GROQ_API_KEY") or os.getenv("api_key")
if not api_key:
yield "Error: No Groq API key found. Please set GROQ_API_KEY or api_key environment variable."
return
# Configure the interpreter with Groq settings
try:
interpreter.llm.api_key = api_key
interpreter.llm.api_base = "https://api.groq.com/openai/v1"
interpreter.llm.model = "llama3-8b-8192"
# Also ensure environment variables are set
os.environ["OPENAI_API_KEY"] = api_key
os.environ["GROQ_API_KEY"] = api_key
except Exception as e:
yield f"Error configuring interpreter: {e}"
return
if message == "reset":
interpreter.reset()
return "Interpreter reset", history
full_response = ""
# add_conversation(history,20)
user_entry = {"role": "user", "type": "message", "content": message}
#messages.append(user_entry)
# Call interpreter.chat and capture the result
messages = []
recent_messages = history[-20:]
for conversation in recent_messages:
user_message = conversation[0]
user_entry = {"role": "user", "content": user_message}
messages.append(user_entry)
assistant_message = conversation[1]
assistant_entry = {"role": "assistant", "content": assistant_message}
messages.append(assistant_entry)
user_entry = {"role": "user", "content": message}
messages.append(user_entry)
#system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
#messages.insert(0, system_prompt)
for chunk in interpreter.chat(messages, display=False, stream=True):
# print(chunk)
# output = '\n'.join(item['content'] for item in result if 'content' in item)
full_response = format_response(chunk, full_response)
yield full_response # chunk.get("content", "")
yield full_response # , history
return full_response, history
GENERATION_TIMEOUT_SEC = 60
def completion(message: str, history, c=None, d=None, prompt="あなたは日本語の優秀なアシスタントです。"):
# Load environment variables if not already loaded
from dotenv import load_dotenv
load_dotenv()
# Try both possible environment variable names for Groq API key
api_key = os.getenv("GROQ_API_KEY") or os.getenv("api_key")
if not api_key:
yield "Error: No Groq API key found. Please set GROQ_API_KEY or api_key environment variable."
return
client = Groq(api_key=api_key)
messages = []
recent_messages = history[-20:]
for conversation in recent_messages:
user_message = conversation[0]
user_entry = {"role": "user", "content": user_message}
messages.append(user_entry)
assistant_message = conversation[1]
assistant_entry = {"role": "assistant", "content": assistant_message}
messages.append(assistant_entry)
user_entry = {"role": "user", "content": message}
messages.append(user_entry)
system_prompt = {"role": "system", "content": prompt}
messages.insert(0, system_prompt)
#async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
try:
response = client.chat.completions.create(
model="llama3-8b-8192",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=True,
stop=None,
)
all_result = ""
for chunk in response:
current_content = chunk.choices[0].delta.content or ""
all_result += current_content
yield current_content
yield all_result
except asyncio.TimeoutError:
raise HTTPException(status_code=504, detail="Stream timed out")
except StopAsyncIteration:
return
# 例としての使用方法
if __name__ == "__main__":
history = [
("user message 1", "assistant response 1"),
("user message 2", "assistant response 2"),
]
async def main():
async for response in completion("新しいメッセージ", history):
print(response)
asyncio.run(main()) |