Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(documentation): Init #984

Draft
wants to merge 51 commits into
base: dev
Choose a base branch
from
Draft

feat(documentation): Init #984

wants to merge 51 commits into from

Conversation

creatorrr
Copy link
Contributor

@creatorrr creatorrr commented Dec 23, 2024

User description

Signed-off-by: Diwank Singh Tomer [email protected]


PR Type

Documentation


Description

Initial setup of Mintlify documentation framework with the following key components:

  • Added comprehensive documentation structure with setup guides and examples
  • Configured API reference documentation for plant store endpoints
  • Included OpenAPI specification for API documentation
  • Set up essential pages for markdown, code blocks, images, and navigation
  • Added development and deployment instructions
  • Configured site settings and branding in mint.json

Changes walkthrough 📝

Relevant files
Documentation
README.md
Initial Mintlify Documentation Setup Guide                             

documentation/README.md

  • Added Mintlify starter kit documentation with setup instructions
  • Included development and publishing guidelines
  • Added troubleshooting section for common issues
  • +32/-0   
    create.mdx
    Create Plant API Endpoint Documentation                                   

    documentation/api-reference/endpoint/create.mdx

    • Added API endpoint documentation for creating plants
    +4/-0     
    openapi.json
    Plant Store API OpenAPI Specification                                       

    documentation/api-reference/openapi.json

  • Added OpenAPI specification for plant store API
  • Defined endpoints, schemas, and authentication
  • +195/-0 
    Configuration changes
    mint.json
    Mintlify Site Configuration Setup                                               

    documentation/mint.json

  • Added Mintlify configuration file with site settings
  • Configured navigation, colors, and social links
  • Set up API documentation structure
  • +91/-0   

    💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information


    Important

    Initialize Mintlify documentation framework with comprehensive guides, examples, and API references, and make minor code adjustments.

    • Documentation Setup:
      • Initialize Mintlify documentation framework with setup guides, examples, and API reference.
      • Add OpenAPI specification for API documentation.
      • Configure site settings and branding in mint.json.
    • Content Additions:
      • Add markdown files for core concepts, installation, quick start, and various building blocks.
      • Include development and deployment instructions in development.mdx.
    • Code Changes:
      • Remove unused import in utils.py.
      • Minor code adjustment in check_health.py to remove unnecessary variable assignment.

    This description was created by Ellipsis for 6e1d59a. It will automatically update as commits are pushed.

    Signed-off-by: Diwank Singh Tomer <[email protected]>
    Copy link
    Contributor

    @standard-input standard-input bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    No issues flagged.
    Standard Input can make mistakes. Check important info.
    

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Grammar Error

    The sentence has a subject-verb agreement error. "This is a principle that apply" should be "This is a principle that applies"

    Yourself). This is a principle that apply to documentation as
    well. If you find yourself repeating the same content in multiple places, you

    Copy link
    Contributor

    @ellipsis-dev ellipsis-dev bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    ❌ Changes requested. Reviewed everything up to f9ebbf3 in 30 seconds

    More details
    • Looked at 1418 lines of code in 17 files
    • Skipped 6 files when reviewing.
    • Skipped posting 0 drafted comments based on config settings.

    Workflow ID: wflow_Jmq4uUfN04rdJBi0


    Want Ellipsis to fix these issues? Tag @ellipsis-dev in a comment. You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

    documentation/snippets/snippet-intro.mdx Outdated Show resolved Hide resolved
    Copy link
    Contributor

    qodo-merge-pro-for-open-source bot commented Dec 23, 2024

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Score
    General
    Include error response examples to improve API error handling documentation

    Add error response examples to help developers understand and handle error cases
    better.

    documentation/api-reference/openapi.json [50-60]

     "400": {
       "description": "unexpected error",
       "content": {
         "application/json": {
           "schema": {
             "$ref": "#/components/schemas/Error"
    +      },
    +      "examples": {
    +        "validation_error": {
    +          "value": {
    +            "error": 400,
    +            "message": "Invalid plant ID format"
    +          }
    +        }
           }
         }
       }
     }
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: Adding concrete error response examples significantly improves API documentation by helping developers understand and handle error cases more effectively. The suggestion provides clear, practical examples.

    8
    Security
    Add rate limiting details to protect the API from abuse and ensure fair usage

    Add rate limiting information to the API specification to inform developers about
    request limits and prevent abuse.

    documentation/api-reference/openapi.json [16-20]

     "security": [
       {
         "bearerAuth": []
       }
    -]
    +],
    +"x-rateLimit": {
    +  "requests": 100,
    +  "period": "1 hour"
    +}
    • Apply this suggestion
    Suggestion importance[1-10]: 7

    Why: Adding rate limiting information is important for API security and resource management. The suggestion provides clear limits that help developers understand usage restrictions.

    7

    Copy link
    Contributor

    qodo-merge-pro-for-open-source bot commented Dec 24, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit 813836a)

    Action: Typecheck

    Failed stage: Generate openapi code [❌]

    Failed test name: ""

    Failure summary:

    The action failed because the tsp command was not found in the system. The script tried to execute
    tsp compile . in the typespec/ directory, but the TypeSpec CLI tool (tsp) was not installed or not
    available in the system PATH.

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    184:  Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.8/x64
    185:  Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.8/x64
    186:  LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.8/x64/lib
    187:  ##[endgroup]
    188:  + set -e
    189:  + cd typespec/
    190:  + tsp compile .
    191:  scripts/generate_openapi_code.sh: line 10: tsp: command not found
    192:  ##[error]Process completed with exit code 127.
    

    ✨ CI feedback usage guide:

    The CI feedback tool (/checks) automatically triggers when a PR has a failed check.
    The tool analyzes the failed checks and provides several feedbacks:

    • Failed stage
    • Failed test name
    • Failure summary
    • Relevant error logs

    In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:

    /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
    

    where {repo_name} is the name of the repository, {run_number} is the run number of the failed check, and {job_number} is the job number of the failed check.

    Configuration options

    • enable_auto_checks_feedback - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
    • excluded_checks_list - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
    • enable_help_text - if set to true, the tool will provide a help message with the feedback. Default is true.
    • persistent_comment - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.
    • final_update_message - if persistent_comment is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true.

    See more information about the checks tool in the docs.

    Copy link
    Contributor

    @ellipsis-dev ellipsis-dev bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    👍 Looks good to me! Incremental review on 6e1d59a in 1 minute and 30 seconds

    More details
    • Looked at 10249 lines of code in 62 files
    • Skipped 5 files when reviewing.
    • Skipped posting 3 drafted comments based on config settings.
    1. agents-api/agents_api/routers/healthz/check_health.py:9
    • Draft comment:
      The assignment to agents was removed. If agents is used later in the code, this will cause a bug. Consider restoring the assignment.
    • Reason this comment was not posted:
      Comment looked like it was already resolved.
    2. documentation/README.md:6
    • Draft comment:
      Ensure that all necessary setup instructions are included after replacing the Mintlify starter kit content with Julep-specific content.
    • Reason this comment was not posted:
      Confidence changes required: 50%
      The README.md file was significantly altered, removing the Mintlify starter kit instructions and replacing them with Julep-specific content. This is intentional as per the PR description, but it's important to ensure that all necessary setup instructions are still included.
    3. documentation/mint.json:1
    • Draft comment:
      Ensure that all changes in mint.json align with the intended documentation structure and branding.
    • Reason this comment was not posted:
      Confidence changes required: 50%
      The mint.json file has been significantly updated with new configurations. Ensure that all changes align with the intended documentation structure and branding.

    Workflow ID: wflow_OJeaFEFDfENEQSRx


    You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet mode, and more.

    @creatorrr creatorrr marked this pull request as draft January 11, 2025 10:01
    Copy link
    Contributor

    qodo-merge-pro-for-open-source bot commented Jan 21, 2025

    CI Feedback 🧐

    (Feedback updated until commit fe68e4e)

    A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

    Action: Test

    Failed stage: Run tests [❌]

    Failed test name: test_agent_routes

    Failure summary:

    The action failed because of a database connection pool configuration error. Specifically, the
    min_size (10) was set larger than the max_size (4) in the asyncpg connection pool initialization,
    which is an invalid configuration. This caused the test fixture 'client' to fail to resolve,
    affecting multiple test cases:

  • test_agent_routes:9 route: unauthorized should fail
  • test_agent_routes:26 route: create agent
  • test_agent_routes:43 route: create agent with instructions

  • Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    1337:  PASS  test_agent_queries:28 query: create agent sql                          1%
    1338:  PASS  test_agent_queries:44 query: create or update agent sql                2%
    1339:  PASS  test_agent_queries:63 query: update agent sql                          2%
    1340:  PASS  test_agent_queries:85 query: get agent not exists sql                  3%
    1341:  PASS  test_agent_queries:96 query: get agent exists sql                      3%
    1342:  PASS  test_agent_queries:111 query: list agents sql                          4%
    1343:  PASS  test_agent_queries:122 query: patch agent sql                          4%
    1344:  PASS  test_agent_queries:143 query: delete agent sql                         5%
    1345:  FAIL  test_agent_routes:9 route: unauthorized should fail                    5%
    1346:  FAIL  test_agent_routes:26 route: create agent                               6%
    1347:  FAIL  test_agent_routes:43 route: create agent with instructions             6%
    1348:  ─────────────────────── route: unauthorized should fail ────────────────────────
    1349:  Failed at tests/test_agent_routes.py                                          
    ...
    
    1470:  │ │              name = '_dsn'                                           │ │  
    1471:  │ │              self = TestArgumentResolver(                            │ │  
    1472:  │ │                     │   test=Test(                                   │ │  
    1473:  │ │                     │   │   fn=<function _ at 0x7f6b90c9b380>,       │ │  
    1474:  │ │                     │   │   module_name='test_agent_routes',         │ │  
    1475:  │ │                     │   │   id='562200c041484bf6bd14cbd35dbd19ae',   │ │  
    1476:  │ │                     │   │   marker=None,                             │ │  
    1477:  │ │                     │   │   description='route: unauthorized should  │ │  
    1478:  │ │                     fail',                                           │ │  
    ...
    
    1597:  │ │ self = <anyio._backends._asyncio.BlockingPortal object at            │ │  
    1598:  │ │        0x7f6b8f734dd0>                                               │ │  
    1599:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    1600:  │                                                                          │  
    1601:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    1602:  │ python3.12/concurrent/futures/_base.py:456 in result                     │  
    1603:  │                                                                          │  
    1604:  │   453 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    1605:  │   454 │   │   │   │   │   raise CancelledError()                         │  
    1606:  │   455 │   │   │   │   elif self._state == FINISHED:                      │  
    1607:  │ ❱ 456 │   │   │   │   │   return self.__get_result()                     │  
    1608:  │   457 │   │   │   │   else:                                              │  
    1609:  │   458 │   │   │   │   │   raise TimeoutError()                           │  
    ...
    
    1641:  │   221 │   │   except self._cancelled_exc_class:                          │  
    1642:  │                                                                          │  
    1643:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    1644:  │ │                args = ()                                             │ │  
    1645:  │ │                func = <bound method TestClient.wait_startup of       │ │  
    1646:  │ │                       <starlette.testclient.TestClient object at     │ │  
    1647:  │ │                       0x7f6b8f70a540>>                               │ │  
    1648:  │ │              future = <Future at 0x7f6b8fbee630 state=finished       │ │  
    1649:  │ │                       raised ValueError>                             │ │  
    ...
    
    1653:  │ │               scope = None                                           │ │  
    1654:  │ │                self = <anyio._backends._asyncio.BlockingPortal       │ │  
    1655:  │ │                       object at 0x7f6b8f734dd0>                      │ │  
    1656:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    1657:  │                                                                          │  
    1658:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    1659:  │ ges/starlette/testclient.py:774 in wait_startup                          │  
    1660:  │                                                                          │  
    1661:  │   771 │   │   │   "lifespan.startup.failed",                             │  
    1662:  │   772 │   │   )                                                          │  
    1663:  │   773 │   │   if message["type"] == "lifespan.startup.failed":           │  
    1664:  │ ❱ 774 │   │   │   await receive()                                        │  
    1665:  │   775 │                                                                  │  
    1666:  │   776 │   async def wait_shutdown(self) -> None:                         │  
    1667:  │   777 │   │   async def receive() -> typing.Any:                         │  
    1668:  │                                                                          │  
    1669:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    1670:  │ │ message = {                                                          │ │  
    1671:  │ │           │   'type': 'lifespan.startup.failed',                     │ │  
    ...
    
    1690:  │ │ message = None                                                       │ │  
    1691:  │ │    self = <starlette.testclient.TestClient object at 0x7f6b8f70a540> │ │  
    1692:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    1693:  │                                                                          │  
    1694:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    1695:  │ python3.12/concurrent/futures/_base.py:449 in result                     │  
    1696:  │                                                                          │  
    1697:  │   446 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    1698:  │   447 │   │   │   │   │   raise CancelledError()                         │  
    ...
    
    1734:  │   221 │   │   except self._cancelled_exc_class:                          │  
    1735:  │                                                                          │  
    1736:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    1737:  │ │                args = ()                                             │ │  
    1738:  │ │                func = <bound method TestClient.lifespan of           │ │  
    1739:  │ │                       <starlette.testclient.TestClient object at     │ │  
    1740:  │ │                       0x7f6b8f70a540>>                               │ │  
    1741:  │ │              future = <Future at 0x7f6b8f7350d0 state=finished       │ │  
    1742:  │ │                       raised ValueError>                             │ │  
    ...
    
    1849:  │ │           waiting_senders=OrderedDict()), _closed=False),            │ │  
    1850:  │ │           receive_stream=MemoryObjectReceiveStream(_state=MemoryObj… │ │  
    1851:  │ │           buffer=deque([]), open_send_channels=1,                    │ │  
    1852:  │ │           open_receive_channels=1, waiting_receivers=OrderedDict(),  │ │  
    1853:  │ │           waiting_senders=OrderedDict()), _closed=False))>           │ │  
    1854:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    1855:  │                                                                          │  
    1856:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    1857:  │ ges/starlette/middleware/errors.py:152 in __call__                       │  
    ...
    
    1877:  │ │   scope = {                                                          │ │  
    1878:  │ │           │   'type': 'lifespan',                                    │ │  
    1879:  │ │           │   'state': {},                                           │ │  
    1880:  │ │           │   'app': <fastapi.applications.FastAPI object at         │ │  
    1881:  │ │           0x7f6b92755460>,                                           │ │  
    1882:  │ │           │   'router': <fastapi.routing.APIRouter object at         │ │  
    1883:  │ │           0x7f6b926dbc20>                                            │ │  
    1884:  │ │           }                                                          │ │  
    1885:  │ │    self = <starlette.middleware.errors.ServerErrorMiddleware object  │ │  
    ...
    
    2107:  │ ges/starlette/routing.py:693 in lifespan                                 │  
    2108:  │                                                                          │  
    2109:  │   690 │   │   app: typing.Any = scope.get("app")                         │  
    2110:  │   691 │   │   await receive()                                            │  
    2111:  │   692 │   │   try:                                                       │  
    2112:  │ ❱ 693 │   │   │   async with self.lifespan_context(app) as maybe_state:  │  
    2113:  │   694 │   │   │   │   if maybe_state is not None:                        │  
    2114:  │   695 │   │   │   │   │   if "state" not in scope:                       │  
    2115:  │   696 │   │   │   │   │   │   raise RuntimeError('The server does not su │  
    ...
    
    2151:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2152:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2153:  │                                                                          │  
    2154:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2155:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2156:  │   209 │   │   try:                                                       │  
    2157:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2158:  │   211 │   │   except StopAsyncIteration:                                 │  
    2159:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2185:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2186:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2187:  │                                                                          │  
    2188:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2189:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2190:  │   209 │   │   try:                                                       │  
    2191:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2192:  │   211 │   │   except StopAsyncIteration:                                 │  
    2193:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2219:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2220:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2221:  │                                                                          │  
    2222:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2223:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2224:  │   209 │   │   try:                                                       │  
    2225:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2226:  │   211 │   │   except StopAsyncIteration:                                 │  
    2227:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2253:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2254:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2255:  │                                                                          │  
    2256:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2257:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2258:  │   209 │   │   try:                                                       │  
    2259:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2260:  │   211 │   │   except StopAsyncIteration:                                 │  
    2261:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2287:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2288:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2289:  │                                                                          │  
    2290:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2291:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2292:  │   209 │   │   try:                                                       │  
    2293:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2294:  │   211 │   │   except StopAsyncIteration:                                 │  
    2295:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2321:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2322:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2323:  │                                                                          │  
    2324:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2325:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2326:  │   209 │   │   try:                                                       │  
    2327:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2328:  │   211 │   │   except StopAsyncIteration:                                 │  
    2329:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2355:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2356:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2357:  │                                                                          │  
    2358:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2359:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2360:  │   209 │   │   try:                                                       │  
    2361:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2362:  │   211 │   │   except StopAsyncIteration:                                 │  
    2363:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2389:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2390:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2391:  │                                                                          │  
    2392:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2393:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2394:  │   209 │   │   try:                                                       │  
    2395:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2396:  │   211 │   │   except StopAsyncIteration:                                 │  
    2397:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2423:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2424:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2425:  │                                                                          │  
    2426:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2427:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2428:  │   209 │   │   try:                                                       │  
    2429:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2430:  │   211 │   │   except StopAsyncIteration:                                 │  
    2431:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2457:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2458:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2459:  │                                                                          │  
    2460:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2461:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2462:  │   209 │   │   try:                                                       │  
    2463:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2464:  │   211 │   │   except StopAsyncIteration:                                 │  
    2465:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2491:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    2492:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    2493:  │                                                                          │  
    2494:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    2495:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    2496:  │   209 │   │   try:                                                       │  
    2497:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    2498:  │   211 │   │   except StopAsyncIteration:                                 │  
    2499:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    2562:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    2563:  │                                                                          │  
    2564:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    2565:  │ ges/asyncpg/pool.py:361 in __init__                                      │  
    2566:  │                                                                          │  
    2567:  │    358 │   │   │   │   'min_size is expected to be greater or equal to z │  
    2568:  │    359 │   │                                                             │  
    2569:  │    360 │   │   if min_size > max_size:                                   │  
    2570:  │ ❱  361 │   │   │   raise ValueError('min_size is greater than max_size') │  
    2571:  │    362 │   │                                                             │  
    2572:  │    363 │   │   if max_queries <= 0:                                      │  
    2573:  │    364 │   │   │   raise ValueError('max_queries is expected to be great │  
    ...
    
    2587:  │ │                        max_size = 4                                  │ │  
    2588:  │ │                        min_size = 10                                 │ │  
    2589:  │ │                           reset = None                               │ │  
    2590:  │ │                            self = <asyncpg.pool.Pool object at       │ │  
    2591:  │ │                                   0x7f6b8fbb4940>                    │ │  
    2592:  │ │                           setup = None                               │ │  
    2593:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    2594:  ╰──────────────────────────────────────────────────────────────────────────╯  
    2595:  ValueError: min_size is greater than max_size                                 
    ...
    
    2672:  │ │         │   }                                                        │ │  
    2673:  │ │         )                                                            │ │  
    2674:  │ │  self = TestArgumentResolver(                                        │ │  
    2675:  │ │         │   test=Test(                                               │ │  
    2676:  │ │         │   │   fn=<function _ at 0x7f6b90c9b380>,                   │ │  
    2677:  │ │         │   │   module_name='test_agent_routes',                     │ │  
    2678:  │ │         │   │   id='562200c041484bf6bd14cbd35dbd19ae',               │ │  
    2679:  │ │         │   │   marker=None,                                         │ │  
    2680:  │ │         │   │   description='route: unauthorized should fail',       │ │  
    ...
    
    2799:  │ │      resolved_args = {}                                              │ │  
    2800:  │ │               self = TestArgumentResolver(                           │ │  
    2801:  │ │                      │   test=Test(                                  │ │  
    2802:  │ │                      │   │   fn=<function _ at 0x7f6b90c9b380>,      │ │  
    2803:  │ │                      │   │   module_name='test_agent_routes',        │ │  
    2804:  │ │                      │   │   id='562200c041484bf6bd14cbd35dbd19ae',  │ │  
    2805:  │ │                      │   │   marker=None,                            │ │  
    2806:  │ │                      │   │   description='route: unauthorized should │ │  
    2807:  │ │                      fail',                                          │ │  
    ...
    
    2832:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    2833:  │                                                                          │  
    2834:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    2835:  │ ges/ward/testing.py:637 in _resolve_single_arg                           │  
    2836:  │                                                                          │  
    2837:  │   634 │   │   │   else:                                                  │  
    2838:  │   635 │   │   │   │   fixture.resolved_val = arg(**args_to_inject)       │  
    2839:  │   636 │   │   except (Exception, SystemExit) as e:                       │  
    2840:  │ ❱ 637 │   │   │   raise FixtureError(f"Unable to resolve fixture '{fixtu │  
    ...
    
    2953:  │ │              name = '_dsn'                                           │ │  
    2954:  │ │              self = TestArgumentResolver(                            │ │  
    2955:  │ │                     │   test=Test(                                   │ │  
    2956:  │ │                     │   │   fn=<function _ at 0x7f6b90c9b380>,       │ │  
    2957:  │ │                     │   │   module_name='test_agent_routes',         │ │  
    2958:  │ │                     │   │   id='562200c041484bf6bd14cbd35dbd19ae',   │ │  
    2959:  │ │                     │   │   marker=None,                             │ │  
    2960:  │ │                     │   │   description='route: unauthorized should  │ │  
    2961:  │ │                     fail',                                           │ │  
    ...
    
    2980:  │ │                     │   │   timer=<ward._testing._Timer object at    │ │  
    2981:  │ │                     0x7f6b90d8caa0>,                                 │ │  
    2982:  │ │                     │   │   tags=[]                                  │ │  
    2983:  │ │                     │   ),                                           │ │  
    2984:  │ │                     │   iteration=0                                  │ │  
    2985:  │ │                     )                                                │ │  
    2986:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    2987:  ╰──────────────────────────────────────────────────────────────────────────╯  
    2988:  FixtureError: Unable to resolve fixture 'client'                              
    2989:  ───────────────────────────── route: create agent ──────────────────────────────
    2990:  Failed at tests/test_agent_routes.py                                          
    ...
    
    3237:  │ │ self = <anyio._backends._asyncio.BlockingPortal object at            │ │  
    3238:  │ │        0x7f6b8f736e40>                                               │ │  
    3239:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    3240:  │                                                                          │  
    3241:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3242:  │ python3.12/concurrent/futures/_base.py:456 in result                     │  
    3243:  │                                                                          │  
    3244:  │   453 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    3245:  │   454 │   │   │   │   │   raise CancelledError()                         │  
    3246:  │   455 │   │   │   │   elif self._state == FINISHED:                      │  
    3247:  │ ❱ 456 │   │   │   │   │   return self.__get_result()                     │  
    3248:  │   457 │   │   │   │   else:                                              │  
    3249:  │   458 │   │   │   │   │   raise TimeoutError()                           │  
    ...
    
    3281:  │   221 │   │   except self._cancelled_exc_class:                          │  
    3282:  │                                                                          │  
    3283:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    3284:  │ │                args = ()                                             │ │  
    3285:  │ │                func = <bound method TestClient.wait_startup of       │ │  
    3286:  │ │                       <starlette.testclient.TestClient object at     │ │  
    3287:  │ │                       0x7f6b8f736a80>>                               │ │  
    3288:  │ │              future = <Future at 0x7f6b8f737200 state=finished       │ │  
    3289:  │ │                       raised ValueError>                             │ │  
    ...
    
    3293:  │ │               scope = None                                           │ │  
    3294:  │ │                self = <anyio._backends._asyncio.BlockingPortal       │ │  
    3295:  │ │                       object at 0x7f6b8f736e40>                      │ │  
    3296:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    3297:  │                                                                          │  
    3298:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    3299:  │ ges/starlette/testclient.py:774 in wait_startup                          │  
    3300:  │                                                                          │  
    3301:  │   771 │   │   │   "lifespan.startup.failed",                             │  
    3302:  │   772 │   │   )                                                          │  
    3303:  │   773 │   │   if message["type"] == "lifespan.startup.failed":           │  
    3304:  │ ❱ 774 │   │   │   await receive()                                        │  
    3305:  │   775 │                                                                  │  
    3306:  │   776 │   async def wait_shutdown(self) -> None:                         │  
    3307:  │   777 │   │   async def receive() -> typing.Any:                         │  
    3308:  │                                                                          │  
    3309:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    3310:  │ │ message = {                                                          │ │  
    3311:  │ │           │   'type': 'lifespan.startup.failed',                     │ │  
    ...
    
    3330:  │ │ message = None                                                       │ │  
    3331:  │ │    self = <starlette.testclient.TestClient object at 0x7f6b8f736a80> │ │  
    3332:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    3333:  │                                                                          │  
    3334:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3335:  │ python3.12/concurrent/futures/_base.py:449 in result                     │  
    3336:  │                                                                          │  
    3337:  │   446 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    3338:  │   447 │   │   │   │   │   raise CancelledError()                         │  
    ...
    
    3374:  │   221 │   │   except self._cancelled_exc_class:                          │  
    3375:  │                                                                          │  
    3376:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    3377:  │ │                args = ()                                             │ │  
    3378:  │ │                func = <bound method TestClient.lifespan of           │ │  
    3379:  │ │                       <starlette.testclient.TestClient object at     │ │  
    3380:  │ │                       0x7f6b8f736a80>>                               │ │  
    3381:  │ │              future = <Future at 0x7f6b8f737140 state=finished       │ │  
    3382:  │ │                       raised ValueError>                             │ │  
    ...
    
    3489:  │ │           waiting_senders=OrderedDict()), _closed=False),            │ │  
    3490:  │ │           receive_stream=MemoryObjectReceiveStream(_state=MemoryObj… │ │  
    3491:  │ │           buffer=deque([]), open_send_channels=1,                    │ │  
    3492:  │ │           open_receive_channels=1, waiting_receivers=OrderedDict(),  │ │  
    3493:  │ │           waiting_senders=OrderedDict()), _closed=False))>           │ │  
    3494:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    3495:  │                                                                          │  
    3496:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    3497:  │ ges/starlette/middleware/errors.py:152 in __call__                       │  
    ...
    
    3517:  │ │   scope = {                                                          │ │  
    3518:  │ │           │   'type': 'lifespan',                                    │ │  
    3519:  │ │           │   'state': {},                                           │ │  
    3520:  │ │           │   'app': <fastapi.applications.FastAPI object at         │ │  
    3521:  │ │           0x7f6b92755460>,                                           │ │  
    3522:  │ │           │   'router': <fastapi.routing.APIRouter object at         │ │  
    3523:  │ │           0x7f6b926dbc20>                                            │ │  
    3524:  │ │           }                                                          │ │  
    3525:  │ │    self = <starlette.middleware.errors.ServerErrorMiddleware object  │ │  
    ...
    
    3747:  │ ges/starlette/routing.py:693 in lifespan                                 │  
    3748:  │                                                                          │  
    3749:  │   690 │   │   app: typing.Any = scope.get("app")                         │  
    3750:  │   691 │   │   await receive()                                            │  
    3751:  │   692 │   │   try:                                                       │  
    3752:  │ ❱ 693 │   │   │   async with self.lifespan_context(app) as maybe_state:  │  
    3753:  │   694 │   │   │   │   if maybe_state is not None:                        │  
    3754:  │   695 │   │   │   │   │   if "state" not in scope:                       │  
    3755:  │   696 │   │   │   │   │   │   raise RuntimeError('The server does not su │  
    ...
    
    3791:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3792:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3793:  │                                                                          │  
    3794:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3795:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3796:  │   209 │   │   try:                                                       │  
    3797:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3798:  │   211 │   │   except StopAsyncIteration:                                 │  
    3799:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3825:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3826:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3827:  │                                                                          │  
    3828:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3829:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3830:  │   209 │   │   try:                                                       │  
    3831:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3832:  │   211 │   │   except StopAsyncIteration:                                 │  
    3833:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3859:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3860:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3861:  │                                                                          │  
    3862:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3863:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3864:  │   209 │   │   try:                                                       │  
    3865:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3866:  │   211 │   │   except StopAsyncIteration:                                 │  
    3867:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3893:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3894:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3895:  │                                                                          │  
    3896:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3897:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3898:  │   209 │   │   try:                                                       │  
    3899:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3900:  │   211 │   │   except StopAsyncIteration:                                 │  
    3901:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3927:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3928:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3929:  │                                                                          │  
    3930:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3931:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3932:  │   209 │   │   try:                                                       │  
    3933:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3934:  │   211 │   │   except StopAsyncIteration:                                 │  
    3935:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3961:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3962:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3963:  │                                                                          │  
    3964:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3965:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    3966:  │   209 │   │   try:                                                       │  
    3967:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    3968:  │   211 │   │   except StopAsyncIteration:                                 │  
    3969:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    3995:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    3996:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    3997:  │                                                                          │  
    3998:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    3999:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    4000:  │   209 │   │   try:                                                       │  
    4001:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    4002:  │   211 │   │   except StopAsyncIteration:                                 │  
    4003:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    4029:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    4030:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    4031:  │                                                                          │  
    4032:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    4033:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    4034:  │   209 │   │   try:                                                       │  
    4035:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    4036:  │   211 │   │   except StopAsyncIteration:                                 │  
    4037:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    4063:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    4064:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    4065:  │                                                                          │  
    4066:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    4067:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    4068:  │   209 │   │   try:                                                       │  
    4069:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    4070:  │   211 │   │   except StopAsyncIteration:                                 │  
    4071:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    4097:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    4098:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    4099:  │                                                                          │  
    4100:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    4101:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    4102:  │   209 │   │   try:                                                       │  
    4103:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    4104:  │   211 │   │   except StopAsyncIteration:                                 │  
    4105:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    4131:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    4132:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    4133:  │                                                                          │  
    4134:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    4135:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    4136:  │   209 │   │   try:                                                       │  
    4137:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    4138:  │   211 │   │   except StopAsyncIteration:                                 │  
    4139:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    4202:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    4203:  │                                                                          │  
    4204:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    4205:  │ ges/asyncpg/pool.py:361 in __init__                                      │  
    4206:  │                                                                          │  
    4207:  │    358 │   │   │   │   'min_size is expected to be greater or equal to z │  
    4208:  │    359 │   │                                                             │  
    4209:  │    360 │   │   if min_size > max_size:                                   │  
    4210:  │ ❱  361 │   │   │   raise ValueError('min_size is greater than max_size') │  
    4211:  │    362 │   │                                                             │  
    4212:  │    363 │   │   if max_queries <= 0:                                      │  
    4213:  │    364 │   │   │   raise ValueError('max_queries is expected to be great │  
    ...
    
    4227:  │ │                        max_size = 4                                  │ │  
    4228:  │ │                        min_size = 10                                 │ │  
    4229:  │ │                           reset = None                               │ │  
    4230:  │ │                            self = <asyncpg.pool.Pool object at       │ │  
    4231:  │ │                                   0x7f6b8e728280>                    │ │  
    4232:  │ │                           setup = None                               │ │  
    4233:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    4234:  ╰──────────────────────────────────────────────────────────────────────────╯  
    4235:  ValueError: min_size is greater than max_size                                 
    ...
    
    4613:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    4614:  │                                                                          │  
    4615:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    4616:  │ ges/ward/testing.py:637 in _resolve_single_arg                           │  
    4617:  │                                                                          │  
    4618:  │   634 │   │   │   else:                                                  │  
    4619:  │   635 │   │   │   │   fixture.resolved_val = arg(**args_to_inject)       │  
    4620:  │   636 │   │   except (Exception, SystemExit) as e:                       │  
    4621:  │ ❱ 637 │   │   │   raise FixtureError(f"Unable to resolve fixture '{fixtu │  
    ...
    
    4760:  │ │                     │   │   timer=<ward._testing._Timer object at    │ │  
    4761:  │ │                     0x7f6b8fbedfd0>,                                 │ │  
    4762:  │ │                     │   │   tags=[]                                  │ │  
    4763:  │ │                     │   ),                                           │ │  
    4764:  │ │                     │   iteration=0                                  │ │  
    4765:  │ │                     )                                                │ │  
    4766:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    4767:  ╰──────────────────────────────────────────────────────────────────────────╯  
    4768:  FixtureError: Unable to resolve fixture 'client'                              
    4769:  ──────────────────── route: create agent with instructions ─────────────────────
    4770:  Failed at tests/test_agent_routes.py                                          
    ...
    
    5018:  │ │ self = <anyio._backends._asyncio.BlockingPortal object at            │ │  
    5019:  │ │        0x7f6b8f7380b0>                                               │ │  
    5020:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    5021:  │                                                                          │  
    5022:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5023:  │ python3.12/concurrent/futures/_base.py:456 in result                     │  
    5024:  │                                                                          │  
    5025:  │   453 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    5026:  │   454 │   │   │   │   │   raise CancelledError()                         │  
    5027:  │   455 │   │   │   │   elif self._state == FINISHED:                      │  
    5028:  │ ❱ 456 │   │   │   │   │   return self.__get_result()                     │  
    5029:  │   457 │   │   │   │   else:                                              │  
    5030:  │   458 │   │   │   │   │   raise TimeoutError()                           │  
    ...
    
    5062:  │   221 │   │   except self._cancelled_exc_class:                          │  
    5063:  │                                                                          │  
    5064:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    5065:  │ │                args = ()                                             │ │  
    5066:  │ │                func = <bound method TestClient.wait_startup of       │ │  
    5067:  │ │                       <starlette.testclient.TestClient object at     │ │  
    5068:  │ │                       0x7f6b8f737920>>                               │ │  
    5069:  │ │              future = <Future at 0x7f6b8f738470 state=finished       │ │  
    5070:  │ │                       raised ValueError>                             │ │  
    ...
    
    5074:  │ │               scope = None                                           │ │  
    5075:  │ │                self = <anyio._backends._asyncio.BlockingPortal       │ │  
    5076:  │ │                       object at 0x7f6b8f7380b0>                      │ │  
    5077:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    5078:  │                                                                          │  
    5079:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    5080:  │ ges/starlette/testclient.py:774 in wait_startup                          │  
    5081:  │                                                                          │  
    5082:  │   771 │   │   │   "lifespan.startup.failed",                             │  
    5083:  │   772 │   │   )                                                          │  
    5084:  │   773 │   │   if message["type"] == "lifespan.startup.failed":           │  
    5085:  │ ❱ 774 │   │   │   await receive()                                        │  
    5086:  │   775 │                                                                  │  
    5087:  │   776 │   async def wait_shutdown(self) -> None:                         │  
    5088:  │   777 │   │   async def receive() -> typing.Any:                         │  
    5089:  │                                                                          │  
    5090:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    5091:  │ │ message = {                                                          │ │  
    5092:  │ │           │   'type': 'lifespan.startup.failed',                     │ │  
    ...
    
    5111:  │ │ message = None                                                       │ │  
    5112:  │ │    self = <starlette.testclient.TestClient object at 0x7f6b8f737920> │ │  
    5113:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    5114:  │                                                                          │  
    5115:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5116:  │ python3.12/concurrent/futures/_base.py:449 in result                     │  
    5117:  │                                                                          │  
    5118:  │   446 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFI │  
    5119:  │   447 │   │   │   │   │   raise CancelledError()                         │  
    ...
    
    5155:  │   221 │   │   except self._cancelled_exc_class:                          │  
    5156:  │                                                                          │  
    5157:  │ ╭─────────────────────────────── locals ───────────────────────────────╮ │  
    5158:  │ │                args = ()                                             │ │  
    5159:  │ │                func = <bound method TestClient.lifespan of           │ │  
    5160:  │ │                       <starlette.testclient.TestClient object at     │ │  
    5161:  │ │                       0x7f6b8f737920>>                               │ │  
    5162:  │ │              future = <Future at 0x7f6b8f7383b0 state=finished       │ │  
    5163:  │ │                       raised ValueError>                             │ │  
    ...
    
    5270:  │ │           waiting_senders=OrderedDict()), _closed=False),            │ │  
    5271:  │ │           receive_stream=MemoryObjectReceiveStream(_state=MemoryObj… │ │  
    5272:  │ │           buffer=deque([]), open_send_channels=1,                    │ │  
    5273:  │ │           open_receive_channels=1, waiting_receivers=OrderedDict(),  │ │  
    5274:  │ │           waiting_senders=OrderedDict()), _closed=False))>           │ │  
    5275:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    5276:  │                                                                          │  
    5277:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    5278:  │ ges/starlette/middleware/errors.py:152 in __call__                       │  
    ...
    
    5298:  │ │   scope = {                                                          │ │  
    5299:  │ │           │   'type': 'lifespan',                                    │ │  
    5300:  │ │           │   'state': {},                                           │ │  
    5301:  │ │           │   'app': <fastapi.applications.FastAPI object at         │ │  
    5302:  │ │           0x7f6b92755460>,                                           │ │  
    5303:  │ │           │   'router': <fastapi.routing.APIRouter object at         │ │  
    5304:  │ │           0x7f6b926dbc20>                                            │ │  
    5305:  │ │           }                                                          │ │  
    5306:  │ │    self = <starlette.middleware.errors.ServerErrorMiddleware object  │ │  
    ...
    
    5528:  │ ges/starlette/routing.py:693 in lifespan                                 │  
    5529:  │                                                                          │  
    5530:  │   690 │   │   app: typing.Any = scope.get("app")                         │  
    5531:  │   691 │   │   await receive()                                            │  
    5532:  │   692 │   │   try:                                                       │  
    5533:  │ ❱ 693 │   │   │   async with self.lifespan_context(app) as maybe_state:  │  
    5534:  │   694 │   │   │   │   if maybe_state is not None:                        │  
    5535:  │   695 │   │   │   │   │   if "state" not in scope:                       │  
    5536:  │   696 │   │   │   │   │   │   raise RuntimeError('The server does not su │  
    ...
    
    5572:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5573:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5574:  │                                                                          │  
    5575:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5576:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5577:  │   209 │   │   try:                                                       │  
    5578:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5579:  │   211 │   │   except StopAsyncIteration:                                 │  
    5580:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5606:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5607:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5608:  │                                                                          │  
    5609:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5610:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5611:  │   209 │   │   try:                                                       │  
    5612:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5613:  │   211 │   │   except StopAsyncIteration:                                 │  
    5614:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5640:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5641:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5642:  │                                                                          │  
    5643:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5644:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5645:  │   209 │   │   try:                                                       │  
    5646:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5647:  │   211 │   │   except StopAsyncIteration:                                 │  
    5648:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5674:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5675:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5676:  │                                                                          │  
    5677:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5678:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5679:  │   209 │   │   try:                                                       │  
    5680:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5681:  │   211 │   │   except StopAsyncIteration:                                 │  
    5682:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5708:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5709:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5710:  │                                                                          │  
    5711:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5712:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5713:  │   209 │   │   try:                                                       │  
    5714:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5715:  │   211 │   │   except StopAsyncIteration:                                 │  
    5716:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5742:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5743:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5744:  │                                                                          │  
    5745:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5746:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5747:  │   209 │   │   try:                                                       │  
    5748:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5749:  │   211 │   │   except StopAsyncIteration:                                 │  
    5750:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5776:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5777:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5778:  │                                                                          │  
    5779:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5780:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5781:  │   209 │   │   try:                                                       │  
    5782:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5783:  │   211 │   │   except StopAsyncIteration:                                 │  
    5784:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5810:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5811:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5812:  │                                                                          │  
    5813:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5814:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5815:  │   209 │   │   try:                                                       │  
    5816:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5817:  │   211 │   │   except StopAsyncIteration:                                 │  
    5818:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5844:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5845:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5846:  │                                                                          │  
    5847:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5848:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5849:  │   209 │   │   try:                                                       │  
    5850:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5851:  │   211 │   │   except StopAsyncIteration:                                 │  
    5852:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5878:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5879:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5880:  │                                                                          │  
    5881:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5882:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5883:  │   209 │   │   try:                                                       │  
    5884:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5885:  │   211 │   │   except StopAsyncIteration:                                 │  
    5886:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5912:  │ /home/runner/.local/share/uv/python/cpython-3.12.8-linux-x86_64-gnu/lib/ │  
    5913:  │ python3.12/contextlib.py:210 in __aenter__                               │  
    5914:  │                                                                          │  
    5915:  │   207 │   │   # they are only needed for recreation, which is not possib │  
    5916:  │   208 │   │   del self.args, self.kwds, self.func                        │  
    5917:  │   209 │   │   try:                                                       │  
    5918:  │ ❱ 210 │   │   │   return await anext(self.gen)                           │  
    5919:  │   211 │   │   except StopAsyncIteration:                                 │  
    5920:  │   212 │   │   │   raise RuntimeError("generator didn't yield") from None │  
    ...
    
    5983:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    5984:  │                                                                          │  
    5985:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    5986:  │ ges/asyncpg/pool.py:361 in __init__                                      │  
    5987:  │                                                                          │  
    5988:  │    358 │   │   │   │   'min_size is expected to be greater or equal to z │  
    5989:  │    359 │   │                                                             │  
    5990:  │    360 │   │   if min_size > max_size:                                   │  
    5991:  │ ❱  361 │   │   │   raise ValueError('min_size is greater than max_size') │  
    5992:  │    362 │   │                                                             │  
    5993:  │    363 │   │   if max_queries <= 0:                                      │  
    5994:  │    364 │   │   │   raise ValueError('max_queries is expected to be great │  
    ...
    
    6008:  │ │                        max_size = 4                                  │ │  
    6009:  │ │                        min_size = 10                                 │ │  
    6010:  │ │                           reset = None                               │ │  
    6011:  │ │                            self = <asyncpg.pool.Pool object at       │ │  
    6012:  │ │                                   0x7f6b8e728a00>                    │ │  
    6013:  │ │                           setup = None                               │ │  
    6014:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    6015:  ╰──────────────────────────────────────────────────────────────────────────╯  
    6016:  ValueError: min_size is greater than max_size                                 
    ...
    
    6396:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    6397:  │                                                                          │  
    6398:  │ /home/runner/work/julep/julep/agents-api/.venv/lib/python3.12/site-packa │  
    6399:  │ ges/ward/testing.py:637 in _resolve_single_arg                           │  
    6400:  │                                                                          │  
    6401:  │   634 │   │   │   else:                                                  │  
    6402:  │   635 │   │   │   │   fixture.resolved_val = arg(**args_to_inject)       │  
    6403:  │   636 │   │   except (Exception, SystemExit) as e:                       │  
    6404:  │ ❱ 637 │   │   │   raise FixtureError(f"Unable to resolve fixture '{fixtu │  
    ...
    
    6544:  │ │                     │   │   timer=<ward._testing._Timer object at    │ │  
    6545:  │ │                     0x7f6b90d8ee10>,                                 │ │  
    6546:  │ │                     │   │   tags=[]                                  │ │  
    6547:  │ │                     │   ),                                           │ │  
    6548:  │ │                     │   iteration=0                                  │ │  
    6549:  │ │                     )                                                │ │  
    6550:  │ ╰──────────────────────────────────────────────────────────────────────╯ │  
    6551:  ╰──────────────────────────────────────────────────────────────────────────╯  
    6552:  FixtureError: Unable to resolve fixture 'client'                              
    6553:  ────────────────────────────────────────────────────────────────────────────────
    6554:  ╭──────────── Results ─────────────╮
    6555:  │  12  Tests Encountered           │
    6556:  │   9  Passes             (75.0%)  │
    6557:  │   3  Failures           (25.0%)  │
    6558:  ╰──────────────────────────────────╯
    6559:  ─────────────────────────── FAILED in 53.08 seconds ────────────────────────────
    6560:  ##[error]Process completed with exit code 1.
    

    Signed-off-by: Diwank Singh Tomer <[email protected]>
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants