agent
: ditch aiohttp & define REQUESTS_CA_BUNDLE to fix http proxying / trust the self-signed cert from python
This commit is contained in:
parent
0f5d63943f
commit
d338bfb87f
6 changed files with 43 additions and 25 deletions
|
@ -4,6 +4,7 @@ RUN python -m pip install --upgrade pip && \
|
|||
apt clean cache
|
||||
|
||||
COPY requirements.txt /root/
|
||||
# COPY . /root/
|
||||
WORKDIR /root
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
|
@ -13,5 +14,5 @@ COPY ./tools/*.py /root/tools/
|
|||
COPY ./squid/ssl_cert/squidCA.crt /usr/local/share/ca-certificates/squidCA.crt
|
||||
RUN chmod 644 /usr/local/share/ca-certificates/squidCA.crt && update-ca-certificates
|
||||
|
||||
# ENTRYPOINT [ "python" ]
|
||||
# CMD ["serve_tools.py"]
|
||||
ENTRYPOINT [ "uvicorn" ]
|
||||
CMD ["serve_tools:app", "--host", "0.0.0.0", "--port", "8088"]
|
|
@ -32,12 +32,11 @@ services:
|
|||
networks:
|
||||
- private_net
|
||||
environment:
|
||||
- PORT=8088
|
||||
- VERBOSE=1
|
||||
- BRAVE_SEARCH_API_KEY=${BRAVE_SEARCH_API_KEY}
|
||||
- REQUESTS_CA_BUNDLE=/usr/local/share/ca-certificates/squidCA.crt
|
||||
- http_proxy=http://outgoing_proxy:3128
|
||||
- https_proxy=http://outgoing_proxy:3128
|
||||
entrypoint: python
|
||||
command: serve_tools.py
|
||||
|
||||
# entrypoint: /usr/bin/bash
|
||||
# command: ["-c", "pip install --upgrade gguf && apt update && apt install -y curl && curl https://ochafik.com && pip install gguf"]
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
uv run examples/agent/serve_tools.py --port 8088
|
||||
'''
|
||||
import asyncio
|
||||
import logging
|
||||
import re
|
||||
import fastapi
|
||||
|
@ -24,6 +25,11 @@ from tools.fetch import fetch_page
|
|||
from tools.search import brave_search
|
||||
from tools.python import python, python_tools
|
||||
|
||||
# try:
|
||||
# # https://github.com/aio-libs/aiohttp/discussions/6044
|
||||
# setattr(asyncio.sslproto._SSLProtocolTransport, "_start_tls_compatible", True) # type: ignore
|
||||
# except Exception as e:
|
||||
# print(f'Failed to patch asyncio: {e}', file=sys.stderr)
|
||||
|
||||
verbose = os.environ.get('VERBOSE', '0') == '1'
|
||||
include = os.environ.get('INCLUDE_TOOLS')
|
||||
|
|
|
@ -23,7 +23,7 @@ http_access allow all
|
|||
refresh_pattern -i ($|\.)(files\.pythonhosted\.org|pypi\.org)/.*?\.(whl|zip|tar\.gz)$ 10080 90% 43200 reload-into-ims
|
||||
|
||||
# Cache Debian packages
|
||||
refresh_pattern \.debian\.org/.*?\.(deb|udeb|tar\.(gz|xz|bz2)$ 129600 100% 129600
|
||||
refresh_pattern \.debian\.org/.*?\.(deb|udeb|tar\.(gz|xz|bz2))$ 129600 100% 129600
|
||||
|
||||
# Configure cache
|
||||
cache_dir ufs /var/spool/squid 10000 16 256
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import aiohttp
|
||||
# import aiohttp
|
||||
import html2text
|
||||
import logging
|
||||
import requests
|
||||
|
||||
|
||||
async def fetch_page(url: str):
|
||||
|
@ -10,11 +11,16 @@ async def fetch_page(url: str):
|
|||
|
||||
try:
|
||||
logging.debug(f'[fetch_page] Fetching %s', url)
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as res:
|
||||
res.raise_for_status()
|
||||
content = await res.text()
|
||||
except aiohttp.ClientError as e:
|
||||
response = requests.get(url)
|
||||
response.raise_for_status()
|
||||
content = response.text
|
||||
# async with aiohttp.ClientSession(trust_env=True) as session:
|
||||
# async with session.get(url) as res:
|
||||
# res.raise_for_status()
|
||||
# content = await res.text()
|
||||
# except aiohttp.ClientError as e:
|
||||
# raise Exception(f'Failed to fetch {url}: {e}')
|
||||
except requests.exceptions.RequestException as e:
|
||||
raise Exception(f'Failed to fetch {url}: {e}')
|
||||
|
||||
# NOTE: Pyppeteer doesn't work great in docker, short of installing a bunch of dependencies
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import sys
|
||||
from pydantic import Field
|
||||
import aiohttp
|
||||
# import aiohttp
|
||||
import itertools
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from typing import Annotated, Dict, List
|
||||
from typing import Dict, List
|
||||
import urllib.parse
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
def _extract_values(keys, obj):
|
||||
values = {}
|
||||
|
@ -66,12 +66,18 @@ async def brave_search(*, query: str) -> List[Dict]:
|
|||
for r in results_of_type:
|
||||
yield _extract_values(keys, r)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, headers=headers) as res:
|
||||
res = requests.get(url, headers=headers)
|
||||
if not res.ok:
|
||||
raise Exception(await res.text())
|
||||
raise Exception(res.text)
|
||||
reponse = res.json()
|
||||
res.raise_for_status()
|
||||
response = await res.json()
|
||||
response = res.text
|
||||
# async with aiohttp.ClientSession(trust_env=True) as session:
|
||||
# async with session.get(url, headers=headers) as res:
|
||||
# if not res.ok:
|
||||
# raise Exception(await res.text())
|
||||
# res.raise_for_status()
|
||||
# response = await res.json()
|
||||
|
||||
results = list(itertools.islice(extract_results(response), max_results))
|
||||
print(json.dumps(dict(query=query, response=response, results=results), indent=2))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue