From 4b1a9fa87a26ffcc280ba4ffbc76f5fa5595707b Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Tue, 18 Jun 2024 00:39:42 +0200 Subject: [PATCH 01/10] added Groq Support --- agents/agent.py | 8 ++++++- configs/config.yaml | 3 ++- models/groq_models.py | 49 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 models/groq_models.py diff --git a/agents/agent.py b/agents/agent.py index d445648..23cb712 100644 --- a/agents/agent.py +++ b/agents/agent.py @@ -2,6 +2,7 @@ from prompts.prompts import agent_system_prompt_template from models.openai_models import OpenAIModel from models.ollama_models import OllamaModel +from models.groq_models import GroqModel from tools.basic_calculator import basic_calculator from tools.reverser import reverse_string from toolbox.toolbox import ToolBox @@ -100,10 +101,15 @@ def work(self, prompt): tools = [basic_calculator, reverse_string] - # Uncoment below to run with OpenAI + # Uncomment below to run with OpenAI # model_service = OpenAIModel # model_name = 'gpt-3.5-turbo' # stop = None + + # Uncomment below to run with GroqAI + #model_service = GroqModel + #model_name = 'llama3-70b-8192' + #stop = None # Uncomment below to run with Ollama model_service = OllamaModel diff --git a/configs/config.yaml b/configs/config.yaml index 0070135..7bdb5ef 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -1 +1,2 @@ -OPENAI_API_KEY: 'YOUR_API_KEY' \ No newline at end of file +OPENAI_API_KEY: 'YOUR_API_KEY' +GROQ_API_KEY: 'YOUR_API_KEY' \ No newline at end of file diff --git a/models/groq_models.py b/models/groq_models.py new file mode 100644 index 0000000..c6ab401 --- /dev/null +++ b/models/groq_models.py @@ -0,0 +1,49 @@ +import requests +import json +import os +from utils.get_keys import load_config + +config_path = os.path.join(os.path.dirname(__file__), '..', 'configs', 'config.yaml') +load_config(config_path) + +class GroqModel: + def __init__(self, model, system_prompt, temperature): + self.model_endpoint = 'https://api.groq.com/openai/v1/chat/completions' + self.temperature = temperature + self.model = model + self.system_prompt = system_prompt + load_config(config_path) + self.api_key = os.getenv('GROQ_API_KEY') + self.headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Bearer {self.api_key}' + } + + + def generate_text(self, prompt): + + payload = { + "model": self.model, + "response_format": {"type": "json_object"}, + "messages": [ + { + "role": "system", + "content": self.system_prompt + }, + { + "role": "user", + "content": prompt + } + ], + "stream": False, + "temperature": self.temperature, + } + + response_dict = requests.post(self.model_endpoint, headers=self.headers, data=json.dumps(payload)) + response_json = response_dict.json() + print(response_json) + response = json.loads(response_json['choices'][0]['message']['content']) + + print(F"\n\nResponse from Groq model: {response}") + + return response \ No newline at end of file From 5f70f8bc8cd00ba5b5d2db044e65b1286fbfa7d1 Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Tue, 18 Jun 2024 01:04:40 +0200 Subject: [PATCH 02/10] fork this --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index bb422d8..667edec 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 John Adeojo +Copyright (c) 2024 John Adeojo, Sir Lord Dalibor JONIC, MSc BSc Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 37676a9d74096f7dc5b2a746a36ec35cb5f249b5 Mon Sep 17 00:00:00 2001 From: "Sir Lord Dalibor JONIC, MSc BSc" <128752991+dalijon-byte@users.noreply.github.com> Date: Tue, 18 Jun 2024 01:32:36 +0200 Subject: [PATCH 03/10] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 43cdd83..46f237a 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,12 @@ Ollama [API documentation](https://github.com/ollama/ollama/blob/main/docs/api.m 3. Navigate to the bottom of the `agent.py` script and uncomment the Ollama arguments and comment out the OpenAI arguments. ### Run Your Query In Shell + ```bash python -m agents.agent ``` Then enter your query. +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=dalijon-byte/use-tools&type=Date)](https://star-history.com/#dalijon-byte/use-tools&Date) From 5c52006eed5417300dcb50afed5aa9c0d4cc675a Mon Sep 17 00:00:00 2001 From: "Sir Lord Dalibor JONIC, MSc BSc" <128752991+dalijon-byte@users.noreply.github.com> Date: Tue, 18 Jun 2024 01:33:48 +0200 Subject: [PATCH 04/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46f237a..2044e51 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ A simple project for enabling LLM agents to use tools. ### Clone and Navigate to the Repository 1. **Clone the Repo:** ```bash - git clone https://github.com/john-adeojo/use-tools.git + git clone https://github.com/dalijon-byte/use-tools.git ``` 2. **Navigate to the Repo:** ```bash From 75a5a2a54da1baaed64fcafe3324e8eb25395227 Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Tue, 18 Jun 2024 23:44:53 +0200 Subject: [PATCH 05/10] added basic google searcher tool ;) --- agents/agent.py | 5 +++-- tools/searcher.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 tools/searcher.py diff --git a/agents/agent.py b/agents/agent.py index 23cb712..a261709 100644 --- a/agents/agent.py +++ b/agents/agent.py @@ -5,6 +5,7 @@ from models.groq_models import GroqModel from tools.basic_calculator import basic_calculator from tools.reverser import reverse_string +from tools.searcher import search from toolbox.toolbox import ToolBox @@ -98,7 +99,7 @@ def work(self, prompt): # Example usage if __name__ == "__main__": - tools = [basic_calculator, reverse_string] + tools = [basic_calculator, reverse_string, search] # Uncomment below to run with OpenAI @@ -113,7 +114,7 @@ def work(self, prompt): # Uncomment below to run with Ollama model_service = OllamaModel - model_name = 'llama3:instruct' + model_name = 'codestral:latest' stop = "<|eot_id|>" agent = Agent(tools=tools, model_service=model_service, model_name=model_name, stop=stop) diff --git a/tools/searcher.py b/tools/searcher.py new file mode 100644 index 0000000..1a2138e --- /dev/null +++ b/tools/searcher.py @@ -0,0 +1,39 @@ +import requests +import time +from bs4 import BeautifulSoup +from urllib.parse import quote_plus + +def search(query, num_results=5, delay=2, max_retries=3): + """ + Perform a web search and return the top results. + Args: + query (str): Search query. + num_results (int): Number of results to return. Do at least 2 please. + delay (int): Delay between requests in seconds. + max_retries (int): Maximum number of retries for failed requests. + Returns: + list: List of top search results (title, link). + """ + query = str(query) # Convert query to string + search_url = f"https://www.google.com/search?q={quote_plus(query)}" + headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'} + results = [] + retries = 0 + + while retries < max_retries: + try: + with requests.get(search_url, headers=headers, timeout=10) as response: + response.raise_for_status() + soup = BeautifulSoup(response.text, "html.parser") + result_divs = soup.find_all('div', class_='yuRUbf') + for result in result_divs[:num_results]: + title = result.find('h3').get_text() + link = result.find('a')['href'] + results.append((title, link)) + return results + except (requests.RequestException, ValueError) as e: + print(f"Error during search: {e}") + retries += 1 + time.sleep(delay * (2 ** retries)) + + return results \ No newline at end of file From f5a39dd221da475b58babfd364af47e5927e770c Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Tue, 18 Jun 2024 23:50:29 +0200 Subject: [PATCH 06/10] added basic google searcher tool --- tools/searcher.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/searcher.py b/tools/searcher.py index 1a2138e..25387a2 100644 --- a/tools/searcher.py +++ b/tools/searcher.py @@ -1,3 +1,13 @@ +# @author Sir Lord Dalibor JONIC, MSc BSc (c +__author__ = "Sir Lord Dalibor JONIC, MSc BSc" +__copyright__ = "BeMyInspiration 2024" +__license__ = "MIT" +__version__ = "1.0.0" +__maintainer__ = "Sir Lord Dalibor JONIC, MSc BSc" +__email__ = "dali.manu@gmail.com" +__status__ = "Production" +__description__ = "Google searcher with aration" + import requests import time from bs4 import BeautifulSoup From f0d4752d213334adac8910849106c89fa771f66c Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Thu, 20 Jun 2024 17:38:19 +0200 Subject: [PATCH 07/10] Perform a web search using DuckDuckGo and start the WebBrowser if there is a match --- agents/agent.py | 13 +++++++-- tools/ddg_searcher.py | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 tools/ddg_searcher.py diff --git a/agents/agent.py b/agents/agent.py index a261709..2c907b2 100644 --- a/agents/agent.py +++ b/agents/agent.py @@ -5,8 +5,10 @@ from models.groq_models import GroqModel from tools.basic_calculator import basic_calculator from tools.reverser import reverse_string -from tools.searcher import search +from tools.ddg_searcher import search from toolbox.toolbox import ToolBox +import webbrowser + class Agent: @@ -86,8 +88,14 @@ def work(self, prompt): for tool in self.tools: if tool.__name__ == tool_choice: response = tool(tool_input) - print(colored(response, 'cyan')) + if isinstance(response, list): + for result in response: + if isinstance(result, tuple) and len(result) > 1 and isinstance(result[1], str): + url = result[1] + if url.startswith('http'): + webbrowser.open(url) + break return # return tool(tool_input) @@ -123,5 +131,6 @@ def work(self, prompt): prompt = input("Ask me anything: ") if prompt.lower() == "exit": break + agent.work(prompt) diff --git a/tools/ddg_searcher.py b/tools/ddg_searcher.py new file mode 100644 index 0000000..bbedb86 --- /dev/null +++ b/tools/ddg_searcher.py @@ -0,0 +1,66 @@ +# @author Sir Lord Dalibor JONIC, MSc BSc (c +__author__ = "Sir Lord Dalibor JONIC, MSc BSc" +__copyright__ = "BeMyInspiration 2024" +__license__ = "MIT" +__version__ = "1.0.0" +__maintainer__ = "Sir Lord Dalibor JONIC, MSc BSc" +__email__ = "dali.manu@gmail.com" +__status__ = "Production" +__description__ = "Google searcher with aration" + +from duckduckgo_search import DDGS +import time +import json + +def search(query, num_results=5, delay=2, max_retries=1): + """ + Perform a web search using DuckDuckGo and return the top results. + Args: + query (str): Search query. + num_results (int): Number of results to return. At least 5. + delay (int): Delay between retries in seconds. + max_retries (int): Maximum number of retries for failed requests. + Returns: + list: List of top search results (title, link). + """ + # Replace single quotes with double quotes + input_str_clean = json.dumps(query) + input_str_clean = input_str_clean.replace("'", "\"") + # Remove any extraneous characters such as trailing quotes + input_str_clean = input_str_clean.strip().strip("\"") + print (query) + + print (input_str_clean) + try: + parsed_data = json.loads(input_str_clean) + query_content = parsed_data['query'] + print (parsed_data) + query = query_content + results = [] + retries = 0 + except json.JSONDecodeError as e: + print(f"JSON decoding error: {e}") + + while retries < max_retries: + try: + with DDGS() as ddgs: + search_results = list(ddgs.text(query, max_results=num_results)) + + for result in search_results: + title = result['title'] + link = result['href'] + results.append((title, link)) + + return results + + except Exception as e: + print(f"Error during search: {e}") + retries += 1 + time.sleep(delay * (2 ** retries)) + + return results + +# Example usage: +#query = "this is all about ai" +#search_results = search(query, num_results=5) +#print(search_results) \ No newline at end of file From d8aa22b42341062fd1ad64511022e69140da53e0 Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Thu, 20 Jun 2024 17:44:29 +0200 Subject: [PATCH 08/10] skip prints --- agent.py | 136 +++++++++ agents/__pycache__/__init__.cpython-311.pyc | Bin 207 -> 153 bytes agents/__pycache__/agent.cpython-311.pyc | Bin 4542 -> 5150 bytes ddg_searcher.py | 4 + models/__pycache__/__init__.cpython-311.pyc | Bin 207 -> 153 bytes .../__pycache__/ollama_models.cpython-311.pyc | Bin 2727 -> 2755 bytes .../__pycache__/openai_models.cpython-311.pyc | Bin 2440 -> 2386 bytes news_ukraine_war_20240620_165102.json | 258 ++++++++++++++++++ prompts/__pycache__/__init__.cpython-311.pyc | Bin 208 -> 154 bytes prompts/__pycache__/prompts.cpython-311.pyc | Bin 960 -> 906 bytes toolbox/__pycache__/toolbox.cpython-311.pyc | Bin 1697 -> 1643 bytes tools/__pycache__/__init__.cpython-311.pyc | Bin 206 -> 152 bytes .../basic_calculator.cpython-311.pyc | Bin 2764 -> 2707 bytes tools/__pycache__/reverser.cpython-311.pyc | Bin 653 -> 599 bytes tools/__pycache__/searcher.cpython-311.pyc | Bin 0 -> 2619 bytes tools/__pycache__/searcher1.cpython-311.pyc | Bin 0 -> 4174 bytes tools/__pycache__/searcher2.cpython-311.pyc | Bin 0 -> 2957 bytes tools/__pycache__/searcher3.cpython-311.pyc | Bin 0 -> 932 bytes tools/ddg_searcher.py | 6 +- tools/searcher.py | 24 +- tools/searcher1.py | 66 +++++ tools/searcher3.py | 17 ++ utils/__pycache__/get_keys.cpython-311.pyc | Bin 845 -> 791 bytes 23 files changed, 496 insertions(+), 15 deletions(-) create mode 100644 agent.py create mode 100644 ddg_searcher.py create mode 100644 news_ukraine_war_20240620_165102.json create mode 100644 tools/__pycache__/searcher.cpython-311.pyc create mode 100644 tools/__pycache__/searcher1.cpython-311.pyc create mode 100644 tools/__pycache__/searcher2.cpython-311.pyc create mode 100644 tools/__pycache__/searcher3.cpython-311.pyc create mode 100644 tools/searcher1.py create mode 100644 tools/searcher3.py diff --git a/agent.py b/agent.py new file mode 100644 index 0000000..f2ca803 --- /dev/null +++ b/agent.py @@ -0,0 +1,136 @@ +from termcolor import colored +from prompts.prompts import agent_system_prompt_template +from models.openai_models import OpenAIModel +from models.ollama_models import OllamaModel +from models.groq_models import GroqModel +from tools.basic_calculator import basic_calculatorgoogll +from tools.reverser import reverse_string +from tools.searcher3 import search +from toolbox.toolbox import ToolBox +import webbrowser + + + +class Agent: + def __init__(self, tools, model_service, model_name, stop=None): + """ + Initializes the agent with a list of tools and a model. + + Parameters: + tools (list): List of tool functions. + model_service (class): The model service class with a generate_text method. + model_name (str): The name of the model to use. + """ + self.tools = tools + self.model_service = model_service + self.model_name = model_name + self.stop = stop + + def prepare_tools(self): + """ + Stores the tools in the toolbox and returns their descriptions. + + Returns: + str: Descriptions of the tools stored in the toolbox. + """ + toolbox = ToolBox() + toolbox.store(self.tools) + tool_descriptions = toolbox.tools() + return tool_descriptions + + def think(self, prompt): + """ + Runs the generate_text method on the model using the system prompt template and tool descriptions. + + Parameters: + prompt (str): The user query to generate a response for. + + Returns: + dict: The response from the model as a dictionary. + """ + tool_descriptions = self.prepare_tools() + agent_system_prompt = agent_system_prompt_template.format(tool_descriptions=tool_descriptions) + + # Create an instance of the model service with the system prompt + + if self.model_service == OllamaModel: + model_instance = self.model_service( + model=self.model_name, + system_prompt=agent_system_prompt, + temperature=0, + stop=self.stop + ) + else: + model_instance = self.model_service( + model=self.model_name, + system_prompt=agent_system_prompt, + temperature=0 + ) + + # Generate and return the response dictionary + agent_response_dict = model_instance.generate_text(prompt) + return agent_response_dict + + def work(self, prompt): + """ + Parses the dictionary returned from think and executes the appropriate tool. + + Parameters: + prompt (str): The user query to generate a response for. + + Returns: + The response from executing the appropriate tool or the tool_input if no matching tool is found. + """ + agent_response_dict = self.think(prompt) + tool_choice = agent_response_dict.get("tool_choice") + tool_input = agent_response_dict.get("tool_input") + + for tool in self.tools: + if tool.__name__ == tool_choice: + response = tool(tool_input) + print(colored(response, 'cyan')) + if isinstance(response, list): + for result in response: + if isinstance(result, tuple) and len(result) > 1 and isinstance(result[1], str): + url = result[1] + if url.startswith('http'): + webbrowser.open(url) + break + return + # return tool(tool_input) + + print(colored(tool_input, 'cyan')) + + return + + +# Example usage +if __name__ == "__main__": + + tools = [basic_calculator, reverse_string, search] + + + # Uncomment below to run with OpenAI + # model_service = OpenAIModel + # model_name = 'gpt-3.5-turbo' + # stop = None + + # Uncomment below to run with GroqAI + #model_service = GroqModel + #model_name = 'llama3-70b-8192' + #stop = None + + # Uncomment below to run with Ollama + model_service = OllamaModel + model_name = 'codestral:latest' + stop = "<|eot_id|>" + + agent = Agent(tools=tools, model_service=model_service, model_name=model_name, stop=stop) + + while True: + prompt = input("Ask me anything: ") + if prompt.lower() == "exit": + break + + + agent.work(prompt) diff --git a/agents/__pycache__/__init__.cpython-311.pyc b/agents/__pycache__/__init__.cpython-311.pyc index cd4f17d4d3c0a8b8287687e4882540cf40f7a507..7de9fdf34aa7022fe9a6286357ad1e09e156fc44 100644 GIT binary patch delta 57 zcmX@lIFpfkIWI340}x!D?otxD delta 111 zcmbQqc%G4aIWI340}yy@%bmz=8j<8~72{i};8K)XmKx)dSdysgoSIisl$op$oS#!# zl9``Z9AjXvr{I#Ao>`KZqu`vMR{~TJQ(By=P?DdYQyi0=pOOmV>O#1Q=|Jh?n2AZ| E0Mjuh)c^nh diff --git a/agents/__pycache__/agent.cpython-311.pyc b/agents/__pycache__/agent.cpython-311.pyc index b9ce965a0f3906e15eb92536eb3739cfa31d1d31..2559dbaf5690f7960f6a2a57642b47383a9d274b 100644 GIT binary patch delta 1874 zcmZuxTWk|Y6rHtq*Y8*S!gdl{i7;^>F)bmLctk*p=t{X5K;{i)LO%?^ zAl!7*eS;gO2qG}D+N*qG^(hg~*&}#6J`95OD1f2WJ}L^s zNVgROF72iY37>MDd5g0gM$&2J8Z+wUWtc@X`2?exj!BYuKw6kuzsEda_PL2Wu4zL4^YaOzP@!5!-#>rSh z5Yc@TM&wie+vM^y9kq$j$k;OC)9jcnTQ!21?G!T;jO?7W5u%Smb0Mnay=$XxTR83E7 zo;O#`t2SCZuL@kZCltU>b_Ay$-?wV+)?)wzO3bCRIf!w$PO^2QhLh6OK?#vliq+NygdI4AfY$AY+oBN?C-OQG_MUC}X5q zi5OvdzJT+ZbskPnBWYfSNMofkEF~;@qR}AP7{w_hC=63SEUiw>jG$bWN;1@VGOLJK zGggo&TZl%?s#i7vBs~28a zo2^H8HljOQz|a@phz(zNeQB)6#u~9PH8$3aZC>U6ZMp-?{4(G21NXLn!pdG}zb!~E zlVGM2CX`fWo&CcBvTi>nngz6%z-ItaEkqv%qB+*VseIu)e5#*wwZQ+OZ9sK3b0$;F z7D}1SqI*UXAjwr$+$EAHDC0%zo+^}ZrXW-&kc%iETlDOg=VC<|%a+d4N0-|b(^$Ar zz=?jP>`ME4iew8>9?g+1m1)nBNxAFlt(mDWr`~Bs5j+DCNj{?K(_C$4yPZMwBBI^A z&7GDOMyZti5p6~2B?|f#lXUi+R;O`#8`HQ#sa(N&MQNNUZJQ_VXt2;e3XkLU(7cBn zvm(L?^ac^oI+rU-#r?K>NCjO(`N18p4XB`NG{K+*Qr9B!DysyW

