feat: swap openai for Groq via openai-compatible base_url

This commit is contained in:
Bossiara13 2026-04-22 17:32:46 +03:00
parent 377016478e
commit 7f5ca81c71
3 changed files with 22 additions and 25 deletions

View file

@ -20,5 +20,7 @@ CHROME_PATH = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
# Токен Picovoice # Токен Picovoice
PICOVOICE_TOKEN = os.getenv('PICOVOICE_TOKEN') PICOVOICE_TOKEN = os.getenv('PICOVOICE_TOKEN')
# Токен OpenAI # Токен Groq
OPENAI_TOKEN = os.getenv('OPENAI_TOKEN') GROQ_TOKEN = os.getenv('GROQ_TOKEN')
GROQ_BASE_URL = "https://api.groq.com/openai/v1"
GROQ_MODEL = "llama-3.3-70b-versatile"

View file

@ -1,2 +1,2 @@
PICOVOICE_TOKEN=<тут ключ-picovoice> PICOVOICE_TOKEN=<тут ключ-picovoice>
OPENAI_TOKEN=<тут ключ-openai> GROQ_TOKEN=<тут ключ-groq>

39
main.py
View file

@ -10,7 +10,7 @@ import time
from ctypes import POINTER, cast from ctypes import POINTER, cast
import openai import openai
from openai import error from openai import OpenAI
import pvporcupine import pvporcupine
import simpleaudio as sa import simpleaudio as sa
import vosk import vosk
@ -37,8 +37,7 @@ VA_CMD_LIST = yaml.safe_load(
system_message = {"role": "system", "content": "Ты голосовой ассистент из железного человека."} system_message = {"role": "system", "content": "Ты голосовой ассистент из железного человека."}
message_log = [system_message] message_log = [system_message]
# init openai client = OpenAI(api_key=config.GROQ_TOKEN, base_url=config.GROQ_BASE_URL)
openai.api_key = config.OPENAI_TOKEN
# PORCUPINE # PORCUPINE
porcupine = pvporcupine.create( porcupine = pvporcupine.create(
@ -59,33 +58,29 @@ q = queue.Queue()
def gpt_answer(): def gpt_answer():
global message_log global message_log
model_engine = "gpt-3.5-turbo"
max_tokens = 256 # default 1024
try: try:
response = openai.ChatCompletion.create( response = client.chat.completions.create(
model=model_engine, model=config.GROQ_MODEL,
messages=message_log, messages=message_log,
max_tokens=max_tokens, max_tokens=256,
temperature=0.7, temperature=0.7,
top_p=1, top_p=1,
stop=None stop=None,
) )
except (error.TryAgain, error.ServiceUnavailableError): except openai.BadRequestError as ex:
return "ChatGPT перегружен!" code = getattr(ex, "code", None) or ""
except openai.OpenAIError as ex: message = str(ex)
# если ошибка - это макс длина контекста, то возвращаем ответ с очищенным контекстом if code == "context_length_exceeded" or "context_length_exceeded" in message:
if ex.code == "context_length_exceeded":
message_log = [system_message, message_log[-1]] message_log = [system_message, message_log[-1]]
return gpt_answer() return gpt_answer()
else: return "Запрос отклонён моделью."
return "OpenAI токен не рабочий." except openai.RateLimitError:
return "Лимит запросов исчерпан."
except openai.APIConnectionError:
return "Не могу связаться с сервером."
except openai.APIError:
return "Groq токен не рабочий."
# Find the first response from the chatbot that has text in it (some responses may not have text)
for choice in response.choices:
if "text" in choice:
return choice.text
# If no response with text is found, return the first response's content (which may be empty)
return response.choices[0].message.content return response.choices[0].message.content