Commit
·
5f5a29d
1
Parent(s):
7c6c2ea
Initial draft
Browse files- .idea/.gitignore +8 -0
- .idea/Agents_Course_Final_Project.iml +14 -0
- .idea/inspectionProfiles/Project_Default.xml +25 -0
- .idea/inspectionProfiles/profiles_settings.xml +6 -0
- .idea/misc.xml +4 -0
- .idea/modules.xml +8 -0
- .idea/vcs.xml +6 -0
- app.py +66 -26
- requirements.txt +2 -0
.idea/.gitignore
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Default ignored files
|
2 |
+
/shelf/
|
3 |
+
/workspace.xml
|
4 |
+
# Editor-based HTTP Client requests
|
5 |
+
/httpRequests/
|
6 |
+
# Datasource local storage ignored files
|
7 |
+
/dataSources/
|
8 |
+
/dataSources.local.xml
|
.idea/Agents_Course_Final_Project.iml
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<module type="PYTHON_MODULE" version="4">
|
3 |
+
<component name="NewModuleRootManager">
|
4 |
+
<content url="file://$MODULE_DIR$">
|
5 |
+
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
6 |
+
</content>
|
7 |
+
<orderEntry type="jdk" jdkName="Python 3.11 (Agents_Course_Final_Project)" jdkType="Python SDK" />
|
8 |
+
<orderEntry type="sourceFolder" forTests="false" />
|
9 |
+
</component>
|
10 |
+
<component name="PyDocumentationSettings">
|
11 |
+
<option name="format" value="PLAIN" />
|
12 |
+
<option name="myDocStringFormat" value="Plain" />
|
13 |
+
</component>
|
14 |
+
</module>
|
.idea/inspectionProfiles/Project_Default.xml
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<component name="InspectionProjectProfileManager">
|
2 |
+
<profile version="1.0">
|
3 |
+
<option name="myName" value="Project Default" />
|
4 |
+
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
5 |
+
<option name="ignoredPackages">
|
6 |
+
<value>
|
7 |
+
<list size="12">
|
8 |
+
<item index="0" class="java.lang.String" itemvalue="blinker" />
|
9 |
+
<item index="1" class="java.lang.String" itemvalue="joblib" />
|
10 |
+
<item index="2" class="java.lang.String" itemvalue="Werkzeug" />
|
11 |
+
<item index="3" class="java.lang.String" itemvalue="tzdata" />
|
12 |
+
<item index="4" class="java.lang.String" itemvalue="MarkupSafe" />
|
13 |
+
<item index="5" class="java.lang.String" itemvalue="numpy" />
|
14 |
+
<item index="6" class="java.lang.String" itemvalue="click" />
|
15 |
+
<item index="7" class="java.lang.String" itemvalue="uuid" />
|
16 |
+
<item index="8" class="java.lang.String" itemvalue="pandas" />
|
17 |
+
<item index="9" class="java.lang.String" itemvalue="pytz" />
|
18 |
+
<item index="10" class="java.lang.String" itemvalue="itsdangerous" />
|
19 |
+
<item index="11" class="java.lang.String" itemvalue="Flask" />
|
20 |
+
</list>
|
21 |
+
</value>
|
22 |
+
</option>
|
23 |
+
</inspection_tool>
|
24 |
+
</profile>
|
25 |
+
</component>
|
.idea/inspectionProfiles/profiles_settings.xml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<component name="InspectionProjectProfileManager">
|
2 |
+
<settings>
|
3 |
+
<option name="USE_PROJECT_PROFILE" value="false" />
|
4 |
+
<version value="1.0" />
|
5 |
+
</settings>
|
6 |
+
</component>
|
.idea/misc.xml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<project version="4">
|
3 |
+
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (Agents_Course_Final_Project)" project-jdk-type="Python SDK" />
|
4 |
+
</project>
|
.idea/modules.xml
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<project version="4">
|
3 |
+
<component name="ProjectModuleManager">
|
4 |
+
<modules>
|
5 |
+
<module fileurl="file://$PROJECT_DIR$/.idea/Agents_Course_Final_Project.iml" filepath="$PROJECT_DIR$/.idea/Agents_Course_Final_Project.iml" />
|
6 |
+
</modules>
|
7 |
+
</component>
|
8 |
+
</project>
|
.idea/vcs.xml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<project version="4">
|
3 |
+
<component name="VcsDirectoryMappings">
|
4 |
+
<mapping directory="" vcs="Git" />
|
5 |
+
</component>
|
6 |
+
</project>
|
app.py
CHANGED
@@ -7,6 +7,15 @@ import asyncio
|
|
7 |
from llama_index.tools.duckduckgo import DuckDuckGoSearchToolSpec
|
8 |
from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI
|
9 |
from llama_index.core.agent.workflow import AgentWorkflow
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
|
12 |
# (Keep Constants as is)
|
@@ -18,13 +27,41 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
|
|
18 |
class BasicAgent:
|
19 |
def __init__(self):
|
20 |
self.llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct")
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
23 |
print("BasicAgent initialized.")
|
24 |
|
25 |
async def __call__(self, question: str) -> str:
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
def run_and_submit_all( profile: gr.OAuthProfile | None):
|
30 |
"""
|
@@ -179,25 +216,28 @@ with gr.Blocks() as demo:
|
|
179 |
)
|
180 |
|
181 |
if __name__ == "__main__":
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
|
|
|
|
|
|
|
7 |
from llama_index.tools.duckduckgo import DuckDuckGoSearchToolSpec
|
8 |
from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI
|
9 |
from llama_index.core.agent.workflow import AgentWorkflow
|
10 |
+
from llama_index.core import SummaryIndex
|
11 |
+
from llama_index.readers.web import SimpleWebPageReader
|
12 |
+
from llama_index.core.agent.workflow import (
|
13 |
+
AgentInput,
|
14 |
+
AgentOutput,
|
15 |
+
ToolCall,
|
16 |
+
ToolCallResult,
|
17 |
+
AgentStream,
|
18 |
+
)
|
19 |
|
20 |
|
21 |
# (Keep Constants as is)
|
|
|
27 |
class BasicAgent:
|
28 |
def __init__(self):
|
29 |
self.llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct")
|
30 |
+
system_prompt = """
|
31 |
+
You are a helpful assistant that answers questions. If you don't know the answer, you can search the web for information.
|
32 |
+
If you are searching the web, keep the query very concise in order to get good results.
|
33 |
+
"""
|
34 |
+
self.agent = AgentWorkflow.from_tools_or_functions([search_web], llm=self.llm,
|
35 |
+
system_prompt=system_prompt)
|
36 |
print("BasicAgent initialized.")
|
37 |
|
38 |
async def __call__(self, question: str) -> str:
|
39 |
+
handler = self.agent.run(user_msg=question)
|
40 |
+
async for event in handler.stream_events():
|
41 |
+
if isinstance(event, AgentStream):
|
42 |
+
print(event.delta, end="", flush=True)
|
43 |
+
elif isinstance(event, ToolCallResult):
|
44 |
+
print(event.tool_name) # the tool name
|
45 |
+
print(event.tool_kwargs) # the tool kwargs
|
46 |
+
print(event.tool_output) # the tool output
|
47 |
+
response = await handler
|
48 |
+
return str(response)
|
49 |
+
|
50 |
+
async def search_web(query: str) -> str:
|
51 |
+
"""Useful for using the web to answer questions. Keep the query very concise in order to get good results."""
|
52 |
+
client = DuckDuckGoSearchToolSpec()
|
53 |
+
search_res = client.duckduckgo_instant_search(query)
|
54 |
+
return str(search_res)
|
55 |
+
# print("Search res: ", search_res)
|
56 |
+
# web_pages = [search_res[i]['url'] if 'url' in search_res[i] else None for i in range(len(search_res))]
|
57 |
+
# web_pages = [web_pages[0]]
|
58 |
+
# documents = SimpleWebPageReader(html_to_text=True).load_data(
|
59 |
+
# web_pages
|
60 |
+
# )
|
61 |
+
# return documents
|
62 |
+
# # documents = SimpleWebPageReader(html_to_text=True).load_data(
|
63 |
+
# # ["http://paulgraham.com/worked.html"]
|
64 |
+
# # )
|
65 |
|
66 |
def run_and_submit_all( profile: gr.OAuthProfile | None):
|
67 |
"""
|
|
|
216 |
)
|
217 |
|
218 |
if __name__ == "__main__":
|
219 |
+
agent = BasicAgent()
|
220 |
+
answ = asyncio.run(agent("Who is Michael Jackson?"))
|
221 |
+
|
222 |
+
# print("\n" + "-"*30 + " App Starting " + "-"*30)
|
223 |
+
# # Check for SPACE_HOST and SPACE_ID at startup for information
|
224 |
+
# space_host_startup = os.getenv("SPACE_HOST")
|
225 |
+
# space_id_startup = os.getenv("SPACE_ID") # Get SPACE_ID at startup
|
226 |
+
#
|
227 |
+
# if space_host_startup:
|
228 |
+
# print(f"✅ SPACE_HOST found: {space_host_startup}")
|
229 |
+
# print(f" Runtime URL should be: https://{space_host_startup}.hf.space")
|
230 |
+
# else:
|
231 |
+
# print("ℹ️ SPACE_HOST environment variable not found (running locally?).")
|
232 |
+
#
|
233 |
+
# if space_id_startup: # Print repo URLs if SPACE_ID is found
|
234 |
+
# print(f"✅ SPACE_ID found: {space_id_startup}")
|
235 |
+
# print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
|
236 |
+
# print(f" Repo Tree URL: https://huggingface.co/spaces/{space_id_startup}/tree/main")
|
237 |
+
# else:
|
238 |
+
# print("ℹ️ SPACE_ID environment variable not found (running locally?). Repo URL cannot be determined.")
|
239 |
+
#
|
240 |
+
# print("-"*(60 + len(" App Starting ")) + "\n")
|
241 |
+
#
|
242 |
+
# print("Launching Gradio Interface for Basic Agent Evaluation...")
|
243 |
+
# demo.launch(debug=True, share=False)
|
requirements.txt
CHANGED
@@ -1,8 +1,10 @@
|
|
1 |
gradio
|
|
|
2 |
requests
|
3 |
llama-index
|
4 |
llama-index-vector-stores-chroma
|
5 |
llama-index-llms-huggingface-api
|
6 |
llama-index-embeddings-huggingface
|
7 |
llama-index-tools-duckduckgo
|
|
|
8 |
syncio
|
|
|
1 |
gradio
|
2 |
+
gradio[oauth]
|
3 |
requests
|
4 |
llama-index
|
5 |
llama-index-vector-stores-chroma
|
6 |
llama-index-llms-huggingface-api
|
7 |
llama-index-embeddings-huggingface
|
8 |
llama-index-tools-duckduckgo
|
9 |
+
llama-index-readers-web
|
10 |
syncio
|