Files
Python/chatgpt.py
T
justin 753301d1db Update chatgpt.py
Added Output command to write chatgpt's latest response to file.
2025-07-07 09:38:21 -07:00

135 lines
4.8 KiB
Python

#!/usr/bin/python3
# Description: A command-line interface to https://chat.openai.com/chat
# Usage: python3 chatgpt.py
# Author: Justin Oros
# Source: https://github.com/JustinOros
import openai
import os
# Function to get the OpenAI API key
def get_api_key():
# Check if API key is set in environment variables
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
# If API key is not in environment variables, prompt the user to enter it
print("OpenAI API key not found.")
print("Please paste your OpenAI API key below.")
print("If you don't have one, you can create it here: https://platform.openai.com/account/api-keys")
api_key = input("Enter your API key: ").strip()
# Set the OpenAI API key
openai.api_key = api_key
def show_help():
help_text = """
Available Commands:
- 'new' : Start a new conversation (clear the chat history).
- 'exit' : End the conversation and exit the script.
- 'quit' : Same as 'exit', ends the conversation.
- 'bye' : Same as 'exit', ends the conversation.
- 'help' : Show this help message with a list of commands.
- 'model' : Show the current model or available models.
- 'model=<model_name>' : Switch to the specified model (e.g., 'model=gpt-4').
- 'output' : Save the last ChatGPT response to a file (e.g., chatgpt-output.py).
"""
print(help_text)
def chat_with_gpt():
current_model = "gpt-3.5-turbo"
available_models = ["gpt-3.5-turbo", "gpt-4"]
last_response = "" # Store the last assistant reply
print(f"ChatGPT: Hello. You are currently using the '{current_model}' model.")
print("Type 'help' for a list of internal commands.")
conversation_history = []
while True:
user_input = input("User: ")
if user_input.lower() == "help":
show_help()
continue
if user_input.lower() == "new":
print("ChatGPT: Starting a new conversation...")
conversation_history = []
last_response = ""
print(f"ChatGPT: Hello. You are using the '{current_model}' model. How can I help you today?")
continue
if user_input.lower() in ["exit", "quit", "bye"]:
print("ChatGPT: Goodbye!")
break
if user_input.lower().startswith("model="):
model_name = user_input.split("=")[1].strip()
if model_name in available_models:
current_model = model_name
print(f"ChatGPT: Switched to the '{current_model}' model.")
else:
print(f"ChatGPT: '{model_name}' is not a valid model. Available models are: {', '.join(available_models)}.")
continue
if user_input.lower() == "model":
print(f"ChatGPT: You are currently using the '{current_model}' model.")
print(f"Available models: {', '.join(available_models)}.")
continue
if user_input.lower() == "output":
if not last_response:
print("ChatGPT: No response available to save.")
continue
# Basic extension detection
if "```python" in last_response:
ext = "py"
elif "```html" in last_response:
ext = "html"
elif "```json" in last_response:
ext = "json"
elif "```bash" in last_response:
ext = "sh"
else:
ext = "txt"
filename = f"chatgpt-output.{ext}"
try:
# Strip Markdown formatting if present
content = last_response
if "```" in content:
content = content.split("```")[1]
if "\n" in content:
content = "\n".join(content.split("\n")[1:]) # remove language label line
content = content.strip("`").strip()
with open(filename, "w") as f:
f.write(content)
print(f"ChatGPT: Output saved to '{filename}'")
except Exception as e:
print(f"ChatGPT: Failed to save output: {e}")
continue
conversation_history.append({"role": "user", "content": user_input})
try:
response = openai.ChatCompletion.create(
model=current_model,
messages=conversation_history,
max_tokens=150
)
chatgpt_reply = response['choices'][0]['message']['content']
print(f"ChatGPT: {chatgpt_reply}")
last_response = chatgpt_reply
conversation_history.append({"role": "assistant", "content": chatgpt_reply})
except Exception as e:
print(f"Error: {e}")
break
if __name__ == "__main__":
get_api_key()
chat_with_gpt()