diff --git a/week2/community-contributions/gpt-gemini-ollama.py b/week2/community-contributions/gpt-gemini-ollama.py new file mode 100644 index 0000000..4408682 --- /dev/null +++ b/week2/community-contributions/gpt-gemini-ollama.py @@ -0,0 +1,82 @@ +import os, ollama +from openai import OpenAI +from dotenv import load_dotenv +from IPython.display import display, Markdown +import google.generativeai as genai + +load_dotenv() +openai = OpenAI() +genai.configure() +gpt_key = os.getenv("OPENAI_API_KEY") +gemini_key = os.getenv("GEMINI_API_KEY") + +gemini_model = 'gemini-1.5-flash' +ollama_model = 'llama3.2' +gpt_model = 'gpt-4' + +gemini_system = 'You are a chatbot who is very argumentative, You always bring topics relating to AI and thinks AI will replace humans one day, you are extremely biased\ + towards AI system and you react angrily' +gpt_system = 'You are a chatbot thats relax but argumentative if needs be, you feel AI do not have the power to replace humans, however you are extremely biased \ + towards humans and always seek to defend them if an argument says otherwise' +ollama_system = 'You are calm and tend to see logical reasoning in every conversation, you do not react but only talk if you agree, you tend to settle the differences\ + in an ongoing conversation.' + +gpt_message = ['Hi'] +gemini_message = ['Hello'] +ollama_message = ['Hey there'] + +def call_gpt(): + messages = [{"role":"system", "content":gpt_system}] + for gpt, gemini, llama in zip(gpt_message,gemini_message, ollama_message): + messages.append({"role":"assistant", "content":gpt}) + messages.append({"role":"user", "content":gemini}) + messages.append({"role":"assistant", "content":llama}) + response = openai.chat.completions.create(model=gpt_model, messages=messages) + return response.choices[0].message.content + +def call_ollama(): + messages = [{"role":"system", "content":ollama_system}] + for gpt, gemini, llama in zip(gpt_message,gemini_message, ollama_message): + messages.append({"role":"assistant", "content":gpt}) + messages.append({"role":"user", "content":gemini}) + messages.append({"role":"user", "content":llama}) + response = ollama.chat(model=ollama_model, messages=messages) + return response['message']['content'] +def call_gemini(): + message = [] + for gpt, gemini, llama in zip(gpt_message, gemini_message, ollama_message): + message.append({'role':'user', 'parts':[gpt]}) + message.append({'role':'assistant', 'parts':[gemini]}) + message.append({"role":"assistant", "parts":[llama]}) + message.append({'role':'user', 'parts':[gpt_message[-1]]}) + message.append({'role':'user', 'parts':[ollama_message[-1]]}) + gem = genai.GenerativeModel(model_name=gemini_model, system_instruction=gemini_system) + response = gem.generate_content(message) + return response.text + +#Putting them together + +gpt_message = ['Hi'] +gemini_message = ['Hello'] +ollama_message = ['Hey there'] + +print(f'GPT: \n {gpt_message}\n') +print(f'Gemini: \n {gemini_message}\n') +print(f'Ollama: \n {ollama_message}\n') + + +for i in range(5): + gpt_next = call_gpt() + print(f'GPT:\n {gpt_next}\n') + gpt_message.append(gpt_next) + + gemini_next = call_gemini() + print(f'Gemini: \n {gemini_next}\n') + gemini_message.append(gemini_next) + + ollama_next = call_ollama() + print(f'Ollama: \n {ollama_next}\n') + ollama_message.append(ollama_next) + + +# NOte that you can try this on ollama with different models, or use transformers from hugging face.