3

i'm trying to make a chat completion bot using opeAI's GPT engine that takes voice input and outputs a text to speech file, however, i keep getting an encoding error that i dont understand

import os
import speech_recognition as sr
import openai
from dotenv import load_dotenv
from os import path
from playsound import playsound
from gtts import gTTS
import simpleaudio as sa

load_dotenv()

language = 'en'

openai.api_key = os.getenv("OPENAI_API_KEY")

while True:
    # this recognizes your voice input
    recog = sr.Recognizer()
    with sr.Microphone() as source:
        audio = recog.listen(source)
    #this transcribes the voice to text
    with open("microphone-results.wav", "wb") as f:
        f.write(audio.get_wav_data())
    AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), "microphone-results.wav")
    my_question = recog.recognize_sphinx(audio)

    #this generates a response
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "You are a chatbot named jarvis"},
            {"role": "user", "content": str(my_question)},
        ]
    )
    reply = ''.join(choice.message.content for choice in response.choices)
    tts = gTTS(reply)
    tts_file = "temp.wav"

    tts.save(tts_file)
    wave_obj = sa.WaveObject.from_wave_file(tts_file)
    play_obj = wave_obj.play()
    play_obj.wait_done()

    os.remove(tts_file)

i tried formatting it, thinking it would output the tts result instead, it said this:

  File "c:\Users\tonda\python\SSPS_Projects\PortfolioApps\assistant\functions\ChatGPT\Chat.py", line 28, in <module>
    response = openai.ChatCompletion.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\openai\api_resources\chat_completion.py", line 25, in create
    return super().create(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create
    response, _, api_key = requestor.request(
                           ^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\openai\api_requestor.py", line 216, in request
    result = self.request_raw(
             ^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\openai\api_requestor.py", line 516, in request_raw
    result = _thread_context.session.request(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\requests\adapters.py", line 489, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
                       ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\urllib3\connectionpool.py", line 398, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\urllib3\connection.py", line 239, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\http\client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\http\client.py", line 1323, in _send_request
    self.putheader(hdr, value)
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\site-packages\urllib3\connection.py", line 224, in putheader
    _HTTPConnection.putheader(self, header, *values)
  File "C:\Users\tonda\scoop\apps\python\3.11.0\Lib\http\client.py", line 1255, in putheader
    values[i] = one_value.encode('latin-1')
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'latin-1' codec can't encode character '\u201c' in position 7: ordinal not in range(256)

it is saying something about an unknown character? i really dont understand this, partially because im new to coding

1 Answers1

0

I had the same error when I was trying to publish an app in Kubernetes using the API for OpenAI. The problem in my case was that the OpenAI key, somehow had gotten encoded wrongly - so it was no longer latin-1 characters. Make sure that the key you are using have not been encoded somehow?

I had my keys in .yaml file and had to to: echo "whatever_my_key_was" | base64

and put those values into the .yaml file instead

smallbirds
  • 877
  • 12
  • 35