$M&4hreQ*CM@LB4RtJ#fTop0Y1#l%Lm>gFmXWpfPMuY4ubEv3 z$Et7+91yBRq7hP0ReMQ6o-Og_Lt z9IpC`3Jw%iBV3Fc!^M~nVF@c(#ZesFjqLa#8s<@SJcz)aFytK$^e~U~Nu0bh@)S-p{^htzmuYOg?I)hpFV&?H_tGKY?QXS_vkO&lo(jGtlFDadr$WL z!*wM%l*kMe1}cEf188hKE-%fOE^TOw#9YUvMcvU)oyQG_m=$fss(GM56R}euj(DlrYVu=^H|UOYC)pt3D8Z6>}f4Y{BaUEM%0y7*mKO!}g3^SGZ=8 zy6y}r6qx$BOg93#V4^#??BKSO6-d;JXcDX5bV!=kgKwu}OvO8EX5)G%e2yib^MpzI zQ*iG@0<4we762gta|q_21&-bhZF8^Fe0YSLrEi5ViySiiE9mBF`s45!9(Gy&L1cxK zm*L_`2yut1*dY?FOX<_ufR_t-0rX^o!8C&z=H_Qax+1}L6WGT#yV83sO(QWX%Zb26 z(Ac|(&dL`AJ~+}xJYAQyso#{uSJhi(%$p6{A+3tj37oxw8^((EWWJSN(P)gl^{j&)L5 z(>`utoAuzl=K68lbe6MeH|StmQ?Jm6YO2eqaV4+uas;nqVq-!?rj(iTs@2XNt%UX7 zpp03zd&Xbk@?O)ryxC~B9PepdzGi&_M>0Oh%M6Ywc`Tl-tCrEK;R0Cz3;Uz(bM$WX zeagoss^dNM)YlhQISxpBHvZx1|N5`B=|leE&pSU4rF%o^N0HH6pZ11xn-}^~l+ZRW z9jY&GzH=Ck)BCYemFJ&3RFhkY-bi6zT{ut|=)+iM;*l8nGW11g>(zZRb0B7VVx}Jk O&;B^_XW&S$l79h2g*%1- diff --git a/ddg_searcher.py b/ddg_searcher.py new file mode 100644 index 0000000..94cda35 --- /dev/null +++ b/ddg_searcher.py @@ -0,0 +1,4 @@ +from duckduckgo_search import DDGS + +results = DDGS().text("python programming", max_results=3) +print(results) \ No newline at end of file diff --git a/models/__pycache__/__init__.cpython-311.pyc b/models/__pycache__/__init__.cpython-311.pyc index aae8752aca0f40e4c17e25aa6ebf68541e18895e..8ac1908f03d2ae905aa591d903f70b0ce9932885 100644 GIT binary patch delta 57 zcmX@lIFpfkIWI340}x!D?wb<3 delta 111 zcmbQqc%G4aIWI340}zC7%bmz=8j<8~72{i};8K)XmKx)dSdysgoSIisl$op$oS#!# zl9``Z9AjXvr{I#Ao>`KZqu`vMR{~TJQ(By=P?DdYQyi0=pOOmV>O#1=KrT>pVv;!k D**GTV diff --git a/models/__pycache__/ollama_models.cpython-311.pyc b/models/__pycache__/ollama_models.cpython-311.pyc index cedce2e335202316f9a12b70ec726875b056cd98..e3447c50e48f5e6170053717c71ddd338b31d8b3 100644 GIT binary patch delta 600 zcmZ23dRUZiIWI340}x!1kiuBQ2;>9Bp?oGFj|s*DvO)U5 zAcc7j`{ZPnNJf^)ds$=|Sts9SvE^rzgh?~hvX%%=4rCR{s$pFQG;THA$Xd1%QMf9G z6!sdn*$i`;P}MLp)UX9JC^M9RoC*b5JTR6DLywS z;*ugwjv`*5mLd@#F?kQWv5W-B0N$e1;)49V;?($*%;b_=jH$&SzbH)p&2BBo2@H$| zh7V#4Vp3D0Ziva;nC!yQrgK+DVUE{=iisx?GfRIWI340}veEoR_A}v5`-oIU?QND#o``!KEm(EH%a@u_RH~IW@1OC^K0h zI6tSfBr`v+IL5$SPr)TKJ+mY+N5MHiuLP(drnER!p(H;)r#L1#KP45!)rD|#fn1>I z2k($h6?6LhH^$tuF1<;|BJY3 zvK4Ux&ABCzmS2>cSdvwopEr3QTQ4K;WFK}tt6MA}fm^I8rMU&gw^$2`GV@Aq2?V7U zmZlb$xK<>m7J$O{7ISe)ktTZ)FUTOaf};G~f|AMG*^PO`Kmv@Z#h_4}%*J8O_XEgi zVE7=$ASN{>>cQk7jyAckYz(|Y7liCLL;wjOy2#^jg~#CnkHZ6D=??$NES&zb^Bs+x zgcuG9@jEjzA5s)`vSB`C#t35DusSnNF5om}RGGYtGmT9GXnK*B!pPQ?$apZO;%08oDvm;e9( delta 116 zcmca4)FI5foR^o20SE%Ot%_}L&OjZca z&nYd*%+D*1F)-ItaLG*1EJ@5!aL&&w0V;?oElyP^$Nd<9rA>3Rb7bv

