Upload 3 files
Browse files- Dockerfile +37 -0
- pyproject.toml +107 -0
- uv.lock +0 -0
Dockerfile
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use Python 3.13 slim image as base
|
| 2 |
+
FROM python:3.13.2-slim
|
| 3 |
+
|
| 4 |
+
# Set working directory
|
| 5 |
+
WORKDIR /app
|
| 6 |
+
|
| 7 |
+
# Set environment variables
|
| 8 |
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
| 9 |
+
PYTHONUNBUFFERED=1 \
|
| 10 |
+
STREAMLIT_SERVER_PORT=8501 \
|
| 11 |
+
STREAMLIT_SERVER_ADDRESS=0.0.0.0 \
|
| 12 |
+
UV_CACHE_DIR=/tmp/uv-cache
|
| 13 |
+
|
| 14 |
+
# Install system dependencies and uv
|
| 15 |
+
RUN apt-get update && apt-get install -y \
|
| 16 |
+
build-essential \
|
| 17 |
+
curl \
|
| 18 |
+
&& rm -rf /var/lib/apt/lists/* \
|
| 19 |
+
&& curl -LsSf https://astral.sh/uv/install.sh | sh
|
| 20 |
+
|
| 21 |
+
# Add uv to PATH
|
| 22 |
+
ENV PATH="/root/.cargo/bin:$PATH"
|
| 23 |
+
|
| 24 |
+
# Copy project files
|
| 25 |
+
COPY pyproject.toml uv.lock* ./
|
| 26 |
+
|
| 27 |
+
# Install dependencies using uv
|
| 28 |
+
RUN uv sync --frozen --no-dev
|
| 29 |
+
|
| 30 |
+
# Copy the rest of the application
|
| 31 |
+
COPY . .
|
| 32 |
+
|
| 33 |
+
# Expose the port Streamlit runs on
|
| 34 |
+
EXPOSE 8501
|
| 35 |
+
|
| 36 |
+
# Command to run the application using uv
|
| 37 |
+
CMD ["uv", "run", "streamlit", "run", "app.py"]
|
pyproject.toml
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[project]
|
| 2 |
+
name = "deep-research-agent"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
description = "A deep research agent built with Streamlit and Pydantic AI"
|
| 5 |
+
authors = [
|
| 6 |
+
{name = "Tristan Padiou", email = "Padioutristan@gmail.com"}
|
| 7 |
+
]
|
| 8 |
+
#hide readme for huggingface spaces'
|
| 9 |
+
#readme = "README.md"
|
| 10 |
+
license = {text = "MIT"}
|
| 11 |
+
requires-python = ">=3.13.2"
|
| 12 |
+
classifiers = [
|
| 13 |
+
"Development Status :: 3 - Alpha",
|
| 14 |
+
"Intended Audience :: Developers",
|
| 15 |
+
"License :: OSI Approved :: MIT License",
|
| 16 |
+
"Programming Language :: Python :: 3",
|
| 17 |
+
"Programming Language :: Python :: 3.13",
|
| 18 |
+
"Framework :: Streamlit",
|
| 19 |
+
]
|
| 20 |
+
keywords = ["research", "ai", "agent", "streamlit", "pydantic"]
|
| 21 |
+
|
| 22 |
+
dependencies = [
|
| 23 |
+
"ipython==9.0.2",
|
| 24 |
+
"Pillow==11.3.0",
|
| 25 |
+
"pydantic==2.11.2",
|
| 26 |
+
"pydantic_ai==0.0.52",
|
| 27 |
+
"pydantic_graph==0.0.52",
|
| 28 |
+
"python-dotenv==1.1.0",
|
| 29 |
+
"Requests==2.32.3",
|
| 30 |
+
"Spire.Doc.Free==12.12.0",
|
| 31 |
+
"tavily_python==0.5.1",
|
| 32 |
+
"tabulate==0.9.0",
|
| 33 |
+
"pandas==2.2.3",
|
| 34 |
+
"streamlit==1.44.1",
|
| 35 |
+
"nest_asyncio==1.6.0",
|
| 36 |
+
]
|
| 37 |
+
|
| 38 |
+
[project.optional-dependencies]
|
| 39 |
+
dev = [
|
| 40 |
+
"pytest>=7.0.0",
|
| 41 |
+
"black>=22.0.0",
|
| 42 |
+
"flake8>=4.0.0",
|
| 43 |
+
"mypy>=0.991",
|
| 44 |
+
]
|
| 45 |
+
|
| 46 |
+
[project.urls]
|
| 47 |
+
Homepage = "https://github.com/yourusername/deep-research-agent"
|
| 48 |
+
Repository = "https://github.com/yourusername/deep-research-agent"
|
| 49 |
+
Documentation = "https://github.com/yourusername/deep-research-agent#readme"
|
| 50 |
+
Issues = "https://github.com/yourusername/deep-research-agent/issues"
|
| 51 |
+
|
| 52 |
+
#[project.scripts]
|
| 53 |
+
#deep-research-agent = "deep_research_agent.app:main"
|
| 54 |
+
|
| 55 |
+
# uv configuration
|
| 56 |
+
[tool.uv]
|
| 57 |
+
dev-dependencies = [
|
| 58 |
+
"pytest>=7.0.0",
|
| 59 |
+
"black>=22.0.0",
|
| 60 |
+
"flake8>=4.0.0",
|
| 61 |
+
"mypy>=0.991",
|
| 62 |
+
]
|
| 63 |
+
|
| 64 |
+
[tool.uv.sources]
|
| 65 |
+
|
| 66 |
+
# Black configuration
|
| 67 |
+
[tool.black]
|
| 68 |
+
line-length = 88
|
| 69 |
+
target-version = ['py313']
|
| 70 |
+
include = '\.pyi?$'
|
| 71 |
+
extend-exclude = '''
|
| 72 |
+
/(
|
| 73 |
+
# directories
|
| 74 |
+
\.eggs
|
| 75 |
+
| \.git
|
| 76 |
+
| \.hg
|
| 77 |
+
| \.mypy_cache
|
| 78 |
+
| \.tox
|
| 79 |
+
| \.venv
|
| 80 |
+
| build
|
| 81 |
+
| dist
|
| 82 |
+
)/
|
| 83 |
+
'''
|
| 84 |
+
|
| 85 |
+
# MyPy configuration
|
| 86 |
+
[tool.mypy]
|
| 87 |
+
python_version = "3.13"
|
| 88 |
+
warn_return_any = true
|
| 89 |
+
warn_unused_configs = true
|
| 90 |
+
disallow_untyped_defs = true
|
| 91 |
+
disallow_incomplete_defs = true
|
| 92 |
+
check_untyped_defs = true
|
| 93 |
+
disallow_untyped_decorators = true
|
| 94 |
+
no_implicit_optional = true
|
| 95 |
+
warn_redundant_casts = true
|
| 96 |
+
warn_unused_ignores = true
|
| 97 |
+
warn_no_return = true
|
| 98 |
+
warn_unreachable = true
|
| 99 |
+
strict_equality = true
|
| 100 |
+
|
| 101 |
+
# Pytest configuration
|
| 102 |
+
[tool.pytest.ini_options]
|
| 103 |
+
testpaths = ["tests"]
|
| 104 |
+
python_files = ["test_*.py", "*_test.py"]
|
| 105 |
+
python_classes = ["Test*"]
|
| 106 |
+
python_functions = ["test_*"]
|
| 107 |
+
addopts = "-v --tb=short"
|
uv.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|