Kate Forsberg commited on
Commit
2adad16
·
1 Parent(s): 727c6b5

added threads

Browse files
Files changed (3) hide show
  1. app.py +54 -18
  2. poetry.lock +38 -33
  3. pyproject.toml +3 -3
app.py CHANGED
@@ -1,7 +1,9 @@
1
  import glob
 
2
  import gradio as gr
3
  from typing import Any
4
  from dotenv import load_dotenv
 
5
  from griptape.structures import Agent
6
  from griptape.tasks import PromptTask
7
  from griptape.drivers import (
@@ -9,19 +11,49 @@ from griptape.drivers import (
9
  GriptapeCloudStructureRunDriver,
10
  LocalFileManagerDriver,
11
  LocalStructureRunDriver,
 
12
  )
13
  from griptape.memory.structure import ConversationMemory
14
- from griptape.tools import StructureRunClient, FileManager
15
  from griptape.rules import Rule, Ruleset
16
- from griptape.config import AnthropicStructureConfig
 
17
  import time
18
  import os
19
- import re
20
 
21
 
22
  # Load environment variables
23
  load_dotenv()
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  # Create an agent that will create a prompt that can be used as input for the query agent from the Griptape Cloud.
27
 
@@ -49,7 +81,7 @@ def bot(history):
49
  def create_prompt_task(session_id: str, message: str) -> PromptTask:
50
  return PromptTask(
51
  f"""
52
- Re-structure the values from the user's questions: '{message}' and the input value from the conversation memory '{session_id}.json' to fit the following format. Leave out attributes that aren't important to the user:
53
  years experience: <x>
54
  location: <x>
55
  role: <x>
@@ -64,6 +96,9 @@ def create_prompt_task(session_id: str, message: str) -> PromptTask:
64
 
65
 
66
  def build_talk_agent(session_id: str, message: str) -> Agent:
 
 
 
67
  ruleset = Ruleset(
68
  name="Local Gradio Agent",
69
  rules=[
@@ -81,16 +116,17 @@ def build_talk_agent(session_id: str, message: str) -> Agent:
81
  ),
82
  ],
83
  )
84
- file_manager_tool = FileManager(
85
  name="FileManager",
86
  file_manager_driver=LocalFileManagerDriver(),
87
  off_prompt=False,
88
  )
89
 
90
  return Agent(
91
- config=AnthropicStructureConfig(),
92
  conversation_memory=ConversationMemory(
93
- driver=LocalConversationMemoryDriver(file_path=f"{session_id}.json")
 
 
94
  ),
95
  tools=[file_manager_tool],
96
  tasks=[create_prompt_task(session_id, message)],
@@ -102,6 +138,8 @@ def build_talk_agent(session_id: str, message: str) -> Agent:
102
  # The agent uses local memory, which it differentiates between by session_hash.
103
  def build_agent(session_id: str, message: str) -> Agent:
104
 
 
 
105
  ruleset = Ruleset(
106
  name="Local Gradio Agent",
107
  rules=[
@@ -129,7 +167,7 @@ def build_agent(session_id: str, message: str) -> Agent:
129
 
130
  print("Base URL", os.environ.get("BASE_URL", "https://cloud.griptape.ai"))
131
 
132
- query_client = StructureRunClient(
133
  name="QueryResumeSearcher",
134
  description="Use it to search for a candidate with the query.",
135
  driver=GriptapeCloudStructureRunDriver(
@@ -141,7 +179,7 @@ def build_agent(session_id: str, message: str) -> Agent:
141
  ),
142
  )
143
 
144
- talk_client = StructureRunClient(
145
  name="FormulateQueryFromUser",
146
  description="Used to formulate a query from the user's input.",
147
  driver=LocalStructureRunDriver(
@@ -150,29 +188,27 @@ def build_agent(session_id: str, message: str) -> Agent:
150
  )
151
 
152
  return Agent(
153
- config=AnthropicStructureConfig(),
154
  conversation_memory=ConversationMemory(
155
- driver=LocalConversationMemoryDriver(file_path=f"{session_id}.json")
 
 
156
  ),
157
  tools=[talk_client, query_client],
158
  rulesets=[ruleset],
159
  )
160
 
161
 
162
- def delete_json(session_id: str) -> None:
163
- for file in glob.glob(f"{session_id}.json"):
164
- os.remove(file)
165
-
166
-
167
  def send_message(message: str, history, request: gr.Request) -> Any:
168
  if request:
169
  session_hash = request.session_hash
170
  agent = build_agent(session_hash, message)
171
  response = agent.run(message)
172
- # if re.search(r'\bdone[.,!?]?\b', message, re.IGNORECASE):
173
- # delete_json(session_hash)
174
  return response.output.value
175
 
176
 
177
  demo = gr.ChatInterface(fn=send_message)
178
  demo.launch()
 
 
 
 
 
1
  import glob
2
+ from venv import create
3
  import gradio as gr
4
  from typing import Any
5
  from dotenv import load_dotenv
6
+ import requests
7
  from griptape.structures import Agent
8
  from griptape.tasks import PromptTask
9
  from griptape.drivers import (
 
11
  GriptapeCloudStructureRunDriver,
12
  LocalFileManagerDriver,
13
  LocalStructureRunDriver,
14
+ GriptapeCloudConversationMemoryDriver,
15
  )
16
  from griptape.memory.structure import ConversationMemory
17
+ from griptape.tools import StructureRunTool, FileManagerTool
18
  from griptape.rules import Rule, Ruleset
19
+ from griptape.configs.drivers import AnthropicDriversConfig
20
+ from griptape.configs import Defaults
21
  import time
22
  import os
23
+ from urllib.parse import urljoin
24
 
25
 
26
  # Load environment variables
27
  load_dotenv()
28
 
29
+ Defaults.drivers_config = AnthropicDriversConfig()
30
+
31
+ base_url = "https://cloud.griptape.ai"
32
+
33
+ headers_api = {
34
+ "Authorization": f"Bearer {os.environ['GT_CLOUD_API_KEY']}",
35
+ "Content-Type": "application/json",
36
+ }
37
+
38
+ threads = {}
39
+
40
+
41
+ def create_thread_id(session_id: str) -> str:
42
+ if not session_id in threads:
43
+ params = {
44
+ "name": session_id,
45
+ "messages": [],
46
+ }
47
+ response = requests.post(
48
+ url=urljoin(base_url, "/api/threads"), headers=headers_api, json=params
49
+ )
50
+ response.raise_for_status()
51
+ thread_id = response.json()["thread_id"]
52
+ threads[session_id] = thread_id
53
+ return thread_id
54
+ else:
55
+ return threads[session_id]
56
+
57
 
58
  # Create an agent that will create a prompt that can be used as input for the query agent from the Griptape Cloud.
59
 
 
81
  def create_prompt_task(session_id: str, message: str) -> PromptTask:
82
  return PromptTask(
83
  f"""
84
+ Re-structure the values from the user's questions: '{message}' and the input value from the conversation memory to fit the following format. Leave out attributes that aren't important to the user:
85
  years experience: <x>
86
  location: <x>
87
  role: <x>
 
96
 
97
 
98
  def build_talk_agent(session_id: str, message: str) -> Agent:
99
+
100
+ create_thread_id(session_id)
101
+
102
  ruleset = Ruleset(
103
  name="Local Gradio Agent",
104
  rules=[
 
116
  ),
117
  ],
118
  )
119
+ file_manager_tool = FileManagerTool(
120
  name="FileManager",
121
  file_manager_driver=LocalFileManagerDriver(),
122
  off_prompt=False,
123
  )
124
 
125
  return Agent(
 
126
  conversation_memory=ConversationMemory(
127
+ driver=GriptapeCloudConversationMemoryDriver(
128
+ thread_id=str(threads[session_id]),
129
+ )
130
  ),
131
  tools=[file_manager_tool],
132
  tasks=[create_prompt_task(session_id, message)],
 
138
  # The agent uses local memory, which it differentiates between by session_hash.
139
  def build_agent(session_id: str, message: str) -> Agent:
140
 
141
+ create_thread_id(session_id)
142
+
143
  ruleset = Ruleset(
144
  name="Local Gradio Agent",
145
  rules=[
 
167
 
168
  print("Base URL", os.environ.get("BASE_URL", "https://cloud.griptape.ai"))
169
 
170
+ query_client = StructureRunTool(
171
  name="QueryResumeSearcher",
172
  description="Use it to search for a candidate with the query.",
173
  driver=GriptapeCloudStructureRunDriver(
 
179
  ),
180
  )
181
 
182
+ talk_client = StructureRunTool(
183
  name="FormulateQueryFromUser",
184
  description="Used to formulate a query from the user's input.",
185
  driver=LocalStructureRunDriver(
 
188
  )
189
 
190
  return Agent(
 
191
  conversation_memory=ConversationMemory(
192
+ driver=GriptapeCloudConversationMemoryDriver(
193
+ thread_id=threads[session_id],
194
+ )
195
  ),
196
  tools=[talk_client, query_client],
197
  rulesets=[ruleset],
198
  )
199
 
200
 
 
 
 
 
 
201
  def send_message(message: str, history, request: gr.Request) -> Any:
202
  if request:
203
  session_hash = request.session_hash
204
  agent = build_agent(session_hash, message)
205
  response = agent.run(message)
 
 
206
  return response.output.value
207
 
208
 
209
  demo = gr.ChatInterface(fn=send_message)
210
  demo.launch()
211
+
212
+ # Set it back to empty when a session is done
213
+ # Is there a better way?
214
+ threads = {}
poetry.lock CHANGED
@@ -212,22 +212,22 @@ files = [
212
 
213
  [[package]]
214
  name = "attrs"
215
- version = "23.2.0"
216
  description = "Classes Without Boilerplate"
217
  optional = false
218
  python-versions = ">=3.7"
219
  files = [
220
- {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
221
- {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
222
  ]
223
 
224
  [package.extras]
225
- cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
226
- dev = ["attrs[tests]", "pre-commit"]
227
- docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
228
- tests = ["attrs[tests-no-zope]", "zope-interface"]
229
- tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
230
- tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
231
 
232
  [[package]]
233
  name = "azure-core"
@@ -982,35 +982,33 @@ websockets = ">=10.0,<12.0"
982
 
983
  [[package]]
984
  name = "griptape"
985
- version = "0.29.1"
986
  description = "Modular Python framework for LLM workflows, tools, memory, and data."
987
  optional = false
988
- python-versions = "<4.0,>=3.9"
989
- files = [
990
- {file = "griptape-0.29.1-py3-none-any.whl", hash = "sha256:ca10e57e2ab73ff8f177a3b0575f2c909e3e503e4ca1df113f9412fb9fba904b"},
991
- {file = "griptape-0.29.1.tar.gz", hash = "sha256:9cea05fa198a6b5efb3d25bee024367fdf92a9452b02a7080e3216432849e2f4"},
992
- ]
993
 
994
  [package.dependencies]
995
- anthropic = {version = ">=0.29.0,<0.30.0", optional = true, markers = "extra == \"drivers-prompt-anthropic\" or extra == \"drivers-prompt-amazon-bedrock\" or extra == \"all\""}
996
- attrs = ">=23.2.0,<24.0.0"
997
- docker = ">=7.1.0,<8.0.0"
998
- jinja2 = ">=3.1.4,<4.0.0"
999
- marshmallow = ">=3.21.3,<4.0.0"
1000
- marshmallow-enum = ">=1.5.1,<2.0.0"
1001
- numpy = ">=1.26.4,<2.0.0"
1002
- openai = ">=1.1.1,<2.0.0"
1003
- pyyaml = ">=6.0.1,<7.0.0"
1004
- requests = ">=2.32.0,<3.0.0"
1005
- rich = ">=13.7.1,<14.0.0"
1006
- schema = ">=0.7.7,<0.8.0"
1007
- stringcase = ">=1.2.0,<2.0.0"
1008
- tenacity = ">=8.5.0,<9.0.0"
1009
- tiktoken = ">=0.7,<0.8"
1010
- voyageai = {version = ">=0.2.1,<0.3.0", optional = true, markers = "extra == \"drivers-embedding-voyageai\" or extra == \"all\""}
1011
 
1012
  [package.extras]
1013
- all = ["accelerate (>=0.32.1,<0.33.0)", "anthropic (>=0.29.0,<0.30.0)", "beautifulsoup4 (>=4.12.3,<5.0.0)", "boto3 (>=1.34.119,<2.0.0)", "cohere (>=5.5.4,<6.0.0)", "diffusers (>=0.29.1,<0.30.0)", "duckduckgo-search (>=6.1.12,<7.0.0)", "elevenlabs (>=1.1.2,<2.0.0)", "filetype (>=1.2,<2.0)", "google-generativeai (>=0.7.2,<0.8.0)", "mail-parser (>=3.15.0,<4.0.0)", "markdownify (>=0.11.6,<0.12.0)", "marqo (>=3.7.0,<4.0.0)", "ollama (>=0.3.0,<0.4.0)", "opensearch-py (>=2.3.1,<3.0.0)", "opentelemetry-api (>=1.25.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.25.0,<2.0.0)", "opentelemetry-instrumentation (>=0.46b0,<0.47)", "opentelemetry-instrumentation-threading (>=0.46b0,<0.47)", "opentelemetry-sdk (>=1.25.0,<2.0.0)", "pandas (>=1.3,<2.0)", "pgvector (>=0.2.3,<0.3.0)", "pillow (>=10.2.0,<11.0.0)", "pinecone-client (>=3,<4)", "playwright (>=1.42,<2.0)", "psycopg2-binary (>=2.9.9,<3.0.0)", "pusher (>=3.3.2,<4.0.0)", "pymongo (>=4.8.0,<5.0.0)", "pypdf (>=3.9,<4.0)", "qdrant-client (>=1.10.1,<2.0.0)", "redis (>=4.6.0,<5.0.0)", "sentencepiece (>=0.2.0,<0.3.0)", "snowflake-sqlalchemy (>=1.6.1,<2.0.0)", "sqlalchemy (>=2.0.31,<3.0.0)", "torch (>=2.3.1,<3.0.0)", "trafilatura (>=1.6,<2.0)", "transformers[torch] (>=4.41.1,<5.0.0)", "voyageai (>=0.2.1,<0.3.0)"]
1014
  drivers-embedding-amazon-bedrock = ["boto3 (>=1.34.119,<2.0.0)"]
1015
  drivers-embedding-amazon-sagemaker = ["boto3 (>=1.34.119,<2.0.0)"]
1016
  drivers-embedding-cohere = ["cohere (>=5.5.4,<6.0.0)"]
@@ -1041,6 +1039,7 @@ drivers-sql-amazon-redshift = ["boto3 (>=1.34.119,<2.0.0)"]
1041
  drivers-sql-snowflake = ["snowflake-sqlalchemy (>=1.6.1,<2.0.0)", "sqlalchemy (>=2.0.31,<3.0.0)"]
1042
  drivers-text-to-speech-elevenlabs = ["elevenlabs (>=1.1.2,<2.0.0)"]
1043
  drivers-vector-amazon-opensearch = ["boto3 (>=1.34.119,<2.0.0)", "opensearch-py (>=2.3.1,<3.0.0)"]
 
1044
  drivers-vector-marqo = ["marqo (>=3.7.0,<4.0.0)"]
1045
  drivers-vector-mongodb = ["pymongo (>=4.8.0,<5.0.0)"]
1046
  drivers-vector-opensearch = ["opensearch-py (>=2.3.1,<3.0.0)"]
@@ -1058,6 +1057,12 @@ loaders-image = ["pillow (>=10.2.0,<11.0.0)"]
1058
  loaders-pdf = ["pypdf (>=3.9,<4.0)"]
1059
  loaders-sql = ["sqlalchemy (>=2.0.31,<3.0.0)"]
1060
 
 
 
 
 
 
 
1061
  [[package]]
1062
  name = "h11"
1063
  version = "0.14.0"
@@ -3331,4 +3336,4 @@ multidict = ">=4.0"
3331
  [metadata]
3332
  lock-version = "2.0"
3333
  python-versions = "^3.11"
3334
- content-hash = "be2915a907a6193804a58bba582e6b5611f9b31dd9aa15425189c3fd7b327a54"
 
212
 
213
  [[package]]
214
  name = "attrs"
215
+ version = "24.2.0"
216
  description = "Classes Without Boilerplate"
217
  optional = false
218
  python-versions = ">=3.7"
219
  files = [
220
+ {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
221
+ {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
222
  ]
223
 
224
  [package.extras]
225
+ benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
226
+ cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
227
+ dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
228
+ docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
229
+ tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
230
+ tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
231
 
232
  [[package]]
233
  name = "azure-core"
 
982
 
983
  [[package]]
984
  name = "griptape"
985
+ version = "0.30.1"
986
  description = "Modular Python framework for LLM workflows, tools, memory, and data."
987
  optional = false
988
+ python-versions = "^3.9"
989
+ files = []
990
+ develop = false
 
 
991
 
992
  [package.dependencies]
993
+ anthropic = {version = "^0.29.0", optional = true}
994
+ attrs = "^24.2.0"
995
+ docker = "^7.1.0"
996
+ jinja2 = "^3.1.4"
997
+ marshmallow = "^3.21.3"
998
+ marshmallow-enum = "^1.5.1"
999
+ numpy = "^1.26.4"
1000
+ openai = "^1.1.1"
1001
+ pyyaml = "^6.0.1"
1002
+ requests = "^2.32.0"
1003
+ rich = "^13.7.1"
1004
+ schema = "^0.7.7"
1005
+ stringcase = "^1.2.0"
1006
+ tenacity = "^8.5.0"
1007
+ tiktoken = "^0.7"
1008
+ voyageai = {version = "^0.2.1", optional = true}
1009
 
1010
  [package.extras]
1011
+ all = ["accelerate (>=0.32.1,<0.33.0)", "anthropic (>=0.29.0,<0.30.0)", "astrapy (>=1.4,<2.0)", "beautifulsoup4 (>=4.12.3,<5.0.0)", "boto3 (>=1.34.119,<2.0.0)", "cohere (>=5.5.4,<6.0.0)", "diffusers (>=0.29.1,<0.30.0)", "duckduckgo-search (>=6.1.12,<7.0.0)", "elevenlabs (>=1.1.2,<2.0.0)", "filetype (>=1.2,<2.0)", "google-generativeai (>=0.7.2,<0.8.0)", "mail-parser (>=3.15.0,<4.0.0)", "markdownify (>=0.11.6,<0.12.0)", "marqo (>=3.7.0,<4.0.0)", "ollama (>=0.3.0,<0.4.0)", "opensearch-py (>=2.3.1,<3.0.0)", "opentelemetry-api (>=1.25.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.25.0,<2.0.0)", "opentelemetry-instrumentation (>=0.46b0,<0.47)", "opentelemetry-instrumentation-threading (>=0.46b0,<0.47)", "opentelemetry-sdk (>=1.25.0,<2.0.0)", "pandas (>=1.3,<2.0)", "pgvector (>=0.2.3,<0.3.0)", "pillow (>=10.2.0,<11.0.0)", "pinecone-client (>=3,<4)", "playwright (>=1.42,<2.0)", "psycopg2-binary (>=2.9.9,<3.0.0)", "pusher (>=3.3.2,<4.0.0)", "pymongo (>=4.8.0,<5.0.0)", "pypdf (>=3.9,<4.0)", "qdrant-client (>=1.10.1,<2.0.0)", "redis (>=4.6.0,<5.0.0)", "sentencepiece (>=0.2.0,<0.3.0)", "snowflake-sqlalchemy (>=1.6.1,<2.0.0)", "sqlalchemy (>=2.0.31,<3.0.0)", "torch (>=2.3.1,<3.0.0)", "trafilatura (>=1.6,<2.0)", "transformers[torch] (>=4.41.1,<5.0.0)", "voyageai (>=0.2.1,<0.3.0)"]
1012
  drivers-embedding-amazon-bedrock = ["boto3 (>=1.34.119,<2.0.0)"]
1013
  drivers-embedding-amazon-sagemaker = ["boto3 (>=1.34.119,<2.0.0)"]
1014
  drivers-embedding-cohere = ["cohere (>=5.5.4,<6.0.0)"]
 
1039
  drivers-sql-snowflake = ["snowflake-sqlalchemy (>=1.6.1,<2.0.0)", "sqlalchemy (>=2.0.31,<3.0.0)"]
1040
  drivers-text-to-speech-elevenlabs = ["elevenlabs (>=1.1.2,<2.0.0)"]
1041
  drivers-vector-amazon-opensearch = ["boto3 (>=1.34.119,<2.0.0)", "opensearch-py (>=2.3.1,<3.0.0)"]
1042
+ drivers-vector-astra-db = ["astrapy (>=1.4,<2.0)"]
1043
  drivers-vector-marqo = ["marqo (>=3.7.0,<4.0.0)"]
1044
  drivers-vector-mongodb = ["pymongo (>=4.8.0,<5.0.0)"]
1045
  drivers-vector-opensearch = ["opensearch-py (>=2.3.1,<3.0.0)"]
 
1057
  loaders-pdf = ["pypdf (>=3.9,<4.0)"]
1058
  loaders-sql = ["sqlalchemy (>=2.0.31,<3.0.0)"]
1059
 
1060
+ [package.source]
1061
+ type = "git"
1062
+ url = "https://github.com/griptape-ai/griptape"
1063
+ reference = "dev"
1064
+ resolved_reference = "489453eddb0bfeb026a754278b5d3cde546427bb"
1065
+
1066
  [[package]]
1067
  name = "h11"
1068
  version = "0.14.0"
 
3336
  [metadata]
3337
  lock-version = "2.0"
3338
  python-versions = "^3.11"
3339
+ content-hash = "8d3d5c66554c9d6f0095463ce6653da9aaa439f8637871c474489ac050ee9c49"
pyproject.toml CHANGED
@@ -1,5 +1,5 @@
1
  [tool.poetry]
2
- name = "griptape-chat"
3
  version = "0.1.0"
4
  description = "Chat demo using the Griptape Framework and Gradio."
5
  authors = ["Griptape <[email protected]>"]
@@ -12,8 +12,8 @@ package-mode = false
12
  python = "^3.11"
13
  python-dotenv = "^1.0.0"
14
  gradio = "^4.37.1"
15
- griptape = {extras = ["drivers-embedding-voyageai","drivers-prompt-anthropic"], version = "^0.29.1"}
16
- attrs = "^23.1.0"
17
  pymupdf = "^1.24.7"
18
  argparse = "^1.4.0"
19
  azure-identity = "^1.17.1"
 
1
  [tool.poetry]
2
+ name = "griptape-test"
3
  version = "0.1.0"
4
  description = "Chat demo using the Griptape Framework and Gradio."
5
  authors = ["Griptape <[email protected]>"]
 
12
  python = "^3.11"
13
  python-dotenv = "^1.0.0"
14
  gradio = "^4.37.1"
15
+ griptape = {git="https://github.com/griptape-ai/griptape",branch="dev", extras=["drivers-embedding-voyageai","drivers-prompt-anthropic"]}
16
+ attrs = "^24.2.0"
17
  pymupdf = "^1.24.7"
18
  argparse = "^1.4.0"
19
  azure-identity = "^1.17.1"