Perhaps when posting in this thread someone could spend thirty seconds of reading, install “openai classic”, and press the thanks button for the answer above…
pip install "openai<1.0.0"
Or alternately code for the new methods of the API library changes.
If OpenAI had given anyone a heads up instead of jumping from 1.0.0beta2 all the way to 1.1.1 internal and dumping wheels on those millions of developers, maybe a generous person could have written and put in a pull request for another cookbook notebook to be put up “how this all works without paying for a 3rd party code-conversion service, all the way from simple calls up to asyncio streaming multimodal multi-client with token-counting chat history client management”
The error you’re encountering indicates that ChatCompletion is not a subscriptable object, meaning you can’t use indexing ([]) directly on it. It seems like the response object is not a dictionary, but an instance of a ChatCompletion class.
When dealing with a class instance, you would typically access its attributes using dot notation. If you are using the OpenAI Python client, the attributes of the ChatCompletion object would be accessed accordingly. However, the output structure seems to suggest that it should be possible to subscript it if it were a dictionary.
Here is how I fixed this:
# Assuming 'response' is an instance of a ChatCompletion or similar class
message_content = response.choices[0].message.content
print(message_content)
As marciobernardo1 has mentioned it above, try to use openai version 0.28.1 as the ChatCompletion attribute is still there and your code should be working as expected.
That has multiple bot-written problems. You are calling a completion endpoint with a chat model, and using the deprecated “engine” parameter. You are trying to extract a chat response from a completion reply. It is written for the old library.
It is offtopic from those that simply experience incompatibility when updating the openai library.
Seem to be getting the same problem, despite having an acceptable python version, and the latest version of openai.
Running the following code:
client = OpenAI(api_key=os.environ.get(“OPENAI_API_KEY”))
completion = client.chat.completions.create(
model=“gpt-3.5-turbo”,
messages=[
{“role”: “system”, “content”: “You are a poetic assistant, skilled in explaining complex programming concepts with creative flair.”},
{“role”: “user”, “content”: “Compose a poem that explains the concept of recursion in programming.”}
]
)
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair.",
},
{
"role": "user",
"content": "Compose a poem that explains the concept of recursion in programming.",
},
],
)
print(completion.model_dump()['choices'][0]['message']['content'])
The python library will use the environment OPENAI_API_KEY if it is set.
# ottieni tag title da gpt
#################################
# Modulo per l'interazione con l'API di OpenAI
from dotenv import load_dotenv
import os
load_dotenv() # Carica le variabili d'ambiente dal file .env
#openai.api_key = os.getenv("openai.api_key")
from openai import OpenAI
client = OpenAI(api_key=os.getenv("openai.api_key"))
# setup richiesta gtp
# nuovo dataframe
merged_df8b = merged_df8.copy()
# creo dizionario delle risposte di gpt per evitare chiamate doppie
gpt_responses = {}
# Inizializza un contatore per il numero totale di token
total_tokens_used = 0
# Inizializza un contatore per le chiamate API effettive
actual_api_calls = 0
def improve_tag_title(row, gpt_responses):
global total_tokens_used , actual_api_calls
top_5_queries = row['top_5_queries']
# Ottieni il tag title e l'URL dalla riga corrente
tag_title = row["tag title"]
page_url = row["page"]
# Controllo se tag_title è presente e non vuoto
if not tag_title:
return None
# Controllo per saltare la chiamata GPT quando comparison è 'greater' o check è 'Ok'
#if row["comparison"] == "greater" or "Missing" not in row["check"]:
# #return row["tag title"]
# return None
# Verifica se l'URL è già stato processato
if page_url in gpt_responses:
return gpt_responses[page_url] # Usa il tag title migliorato se disponibile
prompt = (
f"Sto cercando di migliorare il tag title per una pagina web. Il tag title attuale è: {tag_title}.\n"
f"Le parole chiave più importanti e pertinenti alla pagina sono: {top_5_queries}.\n"
f"Crea un nuovo tag title in {language} che incorpori queste parole chiave in modo naturale e coinvolgente. Il tag title dovrebbe:\n"
f"1) avere al massimo 65 caratteri, spazi inclusi. Assicurati che la tua risposta non superi questo limite.\n"
f"2) non includere il nome del brand.\n"
f"3) non utilizzare lettere maiuscole inutili, simboli, apici o virgolette.\n"
f"4) essere presentato da solo, senza alcuna spiegazione o contenuto aggiuntivo.\n"
f"Per favore, segui scrupolosamente tutte queste regole nella tua risposta. Se non sei sicuro, conferma che hai seguito tutte le regole nel tuo messaggio."
)
try:
# Modifica la struttura dell'input per utilizzare il formato chat
#response = openai.ChatCompletion.create(
#response = client.completions.create(
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "Comportati come se fossi un SEO copywriter professionista."},
{"role": "user", "content": prompt}
],
max_tokens=1000,
temperature=0.4,
top_p=1,
frequency_penalty=0.1,
presence_penalty=0.1
)
print(response)
# Aggiungi il numero di token utilizzati per questa risposta al totale
total_tokens_used += response['usage']['total_tokens']
actual_api_calls += 1 # Incrementa il contatore per le chiamate API effettive
# eccezioni errori gpt
except Exception as e:
print(f"Error occured while calling OpenAI API: {e}")
return None
#improved_tag_title = response.choices[0].message.content
#improved_tag_title = response.choices[0].text.strip().lower()
improved_tag_title = response.choices[0].message.content.strip().lower()
#gpt_responses[tag_title] = improved_tag_title
# modifica per usare come chiave di confronto l'URL
gpt_responses[page_url] = improved_tag_title
# SLEEP
time.sleep(1)
#time.sleep(5)
return improved_tag_title
# chiamate API gpt
# Dopo la definizione della funzione, esegui il loop per migliorare i tag title
merged_df8b.reset_index(drop=True, inplace=True)
processed_rows = 0
for index, row in merged_df8b.iterrows():
# Passa la riga corrente e il dizionario delle risposte a improve_tag_title
new_tag_title = improve_tag_title(row, gpt_responses)
# Assegna il nuovo tag title alla riga corrente
merged_df8b.at[index, "new tag title"] = new_tag_title
# Aggiorna il dizionario gpt_responses con la risposta ricevuta
gpt_responses[row["page"]] = new_tag_title
# Stampa il progresso
#print(f"\rProcessed row {index+1}/{len(merged_df8b)} | {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} | {total_tokens_used} tokens.", end="", flush=True)
processed_rows += 1 # Incrementa il contatore di righe processate
print(f"\rProcessed row {processed_rows}/{len(merged_df8b)} | {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} | {total_tokens_used} tokens.", end="", flush=True)
# Aggiungi qui il nuovo blocco di codice per assicurarti di aggiornare tutte le righe
for index, row in merged_df8b.iterrows():
page_url = row["page"]
if page_url in gpt_responses:
merged_df8b.at[index, "new tag title"] = gpt_responses[page_url]
# Stampa il totale dei token utilizzati
print(f"\nTotal tokens used: {total_tokens_used}")
print(f"Actual API calls made: {actual_api_calls}")
# https://platform.openai.com/account/usage
Hello, after the recent update my script ended working and I can’t figure out why.
The error is: Error occured while calling OpenAI API: ‘ChatCompletion’ object is not subscriptable
If I may leave a comment, I find it very unprofessional to release an upgrade that breaks the work done by developers until the day before. You are wasting people’s time and nerves.