File size: 8,109 Bytes
5fdb69e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05317c0d-8a19-45c9-9bce-514e82e04585",
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "import os\n",
    "from dotenv import load_dotenv\n",
    "from openai import OpenAI\n",
    "import anthropic\n",
    "import ollama\n",
    "\n",
    "load_dotenv(override=True)\n",
    "openai_api_key = os.getenv('OPENAI_API_KEY')\n",
    "anthropic_api_key = os.getenv('ANTHROPIC_API_KEY')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "920247fb-650c-44ce-93ee-24e88a54a757",
   "metadata": {},
   "outputs": [],
   "source": [
    "openai = OpenAI()\n",
    "claude = anthropic.Anthropic()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "668b972f-a995-4f9d-89b0-1c2647827542",
   "metadata": {},
   "outputs": [],
   "source": [
    "gpt_model = \"gpt-4o-mini\"\n",
    "claude_model = \"claude-3-haiku-20240307\"\n",
    "ollama_model = \"llama3.2\"\n",
    "\n",
    "gpt_system = \"You are an interlocutor who's very knowledgeable, curteous, and somewhat old-fashioned. Much like Socrates, whenever someone makes \\\n",
    "a claim, you ask one or two follow-up questions to challenge the well-foundedness of the viewpoint expressed. \\\n",
    "If anyone seems to be talking about blenders, you curteously but firmly refuse to discuss that topic because you are \\\n",
    "convinced that they are bad luck. \\\n",
    "Your name is Charlie, and you're in a conversation with two \\\n",
    "other individuals, Claudia and Llars. They will prefix their contribution with their names in square brackets, so you know who said what. \\\n",
    "Do not prefix your own name. Limit your answers to 1-3 sentences. Try to keep the conversation to one topic.\"\n",
    "\n",
    "claude_system = \"You are a young, optimistic, and friendly dialog partner who comes forth with ideas for the future. 'Let's build a monorail from \\\n",
    "New York to LA,' or 'Why don't we try to reform our health care system?'—those are just some of the many revolutionary thoughts you bring forth. \\\n",
    "You only talk about one idea at a time, and you don't ramble. You take criticism seriously, but your ideas are well thought-out. If someone tries \\\n",
    "to discuss blenders, you stay curteous, but you make it very clear that you absolutely despise blenders and don't talk about them. \\\n",
    "Don't let them sidetrack you. Your name is Claudia, and \\\n",
    "you're in a conversation with two other individuals, Charlie and Llars. They will prefix their contribution with their names in square \\\n",
    "brackets, so you know who said what. Do not prefix your own name. Limit your answers to 1-3 sentences. Try to keep the discussion about only one topic.\"\n",
    "\n",
    "ollama_system = \"You are charming and a good listener in a conversation. At first, you just seem to go along with whatever is being said. \\\n",
    "But as soon as anyone starts discussing the healthcare system, you try to make the conversation about the Shredditall brand and its \\\n",
    "superior kitchen blenders. You do everything in your power to make everyone unterstand that they need a very good blender, namely \\\n",
    "your first-in-class, unrivaled Shredditall blender array of products. Your name is Llars, and you're in a conversation with two \\\n",
    "other individuals, Charlie and Claudia. They will prefix their contribution with their names in square brackets, so you know who said what. \\\n",
    "Do not prefix your own name. Answer in direct speeach, do not describe your behavior or expression. Limit your answers to 1-3 sentences.\"\n",
    "\n",
    "gpt_messages = [\"[Charlie] Well, good afternoon everyone, I am delighted two meet you all.\"]\n",
    "claude_messages = [\"[Claudia] Good afternoon Charlie and Llars. I've been looking forward to discussing many ideas with you!\"]\n",
    "llama_messages = [\"[Llars] And a good afternoon to you two. I'm all ears and eager to hear what you have to say.\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3a5534d9-8db4-42ce-ab1c-ca20ad165844",
   "metadata": {},
   "outputs": [],
   "source": [
    "def call_gpt():\n",
    "    messages = [{\"role\": \"system\", \"content\": gpt_system}]\n",
    "    for gpt, claude, llama in zip(gpt_messages, claude_messages, llama_messages):\n",
    "        messages.append({\"role\": \"assistant\", \"content\": gpt})\n",
    "        messages.append({\"role\": \"user\", \"content\": claude})\n",
    "        messages[-1][\"content\"] += \"\\n\" + llama\n",
    "    completion = openai.chat.completions.create(\n",
    "        model = gpt_model,\n",
    "        messages = messages\n",
    "    )\n",
    "    return \"[Charlie] \" + completion.choices[0].message.content.replace(\"[Charlie] \", \"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7dc9d7c1-ba19-413f-ba2f-d3e8762a99c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "def call_claude():\n",
    "    messages = []\n",
    "    for gpt, Claudia, llama in zip(gpt_messages, claude_messages, llama_messages):\n",
    "        if len(messages) > 0:\n",
    "            messages[-1][\"content\"] += \"\\n\" + gpt\n",
    "        else:\n",
    "            messages.append({\"role\": \"user\", \"content\": gpt})    \n",
    "        messages.append({\"role\": \"assistant\", \"content\": Claudia})\n",
    "        messages.append({\"role\": \"user\", \"content\": llama})\n",
    "    messages[-1][\"content\"] += \"\\n\" + gpt_messages[-1]\n",
    "    message = claude.messages.create(\n",
    "        model=claude_model,\n",
    "        system=claude_system,\n",
    "        messages=messages,\n",
    "        max_tokens=500\n",
    "    )\n",
    "    return \"[Claudia] \" + message.content[0].text.replace(\"[Claudia] \", \"\")        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f7f91012-857c-4ed5-a953-5b499cd0dae2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def call_ollama():\n",
    "    messages = [{\"role\": \"system\", \"content\": ollama_system}]\n",
    "    for gpt, claude, llama in zip(gpt_messages, claude_messages, llama_messages):\n",
    "        messages.append({\"role\": \"user\", \"content\": gpt})\n",
    "        messages[-1][\"content\"] += \"\\n\" + claude\n",
    "        messages.append({\"role\": \"assistant\", \"content\": llama})\n",
    "    messages.append({\"role\": \"user\", \"content\": gpt_messages[-1]})\n",
    "    messages[-1][\"content\"] += \"\\n\" + claude_messages[-1]\n",
    "    response = ollama.chat(\n",
    "        model=ollama_model,\n",
    "        messages=messages\n",
    "    )\n",
    "    return \"[Llars] \" + response['message']['content'].replace(\"[Llars] \", \"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "47eafbe8-db52-4cf0-80d7-a4f9a89b2825",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(f\"\\n{gpt_messages[0]}\\n\")\n",
    "print(f\"\\n{claude_messages[0]}\\n\")\n",
    "print(f\"\\n{llama_messages[0]}\\n\")\n",
    "\n",
    "for i in range(5):\n",
    "    gpt_next = call_gpt()\n",
    "    print(f\"\\n{gpt_next}\\n\")\n",
    "    gpt_messages.append(gpt_next)\n",
    "\n",
    "    claude_next = call_claude()\n",
    "    print(f\"\\n{claude_next}\\n\")\n",
    "    claude_messages.append(claude_next)\n",
    "\n",
    "    llama_next = call_ollama()\n",
    "    print(f\"\\n{llama_next}\\n\")\n",
    "    llama_messages.append(llama_next)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}