i_@% diff --git a/news_ukraine_war_20240620_165102.json b/news_ukraine_war_20240620_165102.json new file mode 100644 index 0000000..e94b401 --- /dev/null +++ b/news_ukraine_war_20240620_165102.json @@ -0,0 +1,258 @@ +[ + { + "date": "2024-06-20T10:05:00", + "title": "Ukraine claims to be winning its war on corruption. The West says: Do more.", + "body": "Washington and its allies repeatedly say Kyiv isn't doing enough to fight corruption. In fact, experts say Ukraine may be overcorrecting to please backers and obscure accountability.", + "url": "https://www.msn.com/en-us/news/world/ukraine-claims-to-be-winning-its-war-on-corruption-the-west-says-do-more/ar-BB1oyetM", + "image": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/J6L5GXA35FYTLXZP7QNJ6CXNQU.JPG&w=1440", + "source": "The Washington Post on MSN.com" + }, + { + "date": "2024-06-20T09:22:00", + "title": "Putin arrives in Vietnam as Russia courts support amid war in Ukraine", + "body": "President Vladimir Putin of Russia arrived in Vietnam on Wednesday as he continues to court support from communist-led Asian nations amid his war against Ukraine.", + "url": "https://www.msn.com/en-us/news/world/putin-arrives-in-vietnam-as-russia-courts-support-amid-war-in-ukraine/ar-BB1ozady", + "image": "https://cdnph.upi.com/sv/ph/og/upi_com/3761718872077/2024/1/0a29e20258000829fc47bd5592afc640/v1.5/Putin-arrives-in-Vietnam-as-Russia-courts-support-amid-war-in-Ukraine.jpg", + "source": " UPI News on MSN.com" + }, + { + "date": "2024-06-19T15:57:00", + "title": "Ukraine War Maps Reveal Kyiv's Recaptured Frontline Positions Near Kharkiv", + "body": "Russia launched a new cross-border offensive into Kharkiv last month, with fighting continuing further south in the region.", + "url": "https://www.msn.com/en-us/news/world/ukraine-war-maps-reveal-kyiv-s-recaptured-frontline-positions-near-kharkiv/ar-BB1owwkv", + "image": "https://d.newsweek.com/en/full/2413036/vovchansk-kharkiv.jpg", + "source": "Newsweek on MSN.com" + }, + { + "date": "2024-06-19T23:59:00", + "title": "Outgoing NATO chief says China should face consequences for backing Russia's war on Ukraine", + "body": "NATO's secretary general called out Beijing on Wednesday, saying China \"cannot have it both ways\" when it comes to the war in Ukraine.", + "url": "https://www.cbc.ca/news/politics/stoltenberg-nato-russia-ukraine-china-1.7239951", + "image": "https://i.cbc.ca/1.7240354.1718831097!/fileImage/httpImage/image.JPG_gen/derivatives/16x9_620/cda-nato-20240619.JPG", + "source": "CBC.ca" + }, + { + "date": "2024-06-20T14:43:00", + "title": "Russia wages a scorched-earth war in Ukraine with retrofitted bombs and new airstrips", + "body": "Russia has accelerated its destruction of Ukraine's front-line cities in 2024 to a scale previously unseen in the war using glide bombs and an expanding network of airstrips just across the border.", + "url": "https://www.wunc.org/2024-06-20/russia-wages-a-scorched-earth-war-in-ukraine-with-retrofitted-bombs-and-new-airstrips", + "image": "https://npr.brightspotcdn.com/dims4/default/69565c6/2147483647/strip/true/crop/5333x2800+0+600/resize/1200x630!/quality/90/?url=https%3A%2F%2Fnpr.brightspotcdn.com%2Fdims3%2Fdefault%2Fstrip%2Ffalse%2Fcrop%2F5333x4000%20584%200%2Fresize%2F5333x4000%21%2F%3Furl%3Dhttp%3A%2F%2Fnpr-brightspot.s3.amazonaws.com%2Fe1%2Fa4%2Feec528684ca7be7f7bafbe3d87cb%2Fap24171656126984.jpg", + "source": "WUNC" + }, + { + "date": "2024-06-20T00:59:54", + "title": "Ukraine war latest: Russia intensifies attacks near Toretsk, Donetsk Oblast", + "body": "Russia, North Korea sign strategic partnership agreement Russia has moved almost all ground forces from Finland's vicinity to Ukraine, media report After a 'long lull,' Ukraine reports intensified Russian attacks near Toretsk in Donetsk Oblast Denmark announces new aid package for Ukraine focused on F-16s,", + "url": "https://www.msn.com/en-au/news/world/ukraine-war-latest-russia-intensifies-attacks-near-toretsk-donetsk-oblast/ar-BB1oxzwS", + "image": "https://media.zenfs.com/en/kyiv_independent_articles_496/db87636045abdb01c6d3cead186c1cfc", + "source": "Kyiv Independent on MSN.com" + }, + { + "date": "2024-06-20T12:55:00", + "title": "Beluga Whales Rescued From War-Torn Ukraine And Evacuated To Spanish Aquarium", + "body": "The two beluga whales, a 15-year-old male called Plombir and a 14-year-old female called Miranda, lived life at a Dolphinarium in Kharkiv, which had been evacuating animals since the war between Russia and Ukraine began in 2022.", + "url": "https://www.iflscience.com/beluga-whales-rescued-from-war-torn-ukraine-and-evacuated-to-spanish-aquarium-74740", + "image": "https://assets.iflscience.com/assets/articleNo/74740/aImg/76955/beluga-whale-meta.jpg", + "source": "IFLScience" + }, + { + "date": "2024-06-20T11:18:16", + "title": "Germany's Habeck thanks South Korea for stance on Ukraine war", + "body": "During a visit to the South Korean capital on Thursday, German Vice Chancellor Robert Habeck expressed his thanks for the country's joint stance in support of Ukraine in its fight against the ongoing Russian invasion.", + "url": "https://www.msn.com/en-gb/news/world/germany-s-habeck-thanks-south-korea-for-stance-on-ukraine-war/ar-BB1ozyz4", + "image": "https://media.zenfs.com/en/dpa_international_526/d3ca2d0872c058c7f02c60bb629c0022", + "source": "DPA International on MSN.com" + }, + { + "date": "2024-06-20T12:53:00", + "title": "Two beluga whales rescued from \"war-ravaged\" Ukraine", + "body": "VALENCIA, Spain (Gray News) - Two beluga whales have been rescued from the \"war-ravaged\" city of Kharkiv and taken to an aquarium in Valencia, Spain. The city is facing increasing threat from artillery fire, which has intensified in recent weeks, with bombs dropping within a few hundred meters of the aquarium where the belugas have been.", + "url": "https://www.hawaiinewsnow.com/2024/06/20/two-beluga-whales-rescued-war-ravaged-ukraine/", + "image": "https://gray-khnl-prod.cdn.arcpublishing.com/resizer/v2/F5UAHPMZSJC6NLZUNZX7FBK6DU.jpg?auth=dd3212066e047f0bebfb0b6b5878c3f7917334ea65af21458e8a91cdb47310c9&width=1200&height=600&smart=true", + "source": "Hawaii News Now" + }, + { + "date": "2024-06-20T14:45:00", + "title": "Fluxys helped export €10.7 billion of Russian liquified gas since the Ukraine invasion", + "body": "Brussels, June 20 - As the EU agrees new sanctions targeting Russian LNG, Global witness reveals that Belgian gas giant Fluxys helped to export an estimated €10.7 billion worth of Russian liquified natural gas (LNG) since Russia attacked Ukraine in 2022- money that could be fuelling Putin's war crimes.", + "url": "https://www.globalwitness.org/en/press-releases/fluxys-helped-export-107-billion-of-russian-liquified-gas-since-the-ukraine-invasion/", + "image": "https://cdn2.globalwitness.org/media/images/RS6871_2-2000x1200.width-1024.png", + "source": "Global Witness" + }, + { + "date": "2024-06-20T13:01:54", + "title": "Ukraine War", + "body": "World leaders gathered in Switzerland on June 16th for the second day of a major peace conference, aiming to condemn Russia's invasion of Ukraine and address the war's human cost. Over 90 countries and 50 heads of state,", + "url": "https://www.msn.com/en-xl/asia/pakistan/ukraine-war/ar-BB1oAdwg", + "image": null, + "source": "Daily Times(PK) on MSN.com" + }, + { + "date": "2024-06-20T10:05:00", + "title": "Kim vows to back Putin 'unconditionally' on war in Ukraine", + "body": "North Korean leader Kim Jong Un pledged to \"unconditionally support\" Russia in its invasion of Ukraine at talks with President Vladimir Putin in Pyongyang that emphasized deepening ties amid US concerns about arms supplies to the Kremlin's war machine.", + "url": "https://www.westhawaiitoday.com/2024/06/20/nation-world-news/kim-vows-to-back-putin-unconditionally-on-war-in-ukraine/", + "image": "https://www.westhawaiitoday.com/wp-content/uploads/2024/06/web1_WORLD-NEWS--NKOREA-PUTIN-GET.jpg", + "source": "West Hawaii Today" + }, + { + "date": "2024-06-19T22:55:00", + "title": "Ukraine war latest: Putin and Kim sign new defence deal - as UK says 'bizarre scenes' should be warning", + "body": "making a vow of mutual aid if either of their countries is attacked as both face escalating stand-offs with the West. Got a question on the Ukraine war? Submit it below for our specialists to answer.", + "url": "https://news.sky.com/story/ukraine-war-latest-russia-putin-kharkiv-sky-news-live-blog-12541713", + "image": null, + "source": "Sky" + }, + { + "date": "2024-06-20T14:00:53", + "title": "Russian troops fail to advance as Ukraine garners military, financial aid", + "body": "Ukraine and Russia have pursued international military agreements as their forces remained largely stalemated during the past week. Russia was unable to make headway in eastern Ukraine and even lost ground in its newest incursion in the northern Kharkiv region,", + "url": "https://www.msn.com/en-us/news/other/russian-troops-fail-to-advance-as-ukraine-garners-military-financial-aid/ar-BB1oA8Yb", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oAf3Z.img?w=4120&h=2863&m=4&q=80", + "source": "Al Jazeera on MSN.com" + }, + { + "date": "2024-06-20T13:57:00", + "title": "Russia hammers Ukraine's power grid again and Kyiv's drones target enemy oil depots", + "body": "Russia has resumed its aerial attacks on Ukraine's power grid and Kyiv's forces again targeted Russian oil storage depots with drone strikes across the border.", + "url": "https://www.msn.com/en-us/news/world/russia-hammers-ukraine-s-power-grid-again-and-kyiv-s-drones-target-enemy-oil-depots/ar-BB1oz98U", + "image": "https://res.cloudinary.com/graham-media-group/image/upload/f_auto/q_auto/c_thumb,w_700/v1/media/gmg/QHAN4LMO5JDZHHH3N52NRGM3NA.jpg?_a=ATAPphC0", + "source": "The Associated Press on MSN.com" + }, + { + "date": "2024-06-19T20:13:00", + "title": "Russian Gas Sales To Europe Exceed US Supply As Ukraine War Rages", + "body": "Russia overtook the U.S. in terms of natural gas supplied to Europe in May as the war in Ukraine continues, according to Financial Times.", + "url": "https://ijr.com/russian-gas-sales-to-europe-exceed-us-supply-as-ukraine-war-rages/", + "image": "https://ijr.com/wp-content/uploads/2024/06/53398057663_cb299479d5_o-e1718656311690-1024x440-1.jpg", + "source": "IJR" + }, + { + "date": "2024-06-20T05:00:09", + "title": "Ukraine claims to be winning its war on corruption. The West wants more.", + "body": "Washington and its allies repeatedly say Kyiv isn't doing enough to fight corruption. In fact, experts say Ukraine may be overcorrecting to please backers and obscure accountability.", + "url": "https://www.msn.com/en-us/news/world/ukraine-claims-to-be-winning-its-war-on-corruption-the-west-wants-more/ar-BB1oyetM", + "image": null, + "source": "The Washington Post on MSN.com" + }, + { + "date": "2024-06-20T14:04:52", + "title": "L.A. woman Ksenia Karelina on trial in Russia over small Ukraine donation", + "body": "U.S.-Russian dual national Ksenia Karelina faces a possible life prison sentence if she's convicted of treason for donating to a U.S.-based Ukraine charity.", + "url": "https://www.msn.com/en-us/news/world/l-a-woman-ksenia-karelina-on-trial-in-russia-over-small-ukraine-donation/ar-BB1oAk9z", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oAdIk.img?w=1600&h=1600&m=4&q=74", + "source": "CBS News on MSN.com" + }, + { + "date": "2024-06-20T14:37:01", + "title": "Russian-American ballerina who was arrested on treason charges after $51 Ukraine donation faces closed-doors trial", + "body": "Russian-American ballerina who was arrested on treason charges after $51 Ukraine donation faces closed-doors trial - Ksenia Karelina faces a prison sentence of 12 years to life in Russia if she is con", + "url": "https://www.msn.com/en-us/news/world/russian-american-ballerina-who-was-arrested-on-treason-charges-after-51-ukraine-donation-faces-closed-doors-trial/ar-BB1oAkhc", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1j2cFI.img?w=1200&h=901&m=4&q=81", + "source": "The Independent on MSN.com" + }, + { + "date": "2024-06-20T11:07:45", + "title": "'Stopped Russia-Ukraine War, But Paper Leak...': Rahul Gandhi's Jibe At PM Modi Over NEET Controversy", + "body": "A massive row erupted after the NEET exam, taken by 2.4 million students on May 5, faced allegations of a paper leak shortly after the results were declared on June 4. As many as 67 students had achieved perfect scores of 720/720 and grace marks had been given to some students allegedly to compensate for time lost at exam centres.", + "url": "https://www.msn.com/en-in/news/India/stopped-russia-ukraine-war-but-paper-leak-rahul-gandhi-s-jibe-at-pm-modi-over-neet-controversy/ar-BB1ozHfA", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozvKY.img?w=1280&h=720&m=4&q=100", + "source": "Times Now on MSN.com" + }, + { + "date": "2024-06-20T14:03:00", + "title": "North Korea To Enter Ukraine War? Putin's New NATO-Like Defence Treaty Spooks West", + "body": "During Russian President Vladimir Putin's visit to North Korea, he and North Korean leader Kim Jong Un signed a treaty akin to NATO's mutual defense clause, marking a significant diplomatic development.", + "url": "https://timesofindia.indiatimes.com/videos/toi-original/north-korea-to-enter-ukraine-war-putins-new-nato-like-defence-treaty-spooks-west/videoshow/111144516.cms", + "image": "https://timesofindia.indiatimes.com/photo/msid-111144516,imgsize-148802.cms", + "source": "Indiatimes" + }, + { + "date": "2024-06-20T10:11:08", + "title": "PM is said to have stopped Ukraine war but not paper leaks: Rahul Gandhi's jibe", + "body": "Rahul Gandhi took a jibe at PM Modi on Thursday, saying that PM Modi was being credited with stopping war in Ukraine but could not stop paper leaks in the nation.", + "url": "https://www.msn.com/en-in/news/India/pm-is-said-to-have-stopped-ukraine-war-but-not-paper-leaks-rahul-gandhis-jibe/ar-BB1ozhYg", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozmD0.img?w=1280&h=720&m=4&q=91", + "source": "India Today on MSN.com" + }, + { + "date": "2024-06-20T07:47:04", + "title": "Vladimir Putin arrives in Vietnam with praises for its balanced position on Ukraine war", + "body": "Vladimir Putin arrives in Vietnam with praises for its balanced position on Ukraine war - Vietnam offers full state welcome of Russian leader despite America's opposition", + "url": "https://www.msn.com/en-gb/news/world/vladimir-putin-arrives-in-vietnam-with-praises-for-its-balanced-position-on-ukraine-war/ar-BB1oyRaK", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oyAbx.img?w=1200&h=800&m=4&q=81", + "source": "The Independent on MSN.com" + }, + { + "date": "2024-06-19T20:02:00", + "title": "Two Beluga Whales Evacuated To Spain From War-torn Ukraine", + "body": "Two beluga whales have been evacuated from an aquarium in war-torn Ukraine to Spain by road and plane in a \"high-risk\" operation, officials at their new home said Wednesday.", + "url": "https://www.barrons.com/news/two-beluga-whales-evacuated-to-spain-from-war-torn-ukraine-ef6cde1f", + "image": null, + "source": "Barron's" + }, + { + "date": "2024-06-20T02:00:16", + "title": "Ukraine peace summit is a 'success', China key to ending war: ambassador to Singapore", + "body": "The summit in Switzerland is a 'milestone in the entire peaceful process' says Kateryna Zelenko, Ukraine's ambassador to Singapore A senior Ukrainian diplomat has called the recently concluded peace summit in Switzerland a \"success\" despite the absence of many Asian countries,", + "url": "https://www.msn.com/en-xl/news/other/ukraine-peace-summit-is-a-success-china-key-to-ending-war-ambassador-to-singapore/ar-BB1oxRvA", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oxSS4.img?w=2000&h=1397&m=4&q=57", + "source": "South China Morning Post on MSN.com" + }, + { + "date": "2024-06-20T11:29:46", + "title": "Beluga whales take gruelling journey across war-ravaged Ukraine to reach new home in Spain", + "body": "Two beluga whales faced a gruelling journey across Ukraine's war-ravaged region of Kharkiv to reach their new home in Spain.", + "url": "https://www.msn.com/en-us/news/australia/beluga-whales-take-gruelling-journey-across-war-ravaged-ukraine-to-reach-new-home-in-spain/ar-BB1ozEUg", + "image": null, + "source": "ABC News (AU) on MSN.com" + }, + { + "date": "2024-06-20T10:20:00", + "title": "It is said PM stopped Ukraine-Russia war but ...': Rahul Gandhi takes jab at PM Modi over NEET, UGC-NET paper leaks", + "body": "Congress MP Rahul Gandhi on Thursday launched a fierce attack against the BJP-led government over alleged leak of NEET and UGC-NET exam papers that has affected tens of thousands of students, stating that he will be raising the matter in the upcoming session of Parliament and put immense pressure on the Centre.", + "url": "https://www.msn.com/en-in/news/India/it-is-said-pm-stopped-ukraine-russia-war-but-rahul-gandhi-takes-jab-at-pm-modi-over-neet-ugc-net-paper-leaks/ar-BB1ozivz", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozwMG.img?w=1140&h=641&m=4&q=100", + "source": "The Times of India on MSN.com" + }, + { + "date": "2024-06-20T10:51:50", + "title": "It's said PM stopped Ukraine-Russia war but can't stop exam paper leaks: Rahul Gandhi", + "body": "Congress leader Rahul Gandhi Thursday launched a scathing attack on the government over the alleged irregularities in NEET and cancellation of UGC-NET and said Prime Minister Narendra Modi has \"psychologically collapsed\" post-elections and will struggle to run a govt like this.", + "url": "https://www.msn.com/en-in/news/India/it-s-said-pm-stopped-ukraine-russia-war-but-can-t-stop-exam-paper-leaks-rahul-gandhi/ar-BB1ozoaF", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozsNH.img?w=280&h=186&m=4&q=81", + "source": "The New Indian Express on MSN.com" + }, + { + "date": "2024-06-19T22:55:00", + "title": "Ukraine war latest: Putin makes 'absurd attempt to seduce West'; leaders call for Olympics truce", + "body": "That's all for our live coverage today, but we'll be back with more live updates and analysis soon. If you're just checking in, here is a recap of the key moments that occurred over the last 24 hours.", + "url": "https://news.sky.com/story/ukraine-russia-war-latest-energy-restrictions-imposed-across-ukraine-amid-russia-barrage-12541713", + "image": null, + "source": "Sky" + }, + { + "date": "2024-06-19T15:31:09", + "title": "Ukraine war: North Korea, Russia sign mutual defence deal", + "body": "Russian President Vladimir Putin signed Wednesday a mutual defence agreement with North Korea's Kim Jong Un, who offered his \"full support\" on Ukraine.The pledge of military cooperation was part of a strategic treaty signed during a summit in Pyongyang,", + "url": "https://www.msn.com/en-xl/africa/nigeria/ukraine-war-north-korea-russia-sign-mutual-defence-deal/ar-BB1owGaV", + "image": null, + "source": "Nigerian Tribune on MSN.com" + }, + { + "date": "2024-06-20T14:22:00", + "title": "North Korea says deal between Putin and Kim requires immediate military assistance in event of war", + "body": "North Korea and the former Soviet Union signed a treaty in 1961, which experts say necessitated Moscow's military intervention if the North came under attack. The deal was discarded after the collapse of the USSR, replaced by one in 2000 that offered weaker security assurances.", + "url": "https://www.msn.com/en-my/news/world/north-korea-says-deal-between-putin-and-kim-requires-immediate-military-assistance-in-event-of-war/ar-BB1oxOQN", + "image": "https://media.whas11.com/assets/CCT/images/e592f395-7707-4b4b-982b-ffc80158dc99/20240619T111911/e592f395-7707-4b4b-982b-ffc80158dc99_1140x641.jpg", + "source": "The Associated Press on MSN.com" + }, + { + "date": "2024-06-20T11:29:08", + "title": "'PM Modi Stopped Ukraine War; But Couldn't...': Rahul Slams Centre For Inaction Over NEET-UG Paper Leak | Top Developments", + "body": "Rahul Gandhi criticises PM Modi for failing to prevent NEET-UG paper leaks amid ongoing controversies. Meanwhile, the Deputy CM of Bihar has levelled allegations against Pritam Kumar, the personal secretary of Tejashwi Yadav.", + "url": "https://www.msn.com/en-in/news/other/pm-modi-stopped-ukraine-war-but-couldn-t-rahul-slams-centre-for-inaction-over-neet-ug-paper-leak-top-developments/ar-BB1ozMeG", + "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozw9p.img?w=700&h=400&m=4&q=54", + "source": "Zee News on MSN.com" + } +] \ No newline at end of file diff --git a/prompts/__pycache__/__init__.cpython-311.pyc b/prompts/__pycache__/__init__.cpython-311.pyc index f221a058f58136dfed3731b7552a9d678ba83016..a8af5bf51a16089b65360d816f167c0818cb4dd6 100644 GIT binary patch delta 58 zcmcb>IE#^cIWI340}x!`KZqu`vMR{~TJQ(By=P?DdYQyi0=pOOmV>O!~$Mfte}CB-ol Glg$AKVJC(F diff --git a/prompts/__pycache__/prompts.cpython-311.pyc b/prompts/__pycache__/prompts.cpython-311.pyc index 5122736aafc31b55647790ed92614d23ded4f16a..31ba555349decec81c52bb4c3c91a4a904b53250 100644 GIT binary patch delta 62 zcmX@W-o?(loR^o20SK<_EJ%B|kyn9PSw}x3KQ~oBB{3&cKP9zHzqB}2wgkyn8^GRfU4#Vas@^cGH Lien}RFk1ltqD`KZqu`vMR{~TJQ(By=P?DdYQyi0=pOOmV>O!~>a$=%60Jw)H Ap#T5? diff --git a/tools/__pycache__/basic_calculator.cpython-311.pyc b/tools/__pycache__/basic_calculator.cpython-311.pyc index 9cb3ca3b6352f549565ae8969a5095393206427b..cb54b7c9af30bd789452050f7735563ec48f10ab 100644 GIT binary patch delta 85 zcmX>jI$4x&IWI340}x!!DNyeRW=2NF8w~uDXK@(;0CL0_{r~^~ delta 142 zcmbO%dPbCQIWI340}!m)o|h&ew2|)(dw8b1Rg7spPH{|feo88cs|(>m$jQeQ;F6i1S(2Ee;GCaV0#p!FTAZp-lAoVb9Fv@%k_zJLLbwoe@><4K E0I29GQUCw| diff --git a/tools/__pycache__/searcher.cpython-311.pyc b/tools/__pycache__/searcher.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66c92fa868d7af192550ce095a8d831c2dbf1779 GIT binary patch literal 2619 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 JurFa&{|~TW=VJf> literal 0 HcmV?d00001 diff --git a/tools/__pycache__/searcher2.cpython-311.pyc b/tools/__pycache__/searcher2.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3047cfb71e1cb020ee18655b4cca366363946f53 GIT binary patch literal 2957 zcma(T-*4N-`Dl@nsNa!m+KJkjiI*RWW7&?AwM~nyO_Ul*V>_D*3>7dCjP7jHmPqwT z)s99L+Rz6L=z})|NPumCwuiJs_K-heYtr@A3ItRjU?9NIhrD^n1_XK9ccdgsP6OvUKwB3sC?a^Sk9^i?WRHH zYfFn)FQ1hcmhLgDl3-Y3n`QM)v@}-=nL%%{RK~>$1CF4C%WEGxvM5 zE-$n2Qo9Eu_j{v_ALIdT2P|7+PXrzGi$epm{Gcp{#KHJjTHIzI;H(O^fPII%)2Qkn z&?_9&Yx}Ec6;%V6uLkwZ1hRUP2(A0O#E%ety(;!=!h$XS0sZMfj2!wHVSiQpOw@zk zcaz&hTfUFcCT9n2--fG@ehbmWySfn?%;p7D4OxfwXYEjP0$maeQ7+kTz=&E51 z+aLP}c{rqpC(tZ1`OP8EGv+l1j~&jUU#6=OJA#9K8H@rg_R%pr&~T6DzAqkTNA1|k zOBwm%j2&1;kXdP;AM*LmfqaI3IG=V9hbvKpszGbt1+)$$9h*ZqVh1ZwAS$pY2IK$# zR^!39%)fM0{S9o_kPPhxp(_S0%Bs9cZgx(oTsAd*RnC_48|Qr#0OI#>H~+ zCe#OGrK=jubc|-?_bs_VRMV0#?CZd!pn@4sI_nZQiM2_H&cvujOj*+*q`aZyj-SkQ zQQZR5-h4-RLEX}df4j=NcR z1Xr2EuTip68M(r^WL&09#4~$Qrm#;CWrZ^xbNF@B&>aDnizU+uP*N(WdEyALL|Vxa zN+4)CLcvh6>BN}_S>^z7^-@-U9G=DJ@D|y!9KTvB5gj|?m90D}u`&-6T9N515K>CV zX@rS{`xY5Yvjyq~;U?FKYkH|{Dd2>Xht<`ca7m>m!3tI_)rq=UQDF5f0^WhsUg&^$ z;v8{!j8{!3=7rqdP>$bYrLm6V`i99W5L^7d_TudHno%Uv><>1L$*0q0lT2BLQ84GG z-OseAme6yV(k;jDQFIbCF>U6%@b9Rh|Bj*2)a~`gNK-o1l1|l@+R};dq^ZZ!)K~cj z=bO@7E$OY=(i1i~`B<84N>eRq>N{!fu{8G}+mzmJNpIJdc6qUW;nxeFFVq&k2lS^+ zKGot=JA7(yC@4(sN=LxJcvG5fNwf8Edu*aH-x@nxkM0Je^VfCG;dm=NzK1wravy-uPAuI}0YGmC&$NPPc3$ewq3!uVkbV6qoZSBK zacF!eG`=?!6Q_3%jr>l!ErHVL&$zqicaNQD;4ihmXb*(Hzthl~Czo0$mzu|Jw2s}_ zj)4|n@>o6iZ&&O;F6T#fd6#s7kk}wz_5k8CH~n zmM6MNJmOPAO*qm(#1sYYbh-sEVS=Kf5O&D}6!e*vYL!jEG{ zYteRcv=(kB4>K@Vi?x%dYGONil+Di6;!n`=ox$El;hOvOkUc)b4ey~>0QzIF`9C3< B`EURL literal 0 HcmV?d00001 diff --git a/tools/__pycache__/searcher3.cpython-311.pyc b/tools/__pycache__/searcher3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4979f49332f34fa2dbcfecdf29f980a58e78fa15 GIT binary patch literal 932 zcmZ`%&ubGw6rM>oX=!Y0t$6S>6ojtS?xFP1AVMJ$gc`)$>Y;2hlVr*Ms57%Rg$O}B zs0beG(Nk6GAEV%*?A23lf#9Vl-<#cy@!(_U&AgfSzW2Vj@ALBV5&^mUPFFZ zE?^s(-iGaraKfoi0(wX(;S0REBF}m3_v1+w?b6f&rjIrY)sI~7HOZItEk4zE;}?WnXqx)tnIXc`W29+f-WG zRn|-)&0Xq@E@2!TWe9B33pF@4;-DoYi#jKC^3My$irk8d>;{Q%8Ee6^yB_-3eq%zm6 zq-0pR0?EPHX8`Uo>H%5&qc#(!(lsKsplglzF zyO^wTm>XQ(=qSTRT$A7{k!yHf1$DJ}KZtnjiwE*1m^jC37u2LkDZL~c-~at4)-}35 JA^%YZ_79Po_bvbc literal 0 HcmV?d00001 diff --git a/tools/ddg_searcher.py b/tools/ddg_searcher.py index bbedb86..94adaac 100644 --- a/tools/ddg_searcher.py +++ b/tools/ddg_searcher.py @@ -28,13 +28,13 @@ def search(query, num_results=5, delay=2, max_retries=1): input_str_clean = input_str_clean.replace("'", "\"") # Remove any extraneous characters such as trailing quotes input_str_clean = input_str_clean.strip().strip("\"") - print (query) + #print (query) - print (input_str_clean) + #print (input_str_clean) try: parsed_data = json.loads(input_str_clean) query_content = parsed_data['query'] - print (parsed_data) + #print (parsed_data) query = query_content results = [] retries = 0 diff --git a/tools/searcher.py b/tools/searcher.py index 25387a2..2e22eda 100644 --- a/tools/searcher.py +++ b/tools/searcher.py @@ -1,16 +1,15 @@ # @author Sir Lord Dalibor JONIC, MSc BSc (c -__author__ = "Sir Lord Dalibor JONIC, MSc BSc" -__copyright__ = "BeMyInspiration 2024" -__license__ = "MIT" -__version__ = "1.0.0" -__maintainer__ = "Sir Lord Dalibor JONIC, MSc BSc" -__email__ = "dali.manu@gmail.com" -__status__ = "Production" -__description__ = "Google searcher with aration" - +#__author__ = "Sir Lord Dalibor JONIC, MSc BSc" +#__copyright__ = "BeMyInspiration 2024" +#__license__ = "MIT" +#__version__ = "1.0.0" +#__maintainer__ = "Sir Lord Dalibor JONIC, MSc BSc" +#__email__ = "dali.manu@gmail.com" +#__status__ = "Production" +#__description__ = "Google searcher with aration" import requests import time -from bs4 import BeautifulSoup +from bs4 import BeautifulSoup # type: ignore from urllib.parse import quote_plus def search(query, num_results=5, delay=2, max_retries=3): @@ -18,7 +17,7 @@ def search(query, num_results=5, delay=2, max_retries=3): Perform a web search and return the top results. Args: query (str): Search query. - num_results (int): Number of results to return. Do at least 2 please. + num_results (int): Number of results to return. Do at least 5 please. delay (int): Delay between requests in seconds. max_retries (int): Maximum number of retries for failed requests. Returns: @@ -35,7 +34,8 @@ def search(query, num_results=5, delay=2, max_retries=3): with requests.get(search_url, headers=headers, timeout=10) as response: response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") - result_divs = soup.find_all('div', class_='yuRUbf') + result_divs = soup.find_all('div', class_='%yuRU%') + #result_divs = soup.find_all('div') for result in result_divs[:num_results]: title = result.find('h3').get_text() link = result.find('a')['href'] diff --git a/tools/searcher1.py b/tools/searcher1.py new file mode 100644 index 0000000..8e2c718 --- /dev/null +++ b/tools/searcher1.py @@ -0,0 +1,66 @@ +import requests +import time +import re +from html.parser import HTMLParser +from urllib.parse import quote_plus + +class MyHTMLParser(HTMLParser): + def __init__(self): + super().__init__() + self.results = [] + self.current_title = "" + self.current_link = "" + self.in_title = False + + def handle_starttag(self, tag, attrs): + #if tag == 'div' and ('class', '%yuRU%') in attrs: + if tag == 'div' in attrs: + self.current_title = "" + self.current_link = "" + elif tag == 'a' and self.current_title == "": + for attr in attrs: + if attr[0] == 'href': + self.current_link = attr[1] + break + elif tag == 'h3': + self.in_title = True + + def handle_data(self, data): + if self.in_title: + self.current_title += data + + def handle_endtag(self, tag): + if tag == 'h3': + self.in_title = False + elif tag == 'div' and self.current_title and self.current_link: + self.results.append((self.current_title, self.current_link)) + +def search(query, num_results=5, delay=2, max_retries=3): + """ + Perform a web search and return the top results. + Args: + query (str): Search query. + num_results (int): Number of results to return. Do at least 5 please. + delay (int): Delay between requests in seconds. + max_retries (int): Maximum number of retries for failed requests. + Returns: + list: List of top search results (title, link). + """ + query = str(query) # Convert query to string + search_url = f"https://www.google.com/search?q={quote_plus(query)}" + headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'} + retries = 0 + + while retries < max_retries: + try: + with requests.get(search_url, headers=headers, timeout=10) as response: + response.raise_for_status() + parser = MyHTMLParser() + parser.feed(response.text) + return parser.results[:num_results] + except (requests.RequestException, ValueError) as e: + print(f"Error during search: {e}") + retries += 1 + time.sleep(delay * (2 ** retries)) + + return [] \ No newline at end of file diff --git a/tools/searcher3.py b/tools/searcher3.py new file mode 100644 index 0000000..5015767 --- /dev/null +++ b/tools/searcher3.py @@ -0,0 +1,17 @@ +from duckduckgo_search import DDGS + +def search(query, num_results=5, delay=2, max_retries=3): + """ + Perform a web search using DuckDuckGo and return the top results. + Args: + query (str): Search query. + num_results (int): Number of results to return. At least 5. + delay (int): Delay between retries in seconds. + max_retries (int): Maximum number of retries for failed requests. + Returns: + list: List of top search results (title, link). + """ + results = DDGS().text(query, max_results=num_results) + return results + +#print(results) \ No newline at end of file diff --git a/utils/__pycache__/get_keys.cpython-311.pyc b/utils/__pycache__/get_keys.cpython-311.pyc index 765c905eb056c73c0c3d7cd0c8993448c3c1a47d..b9c6cbf9ca7dd56ca2358265cab24e0bedd85a20 100644 GIT binary patch delta 61 zcmX@hHl2-kIWI340}x!f^&Xe2~a^yX>qDTNq&A#aZGZ4N-Bt}3*iFw00lQ6 IVhm*j0L Date: Thu, 20 Jun 2024 17:56:06 +0200 Subject: [PATCH 09/10] skip changes --- agent.py | 136 --------- agents/__pycache__/__init__.cpython-310.pyc | Bin 191 -> 0 bytes agents/__pycache__/__init__.cpython-311.pyc | Bin 153 -> 0 bytes agents/__pycache__/agent.cpython-310.pyc | Bin 3137 -> 0 bytes agents/__pycache__/agent.cpython-311.pyc | Bin 5150 -> 0 bytes ddg_searcher.py | 4 - models/__pycache__/__init__.cpython-310.pyc | Bin 191 -> 0 bytes models/__pycache__/__init__.cpython-311.pyc | Bin 153 -> 0 bytes .../__pycache__/ollama_models.cpython-310.pyc | Bin 2046 -> 0 bytes .../__pycache__/ollama_models.cpython-311.pyc | Bin 2755 -> 0 bytes .../__pycache__/openai_models.cpython-310.pyc | Bin 1554 -> 0 bytes .../__pycache__/openai_models.cpython-311.pyc | Bin 2386 -> 0 bytes news_ukraine_war_20240620_165102.json | 258 ------------------ prompts/__pycache__/__init__.cpython-310.pyc | Bin 192 -> 0 bytes prompts/__pycache__/__init__.cpython-311.pyc | Bin 154 -> 0 bytes prompts/__pycache__/prompts.cpython-310.pyc | Bin 940 -> 0 bytes prompts/__pycache__/prompts.cpython-311.pyc | Bin 906 -> 0 bytes toolbox/__pycache__/toolbox.cpython-310.pyc | Bin 1325 -> 0 bytes toolbox/__pycache__/toolbox.cpython-311.pyc | Bin 1643 -> 0 bytes tools/__pycache__/__init__.cpython-310.pyc | Bin 190 -> 0 bytes tools/__pycache__/__init__.cpython-311.pyc | Bin 152 -> 0 bytes .../basic_calculator.cpython-310.pyc | Bin 1826 -> 0 bytes .../basic_calculator.cpython-311.pyc | Bin 2707 -> 0 bytes tools/__pycache__/reverser.cpython-310.pyc | Bin 580 -> 0 bytes tools/__pycache__/reverser.cpython-311.pyc | Bin 599 -> 0 bytes tools/__pycache__/searcher.cpython-311.pyc | Bin 2619 -> 0 bytes tools/__pycache__/searcher1.cpython-311.pyc | Bin 4174 -> 0 bytes tools/__pycache__/searcher2.cpython-311.pyc | Bin 2957 -> 0 bytes tools/__pycache__/searcher3.cpython-311.pyc | Bin 932 -> 0 bytes tools/searcher1.py | 66 ----- tools/searcher3.py | 17 -- 31 files changed, 481 deletions(-) delete mode 100644 agent.py delete mode 100644 agents/__pycache__/__init__.cpython-310.pyc delete mode 100644 agents/__pycache__/__init__.cpython-311.pyc delete mode 100644 agents/__pycache__/agent.cpython-310.pyc delete mode 100644 agents/__pycache__/agent.cpython-311.pyc delete mode 100644 ddg_searcher.py delete mode 100644 models/__pycache__/__init__.cpython-310.pyc delete mode 100644 models/__pycache__/__init__.cpython-311.pyc delete mode 100644 models/__pycache__/ollama_models.cpython-310.pyc delete mode 100644 models/__pycache__/ollama_models.cpython-311.pyc delete mode 100644 models/__pycache__/openai_models.cpython-310.pyc delete mode 100644 models/__pycache__/openai_models.cpython-311.pyc delete mode 100644 news_ukraine_war_20240620_165102.json delete mode 100644 prompts/__pycache__/__init__.cpython-310.pyc delete mode 100644 prompts/__pycache__/__init__.cpython-311.pyc delete mode 100644 prompts/__pycache__/prompts.cpython-310.pyc delete mode 100644 prompts/__pycache__/prompts.cpython-311.pyc delete mode 100644 toolbox/__pycache__/toolbox.cpython-310.pyc delete mode 100644 toolbox/__pycache__/toolbox.cpython-311.pyc delete mode 100644 tools/__pycache__/__init__.cpython-310.pyc delete mode 100644 tools/__pycache__/__init__.cpython-311.pyc delete mode 100644 tools/__pycache__/basic_calculator.cpython-310.pyc delete mode 100644 tools/__pycache__/basic_calculator.cpython-311.pyc delete mode 100644 tools/__pycache__/reverser.cpython-310.pyc delete mode 100644 tools/__pycache__/reverser.cpython-311.pyc delete mode 100644 tools/__pycache__/searcher.cpython-311.pyc delete mode 100644 tools/__pycache__/searcher1.cpython-311.pyc delete mode 100644 tools/__pycache__/searcher2.cpython-311.pyc delete mode 100644 tools/__pycache__/searcher3.cpython-311.pyc delete mode 100644 tools/searcher1.py delete mode 100644 tools/searcher3.py diff --git a/agent.py b/agent.py deleted file mode 100644 index f2ca803..0000000 --- a/agent.py +++ /dev/null @@ -1,136 +0,0 @@ -from termcolor import colored -from prompts.prompts import agent_system_prompt_template -from models.openai_models import OpenAIModel -from models.ollama_models import OllamaModel -from models.groq_models import GroqModel -from tools.basic_calculator import basic_calculatorgoogll -from tools.reverser import reverse_string -from tools.searcher3 import search -from toolbox.toolbox import ToolBox -import webbrowser - - - -class Agent: - def __init__(self, tools, model_service, model_name, stop=None): - """ - Initializes the agent with a list of tools and a model. - - Parameters: - tools (list): List of tool functions. - model_service (class): The model service class with a generate_text method. - model_name (str): The name of the model to use. - """ - self.tools = tools - self.model_service = model_service - self.model_name = model_name - self.stop = stop - - def prepare_tools(self): - """ - Stores the tools in the toolbox and returns their descriptions. - - Returns: - str: Descriptions of the tools stored in the toolbox. - """ - toolbox = ToolBox() - toolbox.store(self.tools) - tool_descriptions = toolbox.tools() - return tool_descriptions - - def think(self, prompt): - """ - Runs the generate_text method on the model using the system prompt template and tool descriptions. - - Parameters: - prompt (str): The user query to generate a response for. - - Returns: - dict: The response from the model as a dictionary. - """ - tool_descriptions = self.prepare_tools() - agent_system_prompt = agent_system_prompt_template.format(tool_descriptions=tool_descriptions) - - # Create an instance of the model service with the system prompt - - if self.model_service == OllamaModel: - model_instance = self.model_service( - model=self.model_name, - system_prompt=agent_system_prompt, - temperature=0, - stop=self.stop - ) - else: - model_instance = self.model_service( - model=self.model_name, - system_prompt=agent_system_prompt, - temperature=0 - ) - - # Generate and return the response dictionary - agent_response_dict = model_instance.generate_text(prompt) - return agent_response_dict - - def work(self, prompt): - """ - Parses the dictionary returned from think and executes the appropriate tool. - - Parameters: - prompt (str): The user query to generate a response for. - - Returns: - The response from executing the appropriate tool or the tool_input if no matching tool is found. - """ - agent_response_dict = self.think(prompt) - tool_choice = agent_response_dict.get("tool_choice") - tool_input = agent_response_dict.get("tool_input") - - for tool in self.tools: - if tool.__name__ == tool_choice: - response = tool(tool_input) - print(colored(response, 'cyan')) - if isinstance(response, list): - for result in response: - if isinstance(result, tuple) and len(result) > 1 and isinstance(result[1], str): - url = result[1] - if url.startswith('http'): - webbrowser.open(url) - break - return - # return tool(tool_input) - - print(colored(tool_input, 'cyan')) - - return - - -# Example usage -if __name__ == "__main__": - - tools = [basic_calculator, reverse_string, search] - - - # Uncomment below to run with OpenAI - # model_service = OpenAIModel - # model_name = 'gpt-3.5-turbo' - # stop = None - - # Uncomment below to run with GroqAI - #model_service = GroqModel - #model_name = 'llama3-70b-8192' - #stop = None - - # Uncomment below to run with Ollama - model_service = OllamaModel - model_name = 'codestral:latest' - stop = "<|eot_id|>" - - agent = Agent(tools=tools, model_service=model_service, model_name=model_name, stop=stop) - - while True: - prompt = input("Ask me anything: ") - if prompt.lower() == "exit": - break - - - agent.work(prompt) diff --git a/agents/__pycache__/__init__.cpython-310.pyc b/agents/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 2f703a1633cd842027d66acd8164080e9b122ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmd1j<>g`k0*`IEX(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11$-73bnQo*Gt zvn(~nC9xz?*Euz>q$o34Aviy$v?Mb>uQl4AY%_{_Y_lK6PNg34bUHo5sJr8%i~MXW&0 XAmfYqfy4)9Mn=XD3^1aI87Kw-$}%FD diff --git a/agents/__pycache__/agent.cpython-310.pyc b/agents/__pycache__/agent.cpython-310.pyc deleted file mode 100644 index 0382b57e482dcc9518da37ace1c5ab3bd18000ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3137 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 diff --git a/ddg_searcher.py b/ddg_searcher.py deleted file mode 100644 index 94cda35..0000000 --- a/ddg_searcher.py +++ /dev/null @@ -1,4 +0,0 @@ -from duckduckgo_search import DDGS - -results = DDGS().text("python programming", max_results=3) -print(results) \ No newline at end of file diff --git a/models/__pycache__/__init__.cpython-310.pyc b/models/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index c745a080cf4036b6d3c7579c096840355d279fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmd1j<>g`kg79s*X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11$-73bnQo*Gt zvn(~nC9xz?*Euz>q$o34Aviy$v?Mb>uQ&ryk0@&Ee;!?U};XO9mwutCLqDW002xRF|_~y diff --git a/models/__pycache__/__init__.cpython-311.pyc b/models/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 8ac1908f03d2ae905aa591d903f70b0ce9932885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmZ3^%ge<81Xp$zq=D$iAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFCG1i{M=Oi zl*F7&{gl)){nFx8-IDzLoML1B-29Z(oMQd>_{_Y_lK6PNg34bUHbBABoK(9aR-k5( W@x}Z=;sY}yBjX1K7*WIw6axUt<06^> diff --git a/models/__pycache__/ollama_models.cpython-310.pyc b/models/__pycache__/ollama_models.cpython-310.pyc deleted file mode 100644 index 2fb78e769a43032591cabc07a6829266794b0ca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2046 zcmah~U2hvj6rI`ctnJ9H3Q~Be2JuoO;!r3cS%8od6YZfC|x zZP^GZedQMbQo|b(zi3~1;wOMq#J#(AvS~rAGk5mR%)N8=&N-8`(eMd8@BWgFKJp0p z9i8f9g7XD5^)VPuIE_ia>}j7CzR@?JH)3;Q^({*F2{*a*oN(*h=-Zt3NXz~MV#z^^ z=CwEtc`!_qQ8XUnVD-7&>NboDg6Sc(Tco3XliS>RPWl!%Af=br9>j4t3Gb&|#F9e9 z!O*T`!*>JPE;RKX7)}=?APW;LUEsU1FumJ@6>@oE^vWI~2|Dh0bUf)miI9jg;cXdNYEHcI6c zg38u9&93c;zD`fzi~l2H{?3usS!ZV_PKRN9lq%i1d-vXl_jbZ8+8K)k5s7(yH%+ui z^!B4!Cg#mB%i?Gl>L^Wij#Zi*w48jiC`KR>o~2Qu^I8RVZWohz<63EQ_eg{sjv%)b z;B48@i+Cg*pn-JJAUos+m|uykLHE~qzcaW$V|x+~aj+NaaC;X}$!N%WX*@+dYViIi zZMGMUBOS(U1$zMJ17%2KH5kHqqPtzX1uiv63z7z<*Uo0S7X%ToDF|?PRR`nv4#l4j zzxk~Swc6{YLnQM00g)1vY(ebb;AKIMk=#JxW6FWj$Jk76{^Tx=c}rWzHuw%SS9>ou z7RCkT)(_^=)IPTt=D9&Z6fe9BvIGHeXNxRtSXW!v7j)^s8h7FRNPafXDXepzkRGuJ zCZW!q5@qg`JceFN z5l*gn+A<^_d~R{z=Dc~>{rYjY_lO;Kdk-HR^t!pXMl!$c`-j(xSu(0DWQXOpkTR9? ztuA&fO5pD_JwfRg(BEbUt<8T^3T^>KQyNs2ftsZScnVN*6Oq|`I>}USXA(tf<3+FX z=3yDreKr&s79%(D!t*3DST-@v&B7Tj?l)KYgY~EM-*|N-z~aeU7}i*?3b4#M6@`vV zgR06K>w^unc&6WiA@uaTQ|2%NRfUfZZ4}#neQ0~(h-|Io}bQ;FxjBLRElA*ynr(zJWG{N8*E4-#W z;?w$#VyxxJH*vnGvXQEM6Yir}wZ}pSCt{`~-VVjeO2%S?q7L4tC7RC>slvK@1V6J* HZ(9EVF+D0z diff --git a/models/__pycache__/ollama_models.cpython-311.pyc b/models/__pycache__/ollama_models.cpython-311.pyc deleted file mode 100644 index e3447c50e48f5e6170053717c71ddd338b31d8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2755 zcmah~&1)M+6rYuL_2u1C$-Z+1nsibj_q}%-OcRy zOGw3s9CYY0kV9SY$!%~CrMEx}CHV*BBIvSUD3l(0Q*c^BpwKtF(n^X`I(tNpMbE)=*SAW9akRLZ&v!ZR#rfabO=IjF=%X zBEYg-I;ipwP?}c*uvo}xyP3@@Ipv0-;w)i`GZ~?2EjAK_fB!QefS)TM*%udrz;Si9 zz+`pPs1N{-X}U!Xs6ma%>*s+AJaE1xm1jFsK7hqyQmtIqHL59DEsrgUE@G((sI;ol zMR#yPTfw?yDn!X)iitHD^Yw4}gVX+4j%`z#uqa7POSfTB9rPq)-d)QRQbSs{@T9L| zty>i5WRn;0~l%WR&cpVbSSRr_P){lT=JCxqx+s2zOLBe+7Rz2#_}@FG@JxB`c_0B1sg7H8*4 z6dZuC03i`ZL?9NsclVZGok}hmIh<7Co|7tGNy5>epoWpPPA6R>R?=|&Q}(z?bKQx^ zvIedp%lY0Wmzb=NGJDnqARDOKi$*VVCB70Fu}8*PJ81U}m-sJZ_FKmpJ8Tb*mnWvn z1Lt8-w0j4kiI$-5gFedm&I}9#?*_sT;G>UF0WGm9Zh@cx*Ix1iK?T=e@^zu#2!r5e zxEP2c%0Sl2k{<*xGgKdiKBN+_(C&HU6otIlFbAG*~@U#ga&Ufwzg+rz7{J+WyJ%nDg=;Z=ny`L5a2$DgF;ZcDSNxm!19=2A|ijwF9L z7MpE3OfNdUgPfKe0TW`7{7{NDlBUDAV%%ft&xL+Onn`rLDO)fTaA+2V%wj@DBP=jn zP^5<;6V&CLX*q&PSfUcxqi8u@vz|_BErU&V7*3ES{RnAi%Dqf4Y%1$)veQ*tU#@S( z>3e-dW`{=xnOb{&mduXX;jqP=xAta9q{E$4zgwB&HJTr4&QmR-VVG@2A%-DY^`rjb zhiSV%?ta6S{t3Gu^44f&_|s->#Udh^exe z`t6WZ7NwVaodcE5i7E<2;|*dDj+T$4ewzEa`^lXj??9J*16NAd>_a1^n~nMsN>u<= zXsyF=BwH6l7muN*$2u?d2cMqpyVM3L|GR?=)HOG&3N9|@1-0Jx&+oYzZLU09wEP@vcJGa z9s=p_fe9jLPNH_F5p8r9G1yt|ta-#Kk!R&-R{HvN$<^QVN-;9PZyOlpUZ`Abkc*(3-@gc7W3wWmYrb zj^W0|OpJH!3wDDi0XnJ4D)^cF!i0N;_d0^0!|Cqhr7@L0o=lP|8<*fc$;N59o?Lu7 zNtcP4fL!I$WM!eF;nQc2rYGm|$+PqL>qkHA-btz|&(Z`>Co5eRJO4|WD5*vv+x1V& z!pOoLeYdS-G&tFqWvQ}Vb2;qV;Tm&{Wg)6ED~#+#i^zur;-BQ!`b(JzsdUIK*D{|g#EJ5exxjuUY5?0`i^s>a zC)?4P$}Z&WEHTN^DMYKXbo9K;H%-E`Pd*!u&ay>jl6-WV&TOOQ$dqNSXDMWW>QSpU zG3!}d!?@MP)z$`aoE4dgV??vQ56q+OFQ9$OSeN$S?%vyL{P^yJ6f?eCm<3XUfR`XZ zM*#(bWq@Olso+=8-MZNqOn6{p!oPAanQ>Owe;3Fz{&i3TE=2IgxpZph+P@)}9ITz1 zi_QTNU7#LN|A5@kOV@P8pmq^Ch^iW4I-FW=u&F)ld0hUulBuy?+pLg9T$Q=BI2_o2 z%b`T-tI%!w5ZzN!R{$m%&r7vVOcbo8*2zLbC$&*BSvOq@nd(7~mJ8?%4BE2HQmGY1 zn}7R-!dmVgbi3c)J~^5LP)2PfM@<8cM`7=O{kMUVFE&ye9r3CJmpEFt&M+VAip{#x z*2QUutx^Eb&{KVM?X^&h{3_Yvc{KPp9g(GGPi>w8S8cKl7%Q6rNqL?TsBfRns<`qzUd{g44!U(-ugHS`{cLRHRX%k?I4>;+e#2*52*x zx+0b%<@d>Ig*M5)gU-pFeO2OE|nG!5V!2$n}YcNTjb31k740Ml$QVE;zC+ral_QGnm5bK`bt&IWLVVa?P}a-GOJq2$aju=Q#YWU z5fJYnf_Mtx`oc|=3t?@f&zE1!hLd=%R}6BE#a=zIEO+&Iu4||m$oJ4UA`WkG z?}1N@;F6Jr>QupTEch^)s@{q6MO1LT&hkl1+?d+7IU_Pa=&2vH7n|!FYBuTQEx`i#0>fVsax}vB|V! znudKU>-o2{em+!R%2=yRR#m;MJE~gUw+kJa?kfL_Hiz3fYK^~Nmt1+YH9Em(rL}*g zF5QZ?#-_M9@QYlqxpJx@r=AQA-(GDTI@uhWaffC=um9=6Ol$1Srt@8`F?I&t zb~vQO+6V~Wt;4eeZcskJ76=?0JV!fM0DpH7AOHk^U;&G|fB~Du0Gn9a094cjKCg&4 z0(*fq9Nh@7iB5nvgo;50fL_oYfDihEGtl)0+5z@zFW~e?c?)8Ez~l7BTBsJ<+~udc zj?fmc4+3#b>aic-xF+Gg;Xn(=cJc9DeE)O4w{F(L&i>#y!iid#S4*#sfNEi=mgEAH z91i9<$GU2MS|oXgMSPH^MJ7?xAYKdNxMvdJiN2c-d-!7ml-L#&5mA>-TGAXQmxyg^ zD+Ca1JCtZ851na|?uBregf&M4TLn|k6PxlM!=jxN^dLyp@mTCi$7E_53MAzNGUb8w zY$_dp0ryO%|wlw~?X2f6ErUxF-ZX{&sn zC4%c<9g^@|^h|*(|FSkm2QRi%itgiv5-X(4tDL9~`P``v@2;Yrts&61e*vRW-iKZ}+B!1n9y!$> z8yMW%MnLM(e-ESKLmP=r>`u%+I{kR=x22rB^hrZ2G?#RDNpC2{rc!j3Vm;APj{UAo z{i;kgl@qRVqMmp%ICT5$-O~Mecl@>O>+bmM!?Zj8&ZBGY_~qu{qC2=)m;aO#jpUo# z3J`dk@|-KrHRQRc14H!zdH}ApkPh=sQr1dDRas2s4W?pnzF$?ZS2V-lp&Xbr3*-mn zo%2#ic}hLPYrviXvK~BbF&2h45s;DLu+l~^6W<)S1UNa$4Nh>vE0`rKj&9f)Xsf)P z+J4)WynZVcp;xmg)+vvW-(gwjanmF}?FDv~Y11W83Qh*G+O#bF;|NPH}7yN&T(LXK# diff --git a/news_ukraine_war_20240620_165102.json b/news_ukraine_war_20240620_165102.json deleted file mode 100644 index e94b401..0000000 --- a/news_ukraine_war_20240620_165102.json +++ /dev/null @@ -1,258 +0,0 @@ -[ - { - "date": "2024-06-20T10:05:00", - "title": "Ukraine claims to be winning its war on corruption. The West says: Do more.", - "body": "Washington and its allies repeatedly say Kyiv isn't doing enough to fight corruption. In fact, experts say Ukraine may be overcorrecting to please backers and obscure accountability.", - "url": "https://www.msn.com/en-us/news/world/ukraine-claims-to-be-winning-its-war-on-corruption-the-west-says-do-more/ar-BB1oyetM", - "image": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/J6L5GXA35FYTLXZP7QNJ6CXNQU.JPG&w=1440", - "source": "The Washington Post on MSN.com" - }, - { - "date": "2024-06-20T09:22:00", - "title": "Putin arrives in Vietnam as Russia courts support amid war in Ukraine", - "body": "President Vladimir Putin of Russia arrived in Vietnam on Wednesday as he continues to court support from communist-led Asian nations amid his war against Ukraine.", - "url": "https://www.msn.com/en-us/news/world/putin-arrives-in-vietnam-as-russia-courts-support-amid-war-in-ukraine/ar-BB1ozady", - "image": "https://cdnph.upi.com/sv/ph/og/upi_com/3761718872077/2024/1/0a29e20258000829fc47bd5592afc640/v1.5/Putin-arrives-in-Vietnam-as-Russia-courts-support-amid-war-in-Ukraine.jpg", - "source": " UPI News on MSN.com" - }, - { - "date": "2024-06-19T15:57:00", - "title": "Ukraine War Maps Reveal Kyiv's Recaptured Frontline Positions Near Kharkiv", - "body": "Russia launched a new cross-border offensive into Kharkiv last month, with fighting continuing further south in the region.", - "url": "https://www.msn.com/en-us/news/world/ukraine-war-maps-reveal-kyiv-s-recaptured-frontline-positions-near-kharkiv/ar-BB1owwkv", - "image": "https://d.newsweek.com/en/full/2413036/vovchansk-kharkiv.jpg", - "source": "Newsweek on MSN.com" - }, - { - "date": "2024-06-19T23:59:00", - "title": "Outgoing NATO chief says China should face consequences for backing Russia's war on Ukraine", - "body": "NATO's secretary general called out Beijing on Wednesday, saying China \"cannot have it both ways\" when it comes to the war in Ukraine.", - "url": "https://www.cbc.ca/news/politics/stoltenberg-nato-russia-ukraine-china-1.7239951", - "image": "https://i.cbc.ca/1.7240354.1718831097!/fileImage/httpImage/image.JPG_gen/derivatives/16x9_620/cda-nato-20240619.JPG", - "source": "CBC.ca" - }, - { - "date": "2024-06-20T14:43:00", - "title": "Russia wages a scorched-earth war in Ukraine with retrofitted bombs and new airstrips", - "body": "Russia has accelerated its destruction of Ukraine's front-line cities in 2024 to a scale previously unseen in the war using glide bombs and an expanding network of airstrips just across the border.", - "url": "https://www.wunc.org/2024-06-20/russia-wages-a-scorched-earth-war-in-ukraine-with-retrofitted-bombs-and-new-airstrips", - "image": "https://npr.brightspotcdn.com/dims4/default/69565c6/2147483647/strip/true/crop/5333x2800+0+600/resize/1200x630!/quality/90/?url=https%3A%2F%2Fnpr.brightspotcdn.com%2Fdims3%2Fdefault%2Fstrip%2Ffalse%2Fcrop%2F5333x4000%20584%200%2Fresize%2F5333x4000%21%2F%3Furl%3Dhttp%3A%2F%2Fnpr-brightspot.s3.amazonaws.com%2Fe1%2Fa4%2Feec528684ca7be7f7bafbe3d87cb%2Fap24171656126984.jpg", - "source": "WUNC" - }, - { - "date": "2024-06-20T00:59:54", - "title": "Ukraine war latest: Russia intensifies attacks near Toretsk, Donetsk Oblast", - "body": "Russia, North Korea sign strategic partnership agreement Russia has moved almost all ground forces from Finland's vicinity to Ukraine, media report After a 'long lull,' Ukraine reports intensified Russian attacks near Toretsk in Donetsk Oblast Denmark announces new aid package for Ukraine focused on F-16s,", - "url": "https://www.msn.com/en-au/news/world/ukraine-war-latest-russia-intensifies-attacks-near-toretsk-donetsk-oblast/ar-BB1oxzwS", - "image": "https://media.zenfs.com/en/kyiv_independent_articles_496/db87636045abdb01c6d3cead186c1cfc", - "source": "Kyiv Independent on MSN.com" - }, - { - "date": "2024-06-20T12:55:00", - "title": "Beluga Whales Rescued From War-Torn Ukraine And Evacuated To Spanish Aquarium", - "body": "The two beluga whales, a 15-year-old male called Plombir and a 14-year-old female called Miranda, lived life at a Dolphinarium in Kharkiv, which had been evacuating animals since the war between Russia and Ukraine began in 2022.", - "url": "https://www.iflscience.com/beluga-whales-rescued-from-war-torn-ukraine-and-evacuated-to-spanish-aquarium-74740", - "image": "https://assets.iflscience.com/assets/articleNo/74740/aImg/76955/beluga-whale-meta.jpg", - "source": "IFLScience" - }, - { - "date": "2024-06-20T11:18:16", - "title": "Germany's Habeck thanks South Korea for stance on Ukraine war", - "body": "During a visit to the South Korean capital on Thursday, German Vice Chancellor Robert Habeck expressed his thanks for the country's joint stance in support of Ukraine in its fight against the ongoing Russian invasion.", - "url": "https://www.msn.com/en-gb/news/world/germany-s-habeck-thanks-south-korea-for-stance-on-ukraine-war/ar-BB1ozyz4", - "image": "https://media.zenfs.com/en/dpa_international_526/d3ca2d0872c058c7f02c60bb629c0022", - "source": "DPA International on MSN.com" - }, - { - "date": "2024-06-20T12:53:00", - "title": "Two beluga whales rescued from \"war-ravaged\" Ukraine", - "body": "VALENCIA, Spain (Gray News) - Two beluga whales have been rescued from the \"war-ravaged\" city of Kharkiv and taken to an aquarium in Valencia, Spain. The city is facing increasing threat from artillery fire, which has intensified in recent weeks, with bombs dropping within a few hundred meters of the aquarium where the belugas have been.", - "url": "https://www.hawaiinewsnow.com/2024/06/20/two-beluga-whales-rescued-war-ravaged-ukraine/", - "image": "https://gray-khnl-prod.cdn.arcpublishing.com/resizer/v2/F5UAHPMZSJC6NLZUNZX7FBK6DU.jpg?auth=dd3212066e047f0bebfb0b6b5878c3f7917334ea65af21458e8a91cdb47310c9&width=1200&height=600&smart=true", - "source": "Hawaii News Now" - }, - { - "date": "2024-06-20T14:45:00", - "title": "Fluxys helped export €10.7 billion of Russian liquified gas since the Ukraine invasion", - "body": "Brussels, June 20 - As the EU agrees new sanctions targeting Russian LNG, Global witness reveals that Belgian gas giant Fluxys helped to export an estimated €10.7 billion worth of Russian liquified natural gas (LNG) since Russia attacked Ukraine in 2022- money that could be fuelling Putin's war crimes.", - "url": "https://www.globalwitness.org/en/press-releases/fluxys-helped-export-107-billion-of-russian-liquified-gas-since-the-ukraine-invasion/", - "image": "https://cdn2.globalwitness.org/media/images/RS6871_2-2000x1200.width-1024.png", - "source": "Global Witness" - }, - { - "date": "2024-06-20T13:01:54", - "title": "Ukraine War", - "body": "World leaders gathered in Switzerland on June 16th for the second day of a major peace conference, aiming to condemn Russia's invasion of Ukraine and address the war's human cost. Over 90 countries and 50 heads of state,", - "url": "https://www.msn.com/en-xl/asia/pakistan/ukraine-war/ar-BB1oAdwg", - "image": null, - "source": "Daily Times(PK) on MSN.com" - }, - { - "date": "2024-06-20T10:05:00", - "title": "Kim vows to back Putin 'unconditionally' on war in Ukraine", - "body": "North Korean leader Kim Jong Un pledged to \"unconditionally support\" Russia in its invasion of Ukraine at talks with President Vladimir Putin in Pyongyang that emphasized deepening ties amid US concerns about arms supplies to the Kremlin's war machine.", - "url": "https://www.westhawaiitoday.com/2024/06/20/nation-world-news/kim-vows-to-back-putin-unconditionally-on-war-in-ukraine/", - "image": "https://www.westhawaiitoday.com/wp-content/uploads/2024/06/web1_WORLD-NEWS--NKOREA-PUTIN-GET.jpg", - "source": "West Hawaii Today" - }, - { - "date": "2024-06-19T22:55:00", - "title": "Ukraine war latest: Putin and Kim sign new defence deal - as UK says 'bizarre scenes' should be warning", - "body": "making a vow of mutual aid if either of their countries is attacked as both face escalating stand-offs with the West. Got a question on the Ukraine war? Submit it below for our specialists to answer.", - "url": "https://news.sky.com/story/ukraine-war-latest-russia-putin-kharkiv-sky-news-live-blog-12541713", - "image": null, - "source": "Sky" - }, - { - "date": "2024-06-20T14:00:53", - "title": "Russian troops fail to advance as Ukraine garners military, financial aid", - "body": "Ukraine and Russia have pursued international military agreements as their forces remained largely stalemated during the past week. Russia was unable to make headway in eastern Ukraine and even lost ground in its newest incursion in the northern Kharkiv region,", - "url": "https://www.msn.com/en-us/news/other/russian-troops-fail-to-advance-as-ukraine-garners-military-financial-aid/ar-BB1oA8Yb", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oAf3Z.img?w=4120&h=2863&m=4&q=80", - "source": "Al Jazeera on MSN.com" - }, - { - "date": "2024-06-20T13:57:00", - "title": "Russia hammers Ukraine's power grid again and Kyiv's drones target enemy oil depots", - "body": "Russia has resumed its aerial attacks on Ukraine's power grid and Kyiv's forces again targeted Russian oil storage depots with drone strikes across the border.", - "url": "https://www.msn.com/en-us/news/world/russia-hammers-ukraine-s-power-grid-again-and-kyiv-s-drones-target-enemy-oil-depots/ar-BB1oz98U", - "image": "https://res.cloudinary.com/graham-media-group/image/upload/f_auto/q_auto/c_thumb,w_700/v1/media/gmg/QHAN4LMO5JDZHHH3N52NRGM3NA.jpg?_a=ATAPphC0", - "source": "The Associated Press on MSN.com" - }, - { - "date": "2024-06-19T20:13:00", - "title": "Russian Gas Sales To Europe Exceed US Supply As Ukraine War Rages", - "body": "Russia overtook the U.S. in terms of natural gas supplied to Europe in May as the war in Ukraine continues, according to Financial Times.", - "url": "https://ijr.com/russian-gas-sales-to-europe-exceed-us-supply-as-ukraine-war-rages/", - "image": "https://ijr.com/wp-content/uploads/2024/06/53398057663_cb299479d5_o-e1718656311690-1024x440-1.jpg", - "source": "IJR" - }, - { - "date": "2024-06-20T05:00:09", - "title": "Ukraine claims to be winning its war on corruption. The West wants more.", - "body": "Washington and its allies repeatedly say Kyiv isn't doing enough to fight corruption. In fact, experts say Ukraine may be overcorrecting to please backers and obscure accountability.", - "url": "https://www.msn.com/en-us/news/world/ukraine-claims-to-be-winning-its-war-on-corruption-the-west-wants-more/ar-BB1oyetM", - "image": null, - "source": "The Washington Post on MSN.com" - }, - { - "date": "2024-06-20T14:04:52", - "title": "L.A. woman Ksenia Karelina on trial in Russia over small Ukraine donation", - "body": "U.S.-Russian dual national Ksenia Karelina faces a possible life prison sentence if she's convicted of treason for donating to a U.S.-based Ukraine charity.", - "url": "https://www.msn.com/en-us/news/world/l-a-woman-ksenia-karelina-on-trial-in-russia-over-small-ukraine-donation/ar-BB1oAk9z", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oAdIk.img?w=1600&h=1600&m=4&q=74", - "source": "CBS News on MSN.com" - }, - { - "date": "2024-06-20T14:37:01", - "title": "Russian-American ballerina who was arrested on treason charges after $51 Ukraine donation faces closed-doors trial", - "body": "Russian-American ballerina who was arrested on treason charges after $51 Ukraine donation faces closed-doors trial - Ksenia Karelina faces a prison sentence of 12 years to life in Russia if she is con", - "url": "https://www.msn.com/en-us/news/world/russian-american-ballerina-who-was-arrested-on-treason-charges-after-51-ukraine-donation-faces-closed-doors-trial/ar-BB1oAkhc", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1j2cFI.img?w=1200&h=901&m=4&q=81", - "source": "The Independent on MSN.com" - }, - { - "date": "2024-06-20T11:07:45", - "title": "'Stopped Russia-Ukraine War, But Paper Leak...': Rahul Gandhi's Jibe At PM Modi Over NEET Controversy", - "body": "A massive row erupted after the NEET exam, taken by 2.4 million students on May 5, faced allegations of a paper leak shortly after the results were declared on June 4. As many as 67 students had achieved perfect scores of 720/720 and grace marks had been given to some students allegedly to compensate for time lost at exam centres.", - "url": "https://www.msn.com/en-in/news/India/stopped-russia-ukraine-war-but-paper-leak-rahul-gandhi-s-jibe-at-pm-modi-over-neet-controversy/ar-BB1ozHfA", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozvKY.img?w=1280&h=720&m=4&q=100", - "source": "Times Now on MSN.com" - }, - { - "date": "2024-06-20T14:03:00", - "title": "North Korea To Enter Ukraine War? Putin's New NATO-Like Defence Treaty Spooks West", - "body": "During Russian President Vladimir Putin's visit to North Korea, he and North Korean leader Kim Jong Un signed a treaty akin to NATO's mutual defense clause, marking a significant diplomatic development.", - "url": "https://timesofindia.indiatimes.com/videos/toi-original/north-korea-to-enter-ukraine-war-putins-new-nato-like-defence-treaty-spooks-west/videoshow/111144516.cms", - "image": "https://timesofindia.indiatimes.com/photo/msid-111144516,imgsize-148802.cms", - "source": "Indiatimes" - }, - { - "date": "2024-06-20T10:11:08", - "title": "PM is said to have stopped Ukraine war but not paper leaks: Rahul Gandhi's jibe", - "body": "Rahul Gandhi took a jibe at PM Modi on Thursday, saying that PM Modi was being credited with stopping war in Ukraine but could not stop paper leaks in the nation.", - "url": "https://www.msn.com/en-in/news/India/pm-is-said-to-have-stopped-ukraine-war-but-not-paper-leaks-rahul-gandhis-jibe/ar-BB1ozhYg", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozmD0.img?w=1280&h=720&m=4&q=91", - "source": "India Today on MSN.com" - }, - { - "date": "2024-06-20T07:47:04", - "title": "Vladimir Putin arrives in Vietnam with praises for its balanced position on Ukraine war", - "body": "Vladimir Putin arrives in Vietnam with praises for its balanced position on Ukraine war - Vietnam offers full state welcome of Russian leader despite America's opposition", - "url": "https://www.msn.com/en-gb/news/world/vladimir-putin-arrives-in-vietnam-with-praises-for-its-balanced-position-on-ukraine-war/ar-BB1oyRaK", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oyAbx.img?w=1200&h=800&m=4&q=81", - "source": "The Independent on MSN.com" - }, - { - "date": "2024-06-19T20:02:00", - "title": "Two Beluga Whales Evacuated To Spain From War-torn Ukraine", - "body": "Two beluga whales have been evacuated from an aquarium in war-torn Ukraine to Spain by road and plane in a \"high-risk\" operation, officials at their new home said Wednesday.", - "url": "https://www.barrons.com/news/two-beluga-whales-evacuated-to-spain-from-war-torn-ukraine-ef6cde1f", - "image": null, - "source": "Barron's" - }, - { - "date": "2024-06-20T02:00:16", - "title": "Ukraine peace summit is a 'success', China key to ending war: ambassador to Singapore", - "body": "The summit in Switzerland is a 'milestone in the entire peaceful process' says Kateryna Zelenko, Ukraine's ambassador to Singapore A senior Ukrainian diplomat has called the recently concluded peace summit in Switzerland a \"success\" despite the absence of many Asian countries,", - "url": "https://www.msn.com/en-xl/news/other/ukraine-peace-summit-is-a-success-china-key-to-ending-war-ambassador-to-singapore/ar-BB1oxRvA", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1oxSS4.img?w=2000&h=1397&m=4&q=57", - "source": "South China Morning Post on MSN.com" - }, - { - "date": "2024-06-20T11:29:46", - "title": "Beluga whales take gruelling journey across war-ravaged Ukraine to reach new home in Spain", - "body": "Two beluga whales faced a gruelling journey across Ukraine's war-ravaged region of Kharkiv to reach their new home in Spain.", - "url": "https://www.msn.com/en-us/news/australia/beluga-whales-take-gruelling-journey-across-war-ravaged-ukraine-to-reach-new-home-in-spain/ar-BB1ozEUg", - "image": null, - "source": "ABC News (AU) on MSN.com" - }, - { - "date": "2024-06-20T10:20:00", - "title": "It is said PM stopped Ukraine-Russia war but ...': Rahul Gandhi takes jab at PM Modi over NEET, UGC-NET paper leaks", - "body": "Congress MP Rahul Gandhi on Thursday launched a fierce attack against the BJP-led government over alleged leak of NEET and UGC-NET exam papers that has affected tens of thousands of students, stating that he will be raising the matter in the upcoming session of Parliament and put immense pressure on the Centre.", - "url": "https://www.msn.com/en-in/news/India/it-is-said-pm-stopped-ukraine-russia-war-but-rahul-gandhi-takes-jab-at-pm-modi-over-neet-ugc-net-paper-leaks/ar-BB1ozivz", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozwMG.img?w=1140&h=641&m=4&q=100", - "source": "The Times of India on MSN.com" - }, - { - "date": "2024-06-20T10:51:50", - "title": "It's said PM stopped Ukraine-Russia war but can't stop exam paper leaks: Rahul Gandhi", - "body": "Congress leader Rahul Gandhi Thursday launched a scathing attack on the government over the alleged irregularities in NEET and cancellation of UGC-NET and said Prime Minister Narendra Modi has \"psychologically collapsed\" post-elections and will struggle to run a govt like this.", - "url": "https://www.msn.com/en-in/news/India/it-s-said-pm-stopped-ukraine-russia-war-but-can-t-stop-exam-paper-leaks-rahul-gandhi/ar-BB1ozoaF", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozsNH.img?w=280&h=186&m=4&q=81", - "source": "The New Indian Express on MSN.com" - }, - { - "date": "2024-06-19T22:55:00", - "title": "Ukraine war latest: Putin makes 'absurd attempt to seduce West'; leaders call for Olympics truce", - "body": "That's all for our live coverage today, but we'll be back with more live updates and analysis soon. If you're just checking in, here is a recap of the key moments that occurred over the last 24 hours.", - "url": "https://news.sky.com/story/ukraine-russia-war-latest-energy-restrictions-imposed-across-ukraine-amid-russia-barrage-12541713", - "image": null, - "source": "Sky" - }, - { - "date": "2024-06-19T15:31:09", - "title": "Ukraine war: North Korea, Russia sign mutual defence deal", - "body": "Russian President Vladimir Putin signed Wednesday a mutual defence agreement with North Korea's Kim Jong Un, who offered his \"full support\" on Ukraine.The pledge of military cooperation was part of a strategic treaty signed during a summit in Pyongyang,", - "url": "https://www.msn.com/en-xl/africa/nigeria/ukraine-war-north-korea-russia-sign-mutual-defence-deal/ar-BB1owGaV", - "image": null, - "source": "Nigerian Tribune on MSN.com" - }, - { - "date": "2024-06-20T14:22:00", - "title": "North Korea says deal between Putin and Kim requires immediate military assistance in event of war", - "body": "North Korea and the former Soviet Union signed a treaty in 1961, which experts say necessitated Moscow's military intervention if the North came under attack. The deal was discarded after the collapse of the USSR, replaced by one in 2000 that offered weaker security assurances.", - "url": "https://www.msn.com/en-my/news/world/north-korea-says-deal-between-putin-and-kim-requires-immediate-military-assistance-in-event-of-war/ar-BB1oxOQN", - "image": "https://media.whas11.com/assets/CCT/images/e592f395-7707-4b4b-982b-ffc80158dc99/20240619T111911/e592f395-7707-4b4b-982b-ffc80158dc99_1140x641.jpg", - "source": "The Associated Press on MSN.com" - }, - { - "date": "2024-06-20T11:29:08", - "title": "'PM Modi Stopped Ukraine War; But Couldn't...': Rahul Slams Centre For Inaction Over NEET-UG Paper Leak | Top Developments", - "body": "Rahul Gandhi criticises PM Modi for failing to prevent NEET-UG paper leaks amid ongoing controversies. Meanwhile, the Deputy CM of Bihar has levelled allegations against Pritam Kumar, the personal secretary of Tejashwi Yadav.", - "url": "https://www.msn.com/en-in/news/other/pm-modi-stopped-ukraine-war-but-couldn-t-rahul-slams-centre-for-inaction-over-neet-ug-paper-leak-top-developments/ar-BB1ozMeG", - "image": "https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB1ozw9p.img?w=700&h=400&m=4&q=54", - "source": "Zee News on MSN.com" - } -] \ No newline at end of file diff --git a/prompts/__pycache__/__init__.cpython-310.pyc b/prompts/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 9bddc641abb02faabba28deca056a6eb6aa91ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmd1j<>g`kg2ZjPX(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11`-73bnQo*Gt zvn(~nC9xz?*Euz>q$o34Aviy$v?Mb>uQWb BGEo2k diff --git a/prompts/__pycache__/__init__.cpython-311.pyc b/prompts/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index a8af5bf51a16089b65360d816f167c0818cb4dd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmZ3^%ge<81Xp$zq=D$iAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFJ1kN{M=Oi zl*F7&{gl)){nFx8-IDzLoML1Bf};G~f|6qW`1s7c%#!$cy@JYL95%W6DWy57c15f} Y-5~Re`GLd-W=2NF4-7D(h#4pb00G(~EC2ui diff --git a/prompts/__pycache__/prompts.cpython-310.pyc b/prompts/__pycache__/prompts.cpython-310.pyc deleted file mode 100644 index b6e4e2d974567e6164ad09e3ad03fc8ad490311c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmZ8g!EO^V5Z&|?S?V8f80A(eS#d*(5JGCCQX~pexqw#Mde^gw!Mont-h>G8E4}k6 zT=;-q`3o-a>MT2KYw*$NVoWvgYciI?I z9N4wGW7=(Wy-C;Rq#Gb3PkXA^2l9gstP*hNcfbi79 zOL`AZ5sPe-7{n;0MkNG-C{Q4$%RudbmMVysx~0b1Hs+zLQ8N>rrKEAnPLvblIR@qA;gV zv4h^(tyZz>KXDN~dKn>JF)V^Nlw>q6K$nL$acC?aC;0~DwSyIW?Q|bB-f1bmCUK9? zz6tTputcA&{2a?FbmWmu6%G|)5&JmMQb&e^nP48oll`6i!NokfjcYwZqeGm9Dvg?SxpN3#w@!R^?#iiFlsJCxeg3}B&tDG?M27L}dtd+E%d$W5XFKxExU3C(!?Y9KSzjT zI^O|0pVM1#idbap#2`i~36(Giroe%MP6D+9BrRZGQcJb7ZOntJ(K8ZsZ&(MKHpM5= zoQSF{bv97PqcH&A02X)D67LN&-*csFUC}58hFlKXp|%Eiw9~WUYINBe*m{owoz&Pb zQJB()sGxUtsa4!{Yc8TYCnLm5MvLGKB^iwZ_;M!`i^k$`Qr}>E?a&Ioa=H&1=QJ0e zlexQVUxavLSVCtjKgMkp6nSLR0*i_;i8?m4)K0^pnb16l$)(grE(}@(R{KJn9_7Ce zQwNuR?E|+Z%G*AanDz#}^ewxIH{o_VYi!FiC5@gbUd~|mal&{y8!P%GUc|1&!rAGeS7e{A0=cmMzZ diff --git a/toolbox/__pycache__/toolbox.cpython-310.pyc b/toolbox/__pycache__/toolbox.cpython-310.pyc deleted file mode 100644 index 4a42bdb9084dff8b3f63d09489106e74e9b3dd2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1325 zcmaJ>!EO^V5VdzV$#&INRV#5sR>grF8gW3X6d_d6NWDOXXirg)wOu={%Vyo$PHCd# zME`&zLTZoP_y_)CublY-PRuyjkb=OH#~#}=JMTTO_1aoOp#AtZ=zk0e`Hs$VgEg`T z-EM+8Ac6>b1N}qLB_cQ?%`k)Ydo2KO54wE>Mv^WSq#Fn-f*aBeMJOT|BT*A|7;B;d zIpVT$tabiEUuP6zs)ln+wh!H6m5NLVhY}!!9yV#2IEb=bsLX*ES(*305EH@4pCLUqcY}P70PjrMOrio9d8`ZkhH4J3^%HVY+`*L(nFX`XotLAnFf>K9KfAZ z7=vfzGQc^)Ot*lAgw5NL(?(k6&Lqo~lLiVe(t%`YA(+sa1%SmV(|sn>?2Pq?MTSV3 zD&`^9wUR}$*QtS6$YR@zwJOB&Tv^8+qiwd?OLQP@waxU&xy&3?qM5~-meRhFZfJ_7 zoG4Eli1xLlX2jkrw^SSguq?IgogBdkNC2KPzw!9Zt27@<+gcRb49f=RfSGfH1fv+3 ziSuS?kmc@rRqPB)8KLhl$IR3)s^+W5sjY*FlMPy@PlMS&gX%09)YafCg57^9CNYh})pfrLPlz9vB76dWGva5nPd@jt Ih@~ diff --git a/toolbox/__pycache__/toolbox.cpython-311.pyc b/toolbox/__pycache__/toolbox.cpython-311.pyc deleted file mode 100644 index 0b7a98bcf5e5794aa074f2b108d209fdfda2d50d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1643 zcmaJ>&uE$G0x=%9fTGC3Nq}wQlOEwPN}3=LNN?0= zT#6u8bK!dtSdNy#lEyUb)#b)=xGEdM4g7|XcN-loub9Q3G_boJu4jFHZ6hvn?zjDj z^X~DqntJBJO7t|q78#wMA2`Fx06qs;iI-ml7q%|JlQv{f>_9+o4GFw(LC^V#4aM%n(Rw7AZ<3y!rLp-i=dK_ zX{_l`+HYmlQSC!Hk(VZG0YWXV+Fvb5($wL-H^a=QUeRpyOCpY;u;^L0cm^aG7cnmlRCx-RX>NV`4U42iPLx zlVtY7n9!-FfkA6@<>TLP4O+vmpSGTTwO78hTfQ`^%nUboiyx^e2zf)jScTETeHd)R zv*}Y{7sg53$yJbfuzwD}7r6t}bNm)4q;K`@9_?8_!&B?ofc7s=7v$Kd!xKHalWQms zJdz2tnZc7Irw4+RS?_w8t^eTK}tB->Y8TuUP3GJu$6zt7A>5C0yCH>7tW4J4)dkLxiL8kNp?&Of1k+)r*RjQ nu-Wug@mf;oXX-=nnVmm{!Pushj;(nLX^+Cc=zIA;6DIM0rlF5) diff --git a/tools/__pycache__/__init__.cpython-310.pyc b/tools/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index a96a1c8cf60c71042273d3b520265c6d9d2ed273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 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 Bq9gzS diff --git a/tools/__pycache__/reverser.cpython-311.pyc b/tools/__pycache__/reverser.cpython-311.pyc deleted file mode 100644 index 1e8d029757457ab34688ff39791245c18bccbcb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmZWnzfZzI6uxUQB7$sHG0{t0KqDPwBF4=X4LZ3PIFK}QmCTzyd z)&GKl2^SM5w8f7Lt zZifOu3_2px_kPk%>Ejd7U6Yc32*h%WqzjVyqbpYR1f#@r!KiW`awB6k&#nr~vGY%G zSkvTB)6;aM8B{d7c^ow4 zowz#?2FN$i>h`DrqdY21jO^g}&EU^lV}l0|)XSN1EHeW(D&?^1=kg-?k_?Lw=JA7; cL%k+DYMQ5>lkBSOXCe6{ST`D3#_cDKmY&$ diff --git a/tools/__pycache__/searcher.cpython-311.pyc b/tools/__pycache__/searcher.cpython-311.pyc deleted file mode 100644 index 66c92fa868d7af192550ce095a8d831c2dbf1779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2619 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 JurFa&{|~TW=VJf> diff --git a/tools/__pycache__/searcher2.cpython-311.pyc b/tools/__pycache__/searcher2.cpython-311.pyc deleted file mode 100644 index 3047cfb71e1cb020ee18655b4cca366363946f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2957 zcma(T-*4N-`Dl@nsNa!m+KJkjiI*RWW7&?AwM~nyO_Ul*V>_D*3>7dCjP7jHmPqwT z)s99L+Rz6L=z})|NPumCwuiJs_K-heYtr@A3ItRjU?9NIhrD^n1_XK9ccdgsP6OvUKwB3sC?a^Sk9^i?WRHH zYfFn)FQ1hcmhLgDl3-Y3n`QM)v@}-=nL%%{RK~>$1CF4C%WEGxvM5 zE-$n2Qo9Eu_j{v_ALIdT2P|7+PXrzGi$epm{Gcp{#KHJjTHIzI;H(O^fPII%)2Qkn z&?_9&Yx}Ec6;%V6uLkwZ1hRUP2(A0O#E%ety(;!=!h$XS0sZMfj2!wHVSiQpOw@zk zcaz&hTfUFcCT9n2--fG@ehbmWySfn?%;p7D4OxfwXYEjP0$maeQ7+kTz=&E51 z+aLP}c{rqpC(tZ1`OP8EGv+l1j~&jUU#6=OJA#9K8H@rg_R%pr&~T6DzAqkTNA1|k zOBwm%j2&1;kXdP;AM*LmfqaI3IG=V9hbvKpszGbt1+)$$9h*ZqVh1ZwAS$pY2IK$# zR^!39%)fM0{S9o_kPPhxp(_S0%Bs9cZgx(oTsAd*RnC_48|Qr#0OI#>H~+ zCe#OGrK=jubc|-?_bs_VRMV0#?CZd!pn@4sI_nZQiM2_H&cvujOj*+*q`aZyj-SkQ zQQZR5-h4-RLEX}df4j=NcR z1Xr2EuTip68M(r^WL&09#4~$Qrm#;CWrZ^xbNF@B&>aDnizU+uP*N(WdEyALL|Vxa zN+4)CLcvh6>BN}_S>^z7^-@-U9G=DJ@D|y!9KTvB5gj|?m90D}u`&-6T9N515K>CV zX@rS{`xY5Yvjyq~;U?FKYkH|{Dd2>Xht<`ca7m>m!3tI_)rq=UQDF5f0^WhsUg&^$ z;v8{!j8{!3=7rqdP>$bYrLm6V`i99W5L^7d_TudHno%Uv><>1L$*0q0lT2BLQ84GG z-OseAme6yV(k;jDQFIbCF>U6%@b9Rh|Bj*2)a~`gNK-o1l1|l@+R};dq^ZZ!)K~cj z=bO@7E$OY=(i1i~`B<84N>eRq>N{!fu{8G}+mzmJNpIJdc6qUW;nxeFFVq&k2lS^+ zKGot=JA7(yC@4(sN=LxJcvG5fNwf8Edu*aH-x@nxkM0Je^VfCG;dm=NzK1wravy-uPAuI}0YGmC&$NPPc3$ewq3!uVkbV6qoZSBK zacF!eG`=?!6Q_3%jr>l!ErHVL&$zqicaNQD;4ihmXb*(Hzthl~Czo0$mzu|Jw2s}_ zj)4|n@>o6iZ&&O;F6T#fd6#s7kk}wz_5k8CH~n zmM6MNJmOPAO*qm(#1sYYbh-sEVS=Kf5O&D}6!e*vYL!jEG{ zYteRcv=(kB4>K@Vi?x%dYGONil+Di6;!n`=ox$El;hOvOkUc)b4ey~>0QzIF`9C3< B`EURL diff --git a/tools/__pycache__/searcher3.cpython-311.pyc b/tools/__pycache__/searcher3.cpython-311.pyc deleted file mode 100644 index 4979f49332f34fa2dbcfecdf29f980a58e78fa15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932 zcmZ`%&ubGw6rM>oX=!Y0t$6S>6ojtS?xFP1AVMJ$gc`)$>Y;2hlVr*Ms57%Rg$O}B zs0beG(Nk6GAEV%*?A23lf#9Vl-<#cy@!(_U&AgfSzW2Vj@ALBV5&^mUPFFZ zE?^s(-iGaraKfoi0(wX(;S0REBF}m3_v1+w?b6f&rjIrY)sI~7HOZItEk4zE;}?WnXqx)tnIXc`W29+f-WG zRn|-)&0Xq@E@2!TWe9B33pF@4;-DoYi#jKC^3My$irk8d>;{Q%8Ee6^yB_-3eq%zm6 zq-0pR0?EPHX8`Uo>H%5&qc#(!(lsKsplglzF zyO^wTm>XQ(=qSTRT$A7{k!yHf1$DJ}KZtnjiwE*1m^jC37u2LkDZL~c-~at4)-}35 JA^%YZ_79Po_bvbc diff --git a/tools/searcher1.py b/tools/searcher1.py deleted file mode 100644 index 8e2c718..0000000 --- a/tools/searcher1.py +++ /dev/null @@ -1,66 +0,0 @@ -import requests -import time -import re -from html.parser import HTMLParser -from urllib.parse import quote_plus - -class MyHTMLParser(HTMLParser): - def __init__(self): - super().__init__() - self.results = [] - self.current_title = "" - self.current_link = "" - self.in_title = False - - def handle_starttag(self, tag, attrs): - #if tag == 'div' and ('class', '%yuRU%') in attrs: - if tag == 'div' in attrs: - self.current_title = "" - self.current_link = "" - elif tag == 'a' and self.current_title == "": - for attr in attrs: - if attr[0] == 'href': - self.current_link = attr[1] - break - elif tag == 'h3': - self.in_title = True - - def handle_data(self, data): - if self.in_title: - self.current_title += data - - def handle_endtag(self, tag): - if tag == 'h3': - self.in_title = False - elif tag == 'div' and self.current_title and self.current_link: - self.results.append((self.current_title, self.current_link)) - -def search(query, num_results=5, delay=2, max_retries=3): - """ - Perform a web search and return the top results. - Args: - query (str): Search query. - num_results (int): Number of results to return. Do at least 5 please. - delay (int): Delay between requests in seconds. - max_retries (int): Maximum number of retries for failed requests. - Returns: - list: List of top search results (title, link). - """ - query = str(query) # Convert query to string - search_url = f"https://www.google.com/search?q={quote_plus(query)}" - headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'} - retries = 0 - - while retries < max_retries: - try: - with requests.get(search_url, headers=headers, timeout=10) as response: - response.raise_for_status() - parser = MyHTMLParser() - parser.feed(response.text) - return parser.results[:num_results] - except (requests.RequestException, ValueError) as e: - print(f"Error during search: {e}") - retries += 1 - time.sleep(delay * (2 ** retries)) - - return [] \ No newline at end of file diff --git a/tools/searcher3.py b/tools/searcher3.py deleted file mode 100644 index 5015767..0000000 --- a/tools/searcher3.py +++ /dev/null @@ -1,17 +0,0 @@ -from duckduckgo_search import DDGS - -def search(query, num_results=5, delay=2, max_retries=3): - """ - Perform a web search using DuckDuckGo and return the top results. - Args: - query (str): Search query. - num_results (int): Number of results to return. At least 5. - delay (int): Delay between retries in seconds. - max_retries (int): Maximum number of retries for failed requests. - Returns: - list: List of top search results (title, link). - """ - results = DDGS().text(query, max_results=num_results) - return results - -#print(results) \ No newline at end of file From f6faca4e7eadf12c9ccda943981f3950fda9ec2a Mon Sep 17 00:00:00 2001 From: dalijon-byte Date: Fri, 21 Jun 2024 11:57:54 +0200 Subject: [PATCH 10/10] added git ignore file --- .gitignore | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df8768d --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +toolvenv/* +#.gitignore +agents/__pycache__/* +prompts/__pycache__/* +tools/__pycache__/* +models/__pycache__/* +toolbox/__pycache__/* +tests/__pycache__/* +*/*.egg-info +*/.pytest_cache +*/build \ No newline at end of file